第十二章 建立连接的过程
分析服务器, 如何为数据块建立数据包, 并从底层向上层传递到服务程序的过程.
12.1 驱动程序接收并建立数据包
......上一章
12.3 接收或转发IP数据包
do_softirq()-->net_rx_action()-->process_backlog()-->netif_receive_skb()-->deliver_skb()-->ip_rcv()-->ip_rcv_finish()-->ip_rcv_options()-->ip_options_rcv_srr()
-->dst_input()-->ip_local_deliver()
ip_rcv_finish()明确数据包是本地接收还是转发(明确网络设备和出口), 处理ip选项内容.
ip_rcv_options()处理ip选项内容.
ip_options_rcv_srr()确定如何处理和数据包. 沿着源路由的每一个跳转地址查找或者建立路由表. 浏览源路由的全部跳转地, 逐个查找路由表, 没有路由表就创建新的路由表.
对本地地址,创建本地路由表设置输入处理函数为ip_local_deliver()
对转发地址, 它会创建转发路由表设输入处理函数为ip_forward().
如果中间检查出错. 则调用icmp_send()函数向客户端发送icmp数据包
ip_local_deliver()处理数据包. 检查ip头部,如果是分段数据包,就调用ip_defrag()将分段数据包插入分段队列. 如果接收的是最后一个分段数据包,则重组数据包
12.4 TCP数据包的处理
12.5 3次握手过程
阅读(648) | 评论(0) | 转发(0) |