UDP是一个简单的面向‘数据报’的传输层协议UDP数据报封装| IP首部 | UDP首部 | UDP数据 | -- UDP数据报 ---- IP数据报
.
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来进行是否再分片,当全部到达最终目的地址后再全部组装。.. .. ..以上是我个人学习的笔记,其中难免有我理解上的错误导致某些说法错误,如果正在学习中的切不可全按我的理解,一定要按书或者请教高手,如果哪位高手不巧看到我写的,发现其中有错误,鄙人恳请指出,不甚感谢!..