关于TCP/IP学习的书籍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于TCP/IP学习的书籍相关的知识,希望对你有一定的参考价值。

我想学习TCP/IP协议,但是现在一点基础也没有,大家给我推荐几本比较好的学习TCP/IP协议的书籍啊!
要中文版的 英文的看不懂~~
大家谁能和我解释一下TCP/IP到底是什么啊?一个软件吗?

TCP/IP协议详解---最好最权威的TCPIP协议书籍
目 录
译者序
前言
第一部分 TCP/IP基础
第1章 开放式通信模型简介 1
1.1 开放式网络的发展 1
1.1.1 通信处理层次化 2
1.1.2 OSI参考模型 3
1.1.3 模型的使用 5
1.2 TCP/IP参考模型 7
1.3 小结 7
第2章 TCP/IP和Internet 8
2.1 一段历史 8
2.1.1 ARPANET 8
2.1.2 TCP/IP 9
2.1.3 国家科学基金会(NSF) 9
2.1.4 当今的Internet 12
2.2 RFC和标准化过程 12
2.2.1 获得RFC 13
2.2.2 RFC索引 13
2.2.3 有关RFC的幽默 13
2.3 Internet服务简介 13
2.3.1 Whois和Finger 14
2.3.2 文件传输协议 14
2.3.3 Telnet 14
2.3.4 Email 14
2.3.5 WWW 14
2.3.6 USENET News 15
2.4 Intranet和Extranet概览 15
2.4.1 Intranet 15
2.4.2 将Intranet对外开放 16
2.5 Internet的明天 16
2.5.1 下一代Internet(NGI) 16
2.5.2 超速骨干网服务 16
2.5.3 Internet2(I2) 17
2.6 Internet管理组织 17
2.6.1 Internet协会 17
2.6.2 Internet体系结构组 17
2.6.3 Internet工程任务组 17
2.6.4 Internet工程指导组 17
2.6.5 Internet编号管理局 18
2.6.6 Internet名字和编号分配组织
(ICANN) 18
2.6.7 Internet网络信息中心和其他注
册组织 18
2.6.8 RFC编辑 18
2.6.9 Internet服务提供商 18
2.7 小结 19
第3章 TCP/IP概述 20
3.1 TCP/IP的优点 20
3.2 TCP/IP的层和协议 21
3.2.1 体系结构 21
3.2.2 传输控制协议 21
3.2.3 IP协议 23
3.2.4 应用层 25
3.2.5 传输层 25
3.2.6 网络层 25
3.2.7 链路层 25
3.3 远程登录(Telnet) 25
3.4 文件传输协议(FTP) 25
3.5 普通文件传输协议(TFTP) 26
3.6 简单邮件传输协议(SMTP) 26
3.7 网络文件系统(NFS) 26
3.8 简单网络管理协议(SNMP) 27
3.9 TCP/IP和系统结合 27
3.10 内部网概述 28
3.11 小结 28
第二部分 命名和寻址
第4章 IP网络中的名字和地址 29
4.1 IP寻址 29
4.1.1 二进制和十进制数 30
4.1.2 IPv4地址格式 30
4.2 子网的出现 34
4.2.1 分子网 35
4.2.2 可变长子网掩码(VLSM) 37
4.3 无类域前路由(CIDR) 38
4.3.1 无类地址 38
4.3.2 强化路由汇聚 39
4.3.3 超网化 39
4.3.4 CIDR怎样工作 39
4.3.5 公共地址空间 40
4.3.6 RFC 1597和1918 40
4.4 小结 40
第5章 ARP和RARP 41
5.1 使用地址 41
5.1.1 子网寻址 41
5.1.2 IP地址 43
5.2 使用地址解析协议 44
5.2.1 ARP cache 45
5.2.2 代理ARP 47
5.2.3 反向地址解析协议 47
5.3 使用ARP命令 47
5.4 小结 47
第6章 DNS:名字服务器 48
6.1 域名系统概述 48
6.2 授权局 50
6.3 DNS分布数据库 50
6.4 域和区 50
6.5 Internet顶级域 51
6.6 选择一个域名服务器 52
6.7 名字服务解析过程 52
6.7.1 递归查询 52
6.7.2 叠代查询 52
6.8 高速缓存 52
6.9 反向解析(Pointer)查询 52
6.10 DNS安全 52
6.11 资源记录 53
6.12 小结 54
第7章 WINS 55
7.1 NetBIOS 55
7.2 NetBIOS名字解析 57
7.3 动态NetBIOS名字解析 58
7.3.1 使用WINS的优点 58
7.3.2 WINS如何工作 59
7.3.3 配置WINS客户机 60
7.3.4 为代理配置WINS 60
7.3.5 配置NT 4.0系统 61
7.3.6 配置Windows 95或Windows 98
系统 61
7.4 安装WINS服务器 61
7.5 WINS管理和维护 62
7.5.1 加入静态表项 62
7.5.2 维护WINS数据库 63
7.5.3 备份WINS数据库 65
7.5.4 备份WINS注册项 65
7.5.5 恢复WINS数据库 65
7.5.6 压缩WINS数据库 66
7.5.7 WINS复制参与者 66
7.5.8 WINS实现建议 67
7.6 集成WINS和DNS名字解析服务 67
7.7 DHCP服务WINS选项 67
7.8 通过LMHOSTS进行NetBIOS名字
解析 68
7.9 小结 69
第8章 地址发现协议(BOOTP和DHCP) 71
8.1 “引导”协议(BOOTP) 71
8.2 动态主机配置协议(DHCP) 72
8.2.1 DHCP如何工作 72
8.2.2 理解租用地址 73
8.3 管理地址池 74
8.4 DHCP能处理的其他分配 75
8.4.1 注意重载 75
8.4.2 其他分配 75
8.5 小结 76
第三部分 IP和相关协议
第9章 IP协议家族 77
9.1 TCP/IP模型 77
9.1.1 解剖TCP/IP模型 78
9.1.2 协议组件 78
9.2 理解网际协议(IP) 79
9.2.1 IPv4结构 79
9.2.2 IP做什么 80
9.3 理解传输控制协议(TCP) 81
9.3.1 TCP头结构 81
9.3.2 TCP做什么 83
9.4 理解用户数据报协议(UDP) 85
9.4.1 UDP头结构 85
9.4.2 UDP能做什么 85
9.4.3 TCP和UDP 86
9.5 小结 86
第10章 IPv6 87
10.1 IPv6数据报 87
10.1.1 优先级分类 88
10.1.2 流标识 89
10.1.3 128位IP地址 89
10.1.4 IP扩展头 90
10.2 多IP地址主机 91
10.3 单播、组播和任一播头 91
10.4 从IPv4到IPv6的过渡 93
10.5 小结 94
第四部分 IP互联
第11章 IP网络中的路由 95
11.1 路由基本知识 95
11.1.1 静态路由 96
11.1.2 距离-向量路由 99
11.1.3 链路-状态路由 100
11.2 IP网络中的收敛 102
11.2.1 适应拓扑变化 102
11.2.2 收敛时间 106
11.3 计算IP网络中的路由 106
11.3.1 存储多条路由 107
11.3.2 初始化更新 107
11.3.3 路由度量标准 107
11.4 小结 108
第12章 路由信息协议(RIP) 109
12.1 理解RFC1058 109
12.1.1 RIP报文格式 109
12.1.2 RIP路由表 111
12.2 操作机制 112
12.2.1 计算距离向量 113
12.2.2 更新路由表 116
12.2.3 寻址问题 118
12.3 拓扑变化 120
12.3.1 收敛 120
12.3.2 计值到无穷 122
12.4 RIP的限制 127
12.4.1 跳数限制 128
12.4.2 固定度量 128
12.4.3 对路由表更新反应强烈 128
12.4.4 收敛慢 128
12.4.5 缺乏负载均衡 128
12.5 小结 129
第13章 开放式最短路径优先 130
13.1 OSPF起源 130
13.2 理解RFC 2328 OSPF,版本2 130
13.2.1 OSPF区 131
13.2.2 路由更新 134
13.3 研究OSPF数据结构 136
13.3.1 HELLO报文 137
13.3.2 数据库描述报文 137
13.3.3 链路-状态请求报文 138
13.3.4 链路-状态更新报文 138
13.3.5 链路-状态应答报文 140
13.4 计算路由 140
13.4.1 使用自动计算 140
13.4.2 使用缺省路由耗费 141
13.4.3 最短路径树 142
13.5 小结 144
第14章 网关协议 145
14.1 网关、桥和路由器 145
14.1.1 网关 145
14.1.2 网桥 146
14.1.3 路由器 146
14.1.4 自治系统 146
14.2 网关协议:基础知识 146
14.3 内部网关协议和外部网关协议 147
14.3.1 网关-网关协议(GGP) 147
14.3.2 外部网关协议(EGP) 147
14.3.3 内部网关协议(IGP) 148
14.4 小结 148
第五部分 网络服务
第15章 互联网打印协议 149
15.1 IPP历史 149
15.2 IPP和端用户 150
15.3 使用HP的IPP实现 151
15.4 小结 152
第16章 LDAP:目录服务 153
16.1 为什么使用目录服务 153
16.2 目录服务的功能 153
16.3 IP上的目录服务 154
16.4 OSI X.500目录模型 156
16.4.1 早期的X.500 157
16.4.2 今天的X.500 157
16.5 LDAP结构 157
16.5.1 LDAP层次结构 157
16.5.2 名字结构 158
16.6 目录系统代理和访问协议 158
16.7 轻型目录访问协议 158
16.7.1 查询信息 159
16.7.2 存储信息 160
16.7.3 访问权限和安全 160
16.8 LDAP服务器-服务器通信 161
16.8.1 LDAP数据互换格式(LDIF) 161
16.8.2 LDAP复制 162
16.9 设计LDAP服务 162
16.9.1 定义需求 162
16.9.2 设计策略 163
16.9.3 性能 164
16.9.4 网络功能 165
16.9.5 安全 166
16.10 LDAP配置 169
16.11 产品环境 169
16.11.1 创建计划 170
16.11.2 有价值的建议 171
16.12 选择LDAP软件 171
16.13 小结 174
第17章 远程访问协议 175
17.1 远程互联 175
17.1.1 ISDN 176
17.1.2 电缆调制解调器 176
17.1.3 数字用户环(DSL) 176
17.1.4 无线网络 177
17.2 远程认证拨入用户服务(RADIUS) 177
17.2.1 RADIUS认证 178
17.2.2 记账信息 179
17.3 用SLIP、CSLIP和PPP传输IP数
据报文 179
17.3.1 串行线路接口协议(SLIP) 179
17.3.2 压缩的SLIP(CSLIP) 180
17.3.3 点到点协议(PPP) 180
17.4 隧道远程访问 184
17.4.1 点到点隧道协议(PPTP) 185
17.4.2 两层隧道协议(L2TP) 188
17.4.3 IPSec 192
17.5 小结 194
第18章 防火墙 195
18.1 使网络安全 195
18.2 使用防火墙 196
18.2.1 代理服务器 197
18.2.2 报文过滤器 198
18.3 使服务安全 198
18.3.1 电子邮件(SMTP) 198
18.3.2 HTTP:万维网 199
18.3.3 FTP 199
18.3.4 Telnet 199
18.3.5 Usenet:NNTP 199
18.3.6 DNS 200
18.4 建造用户自己的防火墙 200
18.5 使用商业防火墙软件 200
18.6 小结 202
第19章 IP安全 203
19.1 使用加密 203
19.1.1 公共-私钥加密 204
19.1.2 对称私钥加密 205
19.1.3 DES、IDEA及其他 205
19.2 数字签名认证 206
19.3 破译加密的数据 207
19.4 保护网络 207
19.4.1 登录名和口令 208
19.4.2 文件的目录允许权限 208
19.4.3 信任关系 209
19.4.4 UNIX和Linux系统上的UUCP 209
19.5 应付最坏情况 210
19.6 小结 210
第六部分 实现TCP/IP
第20章 一般配置问题 211
20.1 安装网卡 211
20.1.1 网卡 211
20.1.2 资源配置 212
20.1.3 安装适配器软件 213
20.1.4 重定向器和API 214
20.1.5 服务 214
20.1.6 NIC接口 215
20.2 网络和传输层协议 215
20.2.1 IP配置要求 215
20.2.2 配置缺省网关地址 216
20.2.3 配置名字服务器地址 217
20.2.4 配置邮件服务器地址 217
20.2.5 注册域名 218
20.3 IP配置 218
20.4 配置路由表 218
20.5 异种协议的IP封装 219
20.6 小结 220
第21章 Windows 98 221
21.1 Windows 98网络体系结构 221
21.1.1 安装网卡 222
21.1.2 更改网卡配置 224
21.1.3 当Windows 98引导失败 224
21.2 配置Windows 98的TCP/IP 225
21.2.1 写在开始之前 225
21.2.2 安装TCP/IP 225
21.2.3 配置微软的TCP/IP 225
21.2.4 DNS配置 227
21.2.5 静态配置文件 228
21.2.6 注册表配置 229
21.2.7 测试TCP/IP 231
21.3 小结 232
第22章 Windows 98拨号网络 233
22.1 配置拨号网络适配器 233
22.2 安装拨号网络 234
22.3 服务器类型 235
22.4 编写脚本 238
22.5 多重链接 238
22.6 PPTP 239
22.6.1 安装及配置PPTP 240
22.6.2 建立PPTP连接 240
22.7 Windows 98拨号服务器 241
22.8 解决拨号网络连接中的问题 242
22.8.1 确认DUN配置 242
22.8.2 PPP日志 243
22.9 小结 243
第23章 Windows NT 4.0 244
23.1 Windows NT版本 244
23.2 体系结构 244
23.3 安装Windows NT 4.0 244
23.4 配置TCP/IP 246
23.4.1 IP地址 246
23.4.2 DNS 248
23.4.3 WINS地址 248
23.4.4 DHCP中继 249
23.4.5 路由 250
23.5 简单TCP/IP服务 250
23.6 远程访问服务(RAS) 250
23.7 DHCP服务器 252
23.7.1 安装DHCP服务器服务 252
23.7.2 控制DHCP服务器服务 253
23.7.3 压缩DHCP数据库 253
23.7.4 管理DHCP 254
23.8 使用Microsoft DNS 256
23.8.1 安装DNS 256
23.8.2 创建区 257
23.8.3 配置逆向域名解功能 258
23.8.4 配置DNS与WINS服务器的连
接 259
23.8.5 增加辅助名字服务器 259
23.9 FTP和HTTP服务 259
23.10 TCP/IP打印服务 259
23.10.1 安装TCP/IP打印服务 259
23.10.2 安装LPR服务 260
23.11 Windows 2000新特性 260
23.12 小结 261
第24章 在Novell NetWare中支持IP 262
24.1 Novell与TCP/IP 262
24.1.1 IP与NetWare 4 262
24.1.2 NetWare 5与Pure IP初始化 262
24.2 传统解决方案:NetWare 3.x到
NetWare 4.x的IP支持 263
24.2.1 IP隧道 264
24.2.2 IP中继 264
24.2.3 LAN WorkPlace 264
24.2.4 IPX-IP网关 265
24.2.5 NetWare/IP 265
24.3 NetWare 5—Novell对IP的
完全支持 266
24.3.1 纯IP 266
24.3.2 多协议 266
24.4 安装选项 266
24.4.1 NetWare 5的IP-Only安装 267
24.4.2 IPX-Only安装 267
24.4.3 混合TCP/IP安装 268
24.5 IP迁移辅助工具 268
24.5.1 NDS 268
24.5.2 DNS 269
24.5.3 DHCP 269
24.5.4 DDNS 269
24.5.5 SLP 269
24.5.6 兼容模式 269
24.5.7 迁移代理 270
24.6 迁移策略 270
24.6.1 使用测试平台 270
24.6.2 迁移建议 270
24.7 小结 271
第七部分 使用TCP/IP应用
第25章 Whois和Finger 273
25.1 理解Whois协议 273
25.1.1 互联网注册 273
25.1.2 Whois数据库 274
25.1.3 基于Web的Whois 275
25.1.4 命令行方式的Whois 276
25.1.5 示例 276
25.1.6 基于Telnet的Whois 278
25.2 扩充Whois 279
25.2.1 提示Whois(RWhois) 279
25.2.2 WHOIS++ 280
25.3 使用Finger 280
25.3.1 Finger命令 280
25.3.2 Finger 守护进程 282
25.3.3 非UNIX环境下的Finger 283
25.3.4 Finger的应用 283
25.4 相关RFC文档 285
25.5 小结 285
第26章 文件传输协议 286
26.1 FTP和TFTP在网络世界中的作用 286
26.2 使用FTP传输文件 286
26.2.1 FTP连接 287
26.2.2 使用FTP客户端建立连接 288
26.2.3 FTP安全 296
26.2.4 FTP服务器及守护进程 299
26.2.5 匿名FTP访问 299
26.3 使用TFTP 300
26.3.1 FTP与TFTP的区别 301
26.3.2 TFTP命令 301
26.4 小结 301
第27章 使用Telnet 302
27.1 理解Telnet协议 302
27.2 Telnet守护进程 303
27.3 使用Telnet 304
27.3.1 UNIX telnet命令 304
27.3.2 Telnet GUI应用 305
27.3.3 Telnet命令 305
27.3.4 示例 308
27.4 高级主题 309
27.4.1 安全 309
27.4.2 Telnet应用 309
27.4.3 使用Telnet访问其他TCP/IP
服务 310
27.5 相关RFC文档 312
27.6 小结 313
第28章 使用r系列实用工具 314
28.1 理解r系列命令 314
28.1.1 安全问题 314
28.1.2 禁止使用r系列命令 315
28.1.3 增强r系列命令的安全性 316
28.2 使用r系列命令的替代方法 317
28.3 r系列命令详解 317
28.3.2 相关文件 320
28.4 在非UNIX环境下实现r系
列命令的功能 321
28.5 小结 322
第29章 使用网络文件系统(NFS) 323
29.1 什么是NFS 323
29.1.1 NFS的历史 323
29.1.2 为何使用NFS 323
29.2 实现—NFS工作过程 324
29.2.1 远程过程调用(RPC)
和外部数据表示(XDR) 324
29.2.2 加载类型 324
29.3 NFS使用的文件及命令 325
29.3.1 NFS守护进程 325
29.3.2 与NFS相关的文件 327
29.3.3 NFS服务器命令 329
29.3.4 NFS客户命令 331
29.4 示例:共享及加载NFS文件系统 333
29.5 NFS常见问题及解决方案 334
29.5.1 不能加载 334
29.5.2 不能卸载 334
29.5.3 硬加载与软加载 334
29.6 相关协议及产品 334
29.6.1 WebNFS 335
29.6.2 基于PC的NFS及其他客户端
软件 335
29.6.3 SMB和CIFS 335
29.6.4 其他产品 336
29.7 小结 336
第八部分 使用基于IP的应用
第30章 在应用中集成TCP/IP 337
30.1 使用浏览器作为表示层 338
30.2 不断增加的Internet应用 338
30.3 在已有应用中集成TCP/IP 339
30.4 在其他网络中使用TCP/IP 339
30.4.1 NetBIOS与TCP/IP 339
30.4.2 IPX与UDP 340
30.4.3 ARCNET与TCP/IP 340
30.5 小结 340
第31章 Internet Email协议 341
31.1 电子邮件 341
31.1.1 电子邮件的历史 341
31.1.2 标准及制定标准的组织 341
31.2 X.400 341
31.3 简单邮件传输协议(SMTP) 343
31.3.1 MIME和SMTP 343
31.3.2 其他编码标准 344
31.3.3 SMTP命令 344
31.3.4 SMTP状态码 345
31.3.5 扩展SMTP 345
31.3.6 检查SMTP的头 346
31.3.7 SMTP的优势与不足 347
31.4 使用POP和IMAP取回客户邮件 347
31.4.1 邮局协议(POP) 347
31.4.2 互联网邮件访问协议(IMAP) 348
31.4.3 POP3与IMAP4的比较 348
31.5 高级主题 349
31.6 相关RFC文档及其他参考信息 351
31.7 小结 352
第32章 HTTP: World Wide Web 353
32.1 万维网(WWW) 353
32.1.1 Web简史 353
32.1.2 Web的发展 354
32.2 统一资源定位器 354
32.3 Web服务器与浏览器 355
32.4 理解HTTP 356
32.4.1 HTTP/1.1 356
32.4.2 MIME与Web 358
32.4.3 HTTP通信示例 358
32.5 高级主题 359
32.5.1 服务器方功能 359
32.5.2 SSL和S-HTTP 359
32.6 Web语言 359
32.6.1 HTML 360
32.6.2 XML 360
32.6.3 CGI 361
32.6.4 Java 361
32.6.5 JavaScript 362
32.6.6 动态服务器页面 362
32.7 Web的未来 363
32.7.1 HTTP-ng 363
32.7.2 IIOP 363
32.7.3 IPv6 363
32.7.4 IPP 363
32.8 小结 364
第33章 NNTP:互联网新闻组 365
33.1 互联网新闻组 365
33.2 新闻组和层次 366
33.3 网络新闻传输协议 367
33.3.1 获取新闻组 367
33.3.2 获取消息 369
33.3.3 发布消息 370
33.4 大量广告(Spamming)和新闻黑洞
(Blackholing) 371
33.5 小结 371
第34章 Web服务 373
34.1 Web服务工作概览 373
34.2 主流Web服务器 375
34.3 运行Apache HTTP Web服务 376
34.3.1 下载、安装和配置Apache 376
34.3.2 在Windows环境下使用Apache 381
34.4 浏览其他Web服务器 383
34.5 小结 383
第九部分 使用与管理TCP/IP网络
第35章 协议配置与调整 385
35.1 系统的初始化问题 385
35.2 配置文件 390
35.2.1 在/etc/protocols文件中定义网
络协议 390
35.2.2 在/etc/hosts文件中标识主机 391
35.2.3 TCP/IP与/etc/services文件 392
35.2.4 inetd守护进程与/etc/inetd.conf
文件 394
35.2.5 在/etc/networks文件中设置网络 397
35.2.6 DNS客户与/etc/resolv.conf 397
35.3 小结 398
第36章 配置DNS 399
36.1 域名服务器 399
36.2 资源记录 400
36.3 域名解析 401
36.4 配置UNIX或Linux域名服务器
(DNS) 401
36.4.1 添加资源记录 402
36.4.2 完成DNS文件 402
36.4.3 启动DNS守护进程 405
36.4.4 配置客户端 405
36.5 Windows和域名服务器 405
36.6 小结 406
第37章 网络管理 407
37.1 制定网络监控方案 407
37.2 网络问题及其解决方案 408
37.3 网络管理工具 408
37.3.1 使用协议分析器 409
37.3.2 专家系统 410
37.3.3 基于PC的分析器 410
37.3.4 网络管理协议支持 411
37.3.5 集成网络仿真/模型工具 411
37.4 配置SNMP 412
37.4.1 配置Windows SNMP 413
37.4.2 配置UNIX SNMP 414
37.4.3 SNMP安全属性 414
37.4.4 SNMP代理与管理 415
37.5 SNMP工具及命令 416
37.6 RMON及相关的MIB模型 417
37.7 建立网管需求 417
37.8 小结 419
第38章 SNMP:简单网络管理协议 420
38.1 什么是SNMP 420
38.2 管理信息基(MIB) 421
38.3 使用SNMP 421
38.4 UNIX与SNMP 422
38.4.1 在UNIX和Linux上安装SNMP 423
38.4.2 SNMP命令 424
38.5 Windows与SNMP 424
38.5.1 Windows NT 425
38.5.2 Windows 95、Windows 98和
Windows 3.x 425
38.6 小结 427
第39章 加强TCP/IP传输安全 428
39.1 定义所需的网络安全 428
39.1.1 什么是网络安全 428
39.1.2 为什么网络安全非常重要 429
39.1.3 安全级别 429
39.1.4 口令与口令文件 430
39.1.5 控制对口令的访问 430
39.2 加强网络安全 431
39.2.1 攻击种类 431
39.2.2 加强网络安全 432
39.3 应用配置 434
39.3.1 Internet守护进程与
/etc/inetd.conf 434
39.3.2 网络加密软件 436
39.3.3 TCP Wrapper 436
39.4 使用端口及可信端口 437
39.4.1 防火墙 437
39.4.2 包过滤 437
39.4.3 应用层网关 438
39.4.4 其他应用的过滤 438
39.5 一般安全事务 438
39.5.1 用户帐号维护 438
39.5.2 审计 438
39.5.3 正确的系统配置 438
39.6 小结 438
第40章 问题解决工具及要点 440
40.1 监视网络行为 440
40.2 标准应用程序 440
40.2.1 测试基本连接 441
40.2.2 ping命令 442
40.2.3 解决网络访问故障 443
40.3 解决网络接口层问题 449
40.4 解决网络层问题 449
40.4.1 TCP/IP配置参数 449
40.4.2 IP地址配置问题 450
40.5 解决TCP和UDP问题 453
40.6 解决应用层问题 455
40.7 小结 455
第十部分 附 录
附录A RFC及标准化 457
附录B Linux 469
附录C 简写与缩略语 480
参考技术A 网络学习推荐书籍:《TCP/IP详解 卷2:实现》
简介: 本书完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15 000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机实现与路由器实现的差别。还介绍了4.4BSD-Lite版的新的特点,如多播、长肥管道支持、窗口缩放、时间戳选项以及其他主题等等。读者阅读本书时,应当具备卷1中阐述的关于 TCP/IP的基本知识。

作者: (美)史蒂文斯 著,陆雪莹等 译
出版社: 机械工业出版社
出版日期: 2004-1-1
ISBN: 7111075676
印次: 7
版次: 1
纸张: 胶版纸

市场价格: ¥78.00

关于TCP/IP,这十个问题你都知道,就入门了!

关于TCP/IP,必知必会的十个问题

本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养。

 
技术图片
TCP/IP十个问题

一、TCP/IP模型

TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。

基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系。


 
技术图片
 

TCP/IP协议族按照层次由上到下,层层包装。最上面的是应用层,这里面有http,ftp,等等我们熟悉的协议。而第二层则是传输层,著名的TCP和UDP协议就在这个层次。第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其他的数据以确定传输的目标。第四层是数据链路层,这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。


 
技术图片
 

上图清楚地表示了TCP/IP协议中每个层的作用,而TCP/IP协议通信的过程其实就对应着数据入栈与出栈的过程。入栈的过程,数据发送方每层不断地封装首部与尾部,添加一些传输的信息,确保能传输到目的地。出栈的过程,数据接收方每层不断地拆除首部与尾部,得到最终传输的数据。
 
技术图片
 

上图以HTTP协议为例,具体说明。

二、数据链路层

物理层负责0、1比特流与物理设备电压高低、光的闪灭之间的互换。 数据链路层负责将0、1序列划分为数据帧从一个节点传输到临近的另一个节点,这些节点是通过MAC来唯一标识的(MAC,物理地址,一个主机会有一个MAC地址)。


 
技术图片
 
  • 封装成帧: 把网络层数据报加头和尾,封装成帧,帧头中包括源MAC地址和目的MAC地址。
  • 透明传输:零比特填充、转义字符。
  • 可靠传输: 在出错率很低的链路上很少用,但是无线链路WLAN会保证可靠传输。
  • 差错检测(CRC):接收者检测错误,如果发现差错,丢弃该帧。

三、网络层

1.IP协议

IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGMP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情。

1.1 IP地址

在数据链路层中我们一般通过MAC地址来识别不同的节点,而在IP层我们也要有一个类似的地址标识,这就是IP地址。

32位IP地址分为网络位和地址位,这样做可以减少路由器中路由表记录的数目,有了网络地址,就可以限定拥有相同网络地址的终端都在同一个范围内,那么路由表只需要维护一条这个网络地址的方向,就可以找到相应的这些终端了。

A类IP地址: 0.0.0.0~127.255.255.255
B类IP地址:128.0.0.0~191.255.255.255
C类IP地址:192.0.0.0~239.255.255.255

1.2 IP协议头
 
技术图片
 

这里只介绍:八位的TTL字段。这个字段规定该数据包在穿过多少个路由之后才会被抛弃。某个IP数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。
这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是32或者是64。

2.ARP及RARP协议

ARP 是根据IP地址获取MAC地址的一种协议。

ARP(地址解析)协议是一种解析协议,本来主机是完全不知道这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存)。

如果查询的IP-MAC值对不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包含自己的MAC地址的ARP包传送给发送ARP广播的主机。

而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。

RARP协议的工作与此相反,不做赘述。

3. ICMP协议

IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。ICMP不是高层协议,而是IP层的协议。

当传送IP数据包发生错误。比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。

四、ping

ping可以说是ICMP的最著名的应用,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。

例如:当我们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。一般的信息如下:


 
技术图片
 

ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应。

ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到, ping给出来了传送的时间和TTL的数据。

五、Traceroute

Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。

Traceroute的原理是非常非常的有意思,它收到到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器IP。


 
技术图片
 

六、TCP/UDP

TCP/UDP都是是传输层协议,但是两者具有不同的特性,同时也具有不同的应用场景,下面以图表的形式对比分析。


 
技术图片
 
面向报文

面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是IP太小。

面向字节流

面向字节流的话,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。

关于拥塞控制,流量控制,是TCP的重点,后面讲解。

TCP和UDP协议的一些应用


 
技术图片
 

什么时候应该使用TCP?

当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

什么时候应该使用UDP?

当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。

七、DNS

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。

八、TCP连接的建立与终止

1.三次握手

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。


 
技术图片
 

第一次握手: 建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;

第二次握手: 服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;

第三次握手: 客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

为什么要三次握手?

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

具体例子:“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

2.四次挥手

当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次分手”。

 
技术图片
 

第一次分手: 主机1(可以使客户端,也可以是服务器端),设置Sequence Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;

 

第二次分手: 主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;

第三次分手: 主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;

第四次分手: 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

为什么要四次分手?

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

为什么要等待2MSL?

MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间。
原因有二:

  • 保证TCP协议的全双工连接能够可靠关闭
  • 保证这次连接的重复数据段从网络中消失

第一点:如果主机1直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因,导致主机2没有收到主机1最后回复的ACK。那么主机2就会在超时之后继续发送FIN,此时由于主机1已经CLOSED了,就找不到与重发的FIN对应的连接。所以,主机1不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。

第二点:如果主机1直接CLOSED,然后又再向主机2发起一个新连接,我们不能保证这个新连接与刚关闭的连接的端口号是不同的。也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达主机2,由于新连接和老连接的端口号是一样的,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。

九、TCP流量控制

如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。

利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。

设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是 rwnd = 400 ”(这里的 rwnd 表示 receiver window) 。因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。请注意,TCP的窗口单位是字节,不是报文段。假设每一个报文段为100字节长,而数据报文段序号的初始值设为1。大写ACK表示首部中的确认位ACK,小写ack表示确认字段的值ack。


 
技术图片
 

从图中可以看出,B进行了三次流量控制。第一次把窗口减少到 rwnd = 300 ,第二次又减到了 rwnd = 100 ,最后减到 rwnd = 0 ,即不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。B向A发送的三个报文段都设置了 ACK = 1 ,只有在ACK=1时确认号字段才有意义。

TCP为每一个连接设有一个持续计时器(persistence timer)。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口控测报文段(携1字节的数据),那么收到这个报文段的一方就重新设置持续计时器。

十、TCP拥塞控制

1.慢开始和拥塞避免

发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。

发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

慢开始算法:

当主机开始发送数据时,如果立即所大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。
因此,较好的方法是 先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。

通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。

 
技术图片
 

每经过一个传输轮次,拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间RTT。不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。

 

另,慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。

为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量。慢开始门限ssthresh的用法如下:

  • 当 cwnd < ssthresh 时,使用上述的慢开始算法。
  • 当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
  • 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
拥塞避免

让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。

 
技术图片
 

 

无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送 方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。

这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生 拥塞的路由器有足够时间把队列中积压的分组处理完毕

如下图,用具体数值说明了上述拥塞控制的过程。现在发送窗口的大小和拥塞窗口一样大。


 
技术图片
 

2.快重传和快恢复

快重传

快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。


 
技术图片
 

接收方收到了M1和M2后都分别发出了确认。现在假定接收方没有收到M3但接着收到了M4。

显然,接收方不能确认M4,因为M4是收到的失序报文段。根据 可靠传输原理,接收方可以什么都不做,也可以在适当时机发送一次对M2的确认。

但按照快重传算法的规定,接收方应及时发送对M2的重复确认,这样做可以让 发送方及早知道报文段M3没有到达接收方。发送方接着发送了M5和M6。接收方收到这两个报文后,也还要再次发出对M2的重复确认。这样,发送方共收到了 接收方的四个对M2的确认,其中后三个都是重复确认。

快重传算法还规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必 继续等待M3设置的重传计时器到期。

由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%。

快恢复

与快重传配合使用的还有快恢复算法,其过程有以下两个要点:

  • 当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。
  • 与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为 慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。


     
    技术图片
     

以上是关于关于TCP/IP学习的书籍的主要内容,如果未能解决你的问题,请参考以下文章

【tcp/ip】关于ip透传

TCP/IP详解学习笔记-- IP:网际协议

ARP抓包实战小结-TCP/IP协议学习

Linux网络协议栈源码分析基础知识

计算机网络学习

Linux C高级编程——网络编程基础