動機
那就來寫寫看說明文吧
第一個問題也是最重要的問題是
為什麼分那麼多層?
接下去就是要說明這件事
假設
基本上網路就是模擬人的溝通
為了解釋需要大家的小小角色扮演
新人
我們什麼都不知道,都要去問人
再來在任何一個情境下都有一個共通的任務
把手上的食物(其他東西也可以啦)給Jane(其實是誰都Ok)
假設Jane在任何情境下都存在
情境:都在同一個房間大家都在做自己的事
在什麼都沒有與什麼都不知道的情況下
我們要先找人,但要怎麼找?
喊聲 => Jane在不在
之後就會有人舉手,我們再過去給他食物,補充血糖
這與電腦關聯在哪?
如果說另一台電腦網路線也接在同一台機器下(家中的接網路的機器的後面那一排網路孔),只要廣播(broadcast)就會有人回答(reply)
在同一台機器下就是Layer2,最常見的protocol是ethernet
情境:大家都在做自己的事,但在不同房間
同樣什麼都不知道,但對方在不同房間 要怎麼知道Jane在哪?
問人
問誰?
可能知道的人,像班導、主管、人源最好的人
這樣我們就會知道Jane在哪個房間,就可以去那個房間 用剛剛提過的喊聲來找人,在把東西交出去
這與電腦關聯在哪?
當要溝通的電腦不在同一台機器上,就要去問某個人看有沒有可能得到答案
現在電腦在不一樣的機器下,所以要去問人了
這個人就是default gateway 因為房間與人名寫在一起,所以要有個分界,就叫subnet mask
在不一樣的機器下就是Layer3,最常見的protocol是IP
剛剛為了好想像,都是自己送東西過去 但實際上電腦都是把東西丟出去,交給可以轉送的人 而這樣就要在東西上寫下目的地與收件人,資料+轉送需要的資訊就是封包
中場休息: 整個大概的流程是?
如果在同一台機器下就喊聲 如果不在同一台機器下就問人 (有注意到嗎? 問人也是要找同一房間的人,所以要先喊聲,再去問)
這很好理解,但
- 如果不同房間都有Jane的話….
- 每次都要喊聲嗎? 是沒有筆可以記下來嗎?
- 要問的人是麼決定的? 要麼判斷是不是同一個房間?
第一個問題的回答
所以知道Jane這個名字是不夠的,要知道他在哪一個房間 所以有了新的識別方式,部門加名字,這就是IP IP分成網域與主機地址,都在IP address中
這樣我們還要用Jane來識別嗎? 不是用部門+Jane來看就好?
Jane是給同個房間的人看的 部門+Jane是給來自不同房間的人看的
而且如果在房間內Jane是用綽號(像吃貨)稱呼但對外的名字還是可以用Jane阿
所以會分層,會有Layer2的地址(MAC address)與Layer3(IP address)的地址
第二個問題的回答
為什麼要喊聲? 因為我們不確定人在哪,他們沒有固定的位置
要固定大家的位置,就是L2 switch 藉由背後的那些孔來對應到MAC address
第三個問題的回答
所以自己要先知道這些資訊
而這些資訊就叫routing table
那怎麼會有L3 router(通常就叫router)
因為他知道不同的房間要怎麼走,他會有很多洞,分別到不同的房間
所以通常router就是default gateway
總結: 整個送的過程
從送的人開始
- 包ip: 目標的ip
- 包mac: default gateway或是同房間的mac
- 丟出去
switch
- 看mac決定要往那個孔丟
router
- 看mac: 確定是要我收的
- 看ip比對routing table決定要往那個孔丟
目的地
- 看mac: 確定是要我收的
- 看ip: 確定是要我收的
- 收下
TCP在哪?
把東西送到對方那邊是Layer2與Layer3的工作, 管理資料有沒有完整的送到就是TCP的其中一個工作
TCP會要求對方收到封包時回送一個 說明我有收到的封包 確保對方有收到
TCP還有另外兩個功能
- 確保不要打爆對方 (你送太多了,我收不完) (Flow control)
- 確保不要打爆整個網路 (都給你送就好了啊) (Congestion control)
TCP的三個功能又被稱為是 連線導向
TCP為什麼要三段握手? 為什麼是3
要送資料前要先確保對方活著, 不論是server或是client都一樣要確認對方活著
所以
- client先送 <= client要確認server活著
- server回 <= client知道server活著
- server送 <= server要確認client活著
- client回 <= server知道client活著
等等,這是4段阿!!
仔細看,2與3 是不是都是server到client 把他們和在一起就是3段了
TCP要關時為什麼是4段?
重點是對面要先斷,client才能關
所以
- client先送
- server回 <= server開始準備關
- server送 <= 通知client要關了
- client回 <= 可以完全關掉了
等等,為什麼不能把2與3合起來? server要把tcp的資源釋放掉,所以要等不能馬上關
UDP又是什麼
就是什麼保證或是管理都沒有,就是送就對了