《TCP/IP详解》PDF下载

  • 购买积分:24 如何计算积分?
  • 作  者:(美)加里·R.赖特(Gary R. Wright),(美)W.理查德·史蒂文斯(W. Richard Stevens)著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2019
  • ISBN:9787111617938
  • 页数:904 页
图书介绍:本书完整而详细地介绍了TCP/IP是如何实现的。书中给出了约500个图例、15000行实际操作的C代码,采用案例教学的方法帮助读者掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机实现与路由器实现的差别,还介绍了4.4BSD-Lite版的新特点。本书适用于希望理解TCP/IP实现细节的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。

第1章 概述 1

1.1引言 1

1.2源代码表示 1

1.2.1将拥塞窗口设置为1 1

1.2.2印刷约定 2

1.3历史 2

1.4应用编程接口 3

1.5程序示例 4

1.6系统调用和库函数 6

1.7网络实现概述 6

1.8描述符 7

1.9mbuf与输出处理 11

1.9.1包含插口地址结构的mbuf 11

1.9.2包含数据的mbuf 12

1.9.3添加IP和UDP首部 13

1.9.4IP输出 14

1.9.5以太网输出 14

1.9.6UDP输出小结 14

1.10输入处理 15

1.10.1以太网输入 15

1.10.2IP输入 15

1.10.3UDP输入 16

1.10.4进程输入 17

1.11网络实现概述(续) 17

1.12中断级别与并发 18

1.13源代码组织 20

1.14测试网络 21

1.15小结 22

第2章 mbuf:存储器缓存 24

2.1引言 24

2.2代码介绍 27

2.2.1全局变量 27

2.2.2统计 28

2.2.3内核统计 28

2.3mbuf的定义 29

2.4mbuf结构 29

2.5简单的mbuf宏和函数 31

2.5.1m_get函数 32

2.5.2MGET宏 32

2.5.3m_retry函数 33

2.5.4mbuf锁 34

2.6m_devget和m_pullup函数 34

2.6.1m_devget函数 34

2.6.2mtod和dtom宏 36

2.6.3m_ullup函数和连续的协议首部 36

2.6.4m_pullup和IP的分片与重组 37

2.6.5TCP重组避免调用m_pullup 39

2.6.6m_ullup使用总结 40

2.7mbuf宏和函数的小结 40

2.8Net/3联网数据结构小结 42

2.9m_copy和簇引用计数 43

2.10其他选择 47

2.11小结 47

第3章 接口层 49

3.1引言 49

3.2代码介绍 49

3.2.1全局变量 49

3.2.2SNMP变量 50

3.3ifnet结构 51

3.4ifaddr结构 57

3.5sockaddr结构 58

3.6ifnet与ifaddr的专用化 59

3.7网络初始化概述 60

3.8以太网初始化 61

3.9SLIP初始化 64

3.10环回初始化 65

3.11if_attach函数 66

3.12ifinit函数 72

3.13小结 73

第4章 接口:以太网 74

4.1引言 74

4.2代码介绍 75

4.2.1全局变量 75

4.2.2统计量 75

4.2.3SNMP变量 76

4.3以太网接口 77

4.3.1leintr函数 79

4.3.2leread函数 79

4.3.3ether_input函数 81

4.3.4ether_output函数 84

4.3.5lestart函数 87

4.4ioctl系统调用 89

4.4.1ifioctl函数 90

4.4.2ifconf函数 91

4.4.3举例 94

4.4.4通用接口ioctl命令 95

4.4.5if_down和if_up函数 96

4.4.6以太网、SLIP和环回 97

4.5小结 98

第5章 接口:SLIP和环回 100

5.1引言 100

5.2代码介绍 100

5.2.1全局变量 100

5.2.2统计量 101

5.3SLIP接口 101

5.3.1SLIP线路规程:SLIPDISC 101

5.3.2SLIP初始化:slopen和slinit 103

5.3.3SLIP输入处理:slinput 105

5.3.4SLIP输出处理:sloutput 109

5.3.5slstart函数 111

5.3.6SLIP分组丢失 116

5.3.7SLIP性能考虑 117

5.3.8slclose函数 117

5.3.9sltioctl函数 118

5.4环回接口 119

5.5小结 121

第6章 IP编址 123

6.1引言 123

6.1.1IP地址 123

6.1.2IP地址的印刷规定 123

6.1.3主机和路由器 124

6.2代码介绍 125

6.3接口和地址小结 125

6.4sockaddr_in结构 126

6.5in_ifaddr结构 127

6.6地址指派 128

6.6.1ifioctl函数 130

6.6.2in_control函数 130

6.6.3前提条件:SIOCSIFADDR、SIOCSIFNETMASK和SIOCSIFDSTADDR 132

6.6.4地址指派:SIOCSIFADDR 133

6.6.5in_ifinit函数 133

6.6.6网络掩码指派:SIOCSIFNETMASK 136

6.6.7目的地址指派:SIOCSIFDSTADDR 137

6.6.8获取接口信息 137

6.6.9每个接口多个IP地址 138

6.6.10附加IP地址:SIOCAIFADDR 139

6.6.11删除IP地址:SIOCDIFADDR 140

6.7接口ioctl处理 141

6.7.1leioctl函数 141

6.7.2slioctl函数 142

6.7.3loioctl函数 143

6.8Internet实用函数 144

6.9ifnet实用函数 144

6.10小结 145

第7章 域和协议 146

7.1引言 146

7.2代码介绍 146

7.2.1全局变量 147

7.2.2统计量 147

7.3domain结构 147

7.4protosw结构 148

7.5IP的domain和protosw结构 150

7.6pffindproto和pffindtype函数 155

7.7pfctlinput函数 157

7.8IP初始化 157

7.8.1Internet传输分用 157

7.8.2ip_init函数 158

7.9sysctl系统调用 159

7.10小结 161

第8章 IP:网际协议 162

8.1引言 162

8.2代码介绍 163

8.2.1全局变量 163

8.2.2统计量 163

8.2.3SNMP变量 164

8.3IP分组 165

8.4输入处理:ipintr函数 167

8.4.1ipintr概观 167

8.4.2验证 168

8.4.3转发或不转发 171

8.4.4重装和分用 173

8.5转发:ip_forward函数 174

8.6输出处理:ip_output函数 180

8.6.1首部初始化 181

8.6.2路由选择 182

8.6.3源地址选择和分片 184

8.7Internet检验和:in_cksum函数 186

8.8setsockopt和getsockopt系统调用 190

8.8.1PRCO SETOPT的处理 192

8.8.2PRCO GETOPT的处理 193

8.9ip_sysctl函数 193

8.10小结 194

第9章 IP选项处理 196

9.1引言 196

9.2代码介绍 196

9.2.1全局变量 196

9.2.2统计量 197

9.3选项格式 197

9.4ip_dooptions函数 198

9.5记录路由选项 200

9.6源站和记录路由选项 202

9.6.1save_rte函数 205

9.6.2ip_srcroute函数 206

9.7时间戳选项 207

9.8ip_insertoptions函数 210

9.9ip_pcbopts函数 214

9.10一些限制 217

9.11小结 217

第10章 IP的分片与重装 218

10.1引言 218

10.2代码介绍 219

10.2.1全局变量 220

10.2.2统计量 220

10.3分片 220

10.4ip_optcopy函数 223

10.5重装 224

10.6ip_reass函数 227

10.7ip_slowtimo函数 237

10.8小结 238

第11章 ICMP:Internet控制报文协议 239

11.1引言 239

11.2代码介绍 242

11.2.1全局变量 242

11.2.2统计量 242

11.2.3SNMP变量 243

11.3icmp结构 244

11.4ICMP的protosw结构 245

11.5输入处理:icmp_input函数 246

11.6差错处理 249

11.7请求处理 251

11.7.1回显询问:ICMP_ECHO和ICMP_ECHOREPLY 252

11.7.2时间戳询问:ICMP_TSTAMP和ICMP_TSTAMPREPLY 253

11.7.3地址掩码询问:ICMP_MASKREQ和ICMP_MASKREPLY 253

11.7.4信息询问:ICMPIREQ和ICMP_IREQREPLY 255

11.7.5路由器发现:ICMP_ROUTERADVERT和ICMP和ICMP_ROUTERSOLICIT 255

11.8重定向处理 255

11.9回答处理 257

11.10输出处理 257

11.11icmp_error函数 258

11.12icmp_reflect函数 261

11.13icmp_send函数 265

11.14icmp_sysctl函数 266

11.15小结 266

第12章 IP多播 268

12.1引言 268

12.2代码介绍 269

12.2.1全局变量 270

12.2.2统计量 270

12.3以太网多播地址 270

12.4ether_multi结构 271

12.5以太网多播接收 273

12.6in_multi结构 273

12.7ip_moptions结构 275

12.8多播的插口选项 276

12.9多播的TTL值 277

12.9.1MBONE 278

12.9.2扩展环搜索 278

12.10ip_setmoptions函数 278

12.10.1选择一个明确的多播接口:IP_MULTICASTIF 280

12.10.2选择明确的多播TTL:IP_MULTICAST_LOOP 281

12.10.3选择多播环回:IP_MULTICAST_LOOP 281

12.11加入一个IP多播组 282

12.11.1in_addmulti函数 285

12.11.2slioctl和loioctl函数:SIOCADDMLTI和SIOCDELMULTI 287

12.11.3leioctI函数:SIOCADDMULTI和SIOCDELMULTI 288

12.11.4ether_addmulti函数 288

12.12离开一个IP多播组 291

12.12.1in_delmulti函数 292

12.12.2ether_delmulti函数 293

12.13ip_getmoptions函数 295

12.14多播输入处理:ipintr函数 296

12.15多播输出处理:ip_output函数 298

12.16性能的考虑 301

12.17小结 301

第13章 IGMP:Internet组管理协议 303

13.1引言 303

13.2代码介绍 304

13.2.1全局变量 304

13.2.2统计量 304

13.2.3SNMP变量 305

13.3igmp结构 305

13.4IGMP的protosw的结构 306

13.5加入一个组:igmp_joingroup函数 306

13.6igmp_fasttimo函数 308

13.7输入处理:igmp_input函数 311

13.7.1成员关系查询:IGMP_HOST_MEMBERSHIP_QUERY 312

13.7.2成员关系报告:IGMP_HOST_MEMBERSHIP_REPORT 313

13.8离开一个组:igmp_leavegroup函数 314

13.9小结 315

第14章 IP多播选路 316

14.1引言 316

14.2代码介绍 316

14.2.1全局变量 316

14.2.2统计量 317

14.2.3SNMP变量 317

14.3多播输出处理(续) 317

14.4mrouted守护程序 318

14.5虚拟接口 321

14.5.1虚拟接口表 322

14.5.2add_vif函数 324

14.5.3del_vif函数 326

14.6IGMP(续) 327

14.6.1add_lgrp函数 328

14.6.2del_lgrp函数 329

14.6.3grplst_member函数 330

14.7多播选路 331

14.7.1多播选路表 334

14.7.2del_mrt函数 335

14.7.3add_mrt函数 336

14.7.4mrtfind函数 337

14.8多播转发:ip_mforward函数 338

14.8.1phyint_send函数 343

14.8.2tunnel_send函数 344

14.9清理:ip_mrouter_done函数 345

14.10小结 346

第15章 插口层 348

15.1引言 348

15.2代码介绍 349

15.3socket结构 349

15.4系统调用 354

15.4.1举例 355

15.4.2系统调用小结 355

15.5进程、描述符和插口 357

15.6socket系统调用 358

15.6.1socreate函数 359

15.6.2超级用户特权 361

15.7getsock和sockargs函数 361

15.8bind系统调用 363

15.9listen系统调用 364

15.10tsleep和wakeup函数 365

15.11accept系统调用 366

15.12sonewconn和soisconnected函数 369

15.13connect系统调用 372

15.13.1soconnect函数 374

15.13.2切断无连接插口和外部地址的关联 375

15.14shutdown系统调用 375

15.15close系统调用 377

15.15.1soo_close函数 377

15.15.2soclose函数 378

15.16小结 380

第16章 插口I/O 381

16.1引言 381

16.2代码介绍 381

16.3插口缓存 381

16.4write、writev、sendto和sendmsg系统调用 384

16.5sendmsg系统调用 387

16.6sendit函数 388

16.6.1uiomove函数 389

16.6.2举例 390

16.6.3sendit代码 391

16.7sosend函数 392

16.7.1可靠的协议缓存 393

16.7.2不可靠的协议缓存 393

16.7.3sosend函数小结 401

16.7.4性能问题 401

16.8read、readv、recvfrom和recvmsg系统调用 401

16.9recvmsg系统调用 402

16.10recvit函数 403

16.11soreceive函数 405

16.11.1带外数据 406

16.11.2举例 406

16.11.3其他的接收操作选项 407

16.11.4接收缓存的组织:报文边界 407

16.11.5接收缓存的组织:没有报文边界 408

16.11.6控制信息和带外数据 409

16.12soreceive代码 410

16.13select系统调用 421

16.13.1selscan函数 425

16.13.2soo_select函数 425

16.13.3selrecord函数 427

16.13.4selwakeup函数 428

16.14小结 429

第17章 插口选项 431

17.1引言 431

17.2代码介绍 431

17.3setsockopt系统调用 432

17.4getsockopt系统调用 437

17.5fcntl和ioctl系统调用 440

17.5.1fcntl代码 441

17.5.2ioctl代码 443

17.6getsockname系统调用 444

17.7getpeername系统调用 445

17.8小结 447

第18章 Radix树路由表 448

18.1引言 448

18.2路由表结构 448

18.3选路插口 456

18.4代码介绍 456

18.4.1全局变量 458

18.4.2统计量 458

18.4.3SNMP变量 459

18.5Radix结点数据结构 460

18.6选路结构 463

18.7初始化:route_init和rtable_init函数 465

18.8初始化:rn_init和rn_inithead函数 468

18.9重复键和掩码列表 471

18.10rn_match函数 473

18.11rn_search函数 480

18.12小结 481

第19章 选路请求和选路消息 482

19.1引言 482

19.2rtalloc和rtallocl函数 482

19.3宏RTFREE和rtfree函数 484

19.4rtrequest函数 486

19.5rt_setgate函数 491

19.6rtinit函数 493

19.7rtredirect函数 495

19.8选路消息的结构 498

19.9rt_missmsg函数 501

19.10rt_ifmsg函数 503

19.11rt_newaddrmsg函数 504

19.12rt_msg1函数 505

19.13rt_msg2函数 507

19.14sysctl_rtable函数 510

19.15sysctl_dumpentry函数 514

19.16sysctl_iflist函数 515

19.17小结 517

第20章 选路插口 518

20.1引言 518

20.2routedomain和protosw结构 518

20.3选路控制块 519

20.4raw_init函数 520

20.5route_output函数 520

20.6rt_xaddrs函数 530

20.7rt_setmetrics函数 531

20.8raw_input函数 532

20.9route_usrreq函数 534

20.10raw_usrreq函数 535

20.11raw_attach、raw_detach和raw_disconnect函数 539

20.12小结 540

第21章 ARP:地址解析协议 542

21.1介绍 542

21.2ARP和路由表 542

21.3代码介绍 544

21.3.1全局变量 544

21.3.2统计量 544

21.3.3SNMP变量 546

21.4ARP结构 546

21.5arpwhohas函数 548

21.6arprequest函数 548

21.7arpintr函数 551

21.8in_arpinput函数 552

21.9ARP定时器函数 557

21.9.1arptimer函数 557

21.9.2arptfree函数 557

21.10arpresolve函数 558

21.11arplookup函数 562

21.12代理ARP 563

21.13arp_rtrequest函数 564

21.14ARP和多播 569

21.15小结 570

第22章 协议控制块 572

22.1引言 572

22.2代码介绍 573

22.2.1全局变量 574

22.2.2统计量 574

22.3inpcb的结构 574

22.4in_pcballoc和in_pcbdetach函数 575

22.5绑定、连接和分用 577

22.6in_pcblookup函数 581

22.7in_pcbbind函数 584

22.8in_pcbconnect函数 589

22.9in_pcbdisconnect函数 594

22.10in_setsockaddr和in_setpeeraddr函数 595

22.11in_pcbnotify、in_rtchange和in_losing函数 595

22.11.1in_rtchange函数 598

22.11.2重定向和原始插口 599

22.11.3ICMP差错和UDP插口 600

22.11.4in_losing函数 601

22.12实现求精 602

22.13小结 602

第23章 UDP:用户数据报协议 605

23.1引言 605

23.2代码介绍 605

23.2.1全局变量 606

23.2.2统计量 606

23.2.3SNMP变量 607

23.3UDP的protosw结构 607

23.4UDP的首部 608

23.5udp_init函数 609

23.6udp_output函数 609

23.6.1在前面加上IP/UDP首部和mbuf簇 612

23.6.2UDP检验和计算和伪首部 612

23.7udp_input函数 616

23.7.1对收到的UDP数据报的一般确认 616

23.7.2分用单播数据报 619

23.7.3分用多播和广播数据报 622

23.7.4连接上的UDP插口和多接口主机 625

23.8udp_saveopt函数 625

23.9udp_ctlinput函数 627

23.10udp_usrreq函数 628

23.11udp_sysctl函数 633

23.12实现求精 633

23.12.1UDP PCB高速缓存 633

23.12.2UDP检验和 634

23.13小结 635

第24章 TCP:传输控制协议 636

24.1引言 636

24.2代码介绍 636

24.2.1全局变量 636

24.2.2统计量 637

24.2.3SNMP变量 640

24.3TCP的protosw结构 641

24.4TCP的首部 641

24.5TCP的控制块 643

24.6TCP的状态变迁图 645

24.7TCP的序号 646

24.8tcp_init函数 650

24.9小结 652

第25章 TCP的定时器 654

25.1引言 654

25.2代码介绍 655

25.3tcp_canceltimers函数 657

25.4tcp_fasttimo函数 657

25.5tcp_slowtimo函数 658

25.6tcp_timers函数 659

25.6.1FIN_WAIT_2和2MSL定时器 660

25.6.2持续定时器 662

25.6.3连接建立定时器和保活定时器 662

25.7重传定时器的计算 665

25.8tcp_newtcpcb算法 666

25.9tcp_setpersist函数 668

25.10tcp_xmit_timer函数 669

25.11重传超时:tcp_timers函数 673

25.11.1慢起动和避免拥塞 675

25.11.2精确性 677

25.12一个RTT的例子 677

25.13小结 679

第26章 TCP输出 680

26.1引言 680

26.2tcp_output概述 680

26.3决定是否应发送一个报文段 682

26.4TCP选项 691

26.5窗口大小选项 692

26.6时间戳选项 692

26.6.1哪个时间戳需要回显,RFC1323算法 694

26.6.2哪个时间戳需要回显,正确的算法 695

26.6.3时间戳与延迟ACK 695

26.7发送一个报文段 696

26.8tcp_template函数 707

26.9tcp_respond函数 708

26.10小结 710

第27章 TCP的函数 712

27.1引言 712

27.2tcp_drain函数 712

27.3tcp_drop函数 712

27.4tcp_close函数 713

27.4.1路由特性 713

27.4.2资源释放 716

27.5tcp_mss函数 717

27.6tcp_ctlinput函数 722

27.7tcp_notify函数 723

27.8tcp_quench函数 724

27.9TCP_REASS宏和tcp_reass函数 724

27.9.1TCP_REASS宏 725

27.9.2TCP_REASS函数 727

27.10tcp_trace函数 732

27.11小结 736

第28章 TCP的输入 737

28.1引言 737

28.2预处理 739

28.3tcp_dooptions函数 745

28.4首部预测 747

28.5TCP输入:缓慢的执行路径 752

28.6完成被动打开或主动打开 752

28.6.1完成被动打开 753

28.6.2完成主动打开 756

28.7PAWS:防止序号回绕 760

28.8裁剪报文段使数据在窗口内 762

28.9自连接和同时打开 768

28.10记录时间戳 770

28.11RST处理 770

28.12小结 772

第29章 TCP的输入(续) 773

29.1引言 773

29.2ACK处理概述 773

29.3完成被动打开和同时打开 774

29.4快速重传和快速恢复的算法 775

29.5ACK处理 778

29.6更新窗口信息 784

29.7紧急方式处理 786

29.8tcp_pulloutofband函数 788

29.9处理已接收的数据 789

29.10FIN处理 791

29.11最后的处理 793

29.12实现求精 795

29.13首部压缩 795

29.13.1引言 796

29.13.2首部字段的压缩 799

29.13.3特殊情况 801

29.13.4实例 802

29.13.5配置 803

29.14小结 803

第30章 TCP的用户需求 805

30.1引言 805

30.2tcp_usrreq函数 805

30.3tcp_attach函数 814

30.4tcp_disconnect函数 815

30.5tcp_usrclosed函数 816

30.6tcp_ctloutput函数 817

30.7小结 820

第31章 BPF:BSD分组过滤程序 821

31.1引言 821

31.2代码介绍 821

31.2.1全局变量 821

31.2.2统计量 822

31.3bpf_if结构 822

31.4bpf_d结构 825

31.4.1bpf_open函数 826

31.4.2bpfioctl函数 827

31.4.3bpf_setif函数 830

31.4.4bpf_attachd函数 831

31.5BPF的输入 832

31.5.1bpf_tap函数 832

31.5.2catchpacket函数 833

31.5.3bpf_read函数 835

31.6BPF的输出 837

31.7小结 838

第32章 原始IP 839

32.1引言 839

32.2代码介绍 839

32.2.1全局变量 839

32.2.2统计量 840

32.3原始IP的protosw结构 840

32.4rip_init函数 842

32.5rip_input函数 842

32.6rip_output函数 844

32.7rip_usrreq函数 846

32.8rip_ctloutput函数 850

32.9小结 852

结束语 853

附录A 部分习题的解答 854

附录B 源代码的获取 872

附录C RFC1122的有关内容 874

参考文献 895