当前位置:网站首页 > 云计算与后端部署 > 正文

udp广播报文(udp 广播端口)



目录

1 UDP报文接收概述

2 从IP层接收数据包 udp_rcv()

2.1 查找数据包所属套接字 __udp4_lib_lookup_skb()

2.2 数据包进入队列 udp_queue_rcv_skb()

2.2.1 数据包进接收队列 sk_receive_queue

2.2.2 唤醒阻塞进程 sock_def_readable(进接收队列唤醒)

2.2.3 数据包进后备队列 sk_backlog


UDP数据报的接收要分两部分来看:

  1. 网络层接收完数据包后递交给UDP后,UDP的处理过程。该过程UDP需要做的工作就是接收数据包并对其进行校验,校验成功后将其放入接收队列 sk_receive_queue 中等待用户空间程序来读取。
  2. 用户空间程序调用read()等系统调用读取已经放入接收队列 sk_receive_queue 中的数据。

centos查看udp连接 linux 查看udp的接收情况_centos查看udp连接

该函数是在AF_INET协议族初始化时,由UDP注册给网络层的回调函数,当网络层代码处理完一个输入数据包后,如果该数据包是发往本机的,并且其上层协议就是UDP,那么会调用该回调函数。

疑惑:为何校验和的计算和验证要分udp4_csum_init()和udp_lib_checksum_complete()两步完成???

如上,非常关键的一步就是根据数据包中目的地址信息寻找应该由谁来处理该数据包。

疑惑:查个表为什么这么复杂,这个分值什么鬼???

找到数据包目的端口对应的传输控制块后,会调用该函数接收该数据包。

2.2.1 数据包进接收队列 sk_receive_queue

2.2.2 唤醒阻塞进程 sock_def_readable(进接收队列唤醒)

将数据放入接收队列后,需要唤醒那些因为数据不足而阻塞的进程,这是通过上面的sk->sk_data_ready()回调实现的,对于UDP,该函数就是 sock_def_readable。

2.2.3 数据包进后备队列 sk_backlog

在下半部接收时,如果传输控制块已经被进程锁定,那么会先将数据放入到后备队列中,等进程释放传输控制块时再进行处理,这种设计可以使得软中断能够尽快的结束。

到此这篇udp广播报文(udp 广播端口)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • oracle默认端口号是多少(oracle默认开放端口)2025-01-09 21:27:10
  • redis 6380端口(redis-cli 端口)2025-01-09 21:27:10
  • docker发布时间(docker一般部署什么)2025-01-09 21:27:10
  • 苹果电脑装了双系统之后怎么切换(苹果电脑装了双系统之后怎么切换输入法)2025-01-09 21:27:10
  • pem文件和key文件(pem后缀文件)2025-01-09 21:27:10
  • 服务器部署步骤(服务器部署命令)2025-01-09 21:27:10
  • 苹果软件后缀名是pkg(苹果软件后缀名是多少)2025-01-09 21:27:10
  • edge重置以后开启不了(edge重置以后开启不了怎么办)2025-01-09 21:27:10
  • py文件打包成exe之后打不开(py文件打包为exe)2025-01-09 21:27:10
  • nfs客户端服务(windows nfs客户端)2025-01-09 21:27:10
  • 全屏图片