TCP报文格式详解

TCP报文是TCP层传输的数据单元,也叫报文段。端口号:用来标识同一台计算机的不同的应用进程。源端口:源端口和IP地址的作用是标识报文的返回地址。目的端口:端口指明接收方计算机上的应用程序接口。TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。序号和确认号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。

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

TCP报文是TCP层传输的数据单元,也叫报文段。

图片加载中

1、端口号:用来标识同一台计算机的不同的应用进程。

1)源端口源端口和IP地址的作用是标识报文的返回地址。

2)目的端口:端口指明接收方计算机上的应用程序接口。

TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。

2、序号和确认号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。

3、数据偏移/首部长度:4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。

4、保留:为将来定义新的用途保留,现在一般置0。

5、控制位:URG  ACK  PSH  RST  SYN  FIN,共6个,每一个标志位表示一个控制功能。

1)URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。

2)ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。

3)PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。

4)RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。

5)SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1

6)FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。

6、窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。

7、校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。

8、紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

9、选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。

10、数据部分 TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。


参考文献:

http://blog.chinaunix.net/uid-26366978-id-3282793.html

http://blog.csdn.net/ningxuezhu/article/details/39892091/

http://blog.csdn.net/a19881029/article/details/29557837

http://www.cnblogs.com/xinyuyuanm/archive/2013/04/17/3026279.html

http://www.360doc.com/content/12/1218/10/3405077_254718387.shtml





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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/126133.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 奕新集团GG环境搭建(无图)

    奕新集团GG环境搭建(无图)

  • 计算机 修改 虚拟ip,电脑虚拟ip地址怎么弄?「建议收藏」

    计算机 修改 虚拟ip,电脑虚拟ip地址怎么弄?「建议收藏」原标题:电脑虚拟ip地址怎么弄?在需要建立局域网和连接多台计算机时。我将重新设置电脑的IP地址,这样电脑就可以连上网了。因此,如何设置电脑的IP地址呢?以下是根据电脑原来的IP地址设置IP地址的共享方法。设置步骤:1、首先,右击桌面上的网络邻居,并在打开的菜单中选择该属性。2、在打开的“网络连接”属性菜单中找到本地连接,单击“本地连接”,然后点击“查看此连接状态”,即可打开本地连接。单击“支持”标…

    2022年10月12日
  • Java JSON解析_javaxml解析

    Java JSON解析_javaxml解析JavaJSON解析教程

  • Jupyter notebook 报错 500 : Internal Server Error的解决方法「建议收藏」

    Jupyter notebook 报错 500 : Internal Server Error的解决方法「建议收藏」问题:输入jupyternotebook后再浏览器点击.ipynb文件报错500InternalServerError,异常如下图所示解决方法:1).先卸载jupyter并删除安装目录下的以jupyter开头的文件,再重新pipinstalljupyter安装jupyter,试验后再打开jupyternotebook,仍无法正常打开.i…

  • 小米5 Android 8.0解bl,小米解BL锁超详细的图文教程「建议收藏」

    小米5 Android 8.0解bl,小米解BL锁超详细的图文教程「建议收藏」BL锁全称bootloader锁,其中bootloader中文名称为“启动加载”,其主要作用是为了保护用户的隐私数据安全,在日常使用的时候感受不到BL锁的存在,但是如果你要对手机进行刷机的话,第一步就是必须先解除手机里的BL锁,部分机子不需要解BL锁,手机是否需要解锁请到手机官方网站进行查看或者咨询。解BL锁会清除手机所有的数据,相当于手机恢复出厂设置,记得提前备份好手机里的所有资料以下是小米解锁…

  • Nginx加密以及反向代理「建议收藏」

    Nginx加密以及反向代理「建议收藏」一、https加密算法http协议在传输过程中使用的是明文,如果传输的是用户名和密码等信息就不安全。https就是在原来http协议中加上ssl算法,来对传输的数据进行加密。https加密的核心就是通过秘钥来实现。秘钥(加密算法)的分类:1.对称算法(加密和解密用一样的密码):AES,DES(适合单机加密)2.非对称算法(公钥和私钥):RSA,DSA3.信息摘要:md5,sha256…

发表回复

您的电子邮箱地址不会被公开。

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