在學(xué)習(xí) TCP 連接之前,還要學(xué)習(xí)一下 TCP 頭部格式。因?yàn)?TCP 連接建立,需要用 TCP 包來(lái)交換和管理數(shù)據(jù),下面看一下 TCP頭部格式。
TCP 頭部里每個(gè)字段都為管理 TCP 連接和控制數(shù)據(jù)流起了重要作用。
16 位端口號(hào):告知主機(jī)該報(bào)文段是來(lái)自哪里(源端口)以及傳給哪個(gè)上層協(xié)議或應(yīng)用程序(目的端口)的。
進(jìn)行 TCP 通信時(shí),客戶(hù)端通常使用系統(tǒng)自動(dòng)選擇的臨時(shí)端口號(hào),而服務(wù)器則使用知名服務(wù)端口號(hào)。所有知名服務(wù)使用的端口號(hào)都定義在/etc/services 文件中。
32 位序號(hào)(sequence number):一次 TCP 通信(從 TCP 連接建立到斷開(kāi))過(guò)程中個(gè)傳輸方向上的字節(jié)流的每個(gè)字節(jié)的編號(hào)。
32 位確認(rèn)號(hào)(acknowledgement number):用作對(duì)另一方發(fā)送來(lái)的 TCP 報(bào)文段的響應(yīng)其值是收到的 TCP 報(bào)文段的序號(hào)值加1。
4 位頭部長(zhǎng)度(header length):標(biāo)識(shí)該 TCP 頭部有多少個(gè) 32bit ( 4 Byte 因?yàn)樽畲竽鼙硎?15 ,所以 TCP頭部最長(zhǎng)是 60 Byte。
6 位標(biāo)志位包含如下幾項(xiàng):
URG 標(biāo)志,表示緊急指針是否有效。
ACK 標(biāo)志,表示確認(rèn)號(hào)是否有效,一般稱(chēng)攜帶 ACK 標(biāo)志的 TCP 報(bào)文段為“確認(rèn)報(bào)文段”。
PSH 標(biāo)志,提示接收端應(yīng)用程序應(yīng)該立即從 TCP 接收緩沖區(qū)中讀走數(shù)據(jù),為接收后續(xù)數(shù)據(jù)騰出空間(如果應(yīng)用程序不將接收到的數(shù)據(jù)讀走,它們就會(huì)直停留在TCP 接收緩沖區(qū)中)。
RST 標(biāo)志,表示要求對(duì)方重新建立連接,一般稱(chēng)攜帶 RST 標(biāo)志的 TCP 報(bào)文段為“復(fù)位報(bào)文段”。
SYN 標(biāo)志,表示請(qǐng)求建立 個(gè)連接,一般稱(chēng)攜帶 SYN 標(biāo)志的 TCP 報(bào)文段為“同步報(bào)文段”。FIN 標(biāo)志,表示通知對(duì)方本端要關(guān)閉連接了,一般稱(chēng)攜帶FIN 標(biāo)志的 TCP 報(bào)文段為“結(jié)束報(bào)文段”。
16 位窗口大?。╳indow size):是 TCP 流量控制的一個(gè)手段。這里說(shuō)的窗口,指的是接收通告窗口( Receiver Window,RWND)。它告訴對(duì)方本端的 TCP 接收緩沖區(qū)還能容納多少字節(jié)的數(shù)據(jù),這樣方就可以控制發(fā)送數(shù)據(jù)的速度。
16 位校驗(yàn)和(TCP checksum):由發(fā)送端填充,接收端對(duì) TCP 報(bào)文段執(zhí)行 CRC 算法,以檢驗(yàn) TCP 報(bào)文段在傳輸過(guò)程中是否損壞。注意,這個(gè)校驗(yàn)不僅包括 TCP 頭部,也包括數(shù)據(jù)部分。這也是 TCP 可靠傳輸?shù)囊粋€(gè)重要保障。
16 位緊急指針(urgent pointer):是一個(gè)正的偏移量。它和序號(hào)字段的值相加表示最后一個(gè)緊急數(shù)據(jù)的下一字節(jié)的序號(hào)。確切地說(shuō),這個(gè)字段是緊急指針相對(duì)當(dāng)前序號(hào)的偏移,不妨稱(chēng)之為“緊急偏移”。TCP 的緊急指針是發(fā)送端向接收端發(fā)送緊急數(shù)據(jù)的方法。
綜上,你需要注意如下幾點(diǎn):
TCP 的包是沒(méi)有 IP 地址的,那是 IP 層上的事,但是有源端口和目的端口。
一個(gè)TCP 連接需要四元組( src_ip,src_port,dst_ip,dst_port )來(lái)表示是同一個(gè)連接 準(zhǔn)確說(shuō)是五元組,還有一個(gè)是協(xié)議但因?yàn)檫@里只是強(qiáng)調(diào) TCP 協(xié)議,所以,只說(shuō)四元組。
Sequence Number 是包的序號(hào),用來(lái)解決網(wǎng)絡(luò)包亂序(reordering )問(wèn)題。
Acknowledgement Number 就是 ACK ,用于確認(rèn)收到,用來(lái)解決不丟包的問(wèn)題。
Window Advertised Window ,也就是著名 的滑動(dòng)窗口 Sliding Window ),用于解決流量控制問(wèn)題。
TCP Flag ,也就是包的類(lèi)型,主要是用于操控 TCP 的狀態(tài)機(jī)的。
-
通信
+關(guān)注
關(guān)注
18文章
5949瀏覽量
135783 -
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7485瀏覽量
88541 -
TCP
+關(guān)注
關(guān)注
8文章
1347瀏覽量
78933 -
接收端
+關(guān)注
關(guān)注
0文章
20瀏覽量
8487
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論