TCP/IP header 詳解


    TCP/IP協議是網絡服務中的重要協議,雖然每天都在使用,但不是每個頭部標識都記得清楚,因此查了一下資料,寫入隨筆,便於自己以后查看。

1.IP header

這是從RFC791 拉下來的IP header

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version|  IHL  |Type of Service|          Total Length         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Identification        |Flags|      Fragment Offset    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Time to Live |    Protocol   |         Header Checksum       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Source Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Destination Address                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Example Internet Datagram Header

●Version(版本):占4比特,用來表明IP協議實現的版本號,當前一般為IPv4,即0100。

●IHL(報頭長度):占4比特,表示頭部占32比特的長度是多少,比如說不包含任何選項的IP數據報,從上圖可以看出到 Destination Address為止, 32x5=160比特=20字節,此字段最大值為60字節。

●Type of Service(服務類型):占8個比特,其中前3比特為優先權子字段(Precedence,現已被忽略)。第8比特保留未用。第4至第7比特分別代表延遲、吞吐量、可靠性和花費。當它們取值為1時分別代表要求最小時延、最大吞吐量、最高可靠性和最小費用。這4比特的服務類型中只能置其中1比特為1。可以全為0,若全為0則表示一般服務。服務類型字段聲明了數據報被網絡系統傳輸時可以被怎樣處理。

      Bits 0-2:  Precedence.
      Bit    3:  0 = Normal Delay,      1 = Low Delay.
      Bits   4:  0 = Normal Throughput, 1 = High Throughput.
      Bits   5:  0 = Normal Relibility, 1 = High Relibility.
      Bit    6:  0 = Normal Cost, 1 = High cost.
Bit 7: Reserved for Future Use.
         0     1     2     3     4     5     6     7
      +-----+-----+-----+-----+-----+-----+-----+-----+
      |                 |     |     |     |     |     |
      |   PRECEDENCE    |  D  |  T  |  R  |  0  |  0  |
      |                 |     |     |     |     |     |
      +-----+-----+-----+-----+-----+-----+-----+-----+

●Total Length(總長度字段):占16比特。指明整個數據報的長度(以字節為單位)。最大長度為65535字節。
●Identification(標識):占16比特。用來唯一地標識主機發送的每一份數據報。通常每發一份報文,它的值會加1。
●Flags(標志位):占3比特,表示這份報文是否需要分片傳輸。
●TTL(生存期):占8比特,用來表示該數據報文最多可以經過的路由器數,沒經過一個路由器都減1,直到為0數據包丟掉。
●Protocal(協議字段):占8比特,用來指出IP層所封裝的上層協議類型,如傳輸層TCP/UDP/ICMP/IGMP。
●Header checksum(頭部校驗和字段):占16比特,內容是根據IP頭部計算得到的校驗和碼。計算方法是:對頭部中每個16比特進行二進制反碼求和。(和ICMP、IGMP、TCP、UDP不同,IP不對頭部后的數據進行校驗)。
●source address&&Dest address:源地址和目的地址,各占32字節,當然這個是針對的IPV4
●Option:占32比特。用來定義一些任選項:如記錄路徑、時間戳等。這些選項很少被使用,同時並不是所有主機和路由器都支持這些選項。可選項字段的長度必須是32比特的整數倍,如果不足,必須填充0以達到此長度要求。

2.TCP header

  TCP Header Format


    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Source Port          |       Destination Port        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Sequence Number                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Acknowledgment Number                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Data |           |U|A|P|R|S|F|                               |
   | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
   |       |           |G|K|H|T|N|N|                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Checksum            |         Urgent Pointer        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             data                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

●源、目標端口號字段:占16比特。TCP協議通過使用"端口"來標識源端和目標端的應用進程。端口號可以使用0到65535之間的任何數字。在收到服務請求時,操作系統動態地為客戶端的應用程序分配端口號。在服務器端,每種服務在"眾所周知的端口"(Well-Know Port)為用戶提供服務。
●順序號字段:占32比特。用來標識從TCP源端向TCP目標端發送的數據字節流,它表示在這個報文段中的第一個數據字節。
●確認號字段:占32比特。只有ACK標志為1時,確認號字段才有效。它包含目標端所期望收到源端的下一個數據字節。
●頭部長度字段:占4比特。給出頭部占32比特的數目。沒有任何選項字段的TCP頭部長度為20字節(5x32=160比特);最多可以有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比特。可能包括"窗口擴大因子"、"時間戳"等選項。

選項字段: 目前定義在rfc793 中有三個kind。詳細描述的可查看 https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml

    Currently defined options include (kind indicated in octal):

      Kind     Length    Meaning
      ----     ------    -------
       0         -       End of option list.
       1         -       No-Operation.
       2         4       Maximum Segment Size.
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM