tcp協議在計算機網路中的地位十分的高,也正因為如此不管是研究人員還是開發者,對tcp的理解有助於工作的提公升。本文將根據自己的理解,介紹tcp協議的相關知識。為什麼說tcp是可靠的?
tcp(transfer control protocol)傳輸控制協議,很明顯就是五層網路結構或者iso七層結構中的傳輸層協議。負責端到端的通訊(這裡的端指的是主機上的埠,也就是程序),是面向連線的,可靠的協議(後面會分別介紹這兩個方面)。當然由於是面向連線的,因此乙個tcp連線只能是一對一的連線。
由於tcp協議需要保證傳送方知道自己傳送出去的資料是否被接收方接收,那麼意味著接收方必須要給接收方乙個回應,即接收方也可以傳送資料,這就是tcp是全雙工的原因。知道了這個之後,傳送端和接收端仍然需要確認的是:傳送方和接收方的傳送功能和接收功能都是正常的,只有這樣傳送端才可以得到接收端是否接收到資訊的反饋。怎麼來確認呢?下面就引出了,tcp的三次握手。圖引用自【碼出高效】這本書。
這時有人會問了,為啥要三次握手兩次不行麼?這個是個好問題。
原因有二:
第一:資訊對等
上文中已經提到,接收端和傳送端都需要知道自己和對方的傳送資訊功能和接收資訊功能是正常的。因此針對每一次握手,我們都可以用下面的**來表示此時的狀態。a表示客戶端,b表示伺服器端,a_a傳送表示:客戶端對自己的傳送功能的確認資訊。
第一次握手之前:
a_a傳送
a_a接收
b_a傳送
b_a接收
a_b傳送
a_b接收
b_b傳送
b_b接收
不知不知
不知不知
不知不知
不知不知
第一次握手之後
a_a傳送
a_a接收
b_a傳送
b_a接收
a_b傳送
a_b接收
b_b傳送
b_b接收
不知不知
正常不知
不知不知
不知正常
第二次握手之後
a_a傳送
a_a接收
b_a傳送
b_a接收
a_b傳送
a_b接收
b_b傳送
b_b接收
正常正常
正常不知
正常正常
不知正常
第三次握手之後
a_a傳送
a_a接收
b_a傳送
b_a接收
a_b傳送
a_b接收
b_b傳送
b_b接收
正常正常
正常正常
正常正常
正常正常
由此可見只有當第三次握手之後,雙方才可以知道自己和對方的傳送和接收功能是否都是正常的。
第二:防止超時
由於tcp下層的網路是不太可靠的,因此可能會出現超時的現象。比如第一次握手的資訊一直在網路中遲遲傳送不到伺服器端,於是tcp協議啟動了超時重傳的機制,再次傳送連線請求,經過兩次握手,客戶端和伺服器端已經建立的連線。當資料傳輸完畢之後雙方已經關閉了連線,此時之前在網路中的請求報文段到達了伺服器端,然後伺服器端又建立了乙個連線,並傳送響應報文給客戶端,但是此時的客戶端已經不是syn_sent的狀態,就會直接丟棄響應報文。這樣就會導導致伺服器端出現髒連線。當髒連線過多的時候,會對系統效能產生很大的影響。
因為已經建立了連線,當資料傳輸完畢的時候,如果客戶端和伺服器端還一直連線這,狀態不改變的話,那麼如果建立很多連線之後將會對伺服器端的負載等造成很大影響,因此完事了之後也要有關閉的過程,這就引出了tcp的四次揮手。同樣引用來自【碼出高效】的示意圖。
這個時候又有小夥伴要問了,為啥需要四次握手?
原因有二:
首先我們得明確可靠的含義:能夠將資料完整的從傳送端傳送到接收端,並且保證在一定的時間內完成。那麼第一件事就是,資料得從傳送端傳送到接收端,之後再考慮資料的完整性問題。為了完成這樣的目標tcp主要從三個方面來考慮:
TCP協議理解
我不是計算機科班出身。記得大學的時候旁聽計算機系的網路課,當時計算機系使用教材是 計算機網路 自頂向下方法與internet特色 的影印版,這本教材與眾不同的乙個地方就是作者 james f.kurose和 keith w.ross採用了 自頂向下 的編排思路,先從應用層開始,最後講到物理層。而且這...
TCP協議 HTTPS協議的理解
tcp tcp是一種可靠的傳輸協議,為什麼說它可靠呢,因為它有 三次握手 為什麼握三次手就可靠了,握兩次或者一次會怎樣?hi,我可以跟你拉小手手嗎?ok啊,那你現在方便跟我牽嗎?伸出手 好的,我已經抓住你的手了 https是加了安全驗證的http協議。可以這麼說,當你跟某個遠端的小夥伴通過網路傳輸資...
tcp協議的簡單理解
tpc協議屬於傳輸層協議,本篇主要介紹下幾個概念,以及握手和揮手的過程。1.tcp的幾個概念 位碼 即tcp標誌位,有6種提示 syn synchronus,表示建立聯機。ack acknowledgement,確認。push push,傳送。fin finish,結束。rst rest,重置。ur...