计算机网络 part2
一、UDP协议
1、概述
UDP提供不可靠的服务,无连接(不存在建立连接的时延),首部开销相对TCP小,没有拥塞控制,提供最大努力交付,面向报文(无论多长的报文UDP也只加一个头部就往下发;TCP面向字节流)。通常用于允许一些数据丢失,但不允许交较大时延、传输少量数据(DNS)。
2、UDP首部格式(8字节)
- 源端口号:16位。
- 目标端口号:16位。
- UDP长度:16位。包括UDP首部和数据的总长度。最少为8。
- 校验和: 16位。
1、临时添加12字节UDP伪首部,设置校验和为0。
2、按16位(不足末尾补0)为单位数字将UDP伪首部、UDP首部、UDP数据以2进制反码相加求和。
3、将16位的和放入校验和。
4、校验:加UDP伪首部,按16位为单位计算2进制反码的和,结果为0则正确。
二、IP协议、
references:
OSI参考模型——网络层:IPv4协议和IPv6协议详解
IP协议
1、特点
- 无连接的、不可靠的分组传送协议;
- 尽最大努力交付;
- 是点对点的网络层通信协议;
2、IP首部格式(20~60字节)
- 版本:4位,4是IPv4,6是IPv6;
- 首部长度:8位。
- 总长度:16位。总长度=首部长度+数据长度,最大\(2^{16}-1=65535\)字节。
- 标识(Identification):16位,用于分片重组。属于同一个分片的ID相同。
- 标志(Flags):3位,用于分片重组。第一位未使用,必须为0;第二位DF不分片标志,表示能否分片,1不能分片,0能分片。若DF为1且IP分片的长度大于MTU,则放弃该分片并发送ICMP差错报文向源主机报告;第三位MF更多分片标志,表示该分片是不是最后一个分片(后面还有没有分片),1表示不是,0表示是最后一个分片。
- 片偏移:13位,表示分片在原始数据中的位置。单位为8字节,如片偏移10,则偏移量为80字节。最多表示偏移\(2^{13}*8=65536\)字节。
- 生存时间(TLL):8位,表示包可以经过多少个路由器的中转,每经过一个路由器,TLL减1。当TTL为0时,丢弃IP数据包并发送ICMP报文通知源主机。TLL可以防止数据包环路。
- 协议:8位,表示使用IP的高层协议类型(IP首部的下一个首部),1是ICMP,2是IGMP,6是TCP,17是UDP。
- 首部校验和:16位,校验IP的首部。
- 地址:32位。
- 目标地址:32位。
3、分片和重组
相关字段:标识、标志、片偏移。
1、最大传输单元(MTU)指定了网络中可传输数据包的最大尺寸,当分组的长度超过MTU,并且DF为0就要分片(DF为1且IP分片的长度大于MTU,则放弃该分片并发送ICMP差错报文向源主机报告)。每个片段的最大尺寸是MTU-IP头部长度,然后进行以下改动:总长度为当前片段大小;MF除了最后一个其他都为1;片偏移在原来片偏移基础上;首部校验和重新计算。
2、通过片偏移找到重组的顺序,MF为0表示所有分片已到达。
4、路径MTU发现
主机先发送整个数据包,并且将DF设为1。这样遇到长度大于传输单元时就会丢弃并返回ICMP报文。然后将ICMP通知中的MTU设为当前的MTU,然后根据这个MTU进行分片。然后再传输。如此往复,直到没有ICMP报文返回,则说明现在的MTU已经是真的MTU了。
三、ICMP
1、概述
ICMP协议是网络层协议。因为IP协议提供的是不可靠的服务,所以丢包后不能回复是否丢包和丢包的原因,所以通过ICMP完成。分为查询报文和差错报文。
IP数据报协议字段为1就说明协议是ICMP。
2、报文格式
- 类型:8位。表示报文类型。1~127是差错报文,128以上是查询报文。
- 代码:8位。标识对应的代码,和类型字段一起标识ICMP报文的详细类型。
- 校验和:16位。
3、常见报文
- 回显请求(类型8)、回显应答(类型0):一台主机向另一个主机发送ICMP回显请求报文,如果途中没有异常(丢失,传输失败)就返回ICMP回显应答报文,说明这台主机存在。Ping命令使用的就是ICMP回显请求和应答报文。
- 目标不可达(类型3):网络不可达(代码0),主机不可达(代码1),协议不可达(代码2)。
- 超时报文(类型11):传输超时(代码0),分段重组超时(代码1)。