0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

tcp报文段首部的结构分析

汽车电子技术 来源: 物联网IoT开发 作者:杰杰mcu 2023-02-14 10:32 次阅读

TCP报文段首部结构

TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段。

TCP报文段如APR报文、IP数据报一样,也是由首部数据区域组成,TCP首部内容很丰富,各个字段都有特定的含义,一般来说TCP首部只有20个字节,TCP报文段首部的前20个字节是固定的,后面有4N字节是根据需要而增加的选项字段(N是整数)。因此TCP首部的最小长度是20字节。

LwIP中,TCP首部采用一个名字叫tcp_hdr的结构体进行描述,此处用PACK_STRUCT_BEGIN与PACK_STRUCT_END宏定义禁止编译器对齐,因为在tcp首部中存在某些字段是以1字节对齐的。

1PACK_STRUCT_BEGIN
 2struct tcp_hdr {
 3  PACK_STRUCT_FIELD(u16_t src);     /* 源端口 */
 4  PACK_STRUCT_FIELD(u16_t dest);    /* 目的端口 */
 5  PACK_STRUCT_FIELD(u32_t seqno);   /* 序号 */
 6  PACK_STRUCT_FIELD(u32_t ackno);   /* 确认序号 */
 7  PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags);  /* 首部长度+保留位+标志位 */
 8  PACK_STRUCT_FIELD(u16_t wnd);     /* 窗口大小 */
 9  PACK_STRUCT_FIELD(u16_t chksum);  /* 校验和 */  
10  PACK_STRUCT_FIELD(u16_t urgp);    /* 紧急指针 */
11} PACK_STRUCT_STRUCT;
12PACK_STRUCT_END

图片

TCP报文段首部(图片来源《计算机网络》-谢希仁)

首部固定部分各字段的意义如下:* 每个TCP报文段都包含源主机目标主机的端口号,各占2个字节,用于寻找发送端和接收端应用线程,这两个值加上I P首部中的源I P地址和目标I P地址就能确定唯一一个TCP连接。

  • 序号字段占4字节,序号范围是[0,4294967295],序号增加到4284967295后,下一个序号就又回到0,主要是用来标识从TCP发送端TCP接收端发送的数据字节流,它的值表示在这个报文段中的第一个数据字节所处位置吗,根据接收到的数据区域长度,就能计算出报文最后一个数据所处的序号,因为TCP会对发送或者接收的数据进行编号(按字节流的形式),那么使用序号对每个字节进行计数,就能很轻易管理这些数据。TCP报文段的初始序列号(ISN)是随机的,可能是0~4294967295之间的任意值.
  • 既然TCP给每个传输的字节都了编号,那么确认序号就包含接收端所期望收到的下一个序号,因此,确认序号应当是上次已成功收到数据的最后一个字节序号加 1。当然,只有ACK标志为 1时确认序号字段才有效,TCP为应用层提供全双工服务,这意味数据能在两个方向上独立地进行传输,因此确认序号通常会与反向数据(即接收端传输给发送端的数据)封装在同一个报文中(即捎带),所以连接的每一端都必须保持每个方向上的传输数据序号准确性
  • 首部长度字段占据4bit空间(或者称数据偏移字段),它指出了TCP报文段首部长度,以字节为单位,最大能记录15*4=60字节的首部长度,因此,TCP报文段首部最大长度为60字节。在首部长度字段后接下来有6bit空间是保留未用的。
  • TCP报文段首部的标志字段
  • URG:首部中的紧急指针字段标志,如果是1表示紧急指针字段有效。
  • ACK:首部中的确认序号字段标志,如果是1表示确认序号字段有效。
  • PSH:该字段置1表示接收方应该尽快将这个报文段交给应用层。
  • RST:重新建立TCP连接。
  • SYN:握手,发起连接。
  • FIN:结束连接。
  • TCP的流量控制由连接的每一端通过声明的窗口大小来提供,窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的数据序号,发送方根据窗口大小调整发送数据,以实现流量控制。窗口大小是一个占据16 bit空间的字段,因而窗口最大为 65535字节,当接收方告诉发送方一个大小为0的窗口时,将完全阻止发送方的数据发送。
  • 只有当URG标志置1时紧急指针才有效,紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。简单来说,本TCP报文段的紧急数据在报文段数据区域中,从序号字段开始,偏移紧急指针的值结束。

抓包分析

使用wireshark抓包工具分析:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1344

    浏览量

    78909
  • 字节
    +关注

    关注

    0

    文章

    39

    浏览量

    13696
  • apr
    apr
    +关注

    关注

    0

    文章

    11

    浏览量

    6462
收藏 人收藏

    评论

    相关推荐

    #硬声创作季 计算机通信与网络:3.8TCP报文段首部结构

    TCP计算机基础
    Mr_haohao
    发布于 :2022年10月31日 04:12:15

    [5.3.1]--5.3TCP报文段首部格式

    计算机网络
    jf_75936199
    发布于 :2023年03月14日 21:36:34

    SYN Flood攻击的原理是什么?如何实现呢

    随便设置,但尽量不要太小。校验和检验的范围包括首部和数据两部分,在计算校验和时,要在 TCP 报文段前面加上 12 字节的伪首部。 伪首部
    发表于 07-19 14:40

    LWIP TCP报文基础知识及其LWIP中TCP协议的实现

    首部只有 20 个字节,具体见上图。在 LwIP 中,报文段首部采用一个名字叫 tcp_hdr 的结构体进行描述。PACK_STRUCT_
    发表于 10-18 14:54

    无线链路的TCP性能问题及其改善

    介绍了无线链路上的TCP性能问题和相关的工作。提出了一种改进从移动主机到固定网络方向TCP性能的方案,在基站处设置TCP代理来监视在无线链路上丢失的TCP
    发表于 02-27 16:08 28次下载

    icmp报文和ip报文分析

    . ICMP允许主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错
    发表于 11-03 09:09 9852次阅读
    icmp<b class='flag-5'>报文</b>和ip<b class='flag-5'>报文</b><b class='flag-5'>分析</b>

    tcp报文格式详解

    TCP(Transmission ControProtocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层协议。TCP报文TCP层传输的数据单元,也称为
    发表于 12-08 11:11 3.2w次阅读
    <b class='flag-5'>tcp</b><b class='flag-5'>报文</b>格式详解

    基于网络编码的TCP协议传输系统

    方对原始TCP报文段编码,在接收方解码,并针对网络实时丢失率调整编码报文段的发送冗余,以达到向TCP层掩盖丢失的目的;同时加入处理器共享技术,该技术旨在用一个合适的初始速率来代替
    的头像 发表于 02-20 07:48 4990次阅读
    基于网络编码的<b class='flag-5'>TCP</b>协议传输系统

    tcp数据包接口封装的介绍

    TCP报文格式 TCP协议有着自己的数据包格式,这里把TCP的数据包称为报文段(segment),TCP
    的头像 发表于 03-22 09:39 3371次阅读
    <b class='flag-5'>tcp</b>数据包接口封装的介绍

    浅析C++基础语法之计算机网络中传输层(TCP&amp;UDP)

    ③可靠交互 ④全双工通信 ⑤面向字节流 TCP 如何保证可靠传输: ①确认和超时重传 ②数据合理分片和排序 ③流量控制 ④拥塞控制 ⑤数据校验 TCP 报文结构
    的头像 发表于 10-26 10:07 1384次阅读
    浅析C++基础语法之计算机网络中传输层(<b class='flag-5'>TCP</b>&amp;UDP)

    详解TCP报文的头部结构

    和两个端口号。一个TCP连接通常分为三个阶段:连接、数据传输、退出(关闭)。通过三次握手建立一个链接,通过四次挥手来关闭一个连接。当一个连接被建立或被终止时,交换的报文段只包含TCP头部,而没有数据。
    的头像 发表于 05-05 15:08 6591次阅读

    如何解释TCP报文的内容

    TCP协议有着自己的数据包格式,这里把TCP的数据包称为报文段(segment),TCP报文段封装在IP数据报中发送,
    的头像 发表于 08-31 09:12 2609次阅读

    TCP是如何实现可靠传输 HTTP与HTTPS的区别

    数据偏移(占4字位):数据部分的起始位置离报文段起始位置的距离,就是报文首部的长度,单位是4字节,所以4位能表示最大值是十进制的15,就是15 x 4字节 = 60字节,TCP报文首部
    发表于 11-21 21:38 801次阅读

    TCP和UDP分别是什么 TCP和UDP协议各有什么特点

    TCP 四次挥手的最后一步,客户端进入 TIME_WAIT 状态,需要等待一段时间再进入 CLOSED 状态。等待时间通常是两个最大报文段生命周期,即 2MSL,这是为了确保服务器端能够收到客户端发送的最后一个 ACK 报文
    的头像 发表于 08-09 12:34 4239次阅读

    基于TCP应用层协议

    ; 我们把携带RST标识的称为复位报文段 SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段 FIN: 通知对方, 本端要关闭了, 我们称携
    的头像 发表于 11-11 11:23 865次阅读
    基于<b class='flag-5'>TCP</b>应用层协议