第1章 TCP/IP协议栈的基础知识 2
1.1 TCP/IP协议与TCP/IP协议栈的基础知识 2
1.1.1 TCP/IP计算机网络 2
1.1.2 包交换的基础知识 3
1.1.3 软件和硬件 4
1.1.4 应用软件和操作系统 4
1.1.5 控制通信的三个软件 5
1.1.6 协议栈和包处理 6
1.2 协议栈的详细内容 7
1.2.1 地址与协议栈 7
1.2.2 地址的变换处理和表间关系 10
1.2.3 协议栈的内容处理 14
1.2.4 客户机服务器模型 16
1.3 协议栈的实现方法 17
1.3.1 套接字 17
1.3.2 系统调用及其内部的处理 19
1.3.3 原始IP和数据链路访问 22
1.3.4 多重复用和缓冲区 23
第2章 TCP/IP协议与报头的结构 28
2.1 协议报头和结构体 28
2.1.1 协议报头和结构体 28
2.1.2 报头、结构体和存储器 30
2.1.3 报头的结构和C语言的数据类型 31
2.1.4 使用位域、标志对报头进行处理 32
2.1.5 使用数组对报头进行处理 34
2.1.6 存储器的定位 35
2.1.7 字节顺序 37
2.2 以太网(Ethernet) 40
2.2.1 Ethernet的基础知识 40
2.2.2 Ethernet帧的格式和结构体的定义 42
2.2.3 Ethernet的基本操作 43
2.3 地址解析协议(ARP) 46
2.3.1 ARP协议的基础知识 46
2.3.2 ARP协议的包格式 46
2.3.3 ARP协议的操作 49
2.4 网际协议(IP) 51
2.4.1 IP协议的基础知识 51
2.4.2 IP报头和报头结构体 52
2.4.3 路由寻址的基础知识 56
2.4.4 IP分段处理 58
2.4.5 关于IP协议的分段处理所存在的问题 59
2.4.6 路由最大传输单元检索 60
2.5 网际控制报文协议(ICMP) 62
2.5.1 ICMP定义 62
2.5.2 ICMP响应-请求、ICMP响应-应答 63
2.5.3 ICMP不能到达目的地包 64
2.5.4 ICMP重发 67
2.5.5 ICMP超时报文包 70
2.5.6 联合体和实际icmp报头的结构体 72
2.6.2 UDP协议的报头和报头结构体 75
2.6 用户数据报协议(UDP) 75
2.6.1 UDP协议 75
2.7 传输控制协议(TCP) 76
2.7.1 TCP协议概要 76
2.7.2 TCP协议的报头和报头结构体 76
2.7.3 TCP协议连接的建立 79
2.7.4 TCP协议连接的切断 80
2.7.5 TCP协议提供的可靠性 81
2.7.6 缓冲区的大小和窗口大小 82
2.8 检查和(checksum) 83
2.8.1 checksum所保证的内容 83
2.8.2 checksum的算法 84
2.8.3 checksum的计算程序 86
第3章 套接字 90
3.1 套接字的概要 90
3.2 在套接字中使用的结构体 92
3.3 使用套按字系统调用的处理流程 95
3.3.1 使用UDP协议进行通信 95
3.3.2 使用TCP协议进行通信 97
3.4 套接字系统调用的详细内容 99
3.4.1 协议的选择和地址的指定 99
3.4.2 无连接 102
3.4.3 面向连接 104
3.4.4 套接字可选域 106
3.4.5 与DNS有关的函数 107
3.4.6 与端口号有关的函数 108
3.4.7 IP地址的操作函数 109
3.4.8 原始IP协议 110
3.4.9 利用select系统调用进行多重处理 111
3.5 使用UDP协议进行通信 113
3.5.1 UDP程序实例的基本情况和使用方法 113
3.5.2 程序的执行实例和流程图 114
3.5.3 处理流程 117
3.5.4 UDP服务器源程序 119
3.5.5 UDP服务器源程序的说明 122
3.5.6 UDP客户机源程序 123
3.5.7 UDP客户机源程序的说明 126
3.6 使用TCP协议进行通信 127
3.6.1 TCP程序实例的基本情况和使用方法 127
3.6.2 程序的执行实例 128
3.6.3 处理流程 131
3.6.4 TCP服务器源程序 133
3.6.5 TCP服务器源程序的说明 137
3.6.6 TCP客户机源程序 138
3.6.7 TCP客户机源程序的说明 141
第4章 包监控程序的使用 144
4.1 包监控的基础知识 144
4.1.1 包监控及其意义 144
4.1.2 集线器与地址学习功能 145
4.1.3 无差别方式 146
4.2 数据链路访问接口 148
4.2.1 数据链路访问接口的定义 148
4.2.2 Linux系统 149
4.2.3 BSD包过滤器 150
4.3 包监控程序(ipdump) 150
4.3.1 ipdump的基础知识 150
4.3.2 ipdump的使用方法 152
4.3.3 ipdump的结构 153
4.3.4 ipdump的流程图 154
4.3.5 ipdump源程序 156
4.3.6 ipdump源程序的说明 173
第5章 TCP/IP通信的识别 180
5.1 IP地址和端口号 180
5.1.1 通信的识别 180
5.1.2 与无效的IP地址或端口号进行通信 181
5.1.3 主机扫描和端口扫描 182
5.2 主机扫描程序(scanhost) 185
5.2.1 scanhost程序的概要 185
5.2.2 scanhost的使用方法 186
5.2.3 scanhost的程序结构和处理流程 187
5.2.4 scanhost源程序 189
5.2.5 scanhost源程序的说明 194
5.3.1 scanport_tcp的概要 196
5.3 TCP端口扫描程序(scanport_tcp) 196
5.3.2 scanport_tcp程序的使用方法 197
5.3.3 scanport_tcp程序的执行实例 197
5.3.4 scanport_tcp的程序结构和处理流程 198
5.3.5 scanport_tcp源程序 199
5.3.6 scanport_tcp源程序的说明 202
5.4 UDP端口扫描程序(scanport_udp) 203
5.4.1 scanport_udp程序的概要 203
5.4.2 scanport_udp程序的使用方法 204
5.4.3 scanport_udp程序的执行实例 204
5.4.4 scanport_udp程序的处理流程 205
5.4.5 scanport_udp源程序 206
5.4.6 scanport_udp源程序的说明 209
第6章 ARP协议的实验 214
6.1 ARP协议的详细内容 214
6.1.1 ARP协议的操作 214
6.1.2 两台主机具有同一个IP地址的情况 216
6.2 使用ARP协议的实验程序(arpupdate) 219
6.2.1 arpupdate程序的概要 219
6.2.2 arpupdate程序的使用方法 221
6.2.3 arpupdate程序的执行实例 221
6.2.4 arpupdate程序的结构和处理流程 227
6.2.5 arpupdate源程序 229
6.2.6 arpupdate源程序的说明 239
7.1 路由寻址表和路由控制 244
7.1.1 路由寻址表 244
第7章 IP协议和ICMP协议的实验 244
7.2 重发程序(redirect) 245
7.2.1 redirect程序的概要和结构 245
7.2.2 redirect程序的使用方法 247
7.2.3 redirect程序的执行实例 248
7.2.4 redirect程序的处理流程 251
7.2.5 redirect源程序 252
7.2.6 redirect源程序的说明 257
7.3 扫描路由程序(scanroute) 259
7.3.1 scanroute程序的概要和结构 259
7.3.2 scanroute程序的使用方法 260
7.3.3 scanroute程序的处理流程 261
7.3.4 scanroute源程序 263
7.3.5 scanroute源程序的说明 269
第8章 TCP协议的实验 274
8.1 TCP协议的详细内容 274
8.1.1 TCP协议状态转移 274
8.1.2 状态转移和连接的建立、切断 276
8.2 tcpsyn程序 280
8.2.1 tcpsyn程序的概要 280
8.2.2 tcpsyn程序的使用方法 281
8.2.3 tcpsyn程序的执行实例 281
8.2.4 tcpsyn程序的处理流程 284
8.2.5 tcpsyn源程序 285
8.2.6 tcpsyn源程序的说明 290
8.3.1 tcprst程序的概要 291
8.3 tcprst程序 291
8.3.2 tcprst程序的使用方法 292
8.3.3 tcprst程序的使用实例 292
8.3.4 tcprst源程序 296
8.3.5 tcprst源程序的说明 301
8.4 tcpjack程序 301
8.4.1 tcpjack程序的概要 301
8.4.2 tcpjack程序的使用方法 301
8.4.3 tcpjack程序的使用实例 302
8.4.4 tcpjack源程序 306
8.4.5 tcpjack源程序的说明 311
9.1.1 IPv6协议 314
9.1.2 IPv6报头的结构 314
第9章 使用IPv6协议进行通信实验 314
9.1 IPv6协议 314
9.1.3 为IPv6协议追加的结构体 317
9.1.4 为了支持IPv6协议而追加的函数 319
9.2 使用IPv6协议的实验程序 320
9.2.1 程序的基本内容 320
9.2.2 程序的使用方法 321
9.2.3 IPv6协议客户机源程序 322
9.2.4 IPv6协议服务器源程序 325
9.2.5 IPv6协议服务器源程序的说明 329
参考文献 331