第十二章 建立连接的过程
分析服务器, 如何为数据块建立数据包, 并从底层向上层传递到服务程序的过程.
12.1 驱动程序接收并建立数据包
struct softnet_data {
......
};
struct napi_struct {
......
};
......
12.2 查找数据包类型且调用其处理函数
struct packet_type {
.....
};
do_softirq()-->net_rx_action()-->process_backlog()-->netif_receive_skb()-->deliver_skb()-->ip_rcv()-->skb_share_check()
-->pskb_may_pull()
-->ip_hdr()
-->ip_fast_csum()
-->pskb_trim_rcsum()
-->ip_rcv_finish()
netif_receive_skb()向上层传递数据, 最终目标是传递给服务器程序.
deliver_skb()调用数据包类型的处理函数
ip_rcv()数据包类型(struct packet_type)的处理函数
skb_share_check()检查是否要克隆一个数据包
pskb_may_pull()检查是否包含IP头部
ip_hdr()获取ip头部
ip_fast_csum()检查ip检验和
pskb_trim_rcsum()为传输层调整数据包与检验和
ip_rcv_finish()明确数据包是本地接收还是转发(明确网络设备和出口), 处理ip选项内容
12.3 接收或转发IP数据包
12.4 TCP数据包的处理
12.5 3次握手过程
阅读(504) | 评论(0) | 转发(0) |