美国Addison Wesley公司授权
TCP/IP详解 卷2:实现
✍ Scribed by 史蒂文斯
- Publisher
- 机械工业出版社
- Year
- 2004
- Tongue
- Chinese
- Leaves
- 923
- Series
- TCP/IP详解(中文版)
- Category
- Library
No coin nor oath required. For personal study only.
✦ Synopsis
《TCP/IP详解·卷2:实现》完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。《TCP/IP详解·卷2:实现》不仅说明了插口API和协议族的关系以及主机实现与路由器实现的差别。还介绍了4.4BSD-Lite版的新的特点。《TCP/IP详解·卷2:实现》适用于希望理解TCP/IP协议如何实现的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。
海报:
✦ Table of Contents
封面
书名
版权
前言
目录
第1章 概述
1.1 引言
1.2 源代码表示
1.2.1 将拥塞窗口设置为1
1.2.2 印刷约定
1.3 历史
1.4 应用编程接口
1.5 程序示例
1.7 网络实现概述
1.6 系统调用和库函数
1.8 描述符
1.9 mbuf与输出处理
1.9.1 包含插口地址结构的mbuf
1.9.2 包含数据的mbuf
1.9.3 添加IP和UDP首部
1.9.4 IP输出
1.9.5 以太网输出
1.9.6 UDP输出小
1.10.2 IP输入
1.10 输入处理
1.10.1 以太网输入
1.10.3 UDP输入
1.10.4 进程输入
1.11 网络实现概述(续)
1.12 中断级别与并发
1.13 源代码组织
1.14 测试网络
1.15 小结
2.1 引言
第2章 mbuf:存储器缓存
2.2 代码介绍
2.2.1 全局变量
2.2.2 统计
2.2.3 内核统计
2.3 mbuf的定义
2.4 mbuf结构
2.5 简单的mbuf宏和函数
2.5.2 MGET宏
2.5.1 m_get函数
2.5.3 m_retry函数
2.5.4 mbuf锁
2.6 m_devget和m_pullup函数
2.6.1 m_devget函数
2.6.2 mtod和dtom宏
2.6.3 m_pullup函数和连续的协议首部
2.6.4 m_pullup和IP的分片与重组
2.6.5 TCP重组避免调用m_pullup
2.6.6 m_pullup使用总结
2.7 mbuf宏和函数的小结
2.8 Net/3联网数据结构小结
2.9 m_copy和簇引用计数
2.10 其他选择
2.11 小结
3.2 代码介绍
3.2.1 全局变量
3.1 引言
第3章 接口层
3.2.2 SNMP变量
3.3 ifnet结构
3.4 ifaddr结构
3.5 sockaddr结构
3.6 ifnet与ifaddr的专用化
3.7 网络初始化概述
3.8 以太网初始化
3.9 SLIP初始化
3.10 环回初始化
3.11 if_attach函数
3.12 ifinit函数
3.13 小结
第4章 接口:以太网
4.1 引言
4.2 代码介绍
4.2.1 全局变量
4.2.2 统计量
4.2.3 SNMP变量
4.3 以太网接口
4.3.1 leintr函数
4.3.2 leread函数
4.3.3 ether_input函数
4.3.4 ether_output函数
4.3.5 lestart函数
4.4 ioctl系统调用
4.4.1 ifioctl函数
4.4.2 ifconf函数
4.4.3 举例
4.4.4 通用接口ioctl命令
4.4.5 if_down和if_up函数
4.4.6 以太网、SLIP和环回
4.5 小结
第5章 接口:SLIP和环回
5.1 引言
5.2 代码介绍
5.2.1 全局变量
5.3.1 SLIP线路规程:SLIPDISC
5.3 SLIP接口
5.2.2 统计量
5.3.2 SLIP初始化:slopen和slinit
5.3.3 SLIP输入处理:slinput
5.3.4 SLIP输出处理:sloutput
5.3.5 slstart函数
5.3.6 SLIP分组丢失
5.3.7 SLIP性能考虑
5.3.8 slclose函数
5.3.9 sltioctl函数
5.4 环回接口
5.5 小结
第6章 IP编址
6.1 引言
6.1.1 IP地址
6.1.2 IP地址的印刷规定
6.1.3 主机和路由器
6.2 代码介绍
6.3 接口和地址小结
6.4 sockaddr_in结构
6.5 in_ifaddr结构
6.6 地址指派
6.6.1 ifioctl函数
6.6.2 in_control函数
6.6.3 前提条件:SIOCSIFADDR、SIOCSIFNETMASK和SIOCSIFDSTADDR
6.6.4 地址指派:SIOCSIFADDR
6.6.5 in_ifinit函数
6.6.6 网络掩码指派:SIOCSIFNETMASK
6.6.8 获取接口信息
6.6.7 目的地址指派:SIOCSIFDSTADDR
6.6.9 每个接口多个IP地址
6.6.10 附加IP地址:SIOCAIFADDR
6.6.11 删除IP地址:SIOCDIFADDR
6.7 接口ioctl处理
6.7.1 leioctl函数
6.7.2 slioctl函数
6.7.3 loioctl函数
6.9 ifnet实用函数
6.8 Internet实用函数
6.10 小结
第7章 域和协议
7.1 引言
7.2 代码介绍
7.2.1 全局变量
7.2.2 统计量
7.3 domain结构
7.4 protosw结构
7.5 IP的domain和protosw结构
7.6 pffindproto和pffindtype函数
7.7 pfctlinput函数
7.8 IP初始化
7.8.1 Internet传输分用
7.8.2 iP_init函数
7.9 sysctl系统调用
7.10 小结
第8章 IP:网际协议
8.1 引言
8.2.1 全局变量
8.2.2 统计量
8.2 代码介绍
8.2.3 SNMP变量
8.3 IP分组
8.4 输入处理:ipintr函数
8.4.1 ipintr概观
8.4.2 验证
8.4.3 转发或不转发
8.4.4 重装和分用
8.5 转发:ip_forward函数
8.6 输出处理:ip_output函数
8.6.1 首部初始化
8.6.2 路由选择
8.6.3 源地址选择和分片
8.7 Internet检验和:in_cksum函数
8.8 setsockopt和getsockopt系统调用
8.8.1 PRCO_SETOPT的处理
8.8.2 PRCO_GETOPT的处理
8.9 ip_sysctl函数
8.10 小结
第9章 IP选项处理
9.1 引言
9.2 代码介绍
9.2.1 全局变量
9.2.2 统计量
9.3 选项格式
9.4 ip_dooptions函数
9.5 记录路由选项
9.6 源站和记录路由选项
9.6.1 save_rte函数
9.6.2 ip_srcroute函数
9.7 时间戳选项
9.8 ip_insertoptions函数
9.9 ip_pcbopts函数
9.10 一些限制
9.11 小结
第10章 IP的分片与重装
10.1 引言
10.2 代码介绍
10.2.2 统计量
10.3 分片
10.2.1 全局变量
10.4 ip_optcopy函数
10.5 重装
10.6 ip_reass函数
10.7 ip_slowtimo函数
10.8 小结
11.1 引言
第11章 ICMP:Internet控制报文协议
11.2 代码介绍
11.2.1 全局变量
11.2.2 统计量
11.2.3 SNMP变量
11.3 icmp结构
11.4 ICMP的protosw结构
11.5 输入处理:icmp_input函数
11.6 差错处理
11.7 请求处理
11.7.1 回显询问:ICMP_ECHO和ICMP_ECHOREPLY
11.7.2 时间戳询问:ICMP_TSTAMP和ICMP_TSTAMPREPLY
11.7.3 地址掩码询问:ICMP_MASKREQ和ICMP_MASKREPLY
11.7.4 信息询问:ICMP_IREQ和ICMP_IREQREPLY
11.7.5 路由器发现:ICMP_ROUTERADVERT和ICMP_ROUTERSOLICIT
11.8 重定向处理
11.9 回答处理
11.10 输出处理
11.11 icmp_error函数
11.12 icmp_reflect函数
11.13 icmp_send函数
11.14 icmp_sysctl函数
11.15 小结
第12章 IP多播
12.1 引言
12.2 代码介绍
12.2.1 全局变量
12.2.2 统计量
12.3 以太网多播地址
12.4 ether_multi结构
12.5 以太网多播接收
12.6 in_multi结构
12.7 ip_moptions结构
12.8 多播的插口选项
12.9 多播的TTL值
12.9.1 MBONE
12.9.2 扩展环搜索
12.10 ip_setmoptions函数
12.10.1 选择一个明确的多播接口:IP_MULTICAST_IF
12.10.2 选择明确的多播TTL:IP_MULTICAST_TTL
12.10.3 选择多播环回:IP_MULTICAST_LOOP
12.11 加入一个IP多播组
12.11.1 in_addmulti函数
12.11.2 slioctl和loioctl函数:SIOCADDMULTI和SIOCDELMULTI
12.11.3 leioctl函数:SIOCADDMULTI和SIOCDELMULTI
12.11.4 ether_addmulti函数
12.12 离开一个IP多播组
12.12.1 in_delmulti函数
12.12.2 ether_delmulti函数
12.13 ip_getmoptions函数
12.14 多播输入处理:ipintr函数
12.15 多播输出处理:ip_output函数
12.16 性能的考虑
12.17 小结
第13章 IGMP:Internet组管理协议
13.1 引言
13.2.1 全局变量
13.2.2 统计量
13.2 代码介绍
13.2.3 SNMP变量
13.3 igmp结构
13.4 IGMP的protosw的结构
13.5 加入一个组:igmp_joingroup函数
13.6 igmp_fasttimo函数
13.7 输入处理:igmp_input函数
13.7.1 成员关系查询:IGMP_HOST_MEMBERSHIP_QUERY
13.7.2 成员关系报告:IGMP_HOST_MRMBERSHIP_REPORT
13.8 离开一个组:igmp_leavegroup函数
13.9 小结
第14 IP多播选路
14.1 引言
14.2 代码介绍
14.2.1 全局变量
14.2.2 统计量
14.2.3 SNMP变量
14.3 多播输出处理(续)
14.4 mrouted守护程序
14.5 虚拟接口
14.5.1 虚拟接口表
14.5.2 add_vif函数
14.5.3 del_vif函数
14.6 IGMP(续)
14.6.1 add_lgrp函数
14.6.2 del_lgrp函数
14.6.3 grplst_member函数
14.7 多播选路
14.7.1 多播选路表
14.7.2 del_mrt函数
14.7.3 add_mrt函数
14.7.4 mrtfind函数
14.8 多播转发:ip_mforward函数
14.8.1 phyint_send函数
14.8.2 tunnel_send函数
14.9 清理:ip_mrouter_done函数
14.10 小结
第15章 插口层
15.1 引言
15.3 socket结构
15.2 代码介绍
15.4 系统调用
15.4.1 举例
15.4.2 系统调用小结
15.5 进程、描述符和插口
15.6 socket系统调用
15.6.1 socreate函数
15.6.2 超级用户特权
15.7 getsock和sockargs函数
15.8 bind系统调用
15.9 listen系统调用
15.10 tsleep和wakeup函数
15.11 accept系统调用
15.12 sonewconn和soisconnected函数
15.13 connect系统调用
15.13.1 soconnect函数
15.13.2 切断五连接插口和外部地址的关联
15.14 shutdown系统调用
15.15.1 soo_close函数
15.15 close系统调用
15.15.2 soclose函数
15.16 小结
第16章 插口I/O
16.1 引言
16.2 代码介绍
16.3 插口缓存
16.4 write、writev、sendto和sendmsg系统调用
16.5 sendmsg系统调用
16.6 sendit函数
16.6.1 uiomove函数
16.6.2 举例
16.6.3 sendit代码
16.7 sosend函数
16.7.1 可靠的协议缓存
16.7.2 不可靠的协议缓存
16.7.4 性能问题
16.8 read、readv、recvfrom和recvmsg系统调用
16.7.3 sosend函数小结
16.9 recvmsg系统调用
16.10 recvit函数
16.11 soreceive函数
16.11.1 带外数据
16.11.2 举例
16.11.3 其他的接收操作选项
16.11.4 接收缓存的组织:报文边界
16.11.5 接收缓存的组织:没有报文边界
16.11.6 控制信息和带外数据
16.12 soreceive代码
16.13 select系统调用
16.13.1 selscan函数
16.13.2 soo_select函数
16.13.3 selrecord函数
16.13.4 selwakeup函数
16.14 小结
17.1 引言
17.2 代码介绍
第17章 插口选项
17.3 setsockopt系统调用
17.4 getsockopt系统调用
17.5 fcntl和ioctl系统调用
17.5.1 fcntl代码
17.5.2 ioctl代码
17.6 getsockname系统调用
17.7 getpeername系统调用
17.8 小结
18.2 路由表结构
18.1 引言
第18章 Radix树路由表
18.3 选路插口
18.4 代码介绍
18.4.1 全局变量
18.4.2 统计量
18.4.3 SNMP变量
18.5 Radix结点数据结构
18.6 选路结构
18.7 初始化:route_init和rtable_init函数
18.8 初始化:rn_init和rn_inithead函数
18.9 重复键和掩码列表
18.10 rn_match函数
18.11 rn_search函数
18.12 小结
第19章 选路请求和选路消息
19.1 引言
19.2 rtalloc和rtallocl函数
19.3 宏RTFREE和rtfree函数
19.4 rtrequest函数
19.5 rt_setgate函数
19.6 rtinit函数
19.7 rtredirect函数
19.8 选路消息的结构
19.9 rt_missmsg函数
19.10 rt_ifmsg函数
19.11 rt_newaddrmsg函数
19.12 rt_msgl函数
19.13 rt_msg2函数
19.14 sysctl_rtable函数
19.15 sysctl_dumpentry函数
19.16 sysctl_iflist函数
19.17 小结
第20章 选路插口
20.1 引言
20.2 routedomain和protosw结构
20.3 选路控制块
20.4 raw_init函数
20.5 route_output函数
20.6 rt_xaddrs函数
20.7 rt_setmetrics函数
20.8 raw_input函数
20.9 route_usrreq函数
20.10 raw_usrreq函数
20.11 raw_attach、raw_detach和raw_disconnect函数
20.12 小结
第21章 ARP:地址解析协议
21.1 介绍
21.2 ARP和路由表
21.3.2 统计量
21.3 代码介绍
21.3.1 全局变量
21.3.3 SNMP变量
21.4 ARP结构
21.5 arpwhohas函数
21.6 arprequest函数
21.7 arpintr函数
21.8 in_arpinput函数
21.9.2 arptfree函数
21.9.1 arptimer函数
21.9 ARP定时器函数
21.10 arpresolve函数
21.11 arplookup函数
21.12 代理ARP
21.13 arp_rtrequest函数
21.14 ARP和多播
21.15 小结
22.1 引言
第22章 协议控制块
22.2 代码介绍
22.2.1 全局变量
22.2.2 统计量
22.3 inpcb的结构
22.4 in_pcballoc和in_pcbdetach函数
22.5 绑定、连接和分用
22.6 in_pcblookup函数
22.7 in_pcbbind函数
22.8 in_pcbconnect函数
22.9 in_pcbdisconnect函数
22.10 in_setsockaddr和in_setpeeraddr函数
22.11 in_pcbnotify、in_rtchange和in_losing函数
22.11.1 in_rtchange函数
22.11.2 重定向和原始插口
22.11.3 ICMP差错和UDP插口
22.11.4 in_losing函数
22.12 实现求精
22.13 小结
23.2 代码介绍
23.1 引言
第23章 UDP:用户数据报协议
23.2.1 全局变量
23.2.2 统计量
23.2.3 SNMP变量
23.3 UDP的protosw结构
23.4 UDP的首部
23.5 udp_init函数
23.6 udp_output函数
23.6.2 UDP检验和计算和伪首部
23.6.1 在前面加上IP/UDP首部和mbuf簇
23.7.1 对收到的UDP数据报的一般确认
23.7 udp_input函数
23.7.2 分用单播数据报
23.7.3 分用多播和广播数据报
23.7.4 连接上的UDP插口和多接口主机
23.8 udp_saveopt函数
23.9 udp_ctlinput函数
23.10 udp_usrreq函数
23.12.1 UDPPCB高速缓存
23.11 udp_sysctl函数
23.12 实现求精
23.12.2 UDP检验和
23.13 小结
第24章 TCP:传输控制协议
24.1 引言
24.2 代码介绍
24.2.1 全局变量
24.2.2 统计量
24.2.3 SNMP变量
24.3 TCP的protosw结构
24.4 TCP的首部
24.5 TCP的控制块
24.6 TCP的状态变迁图
24.7 TCP的序号
24.8 tcp_init函数
24.9 小结
25.1 引言
第25章 TCP的定时器
25.2 代码介绍
25.3 tcp_canceltimers函数
25.4 tcp_fasttimo函数
25.5 tcp_slowtimo函数
25.6 tcp_timers函数
25.6.1 FIN_WAIT_2和2MSL定时器
25.6.2 持续定时器
25.6.3 连接建立定时器和保活定时器
25.7 重传定时器的计算
25.8 tcp_newtcpcb算法
25.9 tcp_setpersist函数
25.10 tcp_xmit_timer函数
25.11 重传超时:tcp_timers函数
25.11.1 慢起动和避免拥塞
25.11.2 精确性
25.12 一个RTT的例子
25.13 小结
26.2 tcp_output概述
26.1 引言
第26章 TCP输出
26.3 决定是否应发送一个报文段
26.4 TCP选项
26.5 窗口大小选项
26.6 时间戳选项
26.6.1 哪个时间戳需要回显,RFC1323算法
26.6.2 哪个时间戳需要回显,正确的算法
26.6.3 时间戳与延迟ACK
26.7 发送一个报文段
26.8 tcp_template函数
26.9 tcp_respond函数
26.10 小结
第27章 TCP的函数
27.1 引言
27.2 tcp_drain函数
27.3 tcp_drop函数
27.4 tcp_close函数
27.4.1 路由特性
27.4.2 资源释放
27.5 tcp_mss函数
27.6 tcp_ctlinput函数
27.7 tcp_notify函数
27.8 tcp_quench函数
27.9 TCP_REASS宏和tcp_reass函数
27.9.1 TCP_REASS宏
27.9.2 TCP_REASS函数
27.10 tcp_trace函数
27.11 小结
28.1 引言
第28章 TCP的输入
28.2 预处理
28.3 tcp_dooptions函数
28.4 首部预测
28.5 TCP输入:缓慢的执行路径
28.6 完成被动打开或主动打开
28.6.1 完成被动打开
28.6.2 完成主动打开
28.7 PAWS:防止序号回绕
28.8 裁剪报文段使数据在窗口内
28.9 自连接和同时打开
28.10 记录时间戳
28.11 RST处理
28.12 小结
第29章 TCP的输入(续)
29.1 引言
29.2 ACK处理概述
29.3 完成被动打开和同时打开
29.4 快速重传和快速恢复的算法
29.5 ACK处理
29.6 更新窗口信息
29.7 紧急方式处理
29.8 tcp_pulloutofband函数
29.9 处理已接收的数据
29.10 FIN处理
29.11 最后的处理
29.12 实现求精
29.13 首部压缩
29.13.1 引言
29.13.2 首部字段的压缩
29.13.3 特殊情况
29.13.4 实例
29.13.5 配置
29.14 小结
笫30章 TCP的用户需求
30.1 引言
30.2 tcp_usrreq函数
30.3 tcp_attach函数
30.4 tcp_disconnect函数
30.5 tcp_usrclosed函数
30.6 tcp_ctloutput函数
30.7 小结
笫31章 BPF:BSD分组过滤程序
31.1 引言
31.2 代码介绍
31.2.1 全局变量
31.3 bpf_if结构
31.2.2 统计量
31.4 bpf_d结构
31.4.1 bpfopen函数
31.4.2 bpfioctl函数
31.4.3 bpf_setif函数
31.4.4 bpf_attachd函数
31.5 BPF的输入
31.5.1 bpf_tap函数
31.5.2 catcnpacket函数
31.5.3 bpfread函数
31.6 BPF的输出
31.7 小结
第32章 原始IP
32.1 引言
32.2 代码介绍
32.2.1 全局变量
32.2.2 统计量
32.3 原始IP的protosw结构
32.5 rip_input函数
32.4 rip_init函数
32.6 rip_output函数
32.7 rip_usrreq函数
32.8 rip_ctloutput函数
32.9 小结
结束语
附录A 部分习题的解答
附录B 源代码的获取
附录C RFC1122的有关内容
参考文献
📜 SIMILAR VOLUMES
<p>已故专家W. Richard Stevens的《TCP/IP详解》是一部经典之作!第1版自1994年出版以来深受读者欢迎,但其内容有些已经陈旧,而且没有涉及IPv6。现在,这部世界领先的TCP/IP畅销书已由网络顶级专家Kevin R. Fall博士彻底更新,反映了新一代基于TCP/IP的网络技术。本书主要讲述TCP/IP协议,展示每种协议的实际工作原理的同时还解释了其来龙去脉,新增了RPC、访问控制、身份认证、隐私保护、NFS、SMB/CIFS、DHCP、NAT、防火墙、电子邮件、Web、Web服务、无线、无线安全等内容,每章最后还描述了针对协议的攻击方法,帮助读者轻松掌握领域知识。<
<p>《TCP/IP详解卷1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者W.Richard Stevens用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 《TCP/IP详解卷1:协议》适合作为计算机专业学生学习网络的教材和教师参考书。也适用于研究网络的技术人员。</p>
<p>已故专家W. Richard Stevens的《TCP/IP详解》是一部经典之作!第1版自1994年出版以来深受读者欢迎,但其内容有些已经陈旧,而且没有涉及IPv6。现在,这部世界领先的TCP/IP畅销书已由网络顶级专家Kevin R. Fall博士彻底更新,反映了新一代基于TCP/IP的网络技术。本书主要讲述TCP/IP协议,展示每种协议的实际工作原理的同时还解释了其来龙去脉,新增了RPC、访问控制、身份认证、隐私保护、NFS、SMB/CIFS、DHCP、NAT、防火墙、电子邮件、Web、Web服务、无线、无线安全等内容,每章最后还描述了针对协议的攻击方法,帮助读者轻松掌握领域知识。<