基本信息
源码名称:Linux TCP IP 协议栈分析.pdf
源码大小:5.18M
文件格式:.pdf
开发语言:C/C++
更新时间:2020-03-31
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
目 录 目 录 ....................................................................................................................................... ii 图目录.......................................................................................................................................... iv 表目录........................................................................................................................................ viii 前 言 .................................................................................................................................... xiii 感 谢 .................................................................................................................................... xiv 第1章 协议栈概述...................................................................................................................... 1 1.1 操作系统及网络协议介绍................................................................................................ 1 1.1.1 Linux操作系统架构简介.......................................................................................... 1 1.1.2 网络协议发展介绍 .................................................................................................. 2 1.2 本书的组织和安排 .......................................................................................................... 4 1.2.1 基本的数据结构和计算机术语 ................................................................................ 5 1.2.2 图片风格演示.......................................................................................................... 6 1.2.3 本书的组织 ............................................................................................................. 7 第2章 系统初始化...................................................................................................................... 9 2.1 系统初始化流程简介....................................................................................................... 9 2.2 内核文件解读................................................................................................................ 13 2.2.1 ELF文件格式 ........................................................................................................ 13 2.2.2 Link Scripts知识 ................................................................................................... 15 2.2.3 Linux内核镜像研究 ............................................................................................... 16 2.3 中断及任务调度管理..................................................................................................... 23 2.3.1 中断及软中断模型 ................................................................................................ 23 2.3.2 各种语境下的切换 ................................................................................................ 32 2.3.3 内核下的同步与互斥............................................................................................. 33 2.3.4 各种异步手段........................................................................................................ 35 2.4 虚拟文件系统................................................................................................................ 37 2.5 网络协议栈各部分初始化.............................................................................................. 39 2.5.1 网络基础系统初始化............................................................................................. 40 2.5.2 网络内存管理........................................................................................................ 40 2.5.3 网络文件系统初始化............................................................................................. 48 2.5.4 网络协议初始化 .................................................................................................... 50 2.5.5 初步了解路由系统 ................................................................................................ 58 2.6 Linux设备管理 .............................................................................................................. 58 2.6.1 底层PCI模块的初始化 .......................................................................................... 60 2.6.2 网络设备接口初始化例程...................................................................................... 63 第3章 配置系统 ....................................................................................................................... 73 Linux2.6 协议栈源代码分析 第 iii 页 3.1 配置过程分析................................................................................................................ 73 3.1.1 配置是如何下达到内核的?.................................................................................. 73 3.1.2 socket系统调用 .................................................................................................... 74 3.1.3 ioctl代码的实现..................................................................................................... 81 3.1.4 Loopback接口的配置过程 .................................................................................... 90 3.1.5 IP别名的实现........................................................................................................ 92 3.2 回顾FIB系统初始化 ...................................................................................................... 96 3.3 深入FIB系统 ................................................................................................................. 99 3.4 FIB系统发生了什么样的变化 ...................................................................................... 108 3.5 直接访问路由表 .......................................................................................................... 122 3.6 接口状态变化的处理过程............................................................................................ 124 第4章 网络层实现的初步研究................................................................................................ 127 4.1 从Ping 127.0.0.1 开始旅程 ......................................................................................... 127 4.2 再次相遇Socket系统调用 ........................................................................................... 129 4.3 IP数据报文格式 .......................................................................................................... 129 4.4 send系统调用 ............................................................................................................. 130 4.5 在路由系统中游历 ...................................................................................................... 135 4.5.1 查找出口............................................................................................................. 135 4.5.2 当目的地址是远端主机时.................................................................................... 146 4.5.3 创建对应路由cache表项..................................................................................... 147 4.5.4 创建对应邻居表项 .............................................................................................. 151 4.6 回到发送的路径 .......................................................................................................... 156 4.7 ARP的作用 ................................................................................................................. 165 4.7.1 ARP的机制 ......................................................................................................... 166 4.7.2 ARP报文格式...................................................................................................... 166 4.7.3 Linux ARP协议的实现 ........................................................................................ 167 4.8 到达设备驱动层 .......................................................................................................... 180 4.8.1 数据链路层帧格式 .............................................................................................. 180 4.8.2 Loopback设备的发送过程 .................................................................................. 183 4.9 从中断到路由系统 ...................................................................................................... 184 4.10 ICMP........................................................................................................................... 198 4.10.1 ICMP报文格式.................................................................................................... 199 4.10.2 ping本机地址及回环地址.................................................................................... 200 4.10.3 ping外部地址 ...................................................................................................... 202 4.11 从内核到用户.............................................................................................................. 207 第5章 传输层实现的研究....................................................................................................... 211 5.1 进一步到UDP ..............................................................................................................211 5.1.1 UDP用户代码 ......................................................................................................211 5.1.2 UDP数据报文格式 .............................................................................................. 212 Linux2.6 协议栈源代码分析 第 iv 页 5.1.3 服务器端bind的实现 ........................................................................................... 212 5.1.4 接收代码............................................................................................................. 217 5.1.5 释放UDP的socket .............................................................................................. 219 5.2 更高阶的TCP.............................................................................................................. 221 5.2.1 TCP用户代码...................................................................................................... 221 5.2.2 TCP数据报文格式 .............................................................................................. 222 5.2.3 TCP栈及socket的初始化.................................................................................... 223 5.2.4 服务器端bind和listen的实现 ............................................................................... 225 5.2.5 服务器端accept的实现 ....................................................................................... 230 5.2.6 客户端connect的实现——发起三次握手 ............................................................ 232 5.2.7 TCP报文的接收 .................................................................................................. 240 5.2.8 3 次握手的实现................................................................................................... 245 5.2.9 内核收到报文转到用户态.................................................................................... 247 5.2.10 释放TCP的socket............................................................................................... 252 5.3 TCP拥塞控制.............................................................................................................. 256 5.3.1 TCP拥塞控制机制介绍 ....................................................................................... 257 5.3.2 Linux内核拥塞控制功能的实现........................................................................... 259 第6章 Select的实现机制 ....................................................................................................... 261 6.1.1 用户如何使用select?......................................................................................... 262 6.1.2 Select的内核实现 ............................................................................................... 263 第7章 2层功能 ....................................................................................................................... 268 7.1 基本的 2 层知识.......................................................................................................... 268 7.2 Linux桥实现的基本框架.............................................................................................. 268 7.3 VLAN .......................................................................................................................... 269 7.3.1 VLAN概念........................................................................................................... 269 7.3.2 Linux下VLAN——存在巨大的缺陷 ..................................................................... 270 7.4 LACP协议................................................................................................................... 276 7.4.1 LACP简介........................................................................................................... 276 7.4.2 LACP在Linux中的实现 ....................................................................................... 278 后 记 ................................................................................................................................... 284 参考文献 ................................................................................................................................... 285 图目录 图表 1-1 操作系统架构图 ................................................................................................................ 2 图表 1-2 IP为什么重要 ..................................................................................................................... 3 Linux2.6 协议栈源代码分析 第 v 页 图表 1-3 真实操作系统协议栈实现 ................................................................................................ 4 图表 1-4 list和hlist的区别 ................................................................................................................. 6 图表 1-5 函数调用树的演示 ............................................................................................................ 7 图表 2-1Linux内核编译——网络选项部分..................................................................................... 9 图表 2-2 系统启动函数序列图 ....................................................................................................... 10 图表 2-3rest_init函数调用树............................................................................................................11 图表 2-4init函数调用关系树........................................................................................................... 12 图表 2-5ELF文件格式..................................................................................................................... 14 图表 2-6 普通的ELF段排列............................................................................................................ 14 图表 2-7 中断向量和中断请求号之间的关系 .............................................................................. 24 图表 2-8 do_IRQ函数调用树 .......................................................................................................... 27 图表 2-9 系统调用发生的情况 ...................................................................................................... 29 图表 2-10VFS与底层各模块关系................................................................................................... 38 图表 2-11 super_blocks和file_systems链表 .................................................................................... 38 图表 2-12 sock和sk_buff的关系...................................................................................................... 41 图表 2-13 skbuff_fclone_cache中的内存操作................................................................................ 46 图表 2-14 不同skb cache中的内存操作 ........................................................................................ 46 图表 2-15 各协议层函数对网络报文头的理解 ............................................................................ 48 图表 2-16 kern_mount函数调用树.................................................................................................. 49 图表 2-17 sockfs_get_sb函数调用树 .............................................................................................. 50 图表 2-18 inet_init调用树................................................................................................................ 51 图表 2-19 tcp_prot, udp_prot, raw_prot结构................................................................................... 52 图表 2-20 协议栈的具体形式 ........................................................................................................ 57 图表 2-21 pci_module_init函数调用树........................................................................................... 61 图表 2-22 bus_match函数调用树.................................................................................................... 62 图表 2-23 drv->probe的被调用关系树 ........................................................................................... 63 图表 2-24 系统装入各驱动程序的步骤 ........................................................................................ 63 图表 2-25 drvprobe实现的基本功能........................................................................................... 65 图表 2-26net_device和in_device、设备特定数据之间的关系 ..................................................... 71 图表 3-1FD的意义........................................................................................................................... 75 图表 3-2sys_socket的函数调用树................................................................................................... 76 图表 3-3sock_alloc函数调用树....................................................................................................... 76 图表 3-4 soket_alloc结构................................................................................................................. 77 图表 3-5file、socket、sock之间的关系 ......................................................................................... 80 图表 3-6 sock结构在不同协议的数据块........................................................................................ 81 图表 3-7ioctl的内核实现................................................................................................................. 82 图表 3-8 inet_set_ifa之后数据结构之间的关系 ............................................................................ 86 图表 3-9 devinet_ioctl函数调用树 .................................................................................................. 87 图表 3-10 inet_set_ifa发送NETDEV_UP事件 ............................................................................... 87 Linux2.6 协议栈源代码分析 第 vi 页 图表 3-11 rtentry被拆分成 3 个部分............................................................................................... 88 图表 3-12 rtnetlink_init函数调用树 ................................................................................................ 88 图表 3-13 probe发起NET_DEV_REGISTER事件 ......................................................................... 90 图表 3-14 dev_open发起NETDEV_UP事件................................................................................... 91 图表 3-15 IP别名的用途 ................................................................................................................. 93 图表 3-16 ifa_list的组织形式.......................................................................................................... 95 图表 3-17 FIB和RT cache的关系.................................................................................................... 96 图表 3-18 devinet_init函数调用树............................................................................................... 98 图表 3-19ip_fib_init函数调用树 ..................................................................................................... 98 图表 3-20 Linux内核路由模块结构.............................................................................................. 100 图表 3-21 FIB规则和FIB表的关系............................................................................................... 101 图表 3-22 不同算法的fib_table的结构不同................................................................................ 103 图表 3-23fib_table和fn_zone、fib_node结构的关系................................................................... 107 图表 3-24fib_inetaddr_event函数内部实现.................................................................................. 108 图表 3-25 fn_hash_insert之后fib_table和fn_zone及fib_node之间的关系 ...................................118 图表 3-26 fib_node与fib_alias、fib_info、fib_nh结构的关系.....................................................119 图表 3-27 fib_info_hash和fib_info_devhash的关系......................................................................119 图表 3-28 第一次完成FIB表插入................................................................................................ 120 图表 3-29 第二次完成FIB表插入................................................................................................. 120 图表 3-30 第三次完成FIB表插入................................................................................................. 121 图表 3-31 第四次完成FIB表插入................................................................................................. 121 图表 3-32 完成FIB表插入............................................................................................................ 122 图表 3-33 对main FIB表插入....................................................................................................... 122 图表 3-34 常见路由软件架构 ...................................................................................................... 123 图表 3-35linkwatch_run_queue内部主要逻辑 ............................................................................. 126 图表 3-36 NETDEV_CHANGE事件............................................................................................. 126 图表 4-1 IP层数据报文格式.......................................................................................................... 130 图表 4-2 sys_send函数调用树....................................................................................................... 131 图表 4-3 meghdr如何指向用户空间数据..................................................................................... 132 图表 4-4 rt_hash_table和rtable、dst_entry的关系 ....................................................................... 136 图表 4-5fib_result、fib_info、fib_nh的关系 ............................................................................... 142 图表 4-6 __ip_route_output_key内部逻辑和FIB、路由cache之间的关系................................. 151 图表 4-7__neigh_lookup_errno内部逻辑图.................................................................................. 152 图表 4-8ip_output函数调用树....................................................................................................... 159 图表 4-9 hh_cache的结构关系图.................................................................................................. 160 图表 4-10 邻居子系统初次发送过程的序列图 ........................................................................... 165 图表 4-11 ARP报文格式................................................................................................................ 166 图表 4-12 arp_init函数调用树.................................................................................................... 168 图表 4-13neigh_table各成员的关系图 ......................................................................................... 170 Linux2.6 协议栈源代码分析 第 vii 页 图表 4-14 arp_send函数调用树..................................................................................................... 173 图表 4-15 arp_rcv函数调用树....................................................................................................... 174 图表 4-16 ping操作的基本流程.................................................................................................... 180 图表 4-17 以太网层数据报文格式 ............................................................................................... 181 图表 4-18 不同类型的驱动程序造成不同的报文接收方式 ...................................................... 184 图表 4-19 __netif_rx_schedule函数调用树 .................................................................................. 187 图表 4-20 net_rx_actiion函数调用树............................................................................................ 188 图表 4-21 报文到达被不同层次协议处理的原理图 .................................................................. 189 图表 4-22 netif_receive_skb函数调用树....................................................................................... 190 图表 4-23ip_route_input函数调用树 ............................................................................................ 192 图表 4-24 dst_input函数调用树 .................................................................................................... 197 图表 4-25ICMP数据报文格式 ...................................................................................................... 199 图表 4-26 icmp_rcv处理接收到的消息 ........................................................................................ 200 图表 4-27 icmp_echo函数调用树.................................................................................................. 200 图表 4-28 协议栈的交互——目的地址是本机 ........................................................................... 201 图表 4-29 协议栈的交互——目的地址是直连主机 ................................................................... 202 图表 4-30 协议栈的交互——目的地址是远端主机 ................................................................... 204 图表 4-31 ICMP重定向示意图 ..................................................................................................... 204 图表 4-32 ipmp_redirect函数调用树............................................................................................. 205 图表 4-33 sys_rcv函数调用树....................................................................................................... 207 图表 4-34 从两个方向来理解报文是如何到达用户层的 .......................................................... 208 图表 5-1UDP数据报文格式 .......................................................................................................... 212 图表 5-2 udp_hash数据结构.......................................................................................................... 216 图表 5-3 udp_rcv函数调用树........................................................................................................ 217 图表 5-4 release函数...................................................................................................................... 220 图表 5-5 inet_release函数调用树.................................................................................................. 220 图表 5-6TCP数据报文格式........................................................................................................... 222 图表 5-7 sys_listen函数调用树 ..................................................................................................... 226 图表 5-8 bind和listen都要调用tcp_v4_get_port函数 ................................................................... 227 图表 5-9 tcp_hashinfo中的内部数据结构 .................................................................................... 228 图表 5-10 inet_csk_listen_start函数调用树 .................................................................................. 230 图表 5-11 sys_accept函数调用树.................................................................................................. 231 图表 5-12 sys_connct在不同的协议下的执行路径 ..................................................................... 234 图表 5-13ip_local_deliver_finish函数调用tcp的树...................................................................... 240 图表 5-14tcp_v4_conn_request函数调用树.................................................................................. 245 图表 5-15 3 次握手在内核中的实现序列图 ................................................................................ 246 图表 5-16tcp_transmit_skb调用树 ................................................................................................ 247 图表 5-17 tcp_close函数调用树.................................................................................................... 255 图表 5-18 网络负载与吞吐量及响应时间的关系 ....................................................................... 256 Linux2.6 协议栈源代码分析 第 viii 页 图表 5-19(a) 慢启动和拥塞避免.................................................................................................. 258 图表 5-20(b) 快速重传和快速恢复 ............................................................................................. 258 图表 5-21 TCP Reno的状态机....................................................................................................... 259 图表 6-1 典型的软件包实现形式 ................................................................................................ 262 图表 6-2 core_sys_select函数调用树............................................................................................ 265 图表 7-1 netif_receive_skb调用handle_bridge分支...................................................................... 268 图表 7-2 VLAN使用场景之一 ...................................................................................................... 270 图表 7-3 VLAN的格式 .................................................................................................................. 270 图表 7-4 vlan_proto_init函数调用树 ............................................................................................ 271 图表 7-5 sock_ioctl关于VLAN的分支.......................................................................................... 271 图表 7-6 VLAN“设备”组织图 .................................................................................................. 274 图表 7-7 LACP应用场景............................................................................................................... 276 图表 7-8 链路聚合场景中对上层协议的影响 ............................................................................ 277 图表 7-9 LACP报文格式............................................................................................................... 278 图表 7-10 协议原理图 .................................................................................................................. 279 图表 7-11 LACP状态机的运转图 ................................................................................................. 280 图表 7-12 bonding_init函数调用树............................................................................................... 281 图表 7-13 bond_3ad_lacpdu_recv函数调用树.............................................................................. 283 表目录 代码段 1-1 hlist_head的定义 6 代码段 2-1do_initcalls函数 13 代码段 2-2init.h 19 代码段 2-3Linux内核ld scripts 21 代码段 2-4 内核镜像输出init的打印 23 代码段 2-5 2.4 中断定义宏 25 代码段 2-6init_IRQ函数 26 代码段 2-7do_IRQ函数 28 代码段 2-8handle_IRQ_event函数 28 代码段 2-9 sys_socketcall函数 30 代码段 2-10softirq_init函数 30 代码段 2-11open_softirq函数 31 代码段 2-12__do_softirq函数 31 代码段 2-13request_irq函数 32 代码段 2-14 notifier_call_chain函数 37 代码段 2-15 sock_init函数 40 代码段 2-16 sk_buff_head 结构 41 Linux2.6 协议栈源代码分析 第 ix 页 代码段 2-17 sk_buff 结构 43 代码段 2-18 __alloc_skb函数 46 代码段 2-19 kfree_skbmem函数 47 代码段 2-20 tcp_alloc_pskb函数 47 代码段 2-21tcp_free_skb函数 48 代码段 2-22 init_inodecache 函数 48 代码段 2-23 do_kern_mount函数 49 代码段 2-24 inet_family_ops结构 52 代码段 2-25inet_add_protocol函数 53 代码段 2-26 inet_protosw 结构 54 代码段 2-27 inet_register_protosw函数 55 代码段 2-28 inet_stream_ops,inet_dgram_ops,inet_sockraw_ops结构 55 代码段 2-29 packet_type 结构定义 56 代码段 2-30 dev_add_pack函数 56 代码段 2-31 net_dev_init函数 60 代码段 2-32 driver_attach函数 62 代码段 2-33 __pci_device_probe函数 62 代码段 2-34 register_netdevice函数 67 代码段 2-35 net_device结构 70 代码段 2-36 loopback_dev 结构 70 代码段 2-37 in_device结构 71 代码段 3-1 配置ip地址的用户层代码 74 代码段 3-2 socket_file_ops结构定义 77 代码段 3-3 inet_create函数 79 代码段 3-4 ifreq 结构 83 代码段 3-5 devinet_ioctl函数 85 代码段 3-6 inet_set_ifa函数 85 代码段 3-7 inetdev_init函数 86 代码段 3-8 rtmsg_ifa函数 89 代码段 3-9 rtmsg机构 90 代码段 3-10 loopback设备对NETDEV_UP事件的处理 91 代码段 3-11 ifcfg-lo文件里的内容 92 代码段 3-12 inet_rtm_newaddr函数 94 代码段 3-13 inet_insert_ifa函数 95 代码段 3-14 ip_rt_init函数 97 代码段 3-15 fib_hash_init函数 99 代码段 3-16 fib_rule结构 102 代码段 3-17 fib_table结构 103 代码段 3-18 fn_zone结构 104 Linux2.6 协议栈源代码分析 第 x 页 代码段 3-19 fib_node结构 104 代码段 3-20 fib_alias结构 105 代码段 3-21 fib_props数组定义 106 代码段 3-22 fib_info结构 107 代码段 3-23 fib_nh结构 108 代码段 3-24 fib_add_ifaddr函数 109 代码段 3-25 fib_magic函数 110 代码段 3-26 fn_hash_insert函数 112 代码段 3-27 fn_new_zone函数 113 代码段 3-28 fib_create_info函数 116 代码段 3-29 fib_check_nh函数 118 代码段 3-30 ip_rt_ioctl函数 124 代码段 3-31 inet_rtm_newroute 124 代码段 3-32 netif_carrier_on函数 125 代码段 4-1 ping的伪代码 129 代码段 4-2 raw socket情况下的inet_create函数 129 代码段 4-3 msghdr 结构 131 代码段 4-4 iovec 结构 132 代码段 4-5inet_sendmsg函数 132 代码段 4-6 raw_sendmsg函数 134 代码段 4-7 rtabl数据结构 136 代码段 4-8 flowi结构 137 代码段 4-9 __ip_route_output_key函数 139 代码段 4-10 ip_route_output_slow函数 142 代码段 4-11 fib_lookup函数 143 代码段 4-12 fn_hash_lookup函数 144 代码段 4-13 fib_semantic_match函数 145 代码段 4-14 inet_select_addr 146 代码段 4-15 fib_select_default函数 146 代码段 4-16 fn_hash_select_default函数 147 代码段 4-17 ip_mkroute_output_def函数 148 代码段 4-18 __mkroute_output函数 149 代码段 4-19 rt_intern_hash函数 151 代码段 4-20arp_bind_neighbour函数 152 代码段 4-21 neigh_create函数 153 代码段 4-22 neigh_alloc函数 154 代码段 4-23 arp_constructor函数 155 代码段 4-24 ip_push_pending_frames函数 157 代码段 4-25 raw_send_hdrinc函数 158 Linux2.6 协议栈源代码分析 第 xi 页 代码段 4-26 ip_finish_output2 159 代码段 4-27neigh_resolve_output函数 161 代码段 4-28 neigh_event_send函数 161 代码段 4-29 __neigh_event_send函数 162 代码段 4-30 neigh_hh_init函数 163 代码段 4-31 neigh_timer_handler函数 165 代码段 4-32 neigh_table 结构 169 代码段 4-33 neigh_parms 结构 171 代码段 4-34 neigh_table 结构 171 代码段 4-35 neigh_table_init函数 172 代码段 4-36 arp_solicit函数 173 代码段 4-37 arp_process函数 176 代码段 4-38 neigh_update函数 179 代码段 4-39 neigh_suspect函数 179 代码段 4-40 dev_queue_xmit函数 183 代码段 4-41 loopback_xmit函数 184 代码段 4-42 netif_rx函数 186 代码段 4-43 报文接收队列的等价代码 186 代码段 4-44 不同的接收设备使用不同的接收队列 187 代码段 4-45 netif_receive_skb函数 189 代码段 4-46 ip_rcv_finish函数 191 代码段 4-47 ip_route_input_slow函数 194 代码段 4-48 __mkroute_input函数 196 代码段 4-49 ip_local_deliver函数 197 代码段 4-50 ip_local_deliver_finish函数 198 代码段 4-51 ip_forward 203 代码段 4-52 ip_rt_redirect函数 207 代码段 4-53 sock_init_data函数 209 代码段 4-54 sock_def_readable函数 209 代码段 4-55 raw_v4_input函数 210 代码段 5-1 sys_bind函数 213 代码段 5-2 inet_bind函数 215 代码段 5-3 udp_v4_get_port 216 代码段 5-4 udp_v4_lookup_longway函数 218 代码段 5-5 skb_recv_datagram函数 219 代码段 5-6 __sk_del_node_init函数 221 代码段 5-7 tcp_v4_init函数 224 代码段 5-8 tcp_init函数 224 代码段 5-9 tcp_v4_init_sock函数 225 Linux2.6 协议栈源代码分析 第 xii 页 代码段 5-10 inet_listen函数 226 代码段 5-11 inet_csk_listen_start函数 227 代码段 5-12 inet_csk_get_port函数 229 代码段 5-13 inet_csk_wait_for_connect函数 232 代码段 5-14 udp_sendmsg函数部分代码 234 代码段 5-15 inet_stream_connect函数 235 代码段 5-16 tcp_v4_connect函数 237 代码段 5-17 inet_hash_connect函数 239 代码段 5-18 ip_route_newports函数 240 代码段 5-19tcp_v4_do_rcv函数 241 代码段 5-20tcp_rcv_established函数 245 代码段 5-21 tcp_recvmsg 252 代码段 5-22 tcp_close函数 254 代码段 5-23 tcp_reno_cong_avoid函数 260 代码段 6-1select 用法 263 代码段 6-2sys_select函数 264 代码段 6-3 datagram_poll函数 266 代码段 6-4 __pollwait函数 266 代码段 7-1 register_vlan_device函数 274 代码段 7-2 vlan_dev_hard_start_xmit函数 275 代码段 7-3 bond_init函数 282 代码段 7-4 bond_open 282 代码段 7-5 bond_3ad_state_machine_handler函数 283