TCP/IP相关协议基础
- 0x0 IP协议的特点
- 0x1 IP包头的结构
- 0x2 MTU?
- 0x3 IP分片?
- 0x4 一些小疑问?
- 0x5 TCP协议特点
- 0x6 TCP包头的结构
- 0x7 TCP三次握手
- 0x7 TCP四次挥手
- 0x8 超时重传
- 0x9 滑动窗口
- 0xA 如何保证TCP的有序性
- 0xB UDP协议特点
- 0xC UDP的伪IP头部
0x0 IP协议的特点
- 无连接,传输数据前不用建立连接
- 经历而为,无法转发会直接丢弃
- 无序传播
- 不可靠,无情的发送机器
0x1 IP包头的结构
- 注解
- 版本:固定为4
- 包头长度:一般为20
- 服务类型:不用了解
- 报文长度:本IP报文有多长
- 标识符:用来识别是否为同一IP报文,分片了的IP报文的标识符都一致
- 标志位:
- 0 : 保留(无意义)
- 0 :DF位 为1不允许。为0允许。 尽力而为、、
- 0 :MF位 为1还有后续分片。为0表示自己是最后一个
- 分段偏移量:偏移量:用前一个分片的偏移量+携带数据量得到下个报文的偏移量
- 存活时间TTL:用来防止路由环路,每到下一跳减一
- 协议:标识上层协议。如TCP协议号6,UDP协议号17
- 包头校验和:用来检测这个包头是否完整
0x2 MTU?
- 最大传输单元 最大为1500
- 网络层:
- IP包头 + IP报文
- 20 1480
- 数据链路层:
- 目的mac 源mac 类型 data FCS
- 6 6 2 1500 4
- 只有数据再出接口时才会考虑MTU,如果小于MTU直接通过,大于MTU需要分片或者丢弃。
0x3 IP分片?
- why?IP分片
- 报文大于接口的MTU无法发送
- what?IP分片
- IP分片就是把大于MTU的数据包分片
- how?IP分片
- 分片的IP包的数据量最大只能 MTU-20 1480
- 分片的包头继承于被分片的IP包头(通过标识符)
0x4 一些小疑问?
- 如何判断是否需要分片?
- 查看DF位,为1不允许,为0允许
- 如何判断包是否需要重组?
- 标识符相同的需要重组
- 设备收到被分片的包如何排序?
- 用前一个分片的偏移量+携带数据量得到下个报文的偏移量
- 重组何时结束
- 查看标志位的MF位。为1还有后续分片,为0表示自己是最后一个
0x5 TCP协议特点
- 面向连接:建立连接,传输数据,断开连接,全双工通信
- 提供有序数据传输:SEQ机制
- 可靠:超时重传机制
- 高质量:通过滑动窗口实现流量控制
0x6 TCP包头的结构
- 序号:TCP把要在一个连接上发送的数据分成若干报文段,然后给每个报文段指派一个序号,序号就是该报文段第一个字节的编号。
- 确认号:期望接收到的下一个字节的编号。
- 只有编码位的ACK位为1时确认号才有效
- ACK = 序号+数据量
- 报文长度:整个报文的长度
- 预留:保留用处
- 编码位:
- FIN: 结束标志;为1时,请求断开连接。
- SYN:同步标志;为1时,请求建立连接。
- RST:复位标志;为1时,请求重新建立TCP连接。
- PSH:通知接收端立即将数据交给用户进程,不要停留在缓存,等待更多的数据。
- ACK:确认标志;确认号有效位,表明该数据包包含确认信息。
- URG:紧急标志;紧急指针有效位,与16位紧急指针配合使用。
- 窗口:滑动窗口
- 校验和:检查报文格式是否正确
- 紧急指针:当一个报文被读取时,优先读取那部分的内容
0x7 TCP三次握手
- TCP连接建立——TCP MSS
- TCP MSS是TCP的一个重要选项,TCP数据分段的最大长度,该 参数在三次握手时发给对方。类似MTU
0x7 TCP四次挥手
0x8 超时重传
- 再传输过程中设置了一个RTT值,如果超过了这个RTT值还没收到回复的ACK就进行重装
- 超时重传表现为TCP协议的可靠性
0x9 滑动窗口
- TCP为每个方向的数据传送都使用两个窗口(发送窗口和接收窗口),共4个窗口。
- TCP通过强制发送方和接收方不断调整窗口大小,来实现流量控制。
- 设置win值,如果遇到拥塞会将win值减半,通畅后会慢慢增加
- 滑动窗口是TCP的流量控制机制->表现为高质量
0xA 如何保证TCP的有序性
- 接受方的的按照序列号有效处理
0xB UDP协议特点
- 无连接的,数据传输之前不需要建立连接。
- 不可靠的,发送端不管接收端是否能收到数据。
- 只有校验和机制,只能做简单的差错控制。
- 没有流量控制机制。
- 包头小,开销低,传输效率高TCP包头为20,UDP包头为8字节。
0xC UDP的伪IP头部
- UDP需要使用伪IP头部进行校验,因为UDP的包头太短了