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


相关推荐

  • sparkSQL实例_flink sql

    sparkSQL实例_flink sql记一次SparkSqlETL过程需求:1)input:json日志2)ETL:根据IP解析出省份,城市3)stat:地区分布指标计算,满足条件的才算,满足条件的赋值为1,不满足的赋值为0(如下图)将统计结果写入MySQL中。(就比如说这个广告请求要满足requestmode=1和processnode=3这两个条件)valspark=SparkSessi…

    2025年6月28日
    4
  • n皇后问题总结_模拟退火n皇后

    n皇后问题总结_模拟退火n皇后N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)。一、 求解N皇后问题是算法中回溯法应用的一个经典案例      回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。     在现实中,有很多问题往往需要我们把其所有

    2022年9月30日
    1
  • ubuntu系统下mysql重置密码和修改密码操作

    ubuntu系统下mysql重置密码和修改密码操作一、忘记密码后想重置密码在介绍修改密码之前,先介绍一个文件/etc/mysql/debian.cnf.其主要内容如下图:里面有一个debian-sys-maint用户,这个用户只有Debian或Ubuntu服务器才有,所以如果您的服务器是Debain或Ubuntu,debian-sys-maint是个Mysql安装之后自带的用户,具体作用是重启及运行mysql服务。所以如果忘了root密码,可以通…

    2022年5月31日
    47
  • Source Insight 3.5 简介

    Source Insight 3.5 简介SoureInsight3.5

    2022年7月1日
    24
  • 每天一道算法_5_Financial Management「建议收藏」

    今天的题目更简单,在考虑是不是应该有挑选性的选题目做。题目是Financial Management,如下: DescriptionLarry graduated this year and finally has a job. He’s making a lot of money, but somehow never seems to have enough. Larry has

    2022年3月10日
    41
  • Tomcat的下载及安装

    Tomcat的下载及安装一、Tomcat下载1、打开Tomcat官网,默认进入官网首页,官网地址为:https://tomcat.apache.org/2、左侧的导航栏可以看到Download(下载),以及最近相关版本的Tomcat(9、8、7…),这里选择的是Tomcat8,点击进入3、进入tomcat8的相关页面后会显示一些该版本的信息,可以忽略,鼠标下滑进行查找4、这里我们可以看到…

    2022年5月19日
    86

发表回复

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

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