第十二章 建立连接的过程
分析服务器, 如何为数据块建立数据包, 并从底层向上层传递到服务程序的过程.
12.1 驱动程序接收并建立数据包
struct softnet_data {
......
};
struct napi_struct {
......
};
驱动程序是如何将中断程序登记到内核
cs8900网卡的初始化函数: cs89x0_probe1()-->register_netdev(), 将网卡设备的open()函数指定为net_open(). 为cs8900网卡为内核登记中断程序net_interrput(). 涉及软中断的处理
dm9000及RTL8169网卡中断代码与之大致相同.
当使用ifconfig eth0 up启动网卡时会执行系统调用sys_ioctl(), 最终内核会执行dev_open()函数
net_interrput()-->net_rx()-->eth_type_trans()
-->netif_rx()-->netpoll_rx()
-->napi_schedule()
do_softirq-->net_rx_action()-->process_backlog()
netif_rx()通知内核接收的数据包.
netpoll_rx()判断是否网络控制台内容?使用UDP协议传输的.
napi_schedule()将软中断数据结构的NAPI结构链入到队列
process_backlog()处理数据包我函数, 返回处理后的压力值.
12.2 查找数据包类型且调用其处理函数
12.3 接收或转发IP数据包
12.4 TCP数据包的处理
12.5 3次握手过程
阅读(636) | 评论(0) | 转发(0) |