TCP/IP header 詳解

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

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字節。tcp

●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.xhtmlorm

    Currently defined options include (kind indicated in octal):

      Kind     Length    Meaning
      ----     ------    -------
       0         -       End of option list.
       1         -       No-Operation.
       2         4       Maximum Segment Size.
相關文章
相關標籤/搜索