Linux内核源码剖析:TCP_IP实现(下册) PDF 高清电子书 免费下载 完整版 在线阅读- 高飞网
现在已经04点58分了,请注意休息
Linux内核源码剖析

Linux内核源码剖析
TCP_IP实现(下册)

樊东东,莫澜
Linux TCP/IP
浏览人数:107 在读人数:1
读者:  
Linux内核源码剖析 TCP/IP实现(下册)详细论述了linux内核2.6.20版本中tcp/ip的实现。书中给出了大量的源代码,通过对源代码的详细注释,帮助读者掌握tcp/ip的实现。本书根据协议栈层次,从驱动层逐步论述到传输层,包括驱动的实现、接口层的输入输出、ip层的输入输出以及ip选项的处理、邻居子系统、路由、套接口及传输层等内容,全书基本涵盖了网络体系架构全部的知识点。特别是tcp,包括tcp连接的建立和终止、输入与输出,以及拥塞控制的实现。 

   本书适用于熟悉linux的基本使用方法,对linux内核工作原理以及网络知识有一定的了解,而又极想更深入理解各个机制在linux中的具体实现的用户,包括应用程序员和嵌入式程序员,以及网络管理员等。相关专业的科研人员在工作中遇到问题时,也可以查阅本书,理解相关内核部分的实现。此外,计算机相关专业的本科高年级学生和研究生,在学习相关课程(如操作系统、计算机网络等)时,可将本书作为辅助教程,与理论相结合以便更好地理解相应的知识点。 

第20章 路由缓存 551   
20.1 系统参数 551   
20.2 路由缓存的组织结构 552   
20.2.1 rtable结构 552   
20.2.2 flowi结构 555   
20.2.3 dst_entry结构 556   
20.2.4 dst_ops结构 559   
20.3 初始化 561   
20.4 创建路由缓存项 563   
20.4.1 创建输入路由缓存项 563   
20.4.2 创建输出路由缓存项 565   
20.5 添加路由表项到缓存中:rt_intern_hash() 568   
20.6 输入路由缓存查询:ip_route_input() 571   
20.7 输出路由缓存查询 573   
20.7.1 ip_route_output_key() 573   
20.7.2 __ip_route_output_key() 573   
20.8 垃圾回收 575   
20.8.1 路由缓存项的过期 575   
20.8.2 判断缓存路由表项是否可被删除 575   
20.8.3 同步清理 576   
20.8.4 异步清理 580   
20.8.5 路由缓存项的释放 582   
20.9 刷新缓存 582   
20.9.1 通过定时器定时刷新 584   
20.9.2 网络设备的硬件地址发生改变 584   
20.9.3 网络设备状态发生变化 584   
20.9.4 给设备添加或删除一个IP地址 584   
20.9.5 全局转发状态或设备的转发状态发生变化 584   
20.9.6 一条路由被删除 585   
20.9.7 通过写/proc的flush文件 585   
20.10 ICMP重定向消息的处理 585   
20.11 ICMP目的不可达,需要分片消息的处理 588   
第21章 路由策略 590   
21.1 路由策略组织结构 590   
21.1.1 fib_rules_ops结构 590   
21.1.2 fib_rule结构 592   
21.1.3 fib4_rule结构 594   
21.2 三个默认路由策略 595   
21.3 IPv4协议族的fib_rules_ops结构实例 595   
21.3.1 fib4_rule_action() 595   
21.3.2 fib4_rule_match() 596   
21.3.3 fib4_rule_configure() 596   
21.3.4 fib4_rule_compare() 598   
21.3.5 fib4_rule_fill() 598   
21.3.6 fib4_rule_default_pref() 599   
21.4 netlink接口 599   
21.4.1 netlink路由策略消息结构 599   
21.4.2 fib_nl_newrule() 600   
21.4.3 fib_nl_delrule() 602   
21.5 受网络设备状态改变的影响 604   
21.6 策略路由的查找 604   
第22章 套接口层 606   
22.1 socket结构 607   
22.2 proto_ops结构 608   
22.3 套接口文件系统 610   
22.3.1 套接口文件系统类型 610   
22.3.2 套接口文件系统超级块操作接口 610   
22.3.3 套接口文件的inode 611   
22.3.4 sock_alloc_inode() 611   
22.3.5 sock_destroy_inode() 612   
22.4 套接口文件 612   
22.4.1 套接口文件与套接口的绑定 612   
22.4.2 根据文件描述符获取套接口 614   
22.5 进程、文件描述符和套接口 615   
22.6 套接口层的系统初始化 616   
22.7 套接口系统调用 617   
22.7.1 套接口系统调用入口 617   
22.7.2 socket系统调用 621   
22.7.3 bind系统调用 629   
22.7.4 listen系统调用 632   
22.7.5 accept系统调用 633   
22.7.6 connect系统调用 635   
22.7.7 shutdown系统调用 636   
22.7.8 close系统调用 638   
22.7.9 select系统调用的实现 640   
第23章 套接口I/O 641   
23.1 输出/输入数据的组织 641   
23.1.1 msghdr结构 641   
23.1.2 verify_iovec() 643   
23.1.3 memcpy_toiovec() 644   
23.1.4 memcpy_fromiovec() 644   
23.1.5 memcpy_fromiovecend() 644   
23.1.6 csum_partial_copy_fromiovecend() 644   
23.2 输出系统调用 644   
23.2.1 sock_sendmsg() 644   
23.2.2 sendto系统调用 645   
23.2.3 send系统调用 646   
23.2.4 sendmsg系统调用 646   
23.3 输入系统调用 649   
第24章 套接口选项 650   
24.1 setsockopt系统调用 650   
24.2 ioctl系统调用 655   
24.2.1 ioctl在文件系统内的调用过程 655   
24.2.2 套接口文件ioctl调用接口的实现 655   
24.2.3 套接口层的实现 658   
24.3 getsockname系统调用 659   
24.4 getpeername系统调用 660   
第25章 传输控制块 661   
25.1 系统参数 662   
25.2 传输描述块结构 662   
25.2.1 sock_common结构 662   
25.2.2 sock结构 663   
25.2.3 inet_sock结构 670   
25.3 proto结构 674   
25.3.1 proto实例组织结构 677   
25.3.2 proto_register() 677   
25.3.3 proto_unregister() 679   
25.4 传输控制块的内存管理 680   
25.4.1 传输控制块的分配和释放 680   
25.4.2 普通的发送缓存区的分配 682   
25.4.3 发送缓存的分配与释放 685   
25.4.4 接收缓存的分配与释放 686   
25.4.5 辅助缓存的分配与释放 688   
25.5 异步IO机制 688   
25.5.1 sk_wake_async() 689   
25.5.2 sock_def_wakeup() 690   
25.5.3 sock_def_error_report() 690   
25.5.4 sock_def_readable() 691   
25.5.5 sock_def_write_space()和sk_stream_write_space() 691   
25.5.6 sk_send_sigurg() 692   
25.5.7 接收到FIN段后通知进程 692   
25.5.8 sock_fasync() 693   
25.6 传输控制块的同步锁 694   
25.6.1 socket_lock_t结构 694   
25.6.2 控制用户进程和下半部间同步锁 695   
25.6.3 控制下半部间同步锁 698   
第26章 TCP:传输控制协议 699   
26.1 系统参数 699   
26.2 TCP的inet_protosw实例 705   
26.3 TCP的net_protocol结构 705   
26.4 TCP传输控制块 706   
26.4.1 inet_connection_sock结构 706   
26.4.2 inet_connection_sock_af_ops结构 710   
26.4.3 tcp_sock结构 711   
26.4.4 tcp_options_received结构 721   
26.4.5 tcp_skb_cb结构 723   
26.5 TCP的proto结构和proto_ops结构的实例 725   
26.6 TCP状态迁移图 725   
26.7 TCP首部 726   
26.8 TCP校验和 727   
26.8.1 输入TCP段的校验和检测 728   
26.8.2 输出TCP段校验和的计算 729   
26.9 TCP的初始化 729   
26.10 TCP传输控制块的管理 731   
26.10.1 inet_hashinfo结构 732   
26.10.2 管理除LISTEN状态之外的TCP传输控制块 733   
26.10.3 管理LISTEN状态的TCP传输控制块 734   
26.11 TCP层的套接口选项 735   
26.12 TCP的ioctl 736   
26.13 TCP传输控制块的初始化 737   
26.14 TCP的差错处理 737   
26.15 TCP传输控制块层的缓存管理 741   
26.15.1 缓存管理的算法 741   
26.15.2 发送缓存的管理 744   
26.15.3 接收缓存的管理 745   
第27章 TCP的定时器 746   
27.1 初始化 746   
27.2 连接建立定时器 747   
27.2.1 连接建立定时器处理函数 747   
27.2.2 连接建立定时器的激活 751   
27.3 重传定时器 751   
27.3.1 重传定时器处理函数 751   
27.3.2 重传定时器的激活 756   
27.4 延迟确认定时器 756   
27.4.1 延时确认定时器的处理函数 756   
27.4.2 延时确认定时器的激活 758   
27.5 持续定时器 758   
27.5.1 持续定时器处理函数 758   
27.5.2 激活持续定时器 762   
27.6 保活定时器 763   
27.6.1 保活定时器处理函数 763   
27.6.2 激活保活定时器 764   
27.7 FIN_WAIT_2定时器 764   
27.7.1 FIN_WAIT_2定时器处理函数 765   
27.7.2 激活FIN_WAIT_2定时器 765   
27.8 TIME_WAIT定时器 766   
第28章 TCP连接的建立 767   
28.1 服务端建立连接过程 767   
28.2 连接相关的数据结构 770   
28.2.1 request_sock_queue结构 770   
28.2.2 listen_sock结构 771   
28.2.3 tcp_request_sock结构 771   
28.2.4 request_sock_ops结构 774   
28.3 bind系统调用的实现 775   
28.3.1 bind端口散列表 775   
28.3.2 传输接口层的实现 775   
28.4 listen系统调用的实现 779   
28.4.1 inet_listen() 779   
28.4.2 实现侦听: inet_csk_listen_start() 780   
28.4.3 分配连接请求块散列表: reqsk_queue_alloc() 781   
28.5 accept系统调用的实现 782   
28.5.1 套接口层的实现: inet_accept() 782   
28.5.2 传输接口层的实现: inet_csk_accept() 783   
28.6 被动打开 785   
28.6.1 SYN cookies 785   
28.6.2 第一次握手:接收SYN段 786   
28.6.3 第二次握手:发送SYN+ACK段 793   
28.6.4 第三次握手:接收ACK段 798   
28.7 connect系统调用的实现 813   
28.7.1 套接口层的实现: inet_stream_connect() 813   
28.7.2 传输接口层的实现 815   
28.8 主动打开 816   
28.8.1 第一次握手:发送SYN段 816   
28.8.2 第二次握手:接收SYN+ACK段 823   
28.8.3 第三次握手:发送ACK段 828   
28.9 同时打开 828   
28.9.1 SYN_SENT状态接收SYN段 828   
28.9.2 SYN_RECV状态接收SYN+ACK段 830   
第29章 TCP拥塞控制的实现 831   
29.1 拥塞控制引擎 831   
29.2 拥塞控制状态机 832   
29.2.1 Open状态 833   
29.2.2 Disorder状态 833   
29.2.3 CWR状态 833   
29.2.4 Recovery状态 834   
29.2.5 Loss状态 834   
29.3 拥塞窗口调整撤销 836   
29.3.1 撤销拥塞窗口的检测 837   
29.3.2 tcp_undo_cwr() 837   
29.3.3 从Disorder拥塞状态撤销 838   
29.3.4 从Recovery状态撤销 838   
29.3.5 从Recovery拥塞状态撤销 839   
29.3.6 从Loss拥塞状态撤销 839   
29.4 显式拥塞通知 840   
29.4.1 IP对ECN的支持 841   
29.4.2 TCP对ECN的支持 841   
29.5 拥塞控制状态的处理及转换 843   
29.5.1 拥塞控制状态的处理: tcp_fastretrans_alert() 843   
29.5.2 拥塞避免 852   
29.6 拥塞窗口的检测: tcp_cwnd_test() 852   
29.7 F-RTO算法 853   
29.7.1 进入F-RTO算法处理阶段 853   
29.7.2 进行F-RTO算法处理 855   
29.8 拥塞窗口的检验 857   
29.8.1 tcp_event_data_sent() 857   
29.8.2 tcp_cwnd_validate() 858   
29.9 支持多拥塞控制算法的机制 859   
29.9.1 接口 859   
29.9.2 注册拥塞控制算法:tcp_register_congestion_control() 861   
29.9.3 注销拥塞控制算法:tcp_unregister_congestion_control() 861   
29.9.4 选取某种拥塞控制算法: tcp_set_congestion_control() 861   
29.9.5 Linux支持的拥塞控制算法 862   
第30章 TCP的输出 864   
30.1 引言 864   
30.2 最大段长度(MSS) 867   
30.3 sendmsg系统调用在TCP中的实现 870   
30.3.1 分割TCP段 871   
30.3.2 套接口层的实现 871   
30.3.3 传输接口层的实现 871   
30.4 对TCP选项的处理 889   
30.4.1 构建SYN段的选项 889   
30.4.2 构建非SYN段的选项 892   
30.5 Nagle算法 893   
30.6 ACK的接收 894   
30.6.1 tcp_ack() 894   
30.6.2 发送窗口的更新 899   
30.6.3 根据SACK选项标记重传队列中段的记分牌 900   
30.6.4 重传队列中已经确认段的删除 910   
30.7 往返时间测量和RTO的计算 913   
30.8 路径MTU发现 915   
30.8.1 路径MTU发现原理 915   
30.8.2 路径MTU发现时的黑洞 916   
30.8.3 有关数据结构的初始化 916   
30.8.4 创建路径MTU发现TCP段并发送 916   
30.8.5 路径MTU发现失败后处理 920   
30.8.6 处理需要分片ICMP目的不可达报文 920   
30.8.7 更新当前有效的MSS 921   
30.8.8 路径MTU发现成功后处理 922   
30.9 TCP重传接口 922   
第31章 TCP的输入 926   
31.1 引言 926   
31.2 TCP接收的总入口 927   
31.2.1 接收到prequeue队列 930   
31.2.2 有效TCP段的处理 931   
31.3 报文的过滤 932   
31.3.1 过滤器的数据结构 933   
31.3.2 安装过滤器 935   
31.3.3 卸载过滤器 937   
31.3.4 过滤执行 938   
31.4 ESTABLISHED状态的接收 938   
31.4.1 首部预测 939   
31.4.2 接收处理无负荷的ACK段 941   
31.4.3 执行快速路径 942   
31.4.4 执行慢速路径 945   
31.4.5 数据从内核空间复制到用户空间 948   
31.4.6 通过调节接收窗口进行流量控制 952   
31.4.7 确定是否需要发送ACK段(用于接收的数据从内核空间复制到用户空间时) 956   
31.5 TCP选项的处理 957   
31.5.1 慢速路径中快速解析TCP选项 957   
31.5.2 全面解析TCP选项 958   
31.6 慢速路径的数据处理 961   
31.6.1 接收处理预期的段 963   
31.6.2 接收处理在接收窗口之外的段 965   
31.6.3 接收处理乱序的段 966   
31.6.4 tcp_ofo_queue() 969   
31.7 带外数据处理 970   
31.7.1 检测紧急指针 970   
31.7.2 读取带外数据 972   
31.8 SACK信息 973   
31.8.1 SACK允许选项 973   
31.8.2 SACK选项 974   
31.8.3 SACK的产生 974   
31.8.4 发送方对SACK的响应 975   
31.8.5 实现 975   
31.9 确认的发送 975   
31.9.1 快速确认模式 976   
31.9.2 处理数据接收事件 977   
31.9.3 发送确认紧急程度和状态 978   
31.9.4 延迟或快速确认 979   
31.10 recvmsg系统调用在TCP中的实现 980   
31.10.1 套接口层的实现 980   
31.10.2 传输接口层的实现 980   
31.11 sk_backlog_rcv接口 991   
第32章 TCP连接的终止 992   
32.1 连接终止过程 993   
32.1.1 正常关闭 993   
32.1.2 同时关闭 994   
32.2 shutdown传输接口层的实现 994   
32.2.1 tcp_shutdown() 994   
32.2.2 tcp_send_fin() 995   
32.3 close传输接口层的实现:tcp_close() 995   
32.4 被动关闭:FIN段的接收处理 999   
32.5 主动关闭 1002   
32.5.1 timewait控制块的数据结构 1002   
32.5.2 timewait控制块取代TCP传输控制块 1006   
32.5.3 启动FIN_WAIT_2或TIME_WAIT定时器 1008   
32.5.4 CLOSE_WAIT、LAST_ACK、FIN_WAIT1、FIN_WAIT2与CLOSING状态处理 1010   
32.5.5 FIN_WAIT2和TIME_WAIT状态处理 1013   
32.5.6 timewait控制块的2MSL超时处理 1020   
第33章 UDP:用户数据报 1023   
33.1 引言 1023   
33.1.1 UDP首部 1023   
33.1.2 UDP的输入与输出 1024   
33.2 UDP的inet_protosw结构 1024   
33.3 UDP的传输控制块 1025   
33.4 UDP的proto结构和proto_ops结构的实例 1027   
33.5 UDP的状态 1027   
33.6 UDP传输控制块的管理 1027   
33.7 bind系统调用的实现 1028   
33.8 UDP套接口的关闭 1031   
33.9 connect系统调用的实现 1032   
33.9.1 udp_disconnect() 1033   
33.9.2 ip4_datagram_connect() 1033   
33.10 select系统调用的实现 1034   
33.11 UDP的ioctl 1037   
33.12 UDP的套接口选项 1037   
33.13 UDP校验和 1038   
33.13.1 输入UDP数据报校验和的计算 1038   
33.13.2 输出UDP数据报校验和的计算 1039   
33.14 UDP的输出:sendmsg系统调用 1040   
33.14.1 udp_sendmsg() 1040   
33.14.2 udp_push_pending_frames() 1047   
33.15 UDP的输入 1048   
33.15.1 UDP接收的入口: udp_rcv() 1048   
33.15.2 UDP组播数据报输入: __udp4_lib_mcast_deliver() 1052   
33.15.3 udp_queue_rcv_skb() 1053   
33.16 recvmsg系统调用的实现 1055   
33.17 UDP的差错处理: udp_err() 1059   
33.18 轻量级UDP 1061   
参考文献 1063   
看过本书的人还看过