背景
TCP/IP协议是当前网络时代的基础,所有的网络产品,或者是开发语言、开发框架都是基于tcp/ip协议的,所以说,学好tcp/ip对个人以后从事互联网行业会有巨大的帮助。
但是这是一个基础理论课程,就像操作系统这门课一样,学完之后可能不会对你产生太大的影响,不会让你立马拥有能够投入工作中的技能。但正是因为这是一个基础理论课,所有的互联网技术都是基于它的。所以如果你了解tcp/ip协议,将会对你未来发展或者在工作中排查问题产生积极的作用。
tcp头部格式
tcp头部信息会出现在每个tcp报文中,用于指定通信的源端端口,目的端口,管理tcp连接,重传,滑动窗口等等。每行32位,0-31表示。
tcp头部格式如下:

源端口和目的端口
-
tcp如何唯一标示一个连接?
当然是tcp连接四元组:源IP、源端口、目标IP、目标端口 -
tcp报文头部为什么没有IP信息?
因为IP在网络层就已经处理了,tcp只需要记录两端的端口即可
序列号
报文段的第一个字节。序列号是一个长为4字节,32位的整数,表示范围为0~2^32-1。如果达到了最大值就循环到0。
- 序列号在通信中的作用
- 在
SYN报文中交换彼此的初始化序列号 - 保证数据包按照正确的顺序进行组装
-
ISN:Initial Sequence Number
初始化序列号。在3次握手的过程中,双方会通过SYN报文来交换彼此的ISN值ISN并不是一个固定的值,而是每
4ms加1,溢出则回到0,这个算法使得猜测ISN变得很困难。那么为什么要这么做呢?要知道,
源IP和源端口都是很容易伪造的,如果ISN被攻击者预测到了,直接伪造一个RST请求后,那就可以强制断开连接,这是非常危险的。而动态增长的ISN大大提高了猜测ISN的难度。
确认号
用来告知对方下一个期望接收到的序列号,表示小于ACK的所有数据包已经全部收到。
头部长度
标识该tcp头部有多少个4字节。因为偷头部长度只有4位,最大能表示15,所以tcp头部最长是60字节。
保留位
暂时保留
标记位
常见的标记位有:URG、ACK、PSH、RST、SYN、FIN
URG:表示紧急指针是否有效ACK:确认收到请求PSH:push,告知对方,这些数据包收到后要立马交给上层应用。不能缓存RST:reset,重制复位标志,强制断开连接SYN:发送/同步标志,用来建立连接FIN:即finish,表示发送方准备断开连接
窗口大小
窗口大小占16位,实际上这是不够用的。因此tcp引入了窗口缩放选项,作为窗口缩放的比例因子,这个因子的范围是0~14,比例因子可以将窗口扩大位原来的2^n次方。
校验和
占用2个字节,防止传输过程中数据包损坏或者被篡改,如果遇到校验和有差错的报文,tcp直接丢弃,等待重传。
选项
可选项的格式如下:
| 种类(kind) 1byte | 长度(length) 1byte | 值(value) |
|---|
常用的可选项有一下几个:
TimeStamp:tcp时间戳MSS:指的是tcp允许从对方接收的最大报文段SACK:选择确认选项/选择性重传WindowScale:窗口缩放选项
总结
这是tcp/ip系列的第五篇,主要详细介绍了tcp头部组成部分。后面还有更深入、更多使用的场景讲解,这个系列的文章会很长。
开始下一篇吧。
本文深入解析TCP/IP协议,介绍其在网络通信中的基础地位,详细解释TCP头部格式,包括源端口、目的端口、序列号、确认号等关键字段的作用及意义。探讨TCP连接四元组、序列号动态增长机制、窗口大小调整等高级主题。
979

被折叠的 条评论
为什么被折叠?



