?TCP協議只定義了一種報文格式
?????建立、拆除連接、傳輸數據使用同樣的報文
?TCP報文格式
TCP報文段首部(20個字節)
?源端口和目的端口:各占2個字節,16比特的端口號加上32比特的IP地址,共同構成相當于傳輸層服務訪問點的地址,即“插口”;
?這些端口可用來將若干高層協議向下復用;
序號字段和確認序號字段:
?序號:占4個字節,是本報文段所發送的數據部分第一個字節的序號。在TCP傳送的數據流中,每一個字節都有一個序號。例如,一報文段的序號為300,而起數據供100字節,則下一個報文段的序號就是400;
?確認序號:占4字節,是期望收到對方下次發送的數據的第一個字節的序號,也就是期望收到的下一個報文段的首部中的序號;
?由于序號字段有32比特長,可以對4GB的數據進行編號,這樣就可保證當序號重復使用時,舊序號的數據早已在網絡中消失了;
數據偏移字段
?數據偏移:占4比特,表示數據開始的地方離TCP報文段的起始處有多遠。這實際上就是TCP報文段首部的長度。由于首部長度不固定,因此數據偏移字段是必要的。
?保留字段: 6比特,供今后使用,目前置為0。
6個比特的控制字段
?緊急比特URGent:當URG=1時,表明此報文應盡快傳送,而不要按原來的排隊順序來傳送。與“緊急指針”字段配合使用,緊急指針指出在本報文段中的緊急數據的最后一個字節的序號,使接收方可以知道緊急數據共有多長;
?確認比特ACK:只有當ACK=1時,確認序號字段才有意義;
?急迫比特PSH:當PSH=1時,表明請求遠地TCP將本報文段立即傳送給其應用層,而不要等到整個緩存都填滿了之后再向上交付。
?復位比特ReSeT:當RST=1時,表明出現嚴重差錯,必須釋放連接,然后再重建傳輸連接。復位比特還用來拒絕一個非法的報文段或拒絕打開一個連接;
?同步比特SYN:在建立連接時使用,當SYN=1而ACK=0時,表明這是一個連接請求報文段。對方若同意建立連接,在發回的報文段中使SYN=1和ACK=1。因此,SYN=1表示這是一個連接請求或連接接受報文,而ACK的值用來區分是哪一種報文;
?終止比特FINal:用來釋放一個連接,當FIN=1時,表明欲發送的字節串已經發完,并要求釋放傳輸連接;
窗口字段
?窗口Window:占2字節,表示報文段發送方的接收窗口,單位為字節。此窗口告訴對方,“在未收到我的確認時,你能夠發送的數據的字節數至多是此窗口的大小。”
?通知窗口advertised window:接收端根據其接收能力許諾的窗口值,是來自接收端的流量控制。接收端將通知窗口的值放在TCP報文的首部中,傳送給對方。
?擁塞窗口congestion window:是發送端根據網絡擁塞情況得出的窗口值,是來自發送端的流量控制。
?檢驗和覆蓋了整個的TCP報文段:TCP首部和TCP數據。這是一個強制性的字段,由發端計算和存儲,由收端進行驗證。
選項字段允許每臺主機設定能夠接受的最大TCP載荷能力(缺省536字節) 。
TCP分節的封裝
?TCP的數據編號與確認
數據流、報文段和序號
?TCP通信的動作
?????切割:根據適合傳輸的大小對數據流進行切割
?????????最大報文段長度<64Kbytes
?????????通常:MTU-(IP頭+TCP頭)
?????復原:用報文段恢復原始數據流的字節順序
?????序號:排序、查錯及數據流復原
?TCP數據流的切割與復原
報文序號
?依據數據流中的字節序號(流序號)
?報文序號為報文段中第一字節的流序號
????如:流序號=x,長度=L的報文段,則:
????????? 報文的序號為x,下一報文序號為x+L
?序號特點
???報文的順序關系
???數據流的位置,更便于流的復原
???需較大的序號空間(32bit,4Gbyte)
?例如:在一個報文中,序號為300,而報文中數據有100字節。
下一個報文符,其序號為400;