UDP是一个简单的面向‘数据报’的传输层协议

 
UDP数据报封装
 
| IP首部 | UDP首部 | UDP数据 |
         --     UDP数据报   -- 
--        IP数据报          --
 
UDP首部为8个字节
 
UDP数据长度为0~65507个字节,是65535-20-8,8字节为UDP首部,20字节为IP首部
 
UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但不保证它们能到达目的地
 
UDP不进行差错检验,必须由应用层的应用程序实现可靠性机制和差错控制,以保证端到端数据传输的正确性
 
UDP检验和覆盖UDP首部和UDP数据,UDP的检验和是可选的,而TCP得检验和是必需的
 
UDP数据报的长度可以是奇数,但检验和算法是把若干个16bit字相加,解决方法就是在最后增加填充字节0
 
UDP数据报和TCP段都包含一个12字节厂的伪首部
 
UDP检验和是一个端到端的检验和
 
TCP有超时和重传机制,UDP没有
 
加入UDP伪首部是为了UDP检验和
 
为何需要UDP伪首部,是进一步确保UDP报文送到正确主机的正确端口上
 
UDP检验和各字段
|            32位源IP地址           |  ~~
|           32位目的IP地址          |  UDP伪首部
|   0   | 8位协议 |   16位UDP长度   |  
|   16位源端口号  | 16位目的端口号  |  ~~
|   16位UDP长度   |  16位UDP检验和  |  UDP首部
|    数据……                       |  ~~
 
在伪首部中,目的IP、目的端口号、源端口 都会有UDP程序告知,未读源IP先不知
由于发送数据从哪个IP出去是由IP协议来选路,故先由UDP程序把数据封装成UDP发送给IP层,然后IP层选路,得到源IP,发回UDP层。
 
面向连接和无连接
 
            面向连接                    无连接
 
通信过程    建立连接---交付分组         交付分组
            ---终止连接
路由选择    仅在建立连接时选路          每个分组独立选路
 
传输路径     相同                       可以不同
 
 
 
 
 
IP分片
 
 
分片操作仅由路由器执行:转发分组时
确实需要时才进行分片:提高传输效率
每个分片都要包含IP首部:无连接通信
数据报可被多次分片
 
 
 
是先查询数据向本地哪个接口发送,并获取MTU,根据MTU进行分片
当一份IP数据分片后,只有到达目的地后才重新组装,因每一站的MTU不同,所根据每一站MTU进行分片,到达最终目的地,在此过程中会有多长分片。
 
 
为何要避免分片,因为当一片数据丢失时需要全部数据重传,而无法只重传丢失的一片,
分片的是中间路由,而起始端无法知道中间路由是如何分片的
 
 
任何运输层首部只出现在第一片数据
IP数据报是指IP层端到端的传输单元
分组是指在IP层和链路层之间传送的数据单元
 
 
问题:当IP分片后传送到下一站,是否立即全部组装,再按下一站MTU来分片传送;还是传送到下一站后每片分别按下一站MTU来分片传送
 
每片分组传送到下一站,下一站的的目的可能不会相同,每片分组可能会选择不同路径传送,所以在下一站可能不会有全部分片,当到达下一站后,会根据下一站的MTU来进行是否再分片,当全部到达最终目的地址后再全部组装。
 
 
以上是我个人学习的笔记,其中难免有我理解上的错误导致某些说法错误,如果正在学习中的切不可全按我的理解,一定要按书或者请教高手,如果哪位高手不巧看到我写的,发现其中有错误,鄙人恳请指出,不甚感谢!