UDP协议

常见端口

在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看);
在这里插入图片描述

  1. 0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的
  2. 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的。

常用的服务器都是固定端口号的。ssh服务器, 使用22端口,ftp服务器, 使用21端口,telnet服务器, 使用23端口,http服务器, 使用80端口,https服务器, 使用443。

在Linux中可以通过 cat /etc/services 常看知名服务器的端口。

netstat命令

netstat是一个用来查看网络状态的重要工具。
用法 : netstat -选项

  1. n 拒绝显示别名,能显示数字的全部转化成数字
  2. l 仅列出有在 Listen (监听) 的服务状态
  3. p 显示建立相关链接的程序名
  4. t (tcp)仅显示tcp相关选项
  5. u (udp)仅显示udp相关选项
  6. a (all)显示所有选项,默认不显示LISTEN相关

另外在LInux中可以通过pidof [进程名] 的方式来查看进程ID。

UDP协议

UDP协议是传输层的协议,是在应用层之下的。它在Linux内核中,我们可以通过系统调用接口,来实现UDP的网络编程。

UDP协议的格式

在这里插入图片描述

UDP的报头非常简单,存在16位源端口和16为目的端口,16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度,如果校验和出错, 就会直接丢弃。

UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部).所以如果数据超过了64K,就需要进行多次发送了。

UDP如何实现报头和有效载荷分离呢?
UDP采用的是固定报头的做法,报头的大小永远为8字节,16位的UDP长度减去8字节就是有效载荷的长度。这样OS就可以知道是否把数据收全了。

UDP如何将有效载荷向上进行交付呢?
UDP可以通过目的端口来进行向上交付。

所谓的报头在内核中其实就是结构化字段。
在这里插入图片描述
所以UDP在发送报文前只需要把把头的结构化字段填好,然后防止报文的前面就可以像服务器进行请求了,但是不管是服务器还是客服端,都一定存在大量的UDP报文,所以OS也一定要对这么多的报文进行管理,所以OS也会存在对报文描述的结构体,报文本质就是数据,所以就是一段缓冲区,所以描述报文的结构体里面一定会存在指针。
在这里插入图片描述
所以OS对报文的管理就成了对这个链表的增删查改。
当数据放在缓冲区之后,只需要在数据的前面把报头加上就可以直接进行发送了。当服务器收到后,因为报头的大小是固定的,所以很容易对报文进行解包。

应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并,这就叫做面向数据报。

UDP没有真正意义上的 发送缓冲区,当我们调用sendto之后,OS会把我们的数据拷贝到内核形成一个报文,然后添加报头进行发送,但是UDP拥有接受缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃;接受缓冲区可以理解为一个struct sk_buff的一个队列。

基于UDP的应用层协议

  1. NFS: 网络文件系统
  2. TFTP: 简单文件传输协议
  3. DHCP: 动态主机配置协议
  4. BOOTP: 启动协议(用于无盘设备启动)
  5. DNS: 域名解析协议

相关推荐

  1. <span style='color:red;'>UDP</span><span style='color:red;'>协议</span>

    UDP协议

    2024-07-17 21:44:03      67 阅读
  2. <span style='color:red;'>UDP</span><span style='color:red;'>协议</span>

    UDP协议

    2024-07-17 21:44:03      47 阅读
  3. UDP协议

    2024-07-17 21:44:03       60 阅读
  4. <span style='color:red;'>UDP</span><span style='color:red;'>协议</span>

    UDP协议

    2024-07-17 21:44:03      49 阅读
  5. <span style='color:red;'>UDP</span><span style='color:red;'>协议</span>

    UDP协议

    2024-07-17 21:44:03      40 阅读
  6. <span style='color:red;'>UDP</span><span style='color:red;'>协议</span>

    UDP协议

    2024-07-17 21:44:03      35 阅读
  7. <span style='color:red;'>UDP</span><span style='color:red;'>协议</span>

    UDP协议

    2024-07-17 21:44:03      28 阅读
  8. <span style='color:red;'>UDP</span><span style='color:red;'>协议</span>

    UDP协议

    2024-07-17 21:44:03      31 阅读
  9. <span style='color:red;'>UDP</span><span style='color:red;'>协议</span>

    UDP协议

    2024-07-17 21:44:03      25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 21:44:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 21:44:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 21:44:03       57 阅读
  4. Python语言-面向对象

    2024-07-17 21:44:03       68 阅读

热门阅读

  1. D365 Fraud Protection Account Protection部署方案

    2024-07-17 21:44:03       25 阅读
  2. 解决数据卷root权限问题的Docker科研向实践思路

    2024-07-17 21:44:03       24 阅读
  3. Webservice使用RestSharp封送SOAP

    2024-07-17 21:44:03       23 阅读
  4. 关于HDFS 和HBase

    2024-07-17 21:44:03       18 阅读
  5. python基础语法

    2024-07-17 21:44:03       22 阅读
  6. C#线程池介绍及应用

    2024-07-17 21:44:03       20 阅读
  7. Collections.unmodifiableList

    2024-07-17 21:44:03       18 阅读
  8. 自动驾驶,革了谁的命

    2024-07-17 21:44:03       24 阅读