本篇博文是對參考文章的學習總結
一、tcp介紹
tcp協議之所以設計複雜,可以說它秉承的是「性惡論」。它認為網路環境天生就是惡劣的,丟包、亂序、重傳、擁塞都是常有的事,一言不合就可能送達不了,所以只能從演算法層面上來保證傳輸的可靠性。
tcp包頭格式
其中源埠號和目的埠號是用來確定資料應該發往哪個應用層中的程序。
序號是用來解決亂序的問題。
確認序號用來確認發出去的包對方是否接收成功,不管有沒有成功都應該有個回覆,可以解決丟包問題,如果對方沒有接收成功,則繼續傳送。tcp 是靠譜的協議,但是這不能說明它面臨的網路環境好。從ip層來說,網路環境是複雜多變的,沒有什麼可靠性而言,而tcp所能做的就是盡最大努力交付,通過各種演算法保證。如果丟包就重傳,保證在tcp層面上努力保證可靠性。
其中的狀態位用來維持狀態連線,因為tcp是面向連線的,所以根據狀態位的變化,來維持連線狀態。ack表示回覆,syn代表建立乙個連線,rst表示拒絕連線,fin表示結束連線。
視窗大小用來進行流量控制的,通訊雙方需要各自建立乙個流量視窗,標識當前自己的處理能力,避免傳送太快與太慢。流量控制主要針對的是通訊雙方。在保證流量控制的同時,針對網路環境的變化,還需要一定的擁塞避免處理能力,當網路環境擁堵時,就需要調整自己的傳送速度來適應網路環境。擁塞避免主要針對的是網路環境。
二、tcp三次握手
當要建立乙個連線的時候,剛開始,客戶端處於closed狀態,服務端處於listen狀態。然後:
為什麼要進行三次握手?
握手要確定客戶端與服務端均具有傳送和接收訊息的能力。三次握手的具體確認有如下幾個方面:
第一次握手:客戶端傳送網路包,服務端收到了。這樣服務端就能得出結論:客戶端的傳送能力、服務端的接收能力是正常的。
第二次握手:服務端發包,客戶端收到了。這樣客戶端就能得出結論:服務端的接收、傳送能力,客戶端的接收、傳送能力是正常的。不過此時伺服器並不能確認客戶端的接收能力是否正常。
第三次握手:客戶端發包,服務端收到了。這樣服務端就能得出結論:客戶端的接收、傳送能力正常,伺服器自己的傳送、接收能力也正常。
三、tcp四次揮手
剛開始雙方都處於 establised 狀態,假如是客戶端先發起關閉請求,則:
1.第一次揮手:客戶端傳送乙個 fin 報文,報文中會指定乙個序列號。此時客戶端處於closed_wait1狀態。
2.第二次揮手:服務端收到 fin 之後,會傳送 ack 報文,且把客戶端的序列號值 + 1 作為 ack 報文的序列號值,表明已經收到客戶端的報文了,此時服務端處於close_wait2狀態。
參考:1.極客時間《趣談網路協議》第11講
TCP協議的三次握手與四次握手
可以根據抓包來分析三次握手與四次握手 埠40286表示客戶端client,埠9000表示服務端server 三次握手 a.client向server傳送syn 1,ack 0,seq x 此階段不會有ack client狀態為syn snet b.server收到client的syn請求,傳送syn...
TCP三次握手協議
摘自 syn攻擊原理以及防範技術 tcp握手協議 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack ...
TCP三次握手協議
在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己也傳送乙個syn包 syn k 即...