传输层协议之UDP

端口号

端口号的范围划分:

范围
0~1023 知名端口号:一些著名的协议,它们的端口号都是固定的.
1024~65535 普通端口号:操作系统动态分配的端口号.例如:客户端程序的端口号,就是由操作系统从这个范围分配的

常见的著名端口号:

  • ssh服务器:22号端口
  • ftp服务器:21号端口
  • telnet服务器:23号端口
  • http服务器:80端口号
  • https:443端口号
    注意在我们编程过程中使用的端口号尽量不要使用知名端口号,因为可能其他的进程正在使用就会冲突.

查看网络状态的指令:

netstat + [选项]
常用选项:
 - a(all)显示所有选项
 - u(udp)仅显示与udp相关的选项
 - t(tcp)仅显示与tcp相关的信息
 - p显示建立相关链接的程序名
 - l仅显示在Listen(监听)的服务状态
 - n拒绝显示别名,把能显示的数字全部转化为数字

由进程名查看进程的方法:

语法:pidof[进程名]
功能:通过进程名查看进程ID

UDP协议

UDP协议端格式:如下图所示
这里写图片描述
图中:
在UDP首部中有一个16位的udp长度:表示UDP的首部+UDP的数据的最大长度(对于当今世界的互联网环境而言,64k是一个很小的数字.那么如果有一个很大的业务需要使用UDP协议时,就需要在应用层将业务手动分包,多次发送,并在接收端拼接).
16位UDP的校验和:在这儿只用的是CRC循环冗余校验法.(注意:在Linux操作系统中可以使用MD5sum来生成文件的校验和)

UDP协议的特点:
1.无连接:只要知道对端的IP和端口号就可以直接进行传输而不需要建立连接.(例如:生活中我们发短信,在发短信时,不管对方会不会收到直接发送短信)
2.不可靠:没有确认机制,没有重传机制;例如:如果因为网络故障而无法发送到达对方,但是UDP协议也不会给应用层发送任何错误的消息.
3.面向数据报:不能够灵活的控制读写的次数和数量.应用层交给UDP多长的报文,UDP会原样发送而不会做出任何合并和拆分.
4.全双工:UDP的socket既可以读也可以写.


对于UDP协议的缓冲区:
其实UDP没有真正的缓冲区,调用sendto函数时会直接将数据交给内核,有内核将数据传送给网络层协议进行后续的传输.
但是UDP具有接收缓冲区,但是这个缓冲区不能保证收到的UDP的顺序和发送UDP的顺序一致.如果UDP的接受缓冲区满了,那么就会将再收到的数据丢弃.


一些常见的基于UDP的应用层协议有:

  • NFS:网络文件系统.
  • TFTP:简单文件传输协议.
  • DHCP:动态主机协议配置
  • DNS:域名解析协议

猜你喜欢

转载自blog.csdn.net/yinghuhu333333/article/details/80875639