传输层UDP协议
一、端口号
1. 0 - 1023是知名端口号, 这些端口号与指定的服务是绑定在一起的,如果需要绑定这些知名端口号需要超级管理员权限的,如下示例:
执行cat /etc/services命令查看知名端口号
2. 1024 - 65535客户端程序的端口号由操作系统动态分配,服务端指定端口号。
二、UDP协议
2.1UDP 协议端格式
• 数据 = 16 位UDP 长度(指的是首部+数据) - UDP首部(8字节)。
UDP 使用注意事项
我们注意到, UDP 协议首部中有一个16 位的最大长度,也就是说一个UDP 能传输的数据最大长度是64K(包含UDP 首部),然而64K 在当今的互联网环境下是一个非常小的数字,如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装。
2.2UDP 的特点
• 无连接: 知道对端的IP 和端口号就直接进行传输, 不需要建立连接;
• 不可靠: 没有确认机制,没有重传机制,如果对方没有收到,不会重传
• 面向数据报: 不能够灵活的控制读写数据的次数和数量;
1. 面向数据报
UDP协议是向套接字一次写多少的数据,一次就传多少的数据,接收端也只能一次recvfrom,不能分多次recvfrom。而TCP协议不一定,一次发多少数据由操作系统来决定。
2. UDP 的缓冲区
UDP没有发送缓冲区,只有接收缓冲区,为什么没有发送缓冲区呢?因为不需要像TCP那样数据发生丢包重传,所以不需要对发送数据进行保存,调用sendto 会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作。
UDP 具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP 报的顺序和发送UDP 报的顺序一致; 如果缓冲区满了, 再到达的UDP 数据就会被丢弃;
UDP 的socket 既能读, 也能写, 所以是全双工通信模式