UDP在传输层
UDP在传输层,之所以叫做传输层,是因为这里提供了传输数据的策略(TCP、UDP)。
在应用层有一批系统调用接口:read,write,recv,send等函数,与其说是收发函数,不如说是拷贝函数;因为TCP和UDP都有发送缓冲区和接收缓冲区,数据是先经过这里才能到达网络层的。在拷贝完成以后,什么时候发、怎么发、发多少都是由OS决定的。
所以应用层只要完成了拷贝的任务,即可继续完成其他任务了,剩下的传输过程由每个分层分工完成。
- UDP的缓冲区
UDP没有真正意义上的 发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。
UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃。
- UDP是全双工
可以体现在UDP的recvfrom,sendto可以被同时调用。
UDP如何做到封装和解包?报头和有效载荷分离
UDP如何向上交付?根据目的端口号,交付有效载荷给上层应用
- 特点
UDP是无链接、不可靠、面向数据报。
无链接: 知道对端的IP和端口号就直接进行传输, 不需要建立链接;
不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;
面向数据报: 通俗地说就是每次传输报文的时候,必须是以应用层传输给UDP的数据报的格式传输,那么就会有多传和漏传的风险。 如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节; 而不能循环调用10次recvfrom, 每次接收10个字节。
UDP的首部结构
查看网络状态
- netstat
netstat是一个用来查看网络状态的重要工具.
语法:netstat [选项]
功能:查看网络状态
常用选项:
n 拒绝显示别名,能显示数字的全部转化成数字
l 仅列出有在 Listen (监听) 的服務状态
p 显示建立相关链接的程序名
t (tcp)仅显示tcp相关选项
u (udp)仅显示udp相关选项
a (all)显示所有选项,默认不显示LISTEN相关
- pidof
在查看服务器的进程id时非常方便.
语法:pidof [进程名]
功能:通过进程名, 查看进程id