وبلاگ بلیان

Linux内核源码剖析 TCP/IP实现 下

معرفی کتاب «Linux内核源码剖析 TCP/IP实现 下» نوشتهٔ 樊东东; 莫澜، منتشرشده توسط نشر 机械工业出版社 در سال 2011. این کتاب در فرمت pdf، زبان zh ارائه شده است. «Linux内核源码剖析 TCP/IP实现 下» در دستهٔ بدون دسته‌بندی قرار دارد.

《Linux内核源码剖析:TCP/IP实现(套装上下册)》详细论述了Linux内核2.6.20版本中TCP/IP的实现。书中给出了大量的源代码,通过对源代码的详细注释,帮助读者掌握TCP/IP的实现。《Linux内核源码剖析:TCP/IP实现(套装上下册)》根据协议栈层次,从驱动层逐步论述到传输层,包括驱动的实现、接口层的输入输出、IP层的输入输出以及IP选项的处理、邻居子系统、路由、套接口及传输层等内容,全书基本涵盖了网络体系架构全部的知识点。特别是TCP,包括TCP连接的建立和终止、输入与输出,以.及拥塞控制的实现。 《Linux内核源码剖析:TCP/IP实现(套装上下册)》适用于熟悉Linux的基本使用方法,对Linux内核工作原理以及网络知识有一定的了解,而又极想更深入理解各个机制在Linux中的具体实现的用户,包括应用程序员和嵌入式程序员,以及网络管理员等。相关专业的科研人员在工作中遇到问题时,也可以查阅《Linux内核源码剖析:TCP/IP实现(套装上下册)》,理解相关内核部分的实现。此外,计算机相关专业的本科高年级学生和研究生,在学习相关课程(如操作系统、计算机网络等)时,可将《Linux内核源码剖析:TCP/IP实现(套装上下册)》作为辅助教程,与理论相结合以便更好地理解相应的知识点。 封面 书名 目录 第20章 路由缓存 20.1 系统参数 20.2 路由缓存的组织结构 20.2.1 rtable结构 20.2.2 flowi结构 20.2.3 dst_entry结构 20.2.4 dst_ops结构 20.3 初始化 20.4 创建路由缓存项 20.4.1 创建输入路由缓存项 20.4.2 创建输出路由缓存项 20.5 添加路由表项到缓存中:rt_intern_hash() 20.6 输入路由缓存查询:ip_route_input() 20.7 输出路由缓存查询 20.7.1 ip_route_output_key() 20.7.2 _ip_route_output_key() 20.8 垃圾回收 20.8.1 路由缓存项的过期 20.8.2 判断缓存路由表项是否可被删除 20.8.3 同步清理 20.8.4 异步清理 20.8.5 路由缓存项的释放 20.9 刷新缓存 20.9.1 通过定时器定时刷新 20.9.2 网络设备的硬件地址发生改变 20.9.3 网络设备状态发生变化 20.9.4 给设备添加或删除一个IP地址 20.9.5 全局转发状态或设备的转发状态发生变化 20.9.6 一条路由被删除 20.9.7 通过写/proc的flush文件 20.10 ICMP重定向消息的处理 20.11 ICMP目的不可达,需要分片消息的处理 第21章 路由策略 21.1 路由策略组织结构 21.1.1 fib_rules_ops结构 21.1.2 fib_rule结构 21.1.3 fib4_rule结构 21.2 三个默认路由策略 21.3 IPv4协议族的fib_rules_ops结构实例 21.3.1 fib4_rule_action() 21.3.2 fib4_rule_match() 21.3.3 fib4_rule_configure() 21.3.4 fib4_rule_compare() 21.3.5 fib4_rule_fill() 21.3.6 fib4_rule_default_pref() 21.4 netlink接口 21.4.1 netlink路由策略消息结构 21.4.2 fib_nl_newrule() 21.4.3 fib_nl_delrule() 21.5 受网络设备状态改变的影响 21.6 策略路由的查找 第22章 套接口层 22.1 socket结构 22.2 proto_ops结构 22.3 套接口文件系统 22.3.1 套接口文件系统类型 22.3.2 套接口文件系统超级块操作接口 22.3.3 套接口文件的inode 22.3.4 sock_alloc_inode() 22.3.5 sock_destroy_inode() 22.4 套接口文件 22.4.1 套接口文件与套接口的绑定 22.4.2 根据文件描述符获取套接口 22.5 进程、文件描述符和套接口 22.6 套接口层的系统初始化 22.7 套接口系统调用 22.7.1 套接口系统调用入口 22.7.2 socket系统调用 22.7.3 bind系统调用 22.7.4 listen系统调用 22.7.5 accept系统调用 22.7.6 connect系统调用 22.7.7 shutdown系统调用 22.7.8 close系统调用 22.7.9 select系统调用的实现 第23章 套接口I/O 23.1 输出/输入数据的组织 23.1.1 msghdr结构 23.1.2 verify_iovec() 23.1.3 memcpy_toiovec() 23.1.4 memcpy_fromiovec() 23.1.5 memcpy_fromiovecend() 23.1.6 csum_partial_copy_fromiovecend() 23.2 输出系统调用 23.2.1 sock_sendmsg() 23.2.2 sendto系统调用 23.2.3 send系统调用 23.2.4 sendmsg系统调用 23.3 输入系统调用 第24章 套接口选项 24.1 setsockopt系统调用 24.2 ioctl系统调用 24.2.1 ioctl在文件系统内的调用过程 24.2.2 套接口文件ioctl调用接口的实现 24.2.3 套接口层的实现 24.3 getsockname系统调用 24.4 getpeemame系统调用 第25章 传输控制块 25.1 系统参数 25.2 传输描述块结构 25.2.1 sock_common结构 25.2.2 sock结构 25.2.3 inet_sock结构 25.3 proto结构 25.3.1 proto实例组织结构 25.3.2 proto_register() 25.3.3 proto_unregister() 25.4 传输控制块的内存管理 25.4.1 传输控制块的分配和释放 25.4.2 普通的发送缓存区的分配 25.4.3 发送缓存的分配与释放 25.4.4 接收缓存的分配与释放 25.4.5 辅助缓存的分配与释放 25.5 异步IO机制 25.5.1 sk_wake_async() 25.5.2 sock_def_wakeup() 25.5.3 sock_def_error_report() 25.5.4 sock_def_readable() 25.5.5 sock_def_write_space()和sk_stream_write_space() 25.5.6 sk_send_sigurg() 25.5.7 接收到FIN段后通知进程 25.5.8 sock_fasync() 25.6 传输控制块的同步锁 25.6.1 socket_lock_t结构 25.6.2 控制用户进程和下半部间同步锁 25.6.3 控制下半部间同步锁 第26章 TCP:传输控制协议 26.1 系统参数 26.2 TCP的inet_protosw实例 26.3 TCP的net_protocol结构 26.4 TCP传输控制块 26.4.1 inet_connection_sock结构 26.4.2 inet_connection_sock_af_ops结构 26.4.3 tcp_sock结构 26.4.4 tcp_options_received结构 26.4.5 tcp_skb_cb结构 26.5 TCP的proto结构和proto_ops结构的实例 26.6 TCP状态迁移图 26.7 TCP首部 26.8 TCP校验和 26.8.1 输入TCP段的校验和检测 26.8.2 输出TCP段校验和的计算 26.9 TCP的初始化 26.10 TCP传输控制块的管理 26.10.1 inet_hashinfo结构 26.10.2 管理除LISTEN状态之外的TCP传输控制块 26.10.3 管理LISTEN状态的TCP传输控制块 26.11 TCP层的套接口选项 26.12 TCP的ioctl 26.13 TCP传输控制块的初始化 26.14 TCP的差错处理 26.15 TCP传输控制块层的缓存管理 26.15.1 缓存管理的算法 26.15.2 发送缓存的管理 26.15.3 接收缓存的管理 第27章 TCP的定时器 27.1 初始化 27.2 连接建立定时器 27.2.1 连接建立定时器处理函数 27.2.2 连接建立定时器的激活 27.3 重传定时器 27.3.1 重传定时器处理函数 27.3.2 重传定时器的激活 27.4 延迟确认定时器 27.4.1 延时确认定时器的处理函数 27.4.2 延时确认定时器的激活 27.5 持续定时器 27.5.1 持续定时器处理函数 27.5.2 激活持续定时器 27.6 保活定时器 27.6.1 保活定时器处理函数 27.6.2 激活保活定时器 27.7 FIN_WAIT_2定时器 27.7.1 FIN_WAIT_2定时器处理函数 27.7.2 激活FIN_WAIT_2定时器 27.8 TIME_WAIT定时器 第28章 TCP连接的建立 28.1 服务端建立连接过程 28.2 连接相关的数据结构 28.2.1 request_sock_queue结构 28.2.2 listen_sock结构 28.2.3 tcp_request_sock结构 28.2.4 request_sock_ops结构 28.3 bind系统调用的实现 28.3.1 bind端口散列表 28.3.2 传输接口层的实现 28.4 listen系统调用的实现 28.4.1 inet_listen() 28.4.2 实现侦听:inet_csk_listen_start() 28.4.3 分配连接请求块散列表:reqsk_queue_alloc() 28.5 accept系统调用的实现 28.5.1 套接口层的实现:inet_accept() 28.5.2 传输接口层的实现:inet_csk_accept() 28.6 被动打开 28.6.1 SYN cookies 28.6.2 第一次握手:接收SYN段 28.6.3 第二次握手:发送SYN+ACK段 28.6.4 第三次握手:接收ACK段 28.7 connect系统调用的实现 28.7.1 套接口层的实现:inet_stream_connect() 28.7.2 传输接口层的实现 28.8 主动打开 28.8.1 第一次握手:发送SYN段 28.8.2 第二次握手:接收SYN+ACK段 28.8.3 第三次握手:发送ACK段 28.9 同时打开 28.9.1 SYN_SENT状态接收SYN段 28.9.2 SYN_RECV状态接收SYN+ACK段 第29章 TCP拥塞控制的实现 29.1 拥塞控制引擎 29.2 拥塞控制状态机 29.2.1 Open状态 29.2.2 Disorder状态 29.2.3 CWR状态 29.2.4 Recovery状态 29.2.5 Loss状态 29.3 拥塞窗口调整撤销 29.3.1 撤销拥塞窗口的检测 29.3.2 tcp_undo_cwr() 29.3.3 从Disorder拥塞状态撤销 29.3.4 从Recovery状态撤销 29.3.5 从Recovery拥塞状态撤销 29.3.6 从Loss拥塞状态撤销 29.4 显式拥塞通知 29.4.1 IP对ECN的支持 29.4.2 TCP对ECN的支持 29.5 拥塞控制状态的处理及转换 29.5.1 拥塞控制状态的处理:tcp_fastretrans_alert() 29.5.2 拥塞避免 29.6 拥塞窗口的检测:tcp_cwnd_test() 29.7 F-RTO算法 29.7.1 进入F-RTO算法处理阶段 29.7.2 进行F-RTO算法处理 29.8 拥塞窗口的检验 29.8.1 tcp_event_data_sent() 29.8.2 tcp_cwnd_validate() 29.9 支持多拥塞控制算法的机制 29.9.1 接口 29.9.2 注册拥塞控制算法:tcp_register_congestion_control() 29.9.3 注销拥塞控制算法:tcp_unregister_congestion_control() 29.9.4 选取某种拥塞控制算法:tcp_set_congestion_control() 29.9.5 Linux支持的拥塞控制算法 第30章 TCP的输出 30.1 引言 30.2 最大段长度(MSS) 30.3 sendmsg系统调用在TCP中的实现 30.3.1 分割TCP段 30.3.2 套接口层的实现 30.3.3 传输接口层的实现 30.4 对TCP选项的处理 30.4.1 构建SYN段的选项 30.4.2 构建非SYN段的选项 30.5 Nagle算法 30.6 ACK的接收 30.6.1 tep_ack() 30.6.2 发送窗口的更新 30.6.3 根据SACK选项标记重传队列中段的记分牌 30.6.4 重传队列中已经确认段的删除 30.7 往返时间测量和RTO的计算 30.8 路径MTU发现 30.8.1 路径MTU发现原理 30.8.2 路径MTU发现时的黑洞 30.8.3 有关数据结构的初始化 30.8.4 创建路径MTU发现TCP段并发送 30.8.5 路径MTU发现失败后处理 30.8.6 处理需要分片ICMP目的不可达报文 30.8.7 更新当前有效的MSS 30.8.8 路径MTU发现成功后处理 30.9 TCP重传接口 第31章 TCP的输入 31.1 引言 31.2 TCP接收的总入口 31.2.1 接收到prequeue队列 31.2.2 有效TCP段的处理 31.3 报文的过滤 31.3.1 过滤器的数据结构 31.3.2 安装过滤器 31.3.3 卸载过滤器 31.3.4 过滤执行 31.4 ESTABLISHED状态的接收 31.4.1 首部预测 31.4.2 接收处理无负荷的ACK段 31.4.3 执行快速路径 31.4.4 执行慢速路径 31.4.5 数据从内核空间复制到用户空间 31.4.6 通过调节接收窗口进行流量控制 31.4.7 确定是否需要发送ACK段(用于接收的数据从内核空间复制到用户空间时) 31.5 TCP选项的处理 31.5.1 慢速路径中快速解析TCP选项 31.5.2 全面解析TCP选项 31.6 慢速路径的数据处理 31.6.1 接收处理预期的段 31.6.2 接收处理在接收窗口之外的段 31.6.3 接收处理乱序的段 31.6.4 tcp_ofo_queue() 31.7 带外数据处理 31.7.1 检测紧急指针 31.7.2 读取带外数据 31.8 SACK信息 31.8.1 SACK允许选项 31.8.2 SACK选项 31.8.3 SACK的产生 31.8.4 发送方对SACK的响应 31.8.5 实现 31.9 确认的发送 31.9.1 快速确认模式 31.9.2 处理数据接收事件 31.9.3 发送确认紧急程度和状态 31.9.4 延迟或快速确认 31.10 recvmsg系统调用在TCP中的实现 31.10.1 套接口层的实现 31.10.2 传输接口层的实现 31.11 sk_backlog_rcv接口 第32章 TCP连接的终止 32.1 连接终止过程 32.1.1 正常关闭 32.1.2 同时关闭 32.2 shutdown传输接口层的实现 32.2.1 tcp_shutdown() 32.2.2 tcp_send_fin() 32.3 close传输接口层的实现:tcp_close() 32.4 被动关闭:FIN段的接收处理 32.5 主动关闭 32.5.1 timewait控制块的数据结构 32.5.2 timewait控制块取代TCP传输控制块 32.5.3 启动FIN_WAIT_2或TIME_WAIT定时器 32.5.4 CLOSE_WAIT、LAST_ACK、FIN_WAIT1、FIN_WAIT2与CLOSING状态处理 32.5.5 FIN_WAIT2和TIME_WAIT状态处理 32.5.6 timewait控制块的2MSL超时处理 第33章 UDP:用户数据报 33.1 引言 33.1.1 UDP首部 33.1.2 UDP的输入与输出 33.2 UDP的inet_protosw结构 33.3 UDP的传输控制块 33.4 UDP的proto结构和proto_ops结构的实例 33.5 UDP的状态 33.6 UDP传输控制块的管理 33.7 bind系统调用的实现 33.8 UDP套接口的关闭 33.9 connect系统调用的实现 33.9.1 udp_disconnect() 33.9.2 ip4_datagram_connect() 33.10 select系统调用的实现 33.11 UDP的ioctl 33.12 UDP的套接口选项 33.13 UDP校验和 33.13.1 输入UDP数据报校验和的计算 33.13.2 输出UDP数据报校验和的计算 33.14 UDP的输出:sendmsg系统调用 33.14.1 udp_sendmsg() 33.14.2 udp_push_pending_frames() 33.15 UDP的输入 33.15.1 UDP接收的入口:udp_rcv() 33.15.2 UDP组播数据报输入:_udp4_lib_mcast_deliver() 33.15.3 udp_queue_rcv_skb() 33.16 recvmsg系统调用的实现 33.17 UDP的差错处理:udp_err() 33.18 轻量级UDP 参考文献
دانلود کتاب Linux内核源码剖析 TCP/IP实现 下