TCP數據格式
TCP是一種可靠的、面向連接的字節流服務。
源主機在傳送數據前需要先和目標主機建立連接。然後,在此連接上,被編號的數據段按序收發。同時,要求對每個數據段進行確認,保證了可靠性。如果在指定的時間內沒有收到目標主機對所發數據段的確認,源主機將再次發送該數據段。
- 源、目標端口號字段:佔16比特。TCP協議通過使用"端口"來標識源端和目標端的應用進程。端口號可以使用0到65535之間的任何數字。在收到服務請求時,操作系統動態地爲客戶端的應用程序分配端口號。在服務器端,每種服務在"衆所周知的端口"(Well-Know Port)爲用戶提供服務。
- 順序號字段:佔32比特。用來標識從TCP源端向TCP目標端發送的數據字節流,它表示在這個報文段中的第一個數據字節。
- 確認號字段:佔32比特。只有ACK標誌爲1時,確認號字段纔有效。它包含目標端所期望收到源端的下一個數據字節。
- 頭部長度字段:佔4比特。給出頭部佔32比特的數目。沒有任何選項字段的TCP頭部長度爲20字節;最多可以有60字節的TCP頭部。
- 標誌位字段(U、A、P、R、S、F):佔6比特。各比特的含義如下:
◆URG:緊急指針(urgent pointer)有效。
◆ACK:確認序號有效。
◆PSH:接收方應該儘快將這個報文段交給應用層。
◆RST:重建連接。
◆SYN:發起一個連接。
◆FIN:釋放一個連接。 - 窗口大小字段:佔16比特。此字段用來進行流量控制。單位爲字節數,這個值是本機期望一次接收的字節數。
- TCP校驗和字段:佔16比特。對整個TCP報文段,即TCP頭部和TCP數據進行校驗和計算,並由目標端進行驗證。
- 緊急指針字段:佔16比特。它是一個偏移量,和序號字段中的值相加表示緊急數據最後一個字節的序號。
- 選項字段:佔32比特。可能包括"窗口擴大因子"、"時間戳"等選項。
UDP數據格式
UDP是一種不可靠的、無連接的數據報服務。
源主機在傳送數據前不需要和目標主機建立連接。數據被冠以源、目標端口號等UDP報頭字段後直接發往目的主機。這時,每個數據段的可靠性依靠上層協議來保證。在傳送數據較少、較小的情況下,UDP比TCP更加高效。
- 源、目標端口號字段:佔16比特。作用與TCP數據段中的端口號字段相同,用來標識源端和目標端的應用進程。
- 長度字段:佔16比特。標明UDP頭部和UDP數據的總長度字節。
- 校驗和字段:佔16比特。用來對UDP頭部和UDP數據進行校驗。和TCP不同的是,對UDP來說,此字段是可選項,而TCP數據段中的校驗和字段是必須有的
IP報文段格式
普通的 IP 頭部長度爲20 個字節,不包含IP 選項字段。
- 版本號(Version)字段標明瞭IP 協議的版本號,目前的協議版本號爲4。下一代IP 協議的版本號爲6。
- 報文長度指 IP 包頭部長度,佔4 位。
- 8 位的服務類型(TOS,Type of Service)字段包括一個3 位的優先權字段(COS,Class of Service),4 位TOS 字段和1 位未用位。4 位TOS 分別代表最小時延、最大吞吐量、最高可靠性和最小費用。
- 總長度(Total length)是整個IP 數據報長度,包括數據部分。
- 標識符(Identification)字段唯一地標識主機發送的每一份數據報。通常每發送一份報文它的值就會加1.
- 生存時間(TTL,Time to Live)字段設置了數據包可以經過的路由器數目。一旦經過一個路由器,TTL 值就會減1,當該字段值爲0 時,數據包將被丟棄。
- 協議字段確定在數據包內傳送的上層協議,和端口號類似,IP 協議用協議號區分上層協議。TCP 協議的協議號爲6,UDP 協議的協議號爲17。
- 報頭校驗和(Head checksum)字段計算IP 頭部的校驗和,檢查報文頭部的完整性。源IP 地址和目的IP 地址字段標識數據包的源端設備和目的端設備。