TCP报文段的首部格式
一---导读
我们知道TCP相对于UDP来说多了很多,那么多的这些功能是如何实现,靠什么来承载的呢?这就是TCP首部,接下来我们介绍TCP首部格式
二---图解TCP首部
序号:占32个比特,用来指出本TCP报文段数据部分的第一个字节的序号。
确认号:占32比特,取值范围[0-2的32次方减1].确认号增加到最后一个后,下一个确认号就又回到了0.指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。若确认号为n,表示n-1之前的数据已经收到了,你发序号为n的来吧。
确认标志位ACK:取值为1的时候确认号字段才有效,取值为0的时候确认号字段无效。
TCP规定:在连接建立后,所有传输完的字段ACK都必须设置为1.
数据偏移:占4个比特,并以4字节为单位。用来指出TCP报文段的数据载荷的部分距离TCP首部有多远。这个字段实际上就是TCP报文段首部的长度。首部固定的字节为20,因此数据偏移字段的最小值为(0101)2.
首部最大的字节为60字节,因此数据偏移字段的最大值为(1111)
保留字段占6比特,为以后使用,目前应置为0。
窗口字段占16比特,指出发送本报文段的一方的接收窗口。窗口值作为接收方让发送方设置其发送窗口的依据。这个是以接收方的能力来控制发送的发送能力,称为流量控制。注意发送窗口的大小应该从接收窗口和拥塞窗口中取小点的一个。
校验和字段占16比特:
用来检验传输过程中是否出现了误码。在计算校验和的时候,要在TCP报文段的前面加上12字节的伪首部。
同步标志位SYN:
在TCP连接建立的时候用来同步序号。
终止标志位FIN:
用来释放TCP连接。FIN=1表明是TCP连接释放报文段
复位标志位RST:
用来复位TCP连接,当RST=1的时候,表明TCP连接出现异常,必须释放连接,然后再重新建立连接。RST=1还可以用来拒绝一个非法的报文段或拒绝打开一个TCP连接。
推送标志位PSH:
用来实现推送操作,当接收方的TCP收到标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付。
紧急标志位URG和紧急指针字段用来实现紧急操作。当URG为1的时候,紧急指针字段有效,当URG为0的时候,紧急指针字段无效。
紧急指针:
占16比特,以字节为单位,用来指明紧急数据的长度。
当发送有紧急数据的时候,可以插队到 发送缓存的最前面,然后封装成TCP报文段进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。
接收方收到URG为1的报文段的时候,,直接将紧急数据上交给应用进程,而不必在接收缓存中排队。
选项占40个字节:
增加选项可以增加TCP的功能。目前有以下选项:
最大报文段长度MSS选项:TCP报文段数据在和部分的最大长度。
窗口扩大选项:为了扩大窗口(提高吞吐率)
时间戳选项:
用来计算往返时间RTT,
用于处理序号超范围的情况,又称为防止序号绕回PAWS。
选择确认选项:用来实现选择确认功能。
填充:
由于选项的长度可变,因此使用填充来确保报文段首部能被4整除(因为数据偏移字段,是以4字节为单位的)
posted on 2021-01-12 12:02 Love&Share 阅读(1320) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~