广州品牌网站建设公司,网页设计师主要是做什么的呢,网站建设实训该写哪些内容,买房子最好的网站文章目录 UDP 协议1. 面向数据报2. UDP 协议端格式3. UDP 的封装和解包4. UDP 的缓冲区 UDP 协议
UDP传输的过程类似于寄信。
无连接#xff1a;知道对端的IP和端口号就直接进行传输#xff0c;不需要建立连接。不可靠#xff1a;没有确认机制#xff0c;没有重传机制知道对端的IP和端口号就直接进行传输不需要建立连接。不可靠没有确认机制没有重传机制如果因为网络故障该段无法发到对方UDP协议层也不会给应用层返回任何错误信息。面向数据报: 不能够灵活的控制读写数据的次数和数量。
1. 面向数据报
数据报是独立的一整个应用层交给 UDP 多长的报文UDP原样发送既不会拆分也不会合并。
例如用 UDP 传输 100 个字节的数据如果发送端调用一次 sendto发送100个字节那么接收端也必须调用对应的一次recvfrom接收100字节。而不能循环调用10次recvfrom, 每次接收10个字节。2. UDP 协议端格式 UPD 的协议报头长度是 固定的 8字节。
16位 UDP 长度表示整个数据报UDP 首部 UDP 数据的 最大长度即 216 64kb。
如果校验和出错, 就会直接丢弃。
报头协议的本质其实就是结构化数据结构体、位段
// 结构体实现
struct udp_header
{uint16_t src_port;uint16_t dst_port;uint16_t udp_len;uint16_t check;
};
// 位段实现
struct udp_header
{uint32_t src_port:16;uint32_t dst_port:16;//...
};3. UDP 的封装和解包
封装
应用层将信息拷贝给传输层用 char* p 指针指向一个缓冲区前面放 UDP 结构报头固定 8 字节后面放有效载荷对报头内容的填充就可以写作
((struct udp_header*)p)-src_port xx;
((struct udp_header*)p)-dst_port xx;
((struct udp_header*)p)-udp_len xx;
((struct udp_header*)p)-check xx;封装
应用层将信息拷贝给传输层用 char* p 指针指向一个缓冲区前面放 UDP 结构报头固定 8 字节后面放有效载荷对报头内容的填充就可以写作
((struct udp_header*)p)-src_port xx;
((struct udp_header*)p)-dst_port xx;
((struct udp_header*)p)-udp_len xx;
((struct udp_header*)p)-check xx;4. UDP 的缓冲区
UDP 没有真正意义上的 发送缓冲区。调用 sendto 会直接交给内核由内核将数据传给网络层协议进行后续的传输动作。
UDP 具有接收缓冲区。但是这个接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一致。如果缓冲区满了再到达的UDP数据就会被丢弃。
UDP 的 socket 既能读也能写, 这个概念叫做 全双工