tcp全稱為「傳輸控制協議」。tcp是面向連線,保證可靠性,面向位元組流的一種網路傳輸協議。
tcp協議段格式
1.源 / 目的 埠號:表示資料是從哪個程序來,到哪個程序去。
2.32位序號與確認序號:tcp會話的每一端都包含乙個32位(bit)的序列號,該序列號被用來跟蹤該端傳送的資料量。每乙個包中都包含序列號,在接收端則通過確認號用來通知傳送端資料成功接收。
3.4位tcp報頭長度:表示該tcp頭部有多少個32bit(有多少個4位元組);所以tcp頭部最大長度是15* 4=60。
4.6位標誌位:
(1)urg:緊急指標是否有效。
(2)ack: 確認號是否有效。
(3)psh:提示接收端應用程式立刻從tcp緩衝區把資料讀走。
(4)rst: 對方要求重新建立連線;我們把攜帶rst標識的稱為復位報文段 (關閉當前連線,重新建立連線)。
(5)syn: 請求建立連線;我們把攜帶syn標識的稱為同步報文段。
(6)fin:通知對方,本端要關閉了,我們稱攜帶fin標識的結束報文段。
5.16位視窗大小:接收方的緩衝區大小。
6.16位校驗和:傳送端填充,crc校驗,接收端校驗不通過,則認為資料有問題,此處的檢驗和不光包含tcp首部,也包含tcp資料部分。
7.16位緊急指標:標識哪部分資料是緊急資料。
8.40位元組頭部選項:tcp頭部的最後乙個選項字段(options)是可變長的可選資訊。這部分最多包含40位元組,因為tcp頭部最長是60位元組(其中還包含前面討論的20位元組的固定部分)。
二、tcp連線管理機制
在正常情況下,tcp要經過三次握手建立連線,四次揮手斷開連線。
三次握手建立連線:
第一次:發起方傳送syn,請求建立連線
第二次:接收方傳送syn請求建立連線,並傳送ack確認連線
第三次:發起方傳送ack確認連線。
注意:
(1)為什麼不是兩次握手:傳送訊號時,最後一次訊號有可能會丟失,如果是兩次握手時,第二次傳送的訊號丟失,這時,伺服器認為連線成功,而客戶端因為未收到確認訊號以為連線未建立,此時客戶端再次傳送syn建立連線,這樣會造成客戶端一直建立連線,而伺服器要分出一大部分資源來管理哪些無效的連線,有可能導致伺服器崩潰。
(2)為什麼是三次握手:傳送訊號時,最後一次訊號有可能會丟失,如果是三次握手,則伺服器未接收到客戶端的確認訊號認為建立連線失敗,而客戶端因為在第二次握手時收到了確認訊號,則認為連線成功,接下來客戶端向伺服器傳送資訊,發現不能傳送,那麼重新申請建立連線。這樣不會影響伺服器。
(3)為什麼不是四次握手:1>當三次握手後,a和b就已經可以確認雙方能夠正常通訊了,再多一兩次握手已經多餘。
2> 換一種思路,第四次握手的目的與第二次握手的目的一樣,既然沒法確認第二次握手,a是否可以收到,那如何進行第三次握手,顯然是無法進行第三次握手的。
注:在網路中,萬全可靠的通訊協議是根本不存在的,我們任何的通訊協議都是在接受這樣的現實情況之上進行的。協議可以確認之前的通訊情況,但是無法確認之後的情況的。
四次揮手斷開連線:
第一次:關閉連線的一方a, a向b傳送fin訊號,通知b本端要關閉了,b收到訊號進入close_wait狀態。
第二次:b向a傳送ack確認訊號。
第三次:b向a傳送fin訊號通知a,b端就要關閉了,a收到訊號進入time_wait狀態(a端要等待乙個2msl的時間才會進入closed狀態)。
第四次:a端向b端傳送ack確認訊號,a端收到後進入closed狀態。
注意:msl代表的是報文最大生存時間,a端收到fin後不是直接進入closed狀態,而是進入time_wait狀態等待2msl,因為最後一次的ack訊號有可能丟失,那麼b端發現在一段時間後沒有收到ack訊號,那麼b端就需要時間重新向a端傳送fin訊號,a端接收到fin訊號後會重發ack訊號,以此來確認a端已經關閉,然後b端也進入closed狀態(關閉)。
網路 TCP協議!!
源埠位址和目的位址 表示資料從哪個程序來,哪個程序去 32位序號 每個tcp資料報傳送出去,需要序號進行編號,方便接受端正確的識別包的序號 32位確認序號 每個包傳送出去需要對端確認,確認序號為了給對端傳送確認序號 4位tcp報頭長度 用來表示tcp首部有多少個32bit位 4位元組 tcp最大長度...
網路協議之TCP
為了實現計算機的通訊,我們為計算機定義了一系列的通訊規則,這些規則就是協議.資料格式封裝 傳輸 將複雜的流程分解為幾個功能相對單一的子程序。osi是乙個理想的模型,因此一般網路系統只涉及其中的幾層,很少有系統能夠具有所有的7層,並完全遵循它的規定。在7層模型中,每一層都提供乙個特殊的網路功能。從網路...
網路協議之TCP
為了實現計算機的通訊,我們為計算機定義了一系列的通訊規則,這些規則就是協議.資料格式封裝 傳輸 將複雜的流程分解為幾個功能相對單一的子程序。osi是乙個理想的模型,因此一般網路系統只涉及其中的幾層,很少有系統能夠具有所有的7層,並完全遵循它的規定。在7層模型中,每一層都提供乙個特殊的網路功能。從網路...