协议格式

特点
1.无连接(Connectionless)
-
特点:在发送数据之前,双方不需要像 TCP 那样先建立连接(三次握手)。
-
结果:节省了建立连接的开销,速度快。
2. 不可靠(Unreliable)
-
特点:UDP 不保证数据报能送达对方。它"尽力而为"地发送,不具备重传机制。
-
后果:
-
数据可能丢失。
-
数据可能乱序到达(先发的包后到,后发的包先到)。
-
数据可能重复。
-
3. 面向报文(Message-Oriented)
-
特点 :UDP 是一个报文 一个报文地发送和接收,保留了消息的边界。
-
区别 :TCP 是"面向字节流"的,你发两次数据,接收方可能一次就把它们合在一起读了出来。但 UDP 不会,你发一个 100 字节的数据包,接收方必须用一次
recvfrom读 100 字节;如果你发一个 200 字节的包,但你只提供一个 100 字节的缓冲区去读,余下的 100 字节会被直接丢弃。
常见问题
1.为什么我们写socket时,port是16位的?
答:因为内核中udp协议规定!
2.a.报头和有效载荷如何分离?b.有效载荷分用问题。
答:UDP报文的报头长度是固定的,为16位。16位目的端口号可以解决分用问题。
3.UDP存在粘包问题吗?
答:不存在。因为它是以数据报格式传输数据的。
4.怎么理解UDP协议报头?
答:它是一个协议结构体struct udphdr。
5.如何理解封装过程?
答:本质就是对结构体变量进行拷贝。
6.如何理解报文?
操作系统使用结构体struct sk_buff来管理报文信息。报文贯穿协议栈,封包和解包的核心就是移动指针。
7.当收到一个报文,我们如何做到用文件原理,读数据到应用层?见下图
