TCP报文段格式[通俗易懂]

三次握手就是一次TCP建立链接的过程四次挥手就是一次TCP断开的过程所以在学习三次握手四次挥手之前先了解一下TCP报文段的格式源端口(2字节):发送端应用程序的端口号,与源IP地址确定一个唯一地址目的端口(2字节):接收端计算机应用程序的端口号,与目的IP地址确定唯一的地址序号(4字节):TCP是面向字节流传输的,他为每一个字节编了一个序号,该报文段中序号为传输数据第一个字节的序号,例如:一个报文…

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

TCP报文段格式[通俗易懂]

源端口(2字节):发送端应用程序的端口号,与源IP地址确定一个唯一地址

目的端口(2字节):接收端计算机应用程序的端口号,与目的IP地址确定唯一的地址

序号(4字节)TCP是面向字节流传输的,他为每一个字节编了一个序号,该报文段中序号为传输数据第一个字节的序号,例如:一个报文端的数据部分大小为100个字节,他的序号为400,那么下一次报文段的序号就为500

确认号(4个字节):指明了下一个期待接收的字节序号,表明该序号之前的所有字节都正确接收到了,只有当ACK为1的时候确认号才有效

数据偏移/首部长度(4个字节): 用来表示报文段数据的起始处距离报文起始处的长度也就是TCP报文首部的长度,由于首部含有可选项,所以TCP报头长度是不确定的。

保留:为了将来定义新的用途保留,现在一般都置为0

URG紧急控制位:与紧急指针配合使用,当URG为1的时候,就是通知系统这个报文段有紧急数据,需要优先传输。

ACK确认控制位:当他为1的时候,确认号字段才有效,TCP规定,在连接建立后,所有ACK都应该置为1

PSH推送控制位:当报文段的psh为1的时候,接收方接到该报文段,就立刻将他交付给接收应用进程,而不是等缓存已满的时候再交付。

RST复位控制位:当报文段的RST为1的时候,说明该TCP连接出现错误,必须释放连接,并重新建立连接。

SYN同步控制位:在连接建立时用来同步序列号,当SYN=1,ACK=0时说明这是一个连接请求报文段,如果对方同意建立连接则应该在响应的报文段中将SYN=1,ACK=1,表示接受请求

FIN终止控制位:用来释放连接,当FIN=1时表示此报文段发送方的数据已经发送完毕,并要求释放连接。

窗口(2字节):用来告知发送端,接收端的缓存大小,以此控制发送方发送数据的速率,从而达到流量控制,窗口最大为65536

校验和:用CRC来校验整个TCP报文段,包括tcp头,tcp数据,由发送端进行计算和存储,接收端进行校验,如果接收方发现校验和有差错,则TCP段会被直接丢弃

紧急指针(2字节):标识紧急数据在报文段结束的位置

选项(40字节):长度可变,最大长度40个字节,

选项部分的应用

MSS最大报文段长度(Maxium Segment Size):指明自己期望对方发送数据字段的最大长度,如果未填写默认为536个字节,他只出现在SYN=1的报文段中。

窗口扩大选项:当出现宽带比较大的通信的时候,就需要扩大窗口来满足性能和吞吐量

SACK选择确认项(Selective Acknowledgements):为了确保重传的时候只传丢失的那部分报文段,而不重传所有的报文段,最多能描述4个丢失的报文

时间戳选项(Timestamps):使用该字段就很容易区分相同序列号的不同报文段(回绕序列号),还可以计算RTT(往返时间),当发送端发送一个报文段的时候把当前时间放入这个时间戳选项,当接收方收到后将其复制到确认报文段,发送方接收到这个确认报文段后就可以计算往返时间了。

NOP(NO-Operation)指明选项部分的每种选项长度必须是4字节的倍数,不足时用NOP补充,同时他还可以用来分割不同的选项字段。

数据部分:该部分可选,列如,在一个链接建立和终止的时候,双方发送的报文段只有首部

补充:回绕序号带来的影响:这个问题只会发生在相对高速的连接中,由于序列号的长度为32为所以当序列号超过2^32-1时就会重置为0,此时就会产生回绕序列号

假设A时间段的序列号为10,B时间段的序列号也为10,当A时间段的报文段延迟了,他会重传解决,而延迟的报文段的丢失与重出现的时间小于报文段在网络中的最大生存时间,他存活下来并发送到了B的接收端,此时B就蒙了,一下来了两个报文段(正常的+重传的),不知道该接收那个

参考:https://www.cnblogs.com/a294098789/p/5656120.html

        https://blog.csdn.net/mary19920410/article/details/58030147

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

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

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


相关推荐

  • Linux发邮件-ubuntu和centos

    Linux发邮件-ubuntu和centosLinux发邮件–ubuntu和centos当我用公司的服务器和虚拟机都尝试过发邮件之后,发现真是坑,Ubuntu和centos发邮件,安装配置都是有区别的;注意:这里是用第三方邮件发送邮件。直接上表格来对比吧,这个步骤亲测可用的,但是也要注意mailx的版本号。1、查看系统版本cat/etc/issue或uname-a2、查看邮件安装包版本(1)ub…

    2022年10月20日
    0
  • 为什么执行不了程序_电脑软件无法执行代码怎么办

    为什么执行不了程序_电脑软件无法执行代码怎么办程序为什么不执行?

    2022年4月22日
    113
  • 网页音乐播放器接口

    网页音乐播放器接口1、Dewplayer音乐播放器2、我的博客首页虾米播放器代码:<embedsrc=”http://www.xiami.com/widget/0_1769834090/singlePlayer.swf”type=”application/x-shockwave-flash”width=”257″height=”33″wmode=”tra…

    2022年6月22日
    32
  • Android打开第三方应用方法总结

    Android打开第三方应用方法总结

    2021年10月1日
    35
  • SSRF漏洞总结

    SSRF漏洞总结0x00什么是SSRF?服务端请求伪造(SSRF)是指攻击者能够从易受攻击的web应用程序发送精心设计的请求,对其他网站进行攻击(利用一个可发起网络请求的服务当做跳板来攻击其他服务)例如:我在http://localhost:8888/pentest/ssrf/index.php有这样一个存在SSRF漏洞的index.php。即我得到了一个使用curl发起网络请求然后返回客户端并且我可以…

    2022年6月25日
    28
  • android开发之Notification_通知栏消息「建议收藏」

    Notification简介  Notification看名字就知道,是一个和提醒有关的东西,它通常和NotificationManager一块使用。具体来说,其主要功能如下。  1.NotificationManager和Notification用来设置通知  通知的设置等操作相对比较简单,基本的使用方式就是新建一个Notification对象,设置好通知的各项参数,然后使用系统后台

    2022年3月10日
    34

发表回复

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

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