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


相关推荐

  • 2020中国人口出生率下降_2020人口出生率

    2020中国人口出生率下降_2020人口出生率最新发布《中国统计年鉴2021》显示,2020年中国全国人口出生率为8.52‰,首次跌破10‰,创下了1978来的新低。同期中国人口自然增长率仅为1.45‰,同样创下1978年以来的历史新低。根据年鉴,2020年相比2019年,中国人口净增204万人,而前一年增量还高达467万,2018年增加了530万人。从现有的情况来看,人口总量增加的动力缺乏,越来越难,出生人口越来越少。发展的趋势,就是越来越接近于出生人口与死亡人口相交叉的边缘。和我之前整理的历年人口以及趋势预测不谋而合:中国历年人

    2022年9月5日
  • 黑盒测试用例设计方法详解

    黑盒测试用例设计方法详解黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景图法等。(一)等价类划分法定义:等价类划分法是把所有可能输入的数据,即程序的输入域划分策划国内若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。方法是一种重要的、常用的黑盒测试用例设计方法。等价类是指某个输入域的子集合。在该子集合中,各个输入数据…

    2022年6月6日
  • 风讯.NET与NETCMS的选择—开源.NET内容管理系统

    风讯.NET与NETCMS的选择—开源.NET内容管理系统最近想要学习做一个网站,本来在某公司实习的时候,boss就要求快速的建立一个非盈利性的门户站点,当时用的是动易的SiteFactory3.0版本,感觉用起来也是很不错的,尤其是后台的可视化编缉做得是相当的到位,内容的采集部分也是很好使,初学者只要是不太笨的基本上就可以快速建立起一个功能比较好的站点了,不过令人没想到的是,建立好站点好以后才真的是恶梦的开始,boss提出要求,对它进行二次的开发,基…

    2022年9月30日
  • 【USB】全球USB厂家 USB ID大全。更新时间:2018-01-04

    【USB】全球USB厂家 USB ID大全。更新时间:2018-01-04## ListofUSBID’s## MaintainedbyStephenJ.Gowdy# Ifyouhaveanynewentries,pleasesubmitthemvia# http://www.linux-usb.org/usb-ids.html# orsendentriesaspatches(diff-uoldnew)i

    2022年7月26日
  • PUCHARM激活码[在线序列号]

    PUCHARM激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
  • 无线网首选dns服务器怎么设置,怎么设置无线路由器dns

    无线网首选dns服务器怎么设置,怎么设置无线路由器dnsDNS在平时上网中扮演重要角色,如果不注意DNS的话,可能会导致网速慢、弹窗广告、网址打不开、打开不是自己想要的网站、劫持等一系列问题,设置好无线路由器的dns尤为重要,下面是学习啦小编整理的设置无线路由器dns的方法,供您参考。设置无线路由器dns的方法首先打开浏览器,然后在网址栏输入192.168.1.1,然后按回车键确认打开,之后就会弹出路由器登录界面。之后输入路由器登录用户名与密码,TP-…

    2022年5月20日

发表回复

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

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