5、传输层UDP28

传输层:负责俩端之间的数据传输(TCP&UDP)

UDP协议:协议格式(协议实现)、协议特性、编程影响

一、协议格式(协议实现)

面试:传输层的数据结构是什么?

就是在问他的协议格式:UDP&TCP

协议格式:

  • 16位源端端口&16位对端端口:描述通信俩端,谁发的,由谁处理
  • 16位数据报长度:描述报文长度(包含头部在内),限制了udp报文必须小于64k。(sendto发送数据的时候,能够给予的最大的数据大小:64k-8(8是头部))
  • 16位校验和:用于校验接收到的数据是否与对方发送的数据一致(二进制反码求和算法)

校验和二进制反码求和算法

  1. 发送方将报文组织完毕后,将校验和字段置0
  2. 从第0个字节开始(包含头部),对每个字节进行取反,然后求和
  3. 在求和过程中,如果数据大小超过16位,则截断,将高位与低16位继续求和
  4. 最终得到了2字节的校验和数据,然后填充到校验字段中,发送数据
  5. 接收方收到数据,同样对数据进行二进制反码求和,最终得到结果0。一旦收到的数据与发送的数据不一致,则udp会将数据丢弃

二、协议特性

无连接,不可靠,面向数据报

无连接:通信的时候不需要建立连接,只知道对方地址就可以发送数据

不可靠:不保证数据能够安全的到达对端,也不保证数据有序到达对端

面向数据报:无连接,不可靠,有固定最大长度限制的传输方式,必须小于64k

三、编程影响

  1. udp不保证数据安全到达对端(有可能会丢包),不保证有序到达对端。程序员在应用层进行丢包检测以及丢包重传操作,以及包序管理
  2. udp面向数据报有固定最大长度限制,64k(数据大小小于64k-8)。sendto发送数据的时候给予的数据一定要注意不要太大,太大了就要分包
  3. udp要求数据整条传输交付,不能交付半条或多条。程序员recvfrom接收数据的时候缓冲区一定要足够大(能够获取一条完整数据)

猜你喜欢

转载自blog.csdn.net/weixin_56316833/article/details/131752753