TCP:tcp是面向鏈接的可靠的傳輸協議,協議中包含校驗、重傳機制以及流控制,保證了數據正確性。html
以下:物理層、數據鏈路層、傳輸層、網絡層、會話層、表示層、應用層(會話層與表示層在實際的Tcp/ip協議中不存在) 服務器
物理層:數據傳輸採用的介質:雙絞線、光纖等網絡
數據鏈路層:數據在單個網絡中傳輸的機制(局域網中依靠mac地址、ip地址),相鄰節點之間的傳輸。tcp
網絡層:在整個網絡中如何傳播的,路由器器做用,ip編碼
傳輸層:提供端口到端口的傳輸,要用端口號對上層進行標記cdn
應用層:具體軟件功能實現。htm
以下圖,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之間能夠開始傳輸數據了。
以下圖,經歷四次握手,TIME_WAIT狀態須要通過2MSL(最大報文段生存時間)才能返回到CLOSE狀態。緣由防止ack報文丟失,service發起重傳。
發送端會對發送的報文進行字節編碼,接受端只對最小的接受數據發送ack報文。當報文丟失時,發送端的作超時重傳;接收端在收到新的報文的時候,若是有報文確實,會重複上次的確認報文,接受端收到屢次確認報告的時候,就知道須要進行確認重傳。
參考: wiki www.cnblogs.com/buxiangxin/…