网络
文章平均质量分 95
weixin_45673259
这个作者很懒,什么都没留下…
展开
-
内核是如何发送数据包
网络发包总流程图如下:从上图中可以看到用户数据被拷贝到内核态,然后经过协议栈处理后进入RingBuffer。随后网卡驱动真正的将数据发送了出去。当发送完成的时候,是通过硬中断来通知CPU,然后清理RingBuffer。下面从源码的角度给出一个流程图。原创 2024-09-22 12:24:05 · 1022 阅读 · 0 评论 -
网络-内核是如何与用户进程交互
socket在内核中是怎么创建的?在__sock_create里首先调用sock_alloc来分配一个struct sock内核对象,接着获取协议簇的操作函数表,调用其create方法。对于AF_INET协议簇来说,执行到的是inet_create函数。在inet_create中根据类型SOCK_STREAM查找到对于TCP定义的操作方法实现集合inet_stream_ops和tcp_port,并把它们分别设置到socket->ops和sock->sk_port上。原创 2024-09-19 15:59:20 · 1075 阅读 · 0 评论 -
内核是如何接收网络包的
在__netif_receive_skb_core中可以看到tcpdump命令的抓包点和netfilter的输入的第一个挂接点,tcpdump将抓包函数以协议形式挂到ptype_all上,设备层遍历所有协议,就能抓到数据包了,tcpdump会执行packet_create。_igb_open函数调用了igb_setup_all_tx_resources和igb_setup_all_rx_resources。inet_protos中保存着tcp_v4_rcv和udp_rcv的函数地址。原创 2024-09-18 23:33:23 · 1202 阅读 · 0 评论