一、网络层
1. TCP 首部(记得每个字段含义即可)
TCP 首部- URG(Urgent)
- 当
URG=1
时,紧急指针字段
才有效。表明当前报文段中有紧急数据,应优先尽快传送
- ACK(Acknowledge)
- 当
ACK=1
时,确认号字段
才有效
- RST(Reset)
- 当 RST=1 时,表明连接中出现严重差错,必须释放连接,然后再重新建立连接
- SYN(Synchronization)
- 当 SYN=1、ACK=0 时,表明这是一个建立连接的请求
- 若对方同意建立连接,则回复 SYN=1、ACK=1
- FIN(Finish)
- 当 FIN=1 时,表明数据已经发送完毕,要求释放连接
- 序号(Sequence Number)
- 占 4 个字节
- 首先,传输的每一个字节都会有一个编号
- 在建立连接后,序号代表:
这一次
传给对方
的 TCP 数据部分的第一个字节的编号
- 确认号(Acknowledge Number)
- 占 4 个字节
- 在建立连接后,确认号代表:期望
对方下一次
传输过来的 TCP 数据部分的第一个字节的编号
- 窗口(Window)
- 占 2 个字节
- 这个字段有流量控制功能,用以告知对方下一次允许发送的数据大小(字节为单位)
2. 为什么 TCP 的首部仅仅有 4 位的数据偏移
字段记录了 TCP 首部的长度
,并没有字段记录 TCP 的数据长度
?UDP 首部中有个 16 位的字段记录了整个 UDP 报文的长度(首部+数据)。
- UDP 首部中占 16 位的长度字段是冗余的,纯粹是为了保证首部是 32bit 对齐
- TCP\UDP 的数据长度,完全可以由 IP 数据包的首部推测出来
传输层的数据长度 = 网络层的总长度 - 网络层的首部长度 - 传输层的首部长度
二、TCP 可靠传输
1. 停止等待 ARQ 协议
-
ARQ(Automatic Repeat-reQuest)
自动重传请求
图解 1
2. 连续 ARQ 协议 + 滑动窗口协议
-
停止等待ARQ协议,让A
图解只能一条一条
传递数据给 B,这无疑是效率比较低的,必须得到进化
-
发送方的窗口大小,一般是由接收端决定的
3. 完整的读下图,理解连续 ARQ 协议 + 滑动窗口协议
需要理解
4. 为什么需要 SACK(选择性确认)
?
- 在 TCP 通信过程中,如果发送序列中间某个数据包丢失(比如 1、2、
3
、4、5 中的3
丢失了) - TCP 会通过重传最后确认的分组后续的分组(最后确认的是 2,会重传
3
、4、5) - 这样原先已经正确传输的分组也可能重复发送(比如 4、5),降低了 TCP 性能
5. SACK(选择性确认)
是怎么做的呢?
- 为了改善上述情况,发展出了
SACK(Selective Acknowledge,选择性确认)
技术 - 告诉发送方哪些数据丢失,哪些数据已经提前收到
- 使得 TCP 值重新发送丢失的包(比如
3
),不用发送后续所有的分组(比如 4、5)
6. SACK 技术实现原理(了解即可)
实现原理7. PDU 是我们在网络协议中经常看到的词汇什么意思呢?
- 协议数据单元(
Protocol Data Unit,PDU
) - 在分层网络结构,例如
开放式系统互联(OSI)模型
中,在传输系统的每一层都将建立协议数据单元(PDU)
网友评论