![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux网络UDP层
文章平均质量分 87
fanxiaoyu321
天道酬勤
展开
-
UDP之数据报接收过程(一)
文章目录从IP层接收数据包: udp_rcv()查找数据包所属套接字计算匹配分值: compute_score()保存数据报到队列: udp_queue_rcv_skb()接收数据到接收队列接收数据到后备队列唤醒用户态进程UDP数据报的接收过程要分两部分来看:网络层将数据报递交给UDP后,UDP的处理过程。该过程中,UDP需要接收数据包并对其进行校验,校验成功后将其放入接收队列中等待用户空间程序来读取;用户空间程序调用read()等系统调用读取已经放入接收队列中的数据。这篇笔记先来介绍第一部分。原创 2018-10-28 12:51:42 · 19154 阅读 · 4 评论 -
UDP之系统调用bind()实现
文章目录AF_INET协议族绑定接口: inet_bind()UDP端口分配UDP传输控制块组织结构udp_v4_get_port()端口可用性判断: udp_lib_lport_inuse()端口自动绑定: inet_autobind()UDP套接字的端口号绑定发生在两种场景:应用程序显示的调用bind(2)实现端口绑定。通常服务器端编程时会这么做,让服务端绑定都一个约定好的端口上;UDP套接字创建后的connect(2)/sendto(2)/sendmsg(2)调用流程中,kernel会在发送自原创 2018-10-21 01:33:56 · 4541 阅读 · 0 评论 -
UDP之数据报校验和
文章目录数据结构sk_buff校验和字段net_device校验和字段接收报文的校验和计算udp4_csum_init()udp_lib_checksum_complete()小结发送报文的校验和计算skb的封装: ip_generic_getfrag()udp_push_pending_frames()udp4_hwcsum_outgoing()udp_csum_outgoing()小结协议设计上,UDP的校验和功能是可选的,Linux实现时,UDP的校验和功能默认是开启的,不过应用程序可以通过选项SO原创 2018-10-26 23:39:31 · 5642 阅读 · 0 评论 -
UDP之收发内存管理
文章目录整体策略变量说明UDP层面的控制变量sysctl_memsysctl_rmem/sysctl_wmemmemory_allocated初始化传输控制块层面的限制sk_rcv_buf/sk_sndbufsk_forward_allocsk_rmem_allocsk_wmem_alloc发送内存限制skb分配sock_alloc_send_pskb()sock_alloc_send_skb()sock_wmalloc()skb_set_owner_w()skb销毁: sock_wfree()小结接收内存原创 2018-10-28 12:54:04 · 5916 阅读 · 3 评论 -
UDP之数据报接收过程(二)
文章目录系统调用: udp_recvmsg()从接收队列中获取skbskb_peek()__skb_unlink()skb_free_datagram_locked()后备队列的数据接收sk_backlog_rcv()UDP数据报的接收过程要分两部分来看:网络层将数据报递交给UDP后,UDP的处理过程。该过程中,UDP需要接收数据包并对其进行校验,校验成功后将其放入接收队列中等待用户空间程序来读取;用户空间程序调用read()等系统调用读取已经放入接收队列中的数据。这篇笔记记录了第二步。系统调原创 2018-10-31 00:04:04 · 3194 阅读 · 0 评论 -
UDP之数据报发送过程
当应用程序调用send()等一系列系统调用向UDP套接字写数据时,最终会调用到UDP的udp_sendmsg(),这篇笔记就以该函数为入口分析下UDP对发送数据包的处理过程。1. 基本特性在分析代码之前,有必要对一些UDP的写操作特性做特别的说明,否则会看的晕头转向。1.1 MSG_MORE标记UDP数据报不像TCP,它是有边界的,即发送端的一个UDP数据报会完整的也被接收端以一个UDP数...原创 2018-12-08 02:15:13 · 7790 阅读 · 0 评论