TCP簡述----java.net

簡介

TCP:tcp是面向鏈接的可靠的傳輸協議,協議中包含校驗、重傳機制以及流控制,保證了數據正確性。html

網絡的七層協議

以下:物理層、數據鏈路層、傳輸層、網絡層、會話層、表示層、應用層(會話層與表示層在實際的Tcp/ip協議中不存在) 服務器

  • 物理層:數據傳輸採用的介質:雙絞線、光纖等網絡

  • 數據鏈路層:數據在單個網絡中傳輸的機制(局域網中依靠mac地址、ip地址),相鄰節點之間的傳輸。tcp

  • 網絡層:在整個網絡中如何傳播的,路由器器做用,ip編碼

  • 傳輸層:提供端口到端口的傳輸,要用端口號對上層進行標記cdn

  • 應用層:具體軟件功能實現。htm

Tcp的鏈接

以下圖,3次握手協議。爲何會有三次,由於tcp協議是雙向的。服務器在確認與請求鏈接放到一塊兒了。blog

  • (1)第一次握手:Client將標誌位SYN置爲1,隨機產生一個值seq=J,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。ip

  • (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之間能夠開始傳輸數據了。

Tcp鏈接的中斷

以下圖,經歷四次握手,TIME_WAIT狀態須要通過2MSL(最大報文段生存時間)才能返回到CLOSE狀態。緣由防止ack報文丟失,service發起重傳。

  • 第一次揮手: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狀態,完成四次揮手。

Tcp的可靠從新機制。

發送端會對發送的報文進行字節編碼,接受端只對最小的接受數據發送ack報文。當報文丟失時,發送端的作超時重傳;接收端在收到新的報文的時候,若是有報文確實,會重複上次的確認報文,接受端收到屢次確認報告的時候,就知道須要進行確認重傳。

參考: wiki www.cnblogs.com/buxiangxin/…

相關文章
相關標籤/搜索