TCP固定头部结构详解

1、前言

尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务。TCP提供一种面向连接的、可靠的字节流服务。

使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上之后的数据的传输。TCP连接是全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换后,通信双方都必须断开连接以释放系统资源。

TCP连接是一对一的,所以基于广播和多播应该使用UDP协议。

本文将分别讲解TCP协议建立连接(所谓的“3次握手”)和断开连接(所谓的“4次挥手”)的过程。有关TCP协议的权威理论介绍,请参见《TCP/IP详解》这本书。

2、参考资料

TCP协议的可靠传输详解
HTTP和HTTPS
网络分层模型以及对应的协议

3、TCP报文格式

TCP头部详解如下,部分图上不好画的,在下文会有文字解释。

这里写图片描述

对上图的部分说明

端口号:

在进行TCP通信时,客户端使用系统自动选择的临时端口号,服务器采用知名服务端口号,如DNS协议端口号53,HTTP协议端口号80。知名服务使用的端口号定义在/etc/services。
这里写图片描述

六位标志位包含以下几项:

  • URG:表示紧急指针是否有效;

  • ACK:表示确认号是否有效,携带ACK标志的数据报文段为确认报文段;

  • PSH:提示接收端的应用程序应该立即从TCP接受缓冲区中读走数据,为接受后续数据腾出空间;

  • RST:表示要求对方重新建立连接,携带RST标志位的TCP报文段成为复位报文段;

  • SYN:表示请求建立一个连接,携带SYN标志的TCP报文段为同步报文段;

  • FIN:通知对方本端要关闭了,带FIN标志的TCP报文段为结束报文段。

确认序号:

Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
TCP头部选项:

TCP头部选项是一个可变长的信息,这部分最多包含40字节,因为TCP头部最长60字节,(其中还包含前面20字节的固定部分)。

为什么在TCP首部的开始便是首部长度字段而UDP首部却没有?

因为UDP提供无连接服务,它的数据包包头,是固定长度的8字节,不存在可选字段,可以减少很多传输开销,所以它无需使用首部字段长,因为它的首部就是固定的。


而TCP提供连接服务,它的数据包包头,除了固定的20字节之外,还存在一个可选项,这个可选项字段,是根据TCP连接的要求而变动。这一字段最常见到的就是最大报文大小MSS,它指明发送端所能接收的最大长度的报文段。因为这个字段的存在,所以TCP包头使用了首部长字段。它占4位,以四字节为单位表示TCP包头长度,也就是说,TCP的首部最大长度可以是15x4=60字节,而可选项长可以为60-20=40字节

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

askunix_hjh

谢谢请我吃糖~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值