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

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

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

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

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

(0)
blank

相关推荐

  • matlab pca分析(二次进化攻略)

    主成分分析主成分分析法(PCA)是一种高效处理多维数据的多元统计分析方法,将主成分分析用于多指标(变量)的综合评价较为普遍。该方法的基本思想是运用较少的变量去解释原始数据中的大部分变异,通过对原始数据相关矩阵内部结构关系的分析和计算,产生一系列互不相关的新变量。根据需要从中选取比原始变量个数少的几个新变量,这些新的变量就是所谓的主成分,它们能够充分解释原始数据的变化。因此,主成分分析法本质上是…

  • 实现div里的img图片水平垂直居中

    实现div里的img图片水平垂直居中body结构<body><div><imgsrc="1.jpg"alt="haha"></div></body>方法一:将display设置成table-cell,然后水平居中设置text-align为center,垂直居中设置vertical-align为middle。<styletype="text/css">*{

  • 整型与字符串转换

    整型与字符串转换我们写程序的时候经常会遇到整型和字符串相互转换的问题,这里要用到几个函数,itoa(),atoi(),sprintf()下面来介绍下这几个函数的具体用法!itoa功能:把一整数转换为字符串用

  • asp.net(c#)网页跳转几种方法小结「建议收藏」

    asp.net(c#)网页跳转几种方法小结「建议收藏」在asp.net下,经常需要页面的跳转,下面是具体的几种方法。跳转页面是大部编辑语言中都会有的,正面我们来分别介绍一下关于.net中response.redirectsever.executeserver.transfer三种页面跳转的方法①response.redirect这个跳转页面的方法跳转的速度不快,因为它要走2个来回(2次postback),但他可以跳转到任何页面,没有站点页

  • 视频讲解数学题目的软件哪个好_leetcode简单题

    视频讲解数学题目的软件哪个好_leetcode简单题终于将LeetCode的大部分题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~博主还制作了一款网页版APP,方便大家进行查阅,

  • Java安全之原生readObject方法解读

    Java安全之原生readObject方法解读0x00前言在上篇文章分析shiro中,遇到了Shiro重写了ObjectInputStream的resolveClass导致的一些基于Invoke

    2021年12月12日

发表回复

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

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