天天看點

TCPIP協定詳解【二】

作者:運維法拉令

TCP四次揮手

TCPIP協定詳解【二】

由于TCP連接配接時全雙工的,是以,每個方向都必須要單獨進行關閉,這一原則是當一方完成資料發送任務後,發送一個FIN來終止這一方向的連接配接,收到一個FIN隻是意味着這一方向上沒有資料流動了,即不會再收到資料了,但是在這個TCP連接配接上仍然能夠發送資料,直到這一方向也發送了FIN。首先進行關閉的一方将執行主動關閉,而另一方則執行被動關閉,上圖描述的即是如此。

第一次揮手:Client發送一個FIN,用來關閉Client到Server的資料傳送,Client進入FIN_WAIT_1狀态。

第二次揮手:Server收到FIN後,發送一個ACK給Client,确認序号為收到序号+1(與SYN相同,一個FIN占用一個序号),Server進入CLOSE_WAIT狀态。

第三次揮手:Server發送一個FIN,用來關閉Server到Client的資料傳送,Server進入LAST_ACK狀态。

第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀态,接着發送一個ACK給Server,确認序号為收到序号+1,Server進入CLOSED狀态,完成四次揮手。

為什麼建立連接配接是三次握手,而關閉連接配接卻是四次揮手呢?

這是因為服務端在LISTEN狀态下,收到建立連接配接請求的SYN封包後,把ACK和SYN放在一個封包裡發送給用戶端。而關閉連接配接時,當收到對方的FIN封包時,僅僅表示對方不再發送資料了但是還能接收資料,己方也未必全部資料都發送給對方了,是以己方可以立即close,也可以發送一些資料給對方後,再發送FIN封包給對方來表示同意現在關閉連接配接,是以,己方ACK和FIN一般都會分開發送。

網絡層

IP位址由兩部分組成,即網絡位址和主機位址,二者是主從關系:

(1)網絡号 net-id,它标志主機(或路由器)所連接配接到的網絡,網絡位址表示其屬于網際網路的哪一個網絡。

(2)主機号 host-id,它标志該主機(或路由器),主機位址表示其屬于該網絡中的哪一台主機。

TCPIP協定詳解【二】

網絡接口層

協定拆分

TCPIP協定詳解【二】

類似地,許多應用程序使用TCP或UDP傳送資料,則需要在TCP段或UDP資料報首部定義一個應用程式辨別符。TCP和UDP都使用一個16位的端口号來辨別不同的應用程式,TCP和UDP把“源端口号”和“目的端口号”分别存人TCP段首部和UDP資料報首部。網絡接口分别發送和接收IP、ARP、RARP的資料,同理,也必須在以太網(假定實體網絡是一個以太網)的首部加入一個字段,用來說明是哪個協定的資料。

為此,以太網幀首部定義了一個16位的“類型”字段。當接收方(也稱目的主機)收到一個以太網幀時,資料就開始在協定棧中自下而上傳送。各層協定利用封包首部所攜帶的協定控制資訊做相應的處理,然後去掉各層協定資料單元的首部,将封裝的資料交給上層協定。每層協定都要檢查協定首部中的協定辨別,以确定讓哪一個協定接收資料,這個過程稱為拆封,如上圖所示。

區域網路資料傳輸

TCPIP協定詳解【二】

任何兩個對等層(peerlayer),例如傳輸層、網際層、網絡接口層之間的通信,如同上圖中辨別的一樣,好像是将資料通過水準虛線直接傳遞給對方,這就是所謂的對等層之間的通信。實際上,協定就是在兩個對等層之間傳遞資料時的各種規定。由此可以這樣認為:實際通信是按垂直方向進行的,層與層之間經過封裝和拆封這樣的操作實作實體通信。但是邏輯上,卻是在水準方向上利用協定進行的對等層通信。

廣域網資料傳輸

TCPIP協定詳解【二】

應用層和傳輸層使用端到端(end-to-end)協定,路由器中沒有這兩層協定,隻有端系統才有這兩層協定。網際層是逐跳(hop-by-hop)協定,端系統和路由器都有網際層協定。一個路由器具有兩個或多個網絡接口,這樣才能連接配接兩個或多個網絡。網際網路的目的之一是在應用程式中屏蔽所有的實體網絡細節。在上圖中,應用層不需要關心一個端系統是在以太網上還是在令牌環網上,它們通過路由器進行通信。随着不同類型實體網絡的增加,網際網路的規模變得越來越大,也需要增加路由器,但是應用層仍然是一樣的。