IT技术互动交流平台

TCP 和 UDP 数据报格式详解

来源:IT165收集  发布日期:2015-04-22 20:57:07

TCP 报文格式




TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。


TCP 报文段的报头有 10 个必需的字段和 1 个可选字段。报头至少为 20 字节。报头后面的数据是可选项。


1)源端口(16位)

标识发送报文的计算机端口或进程。一个 TCP 报文段必须包括源端口号,使目的主机知道应该向何处发送确认报文。


2)目的端口(16位)

标识接收报文的目的主机的端口或进程。


3) 序号(也叫序列号)(32位)

用于标识每个报文段,使目的主机可确认已收到指定报文段中的数据。当源主机用于多个报文段发送一个报文时,即使这些报文到达目的主机的顺序不一样,序列号也可以使目的主机按顺序排列它们。


在 SYN 标志未置位时,该字段指示了用户数据区中第一个字节的序号;在 SYN 标志置位时,该字段指示的是初始发送的序列号。


在建立连接时发送的第一个报文段中,双方都提供一个初始序列号。TCP 标准推荐使用以 4ms 间隔递增 1 的计数器值作为这个初始序列号的值。使用计数器可以防止连接关闭再重新连接时出现相同的序列号。

   

对于那些包含数据的报文段,报文段中第一个数据字节的数量就是初始序列号,其后数据字节按顺序编号。如果源主机使用同样的连接发送另一个报文段,那么这个报文段的序列号等于前一个报文段的序列号与前一个报文段中数据字节的数量之和。例如,假设源主机发送 3 个报文段,每个报文段有 100 字节的数据,且第一个报文段的序列号是 1000,那么第二个报文段的序列号就是 1100(1000 + 100),第三个报文段的序列号就是 1200(1100 + 100)。

   

如果序列号增大至最大值将复位为 0。


4)确认号(32位)

目的主机返回确认号,使源主机知道某个或几个报文段已被接收。如果 ACK 控制位被设置为 1,则该字段有效。确认号等于顺序接收到的最后一个报文段的序号加 1,这也是目的主机希望下次接收的报文段的序号值。返回确认号后,计算机认为已接收到小于该确认号的所有数据。


例如,序列号等于前一个报文段的序列号与前一个报文段中数据字节的数量之和。例如,假设源主 机发送 3 个报文段,每个报文段有 100 字节的数据,且第一个报文段的序列号是 1000,那么接收到第一个报文段后,目的主机返回含确认号1100 的报头。接收到第二个报文段(其序号为 1100 )后,目的主机返回确认号 1200。接收到第三个报文段后,目的主机返回确认号 1300 。


目的主机不一定在每次接收到报文段后都返回确认号。在上面的例子中,目的主机可能等到所有 3 个报文段都收到后,再返回一个含确认号 1300 的报文段,表示已接收到全部 1200 字节的数据。但是如果目的主机再发回确认号之前等待时间过长,源主机会认为数据没有到达目的主机,并自动重发。


上面的例子中,如果目的主机接收到了报文段号为 1000 的第一个报文段以及报文段号为 1200 的最后一个报文段,则可返回确认号 1100,但是再返回确认号 1300 之前,应该等待报文段号为 1100 的中间报文段。


5) 数据偏移(首部长度)(4位)

TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,即首部长度。 由于 TCP 报头的长度随 TCP 选项字段内容的不同而变化,因此报头中包含一个指定报头字段的字段。该字段以 32 比特通ky"http://www.it165.net/qq/" target="_blank" class="keylink">qq1pc67o6zL+dLUsajNt7OktsjSu7aoyscgMzIgscjM2LXE1fvK/bG2o6zT0Mqx0OjSqtTasajNt8SpzrKyuSAwIKGjyOe5+7GozbfDu9PQIFRDUCDRoc/u19a2zqOs1PKxqM23s6S2yNa1zqogNSAKo6yx7cq+sajNt9K7uPbT0CAxNjAgscjM2KOsvLQKIDIwINfWvdqhozwvcD4KPC9ibG9ja3F1b3RlPgo8cD4KPGJyPgo8L3A+CjxwPgo2o6k8c3Ryb25nPrGjwfTOu6OoNs67o6k8L3N0cm9uZz48L3A+CjxibG9ja3F1b3RlPgo8cD4K08m4+tTayv2+3car0sbX1rbOuvO1xCA2IM67ubmzyaOsJm5ic3A7yKuyv86qIDAgoaM8L3A+CjwvYmxvY2txdW90ZT4KPHA+Cjxicj4KPC9wPgo8cD4KN6OpPHN0cm9uZz6/2NbGzrujqDbOu6OpPC9zdHJvbmc+PGJyPgo8L3A+CjxibG9ja3F1b3RlPgo8cD4KvfS8sSBVUkejurTLzrvWwyAxo6yx7cP3vfS8sda41evX1rbO09DQp6Osy/y45svfz7XNs7TLsajOxLbO1tDT0L30vLHK/b7do6zTpr6hv+y0q8vNoaM8L3A+CjxwPgrIt8jPIEFDS6O6vfa1sSBBQ0sgPSAxIMqxyLfIz7rF19a2zrLF09DQp6OsVENQILnmtqijrNTaway9072owaK688v509C0q7TvtcSxqM7Ets62vLHY0Ouw0SBBQ0sg1sMgMaGjPC9wPgo8cD4KzcbLzSBQU0ijugq1scG9uPbTptPDvfizzL340NC9u7ulyr21xM2o0MXKsaOs09DKsdTa0ru2y7XE06bTw734s8zPo8371Nq8/Mjr0ru49sP8we6688GivLS+zcTcubvK1bW9ttS3vbXEz+zTpqGj1NrV4tbWx+m/9s/Co6xUQ1AgCr7Nv8nS1Mq508PNxsvNo6hwdXNoo6my2df3o6zV4sqxo6y3osvNt70gVENQILDRIFBTSCDWwyAxIKOssqLBory0tLS9qNK7uPaxqM7Ets63osvNs/bIpaOsvdPK1be9ytW1vSBQU0ggPSAxIAq1xLGozsS2zqOsvs2+ob/stdijqLy0obDNxsvNobHP8sewo6m9u7i2uPi908rV06bTw734s8yjrLb4srvU2bXItb3V+7j2u7q05ra8zO7C+rrz1NnP8snPvbu4tqGjPC9wPgo8cD4KuLTOuyBSU1SjutPD09q4tM67z+DTprXEIFRDUCDBrL3TPC9wPgo8cD4KzayyvSBTWU6jur321NrI/bTOztXK1r2owaIgVENQIMGsvdPKsdPQ0Keho7WxIFNZTiA9IDEgtvggQUNLID0gMCDKsaOsse3D99XiysfSu7j2way908frx/OxqM7Ets6jrLbUt73I9M2s0uK9qMGiway906Os1PLTptTaz+DTprXEsajOxLbO1tDKudPDIFNZTiA9IDEgus0gQUNLID0gMaGj0vK0y6OsU1lOINbDIDEgvs2x7cq+1eLKx9K7uPbBrL3Tx+vH87vyway9073TytyxqM7EoaM8L3A+CjxwPgrW1da5IEZJTqO608PAtMrNt8XSu7j2way906GjtbEgRklOID0gMSDKsaOsse3D97TLsajOxLbOtcS3osvNt721xMr9vt3S0b6tt6LLzc3qsc+jrLKi0qrH88rNt8XUy8rkway906GjPC9wPgo8cD4KPGJyPgo8L3A+CjwvYmxvY2txdW90ZT4KPHA+CjijqTxzdHJvbmc+tLC/2qOoMTbOu6OpPC9zdHJvbmc+PC9wPgo8YmxvY2txdW90ZT4KPHA+CrTL19a2ztPDwLS9+NDQwffBv7/Y1sajrNXiuPbWtcrHsb67+sbazfvSu7TOvdPK1bXE19a92sr9o6y8tLeiy83K/b7dtcS0sL/atPPQoaGjuObL37bUt73U2rK7tci0/ci3yM+1xMfpv/bPwqOsv8nS1LeiwLS24LTztcTK/b7doaPV4sDvse3KvrXE1+6087OktsjKxzJeMTYgLSAxID0gNjU1MzWjrMjn0OjSqsq508O4/LTztcS0sL/atPPQoaOs0OjSqsq508PRoc/u1tC1xLSwv9rAqbTz0vLX09Ghz+6hozxicj4KPC9wPgo8cD4KPGJyPgo8L3A+CjxwPgrWuLeiy82xvrGozsS2zrXE0ru3vbXEvdPK1bSwv9qjqLb4srvKx9fUvLq1xLeiy820sL/ao6mhozxicj4KPC9wPgo8cD4KPGJyPgo8L3A+CjwvYmxvY2txdW90ZT4KPHA+CjmjqTxzdHJvbmc+0KPR6brNo6gxNs67o6k8L3N0cm9uZz48L3A+CjxibG9ja3F1b3RlPgo8cD4K1LTW97v6us3Ev7XE1ve7+rj5vt0gVENQILGozsS2ztLUvLDOsbGozbe1xMTayN28xsvj0KPR6brNoaPU2s6xsajNt9bQtOa3xdfFwLTX1CBJUCCxqM230tS8sCBUQ1AgsajOxLbOs6S2yNDFz6Kho9PrIFVEUCDSu9H5o6zOsbGozbeyorK71NrN+MLn1tC0q8rko6yyosfS1NrQo9Hpus3W0LD8uqzOsbGozbe1xMS/tcTKx86qwcu3wNa5xL+1xNb3u/q07c7ztdi908rVtObU2sK308m1xLTtzvPK/b7dsaihozwvcD4KPHA+Cjxicj4KPC9wPgo8cD4KzrHK17K/o6wK09azxs6qzrGw/M23o6hQc2V1ZG8gSGVhZGVyo6mjusrH1rjU2iBUQ1AgtcS31rbOu/IgVURQILXEyv2+3bGouPHKvdbQo6zU2sr9vt2xqMrXsr/HsMPm1Pa809S0IElQILXY1rehosS/tcQgSVAgCrXY1rehoklQILfW1+m1xNCt0unX1rbOoaJUQ1Agu/IgVURQIArK/b7dsai1xNfcs6S2yLXIubIxMtfWvdqjrMv5ubmzybXEwKnVucrXsr+94bm5oaO0y86xyteyv8rH0ru49sHZyrG1xL3hubmjrMv8vMiyu8/yyc/SsrK7z/LPwrSrtd2jrL32vfbWu8rHzqrBy7Gj1qS/ydLU0KPR6czXvdPX1rXE1f3It9DUoaM8YnI+CjwvcD4KPHA+CjxpbWcgc3JjPQ=="http://www.it165.net/uploadfile/files/2015/0422/20150422190138420.jpg" alt="">

10)紧急指针(16位)

仅在 URG = 1 时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据),即指出了紧急数据的末尾在报文中的位置,注意:即使窗口为零时也可发送紧急数据。


如果 URG 为 1 ,则紧急指针标志着紧急数据的结束。其值是紧急数据最后 1 字节的序号,表示报文段序号的偏移量。例如,如果报文段的序号是 1000,前 8 个字节都是紧急数据,那么紧急指针就是 8 。紧急指针一般用途是使用户可中止进程。


11)选项、填充字段

可能包括“窗口扩大因子”、“时间戳”等选项。长度可变,最长可达 40 字节,当没有使用选项时,TCP 首部长度是 20 字节。

填充用于保证任选项为 32bit 的整数倍。


12)数据(长度可变)

TCP 首部结束之后的部分


UDP 报文格式


Tag标签: 格式   数据  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规