📄 目录.txt
字号:
15.6.2 超级用户特权 36115.7 getsock和sockargs函数 36115.8 bind系统调用 36315.9 listen系统调用 36415.10 tsleep和wakeup函数 36515.11 accept系统调用 36615.12 sonewconn和soisconnected函数 36915.13 connect系统调用 37215.13.1 soconnect函数 37415.13.2 切断无连接插口和外部地址的关联 37515.14 shutdown系统调用 37515.15 close系统调用 37715.15.1 soo_close函数 37715.15.2 soclose函数 37815.16 小结 380第16章 插口I/O 38116.1 引言 38116.2 代码介绍 38116.3 插口缓存 38116.4 write、writev、sendto和sendmsg系统调用 38416.5 sendmsg系统调用 38716.6 sendit函数 38816.6.1 uiomove函数 38916.6.2 举例 39016.6.3 sendit代码 39116.7 sosend函数 39216.7.1 可靠的协议缓存 39316.7.2 不可靠的协议缓存 39316.7.3 sosend函数小结 40116.7.4 性能问题 40116.8 read、readv、recvfrom和recvmsg 系统调用 40116.9 recvmsg系统调用 40216.10 recvit函数 40316.11 soreceive函数 40516.11.1 带外数据 40616.11.2 举例 40616.11.3 其他的接收操作选项 40716.11.4 接收缓存的组织:报文边界 40716.11.5 接收缓存的组织:没有报文边界 40816.11.6 控制信息和带外数据 40916.12 soreceive代码 41016.13 select系统调用 42116.13.1 selscan函数 42516.13.2 soo_select函数 42516.13.3 selrecord函数 42716.13.4 selwakeup函数 42816.14 小结 429第17章 插口选项 43117.1 引言 43117.2 代码介绍 43117.3 setsockopt系统调用 43217.4 getsockopt系统调用 43717.5 fcntl和ioctl系统调用 44017.5.1 fcntl代码 44117.5.2 ioctl代码 44317.6 getsockname系统调用 44417.7 getpeername系统调用 44517.8 小结 447第18章 Radix树路由表 44818.1 引言 44818.2 路由表结构 44818.3 选路插口 45618.4 代码介绍 45618.4.1 全局变量 45818.4.2 统计量 45818.4.3 SNMP变量 45918.5 Radix结点数据结构 46018.6 选路结构 46318.7 初始化:route_init和rtable_init函数 46518.8 初始化:rn_init和rn_inithead函数 46818.9 重复键和掩码列表 47118.10 rn_match函数 47318.11 rn_search函数 48018.12 小结 481第19章 选路请求和选路消息 48219.1 引言 48219.2 rtalloc和rtalloc1函数 48219.3 宏RTFREE和rtfree函数 48419.4 rtrequest函数 48619.5 rt_setgate函数 49119.6 rtinit函数 49319.7 rtredirect函数 49519.8 选路消息的结构 49819.9 rt_missmsg函数 50119.10 rt_ifmsg函数 50319.11 rt_newaddrmsg函数 50419.12 rt_msg1函数 50519.13 rt_msg2函数 50719.14 sysctl_rtable函数 51019.15 sysctl_dumpentry函数 51419.16 sysctl_iflist函数 51519.17 小结 517第20章 选路插口 51820.1 引言 51820.2 routedomain和protosw结构 51820.3 选路控制块 51920.4 raw_init函数 52020.5 route_output函数 52020.6 rt_xaddrs函数 53020.7 rt_setmetrics函数 53120.8 raw_input函数 53220.9 route_usrreq函数 53420.10 raw_usrreq函数 53520.11 raw_attach、raw_detach和raw_disconnect函数 53920.12 小结 540第21章 ARP:地址解析协议 54221.1 介绍 54221.2 ARP和路由表 54221.3 代码介绍 54421.3.1 全局变量 54421.3.2 统计量 54421.3.3 SNMP变量 54621.4 ARP结构 54621.5 arpwhohas函数 54821.6 arprequest函数 54821.7 arpintr函数 55121.8 in_arpinput函数 55221.9 ARP定时器函数 55721.9.1 arptimer函数 55721.9.2 arptfree函数 55721.10 arpresolve函数 55821.11 arplookup函数 56221.12 代理ARP 56321.13 arp_rtrequest函数 56421.14 ARP和多播 56921.15 小结 570第22章 协议控制块 57222.1 引言 57222.2 代码介绍 57322.2.1 全局变量 57422.2.2 统计量 57422.3 inpcb的结构 57422.4 in_pcballoc和in_pcbdetach函数 57522.5 绑定、连接和分用 57722.6 in_pcblookup函数 58122.7 in_pcbbind函数 58422.8 in_pcbconnect函数 58922.9 in_pcbdisconnect函数 59422.10 in_setsockaddr和in_setpeeraddr函数 59522.11 in_pcbnotify、in_rtchange和in_losing函数 59522.11.1 in_rtchange函数 59822.11.2 重定向和原始插口 59922.11.3 ICMP差错和UDP插口 60022.11.4 in_losing函数 60122.12 实现求精 60222.13 小结 602第23章 UDP:用户数据报协议 60523.1 引言 60523.2 代码介绍 60523.2.1 全局变量 60623.2.2 统计量 60623.2.3 SNMP变量 60723.3 UDP 的protosw结构 60723.4 UDP的首部 60823.5 udp_init函数 60923.6 udp_output函数 60923.6.1 在前面加上IP/UDP首部和mbuf簇 61223.6.2 UDP检验和计算和伪首部 61223.7 udp_input函数 61623.7.1 对收到的UDP数据报的一般确认 61623.7.2 分用单播数据报 61923.7.3 分用多播和广播数据报 62223.7.4 连接上的UDP插口和多接口主机 62523.8 udp_saveopt函数 62523.9 udp_ctlinput函数 62723.10 udp_usrreq函数 62823.11 udp_sysctl函数 63323.12 实现求精 63323.12.1 UDP PCB高速缓存 63323.12.2 UDP检验和 63423.13 小结 635第24章 TCP:传输控制协议 63624.1 引言 63624.2 代码介绍 63624.2.1 全局变量 63624.2.2 统计量 63724.2.3 SNMP变量 64024.3 TCP 的protosw结构 64124.4 TCP的首部 64124.5 TCP的控制块 64324.6 TCP的状态变迁图 64524.7 TCP的序号 64624.8 tcp_init函数 65024.9 小结 652第25章 TCP的定时器 65425.1 引言 65425.2 代码介绍 65525.3 tcp_canceltimers函数 65725.4 tcp_fasttimo函数 65725.5 tcp_slowtimo函数 65825.6 tcp_timers函数 65925.6.1 FIN_WAIT_2和2MSL定时器 66025.6.2 持续定时器 66225.6.3 连接建立定时器和保活定时器 66225.7 重传定时器的计算 66525.8 tcp_newtcpcb算法 66625.9 tcp_setpersist函数 66825.10 tcp_xmit_timer函数 66925.11 重传超时:tcp_timers函数 67325.11.1 慢起动和避免拥塞 67525.11.2 精确性 67725.12 一个RTT的例子 67725.13 小结 679第26章 TCP输出 68026.1 引言 68026.2 tcp_output概述 68026.3 决定是否应发送一个报文段 68226.4 TCP选项 69126.5 窗口大小选项 69226.6 时间戳选项 69226.6.1 哪个时间戳需要回显,RFC1323算法 69426.6.2 哪个时间戳需要回显,正确的算法 69526.6.3 时间戳与延迟ACK 69526.7 发送一个报文段 69626.8 tcp_template函数 70726.9 tcp_respond函数 70826.10 小结 710第27章 TCP的函数 71227.1 引言 71227.2 tcp_drain函数 71227.3 tcp_drop函数 71227.4 tcp_close函数 71327.4.1 路由特性 71327.4.2 资源释放 71627.5 tcp_mss函数 71727.6 tcp_ctlinput函数 72227.7 tcp_notify函数 72327.8 tcp_quench函数 72427.9 TCP_REASS宏和tcp_reass函数 72427.9.1 TCP_REASS宏 72527.9.2 tcp_reass函数 72727.10 tcp_trace函数 73227.11 小结 736第28章 TCP的输入 73728.1 引言 73728.2 预处理 73928.3 tcp_dooptions函数 74528.4 首部预测 74728.5 TCP输入:缓慢的执行路径 75228.6 完成被动打开或主动打开 75228.6.1 完成被动打开 75328.6.2 完成主动打开 75628.7 PAWS:防止序号回绕 76028.8 裁剪报文段使数据在窗口内 76228.9 自连接和同时打开 76828.10 记录时间戳 77028.11 RST处理 77028.12 小结 772第29章 TCP的输入(续) 77329.1 引言 77329.2 ACK处理概述 77329.3 完成被动打开和同时打开 77429.4 快速重传和快速恢复的算法 77529.5 ACK处理 77829.6 更新窗口信息 78429.7 紧急方式处理 78629.8 tcp_pulloutofband函数 78829.9 处理已接收的数据 78929.10 FIN处理 79129.11 最后的处理 79329.12 实现求精 79529.13 首部压缩 79529.13.1 引言 79629.13.2 首部字段的压缩 79929.13.3 特殊情况 80129.13.4 实例 80229.13.5 配置 80329.14 小结 803第30章 TCP的用户需求 80530.1 引言 80530.2 tcp_usrreq函数 80530.3 tcp_attach函数 81430.4 tcp_disconnect函数 81530.5 tcp_usrclosed函数 81630.6 tcp_ctloutput函数 81730.7 小结 820第31章 BPF:BSD 分组过滤程序 82131.1 引言 82131.2 代码介绍 82131.2.1 全局变量 82131.2.2 统计量 82231.3 bpf_if结构 82231.4 bpf_d结构 82531.4.1 bpfopen函数 82631.4.2 bpfioctl函数 82731.4.3 bpf_setif函数 83031.4.4 bpf_attachd函数 83131.5 BPF的输入 83231.5.1 bpf_tap函数 83231.5.2 catchpacket函数 83331.5.3 bpfread函数 83531.6 BPF的输出 83731.7 小结 838第32章 原始IP 83932.1 引言 83932.2 代码介绍 83932.2.1 全局变量 83932.2.2 统计量 84032.3 原始 IP的protosw结构 84032.4 rip_init函数 84232.5 rip_input函数 84232.6 rip_output函数 84432.7 rip_usrreq函数 84632.8 rip_ctloutput函数 85032.9 小结 852结束语 853附录A 部分习题的解答 854附录B 源代码的获取 872附录C RFC 1122 的有关内容 874参考文献 895
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -