目录
1.认识Tcp的报头
源端口和目的端口号没什么说的
32位的序号和确认序号,之后会介绍。
4位首部长度表示的是Tcp报头的长度,但是4位长度最多也就能表示15个字节,即使不算选项,也有20个字节,这是因为首部长度的单位是4字节,所以四位首部长度可以表示的长度是 4 * 15 = 60字节。
URG ACK PSH 都是tcp协议的选项,代表着不同的Tcp协议类型。
剩下的字段后面介绍。
2.确认应答机制(ACK)
Tcp是保证可靠性的,确认应答机制就是保证可靠性的一种机制。
其实这就是在日常生活中很常见的方法。
例:小明:小红我喜欢你,你愿意做我女朋友吗?
小红:就你这样长的太丑了,还是算了吧。
这个例子就是确认应答机制,怎么理解呢,
小红对小明的请求进行了回复(ACK),就说明小明的请求小红收到了。
到此故事结束。
序号与确认序号
Tcp是传输控制协议,发送数据需要先将数据交给tcp的发送缓冲区,可能会将数据拆分一个一个包。交给操作系统,系统在发送,在到达对端的时候要保证包的顺序要和发送前一致,所以必须要有序号来标识每个包。
Tcp是面向字节流的,他会对每个字节进行编号,ACK返回时,确认序号 = 序号 + 1,为了告诉发送者,下次该从哪个字节开始发。
这里可能就有一个问题了,可能有人觉得确认序号就是一个摆设,明明一个序号就能搞定的事,还整一个确认序号。
但是在捎带应答的场景下一个序号就不够用。
捎带应答
捎带应答就是,在ACK向发送者返回时,碰巧接受者也想向发送者发送信息,那么这两条报文就会合二为一,因为ACK就是一个报头,他没有数据,碰巧我正想发送数据,在ACK加上数据不就是两全其美了吗。