TCP报文段详解

TCP协议tcp报文段源端口&目的端口2字节(tcp的分用功能以端口实现)序号4字节tcp三次握手中的seq,表示tcp数据段发送的第一个字节的序号,范围[0,2^32-1],即mod2^32;例如,seq=201,携带的数据有100,那么最后一个字节的序号就为300,那么下一个报文段就应该从401开始,下一个序列的首地址.tcp是面向字节…

大家好,又见面了,我是你们的朋友全栈君。

TCP协议

  • tcp报文段
    图片来源于网络
  1. 源端口&目的端口 2字节
    (tcp的分用功能以端口实现)

  2. 序号 4字节
    tcp三次握手中的seq,表示tcp数据段发送的第一个字节的序号,范围[0,2^32 – 1],即mod 2^32; 例如,seq = 201,携带的数据有100,那么最后一个字节的序号就为300,那么下一个报文段就应该从401开始,下一个序列的首地址.

    tcp是面向字节流的,在tcp连接中每一个字节流都按顺编号

  3. 确认号 4字节
    为期望收到对方下一个报文段的第一个数据字节序号

注意:若确认号=N,则表示序号N-1为止的序列号已正确收到

  1. 数据偏移 4位
    指出偏移多远,实际就是指定报文段的首部长度
    因为占4位,最大15,因此数据最大偏移为60:即为tcp首部最大长度

  2. 控制位 6位

URG
为1表示高优先级数据包,紧急指针字段有效。
(告诉系统此报文段有紧急数据,应尽快传输,而不要原来的排队顺序)

ACK
==1 表示确认号字段有效(连接建立后,传输的报文段都应该置为1)
==0 确认号无效

PSH
为1表示是带有PUSH标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。

RST
为1表示出现严重差错。可能需要重现创建TCP连接。还可以用于拒绝非法的报文段和拒绝连接请求。
RST 可称为重建位&重置位
SYN
为1表示这是连接请求或是连接接受请求,用于创建连接和使顺序号同步
当 syn=1&ack=1,表明这是一个连接请求报文段
FIN
==1 表示发送方没有数据要传输了,要求释放连接

  1. 窗口 2字节
    表示从确认号开始,本报文的接受方可以接收的字节数,即接收窗口大小,用于流量控制。
    (窗口字段明确指出了现在允许对方发送的数据量:窗口大小经常是在动态变换着的!)

  2. 校验和 2字节
    对整个的TCP报文段,包括TCP头部和TCP数据,以16位字进行计算所得。这是一个强制性的字段。对整个的TCP报文段,包括TCP头部和TCP数据,以16位字进行计算所得。这是一个强制性的字段。

  3. 紧急指针 2字节
    本报文段中的紧急数据的最后一个字节的序号。本报文段中的紧急数据的最后一个字节的序号。

  4. 选项字段—最多40字节
    每个选项的开始是1字节的kind字段,说明选项的类型。 每个选项的开始是1字节的kind字段,说明选项的类型。
    附:详细解释

选项表结束(1字节)
无操作(1字节) 用于选项字段之间的字边界对齐。
最大报文段长度
(4字节,Maximum Segment Size,MSS)通常在创建连接而设置SYN标志的数据包中指明这个选项,指明本端所能接收的最大长度的报文段。通常将MSS设置为(MTU-40)字节,携带TCP报文段的IP数据报的长度就不会超过MTU,从而避免本机发生IP分片。只能出现在同步报文段中,否则将被忽略。
窗口扩大因子(4字节,wscale),取值0-14。用来把TCP的窗口的值左移的位数,使窗口值乘倍。只能出现在同步报文段中,否则将被忽略。这是因为现在的TCP接收数据缓冲区(接收窗口)的长度通常大于65535字节。
sackOK—发送端支持并同意使用SACK选项。
SACK实际工作的选项。
时间戳(10字节,TCP Timestamps Option,TSopt)
发送端的时间戳(Timestamp Value field,TSval,4字节)
时间戳回显应答(Timestamp Echo Reply field,TSecr,4字节)

附:详细的存储图
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126175.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringBoot与Spring的区别

    SpringBoot与Spring的区别SpringBoot不是Spring官方的框架模式,而是一个团队在Spring4.0版本上二次开发并开源公布出来的。简而言之,SpringBoot就是一个轻量级,简化配置和开发流程的web整合框架。SpringBoot是最近这几年才火起来的,那么它到底与Spring有啥区别呢?想了解区别,其实就是SpringBoot提供了哪些特性:SpringBoot可以建立独立的Spring应用程序; …

    2022年6月13日
  • 聊聊学习和成长

    聊聊学习和成长

    2022年3月7日
  • sencha touch 自定义cardpanel控件 模仿改进NavigationView …

    sencha touch 自定义cardpanel控件 模仿改进NavigationView …

    2021年8月26日
  • Allure–自动化测试报告生成

    Allure–自动化测试报告生成之前尝试使用过testNG自带的测试报告、优化过reportNG的测试报告,对这两个报告都不能满意。后经查找资料,发现有个神器:Allure(已经有allure2了,笔者使用的就是allure2),

    2022年7月2日
  • windows开机后一键启动应用程序[通俗易懂]

    一键启动办公软件小工具分享每天上班前打开电脑总有一些固定的软件需要打开(如Foxmail、QQ等),那么一个一个启动非常会比较麻烦,下面分享一下小工具,稍微进行简单的配置后,便可以一键启动你想要打开的软件!

    2022年2月26日
  • ATM(异步传输模式)是什么?

    ATM(异步传输模式)是什么?异步传输模式(ATM)也称为信元中继(在固定大小的信元中传输数据),通过光纤或双绞线电缆(高速交换)在OSI模型的数据链路层(第2层)运行基于ITU-T宽带综合业务数字网络(B-ISDN)标准的网络技术,该标准是电信业开发的自动取款机可以同时传输各种流量:语音、视频和数据,速度高达每秒155兆比特。它将语音和视频数据转换成数据包,并通过相同的介质传输大数据包数据。自动取款机和TCP。由于两个端点之间使用固定通道路由协议路由,所以/IP是不同的。实时低延迟应用程序,如VoIP和视频,在ATM网络上..

    2022年9月21日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号