回顾2022年,展望2023年,博主给大家带来了网络中传输层的重点总结,附上博主本人的实例,帮助大家更好的理解数据是怎么在网络中传输的。
博主个人社区:开发与算法学习社区 博主个人主页:Killing Vibe的博客 欢迎大家加入,一起交流学习~~
网络中的数据,是经过路由器之间,一跳一跳地,接力一样地,传送到目标主机上的。
这带来了两个问题:(站在网络层的视角上讨论)
✦ 网络传送是不可靠的
由于路可能不同,所以很难保证按照出发的顺序到达
✦ 网络传送是不安全的
这两个问题需要交给网络层以上(传输层、应用层)去解决
这篇文章博主将详细总结一下传输层的重点协议
UDP全称:User Datagram Protocol 用户报文协议
UDP是一个很简单的传输层协议,它只是做到了传输层最基本的职责 (在 host to host 连通的情况下,实现了process to process)
UDP传输的过程类似于寄快递。
网络层本身是不可靠的,UDP 又没做过任何的处理,所以UDP是不可靠的!!
并不是UDP做了什么,才变得不可靠了,而是UDP什么都没做,所以网络层的不可靠特性直接表达给了应用层,所以站在应用层的角度,我们才说UDP是不可靠的!
区别于TCP连接,UDP没有任何可靠机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。(但无连接效率高,不需要连接带来的资源损耗,成本低)
应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并; 用UDP传输100个字节的数据:
如果发送端一次发送100个字节,那么接收端也必须一次接收100个字节;而不能循环接收10次,每次接收10个字节。
UDP只有接收缓冲区,没有发送缓冲区:
UDP的socket既能读,也能写,这个概念叫做 全双工
UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部)。
所有网络协议的报头中都要具备的职责:如何进行解包(怎么把数据中的header和payload分开)?
答:由于header长度是定长(固定长度),前8个字节一定是header,剩下的一定是payload。
通常用来在通信中,尤其是远距离通信中保证数据的完整性和准确性。
基本原理就是利用hash函数(checksum函数就是一种hash函数),只要相同的数据,经过函数处理之后,一定得到相同的结果(hash值:checksum)
举个例子:
发送方发送的时候:
接收方接受的时候:
当然,也包括自己写UDP程序时自定义的应用层协议。
以上就是UDP协议的重点总结了,文章要是有什么疑问或者问题,欢迎大家私信博主