- 论坛徽章:
- 6
|
回复 1# 瀚海书香
在学习网络部分代码之前,个人感觉把握整体的流程非常重要。
之前曾经写过一个帖子是2.6数据包接收流程(三层),参加http://bbs.chinaunix.net/thread-1960601-1-1.html
这里用函数简单总结一下:
IPv4数据包处理流程:
(1)到达本地的数据包:NAPI驱动-->netif_receive_skb--handle_bridge-->handle_macvlan-->ip_rcv-->NF_HOOK(PREROUTING)-->ip_rcv_finish-->ip_route_input-->ip_local_deliver-->ip_defrag-->NF_HOOK(LOCAL_IN)-->ip_local_deliver_finish-->L4 protocol handle
(2)本地转发的数据包:NAPI驱动-->netif_receive_skb--handle_bridge-->handle_macvlan-->ip_rcv-->NF_HOOK(PREROUTING)-->ip_rcv_finish-->ip_route_input-->ip_forward-->NF_HOOK(FORWARD)-->ip_forward_finish-->dst_output
(3)本地发出的数据包:ip_append_data||ip_push_pending_frams(udp,icmp,rawip),ip_append_page(udp),ip_queue_xmit(tcp,sctp),raw_send_hdrnic(rawip,igmp)-->NF_HOOK(LOCAL_OUT)-->dst_output-->ip_output->ip_finish_output->ip_fragment-->ip_finish_output2 |
|