tcp报文格式图

分离?
tcp报文 20字节
4bit位首部报头长度
读取前20字节,提取首部4bit长度,直接给4bit长度x4再-20
eg: 1111 -- 15 -- 15x4 --- 60 ---- -20 ----- 40
所以读取前20个字节,再读取四十个字节,剩下的就是有效载荷
交付
由端口号来实现交付
正确地理解可靠性
1.具有应答,可以保证对历史消息的可靠性,这个时候就是100%可靠。所以让报文不是最新的就可以保证可靠性。我们有应答就可以保证对方收到了我们的消息,而收到的消息是历史的,所以保证的是历史消息的可靠性
2.通信中,最新的报文,永远没有应答,最新可靠性无法保证
保证tcp的可靠性,处于核心地位的确认应答机制
应答机制

每一个报文都有自己的sk_buff
序号和确认序号

序号
1.支持确认应答
2.解决接收报文的乱序问题,因为先发的不一定先到,有序号就可以有序化
所以为什么会有两个序号?
因为会有捎带应答
我们接收别人的数据,在对数据做应答的时候也会同时发出一个数据(稍待应答)让对方来做应答,这个时候就需要不同的序号来对双发的数据报文来管理。所以就有双向的序号与确认号
我们举个例子
你吃饭了吗? 这就是一方的数据报文
吃了。你呢? 吃了就是应答,同时你呢?就是另一方的数据报文,也就是捎带应答,也要有序号
需要不同的序号。如果只有一套序号就会发生混乱
报文 = 报头 + 有效载荷
应答 数据
报文去掉数据的就是报头
16位窗口大小?
一台主机接收数据的能力由我们的接收缓冲区中剩余的空间大小决定
我们的数据是报文,报文里有16位窗口大小,传数据的同时,报文的16位窗口大小就记录剩余空间的大小