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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • api网关 kong_什么是api网关

    api网关 kong_什么是api网关1.Kong简介Kong是一款基于OpenResty(Nginx+Lua模块)编写的高可用、易扩展的,由Mashape公司开源的APIGateway项目。Kong是基于NGINX和ApacheCassandra或PostgreSQL构建的,能提供易于使用的RESTfulAPI来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各…

    2022年9月11日
    0
  • java中switch的用法和逻辑运算符[通俗易懂]

    java中switch的用法和逻辑运算符[通俗易懂]一、switch的用法常见用法如下:importjava.util.Scanner;publicclassA{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intscore=sc.nextInt();if(score>100&&score<0){Syst

    2022年7月7日
    18
  • pycharm加注释的快捷方式_pycharm出现缩进错误

    pycharm加注释的快捷方式_pycharm出现缩进错误1.注释pycharm注释快捷键:"Ctrl" +  "/"2.批量缩进(或名"对齐")缩进:Tab反向缩进:Shift+Tab

    2022年8月27日
    2
  • pycharm如何全局进行查找一个关键词

    pycharm如何全局进行查找一个关键词PyCharm的FindinPath功能提供了全局查找功能,快捷键为Ctrl+Shift+F。Find则是在当前文件查找,快捷键为Ctrl+F。这两个个功能非常实用。FindinPath的使用:按快捷键Ctrl+Shift+F或从从菜单Edit-》Find-》FindinPath进入全局查找界面。如下图所示,在Texttofind输入要查找的内…

    2022年8月27日
    4
  • JAVA常用数据结构及原理分析(面试总结)「建议收藏」

    JAVA常用数据结构及原理分析(面试总结)「建议收藏」最近准备面试,因此整理一份Java中常用的数据结构资料,方便面试;java.util包中三个重要的接口及特点:List(列表)、Set(保证集合中元素唯一)、Map(维护多个key-value键值对,保证key唯一)。其不同子类的实现各有差异,如是否同步(线程安全)、是否有序。常用类继承树:以下结合源码讲解常用类实现原理及相互之间的差异。Collection(所有…

    2022年7月8日
    18
  • pycharm安装教程2020.3.4_pycharm安装后无解释器

    pycharm安装教程2020.3.4_pycharm安装后无解释器第一步安装解释器,第二步安装pycharm1第一步安装解释器1.1什么是解释器:??就是将Python程序翻译成为计算机可以识别的01代码1.2安装解释器:解释器安装地址:https://www.python.org/downloads/release/python-372根据自己的操作系统安装适配的解释器:这里以Windows为例注意安装的时候我们需要需注意吧解释器添加到环境变量里面双击开始安装勾选addpythontopath,如果安装的时候没有勾选,请安装结束以后按

    2022年8月26日
    2

发表回复

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

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