赞
踩
目录
在网络中的变数很多,因为要经过的传播路由太多,最后得到的数据也不一定能完整。
1.发送了数据,对方不一定能收到
2.不能严格按照发送的顺序被对方接收
1.我们发送的数据很有可能在途径路由时被查看,修改,窃听等等
2.可能会有人伪造我们发送的数据直接给别人
那么关于以上两点,就需要交给网络层以上解决
全名 User Datagram Protocol : 用户报文协议
UDP就是一个非常简单的传输层协议,只能完成传输层最基本的职责。
说UDP不可靠,真是因为他什么操作也没有,起不到保护作用。
我觉得老师的图非常好,所以我只在概念上做几点说明
先上图
UDP的报头(header),可以理解成就是快递单上的地址,一会儿再详细说明。
payload也就是数据内容,由应用层提供再由传输层打包
那么UDP的职责就是将应用层的payload打包,贴上标签,然后就往网络层发送,
至于到没到接收者手里,发送者无从知晓。
不可靠,在上述的红字有所体现。
无连接:不会一直占用服务器
面向数据报文:不会拆开数据包来看,不会因此破坏数据顺序结构和完整性
成本低:就是便宜
UDP的header放了双方的IP和端口,长度8个字节
图中为整个报文结构,UDP长度就是报文长度
payload就是除去header剩下的报文长度
就像是验证完整性这么的一个东西,比如你steam下载完解压的时候你要验证文件对不对,网络发文件也要用。
多用于远距离通信,保证数据完整性和准确性。
当我发送的时候,我会把原始数据的checksum放在header中,等接收方一收到,会再计算出一个checksum,两个校验对比,不一样,那就证明数据被损坏或者修改过来。
从应用层到数据链路层中,保存数据的区域都可以称为缓冲区,概念比较抽象
UDP没有发送缓冲区,只有接收缓冲区。
我们理解为,接收方的UDP接收到数据后,不需要立刻被应用层拿走,放在接收缓冲区默默等待即可,但如果应用层在接收缓冲区没有东西的时候去拿数据,又没有超时机制的话,就会死等了。
一句话,UDP只要把数据放到网上那就是发送成功了,收没收到跟我没关系
1.从应用层先收到payload数据,相当于把应用层的内存数据拷贝到自己的内核内存区域
2.准备header部分:
1).源端口(socket里就有,也不用自己写)
2).目标端口
3).UDP长度
4).checksum
3.header+payload 就相当于 datagram
4.直接把打包好的datagram交给网络层发送
5.只要网络层发送成功(数据已经到达网卡)
6.通知应用层发送成功
如果接收方能收到,一定是原封不动完好无损的数据,这就是面向数据报文的好处
1.将从网络层收到的包裹放到内核缓冲区
2.通过header定长,把包裹分解为header部分和payload部分 - 解包
3.读取header部分,包括端口,ip信息,checksum(校验和),长度等
4.长度不对直接扔,谁也不需要告诉
5.checksum(校验和)不对直接扔
6.把payload放到接收缓冲区
7.通知应用层数据到了
8.应用层来取
9.应用层一直不来,信息照样可以扔
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。