五層協議模型

  1. OSI七層體系機構:應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層。
  2. TCP/IP四層體系結構:應用層(TELNET、FTP、SMTP等)、運輸層(TCP或UDP)、網際層IP、網絡接口層。
  3. 五層協議體系結構:應用層、傳輸層、網絡層、數據鏈路層、物理層。


以五層協議體系結構爲例:
應用層直接爲用戶的應用進程提供服務。這裏的進程是指正在運行的程序,包含支持萬維網應用的HTTP協議、支持電子郵件的SMTP協議、支持文件傳送的FTP協議等等。
運輸層負責向兩個主機進程之間的通信提供服務。由於一個主機可同時運行多個進程,因此運輸層有複用和分用的功能。複用就是多個應用層進程可同時使用下面傳輸層的服務,分用是運輸層把收到的信息分別教輔給上面應用層中的相應進程。
  • 傳輸控制協議TCP——面向連接的,數據傳輸的單位是報文段(segment),能提供可靠的交付。
  • 用戶數據包協議UDP——無連接的,數據傳輸的單位是用戶數據報,不保證提供可靠交付,只能提供盡最大努力。
網絡層:負責爲分組交換網上的不同主機提供通信服務。在發送數據時,網絡層把運輸層產生的報文段或用戶數據報封裝成分組或包進行傳送。網絡層另一個任務是要選擇合適的路由,使源主機運輸層所傳下來的分組,能夠通過網絡中的路由器找到目的主機。
主要協議:地址解析協議ARP(address resolution protocol)
    逆地址解析協議RARP(reverse address resolution protocol)
    網際控制報文協議ICMP(internet control message protocol)
    網際組管理協議IGMP(internet group management protocol)
數據鏈路層在兩個相鄰節點之間傳送數據時,數據鏈路層將網絡曾腳下來的IP數據包組裝成幀,在兩個相鄰節點間的鏈路上透明的傳送幀中的數據。每一幀包括數據和必要的控制信息(如同步信息、地址信息、差錯控制等)。
物理層物理層任務就是透明的傳送比特流





TCP/IP三次握手,四次揮手

所謂三次握手(Three-Way Handshake)即建立TCP連接,就是指建立一個TCP連接時,需要客戶端和服務端總共發送3個包以確認連接的建立。在socket編程中,這一過程由客戶端執行connect來觸發,整個流程如下圖所示:




圖1 TCP三次握手
        (1)第一次握手:Client將標誌位SYN置爲1,隨機產生一個值seq=J,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。
        (2)第二次握手:Server收到數據包後由標誌位SYN=1知道Client請求建立連接,Server將標誌位SYN和ACK都置爲1,ack=J+1,隨機產生一個值seq=K,並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。
        (3)第三次握手:Client收到確認後,檢查ack是否爲J+1,ACK是否爲1,如果正確則將標誌位ACK置爲1,ack=K+1,並將該數據包發送給Server,Server檢查ack是否爲K+1,ACK是否爲1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸數據了。


所謂四次揮手(Four-Way Wavehand)即終止TCP連接,就是指斷開一個TCP連接時,需要客戶端和服務端總共發送4個包以確認連接的斷開。在socket編程中,這一過程由客戶端或服務端任一方執行close來觸發,整個流程如下圖所示:

 
圖2 TCP四次揮手

由於TCP連接時全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成數據發送任務後,發送一個FIN來終止這一方向的連接,收到一個FIN只是意味着這一方向上沒有數據流動了,即不會再收到數據了,但是在這個TCP連接上仍然能夠發送數據,直到這一方向也發送了FIN。首先進行關閉的一方將執行主動關閉,而另一方則執行被動關閉,上圖描述的即是如此。
        (1)第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。
        (2)第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。
        (3)第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。
        (4)第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手。


握手是三次而揮手四次的原因:

這是因爲服務端在LISTEN狀態下,收到建立連接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。而關閉連接時,當收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方也未必全部數據都發送給對方了,所以己方可以立即close,也可以發送一些數據給對方後,再發送FIN報文給對方來表示同意現在關閉連接,因此,己方ACK和FIN一般都會分開發送。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章