TCP/IP詳解(卷2)

TCP/IP詳解(卷2)

ected函式 it函式 ithead函式

圖書信息

作 者:(美)萊特,(美)史蒂文斯 著,陸雪瑩等 譯

出 版 社:機械工業出版社
出版時間:2004-1-1
版 次:1
頁 數:901
印刷時間:2004-1-1
紙 張:膠版紙
印 次:1
I S B N:9787111075677
包 裝:平裝

內容簡介

本書完整而詳細地介紹了TCP/IP協定是如何實現的。書中給出了約500個圖例,15 000行實際操作的C代碼,採用舉例教學的方法幫助你掌握TCP/IP實現。本書不僅說明了插口API和協定族的關係以及主機實現與路由器實現的差別。還介紹了4.4BSD-Lite版的新的特點,如多播、長肥管道支持、視窗縮放、時間戳選項以及其他主題等等。讀者閱讀本書時,應當具備卷1中闡述的關於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.9 mbuf與輸出處理 11
1.9.1 包含插口地址結構的mbuf 11
1.9.2 包含數據的mbuf 12
1.9.3 添加IP和UDP首部 13
1.9.4 IP輸出 14
1.9.5 乙太網輸出 14
1.9.6 UDP輸出小結 14
1.10 輸入處理 15
1.10.1 乙太網輸入 15
1.10.2 IP輸入 15
1.10.3 UDP輸入 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.3 mbuf的定義 29
2.4 mbuf結構 29
2.5 簡單的mbuf宏和函式 31
2.5.1 m_get函式 32
2.5.2 MGET宏 32
2.5.3 m_retry函式 33
2.5.4 mbuf鎖 34
2.6 m_devget和m_pullup函式 34
2.6.1 m_devget函式 34
2.6.2 mtod和dtom宏 36
2.6.3 m_pullup函式和連續的協定首部 36
2.6.4 m_pullup和IP的分片與重組 37
2.6.5 TCP重組避免調用m_pullup 39
2.6.6 m_pullup使用總結 40
2.7 mbuf宏和函式的小結 40
2.8 Net/3聯網數據結構小結 42
2.9 m_copy和簇引用計數 43
2.10 其他選擇 47
2.11 小結 47
第3章 接口層 49
3.1 引言 49
3.2 代碼介紹 49
3.2.1 全局變數 49
3.2.2 SNMP變數 50
3.3 ifnet結構 51
3.4 ifaddr結構 57
3.5 sockaddr結構 58
3.6 ifnet與ifaddr的專用化 59
3.7 網路初始化概述 60
3.8 乙太網初始化 61
3.9 SLIP初始化 64
3.10 環回初始化 65
3.11 if_attach函式 66
3.12 ifinit函式 72
3.13 小結 73
第4章 接口:乙太網 74
4.1 引言 74
4.2 代碼介紹 75
4.2.1 全局變數 75
4.2.2 統計量 75
4.2.3 SNMP變數 76
4.3 乙太網接口 77
4.3.1 leintr函式 79
4.3.2 leread函式 79
4.3.3 ether_input函式 81
4.3.4 ether_output函式 84
4.3.5 lestart函式 87
4.4 ioctl系統調用 89
4.4.1 ifioctl函式 90
4.4.2 ifconf函式 91
4.4.3 舉例 94
4.4.4 通用接口ioctl命令 95
4.4.5 if_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.3 SLIP接口 101
5.3.1 SLIP線路規程:SLIPDISC 101
5.3.2 SLIP初始化:slopen和slinit 103
5.3.3 SLIP輸入處理:slinput 105
5.3.4 SLIP輸出處理:sloutput 109
5.3.5 slstart函式 111
5.3.6 SLIP分組丟失 116
5.3.7 SLIP性能考慮 117
5.3.8 slclose函式 117
5.3.9 sltioctl函式 118
5.4 環回接口 119
5.5 小結 121
第6章 IP編址 123
6.1 引言 123
6.1.1 IP位址 123
6.1.2 IP位址的印刷規定 123
6.1.3 主機和路由器 124
6.2 代碼介紹 125
6.3 接口和地址小結 125
6.4 sockaddr_in結構 126
6.5 in_ifaddr結構 127
6.6 地址指派 128
6.6.1 ifioctl函式 130
6.6.2 in_control函式 130
6.6.3 前提條件:SIOCSIFADDR、
SIOCSIFNETMASK和
SIOCSIFDSTADDR 132
6.6.4 地址指派:SIOCSIFADDR 133
6.6.5 in_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.1 leioctl函式 141
6.7.2 slioctl函式 142
6.7.3 loioctl函式 143
6.8 Internet實用函式 144
6.9 ifnet實用函式 144
6.10 小結 145
第7章 域和協定 146
7.1 引言 146
7.2 代碼介紹 146
7.2.1 全局變數 147
7.2.2 統計量 147
7.3 domain結構 147
7.4 protosw結構 148
7.5 IP 的domain和protosw結構 150
7.6 pffindproto和pffindtype函式 155
7.7 pfctlinput函式 157
7.8 IP初始化 157
7.8.1 Internet傳輸分用 157
7.8.2 ip_init函式 158
7.9 sysctl系統調用 159
7.10 小結 161
第8章 IP:網際協定 162
8.1 引言 162
8.2 代碼介紹 163
8.2.1 全局變數 163
8.2.2 統計量 163
8.2.3 SNMP變數 164
8.3 IP分組 165
8.4 輸入處理:ipintr函式 167
8.4.1 ipintr概觀 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.7 Internet檢驗和:in_cksum函式 186
8.8 setsockopt和getsockopt系統調用 190
8.8.1 PRCO_SETOPT的處理 192
8.8.2 PRCO_GETOPT的處理 193
8.9 ip_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.4 ip_dooptions函式 198
9.5 記錄路由選項 200
9.6 源站和記錄路由選項 202
9.6.1 save_rte函式 205
9.6.2 ip_srcroute函式 206
9.7 時間戳選項 207
9.8 ip_insertoptions函式 210
9.9 ip_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.4 ip_optcopy函式 223
10.5 重裝 224
10.6 ip_reass函式 227
10.7 ip_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.3 SNMP變數 243
11.3 icmp結構 244
11.4 ICMP 的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 信息詢問:ICMP_IREQ和ICMP_
IREQREPLY 255
11.7.5 路由器發現:ICMP_ROUTERADVERT
和ICMP_ROUTERSOLICIT 255
11.8 重定向處理 255
11.9 回答處理 257
11.10 輸出處理 257
11.11 icmp_error函式 258
11.12 icmp_reflect函式 261
11.13 icmp_send函式 265
11.14 icmp_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.4 ether_multi結構 271
12.5 乙太網多播接收 273
12.6 in_multi結構 273
12.7 ip_moptions結構 275
12.8 多播的插口選項 276
12.9 多播的TTL值 277
12.9.1 MBONE 278
12.9.2 擴展環搜尋 278
12.10 ip_setmoptions函式 278
12.10.1 選擇一個明確的多播接口:IP_
MULTICAST_IF 280
12.10.2 選擇明確的多播TTL: IP_
MULTICAST_TTL 281
12.10.3 選擇多播環回:IP_MULTICAST_
LOOP 281
12.11 加入一個IP多播組 282
12.11.1 in_addmulti函式 285
12.11.2 slioctl和loioctl函式:SIOCADDMULTI和SIOCDELMULTI 287
12.11.3 leioctl函式:SIOCADDMULTI和
SIOCDELMULTI 288
12.11.4 ether_addmulti函式 288
12.12 離開一個IP多播組 291
12.12.1 in_delmulti函式 292
12.12.2 ether_delmulti函式 293
12.13 ip_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.3 SNMP變數 305
13.3 igmp結構 305
13.4 IGMP的protosw的結構 306
13.5 加入一個組:igmp_joingroup函式 306
13.6 igmp_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.3 SNMP變數 317
14.3 多播輸出處理(續) 317
14.4 mrouted守護程式 318
14.5 虛擬接口 321
14.5.1 虛擬接口表 322
14.5.2 add_vif函式 324
14.5.3 del_vif函式 326
14.6 IGMP(續) 327
14.6.1 add_lgrp函式 328
14.6.2 del_lgrp函式 329
14.6.3 grplst_member函式 330
14.7 多播選路 331
14.7.1 多播選路表 334
14.7.2 del_mrt函式 335
14.7.3 add_mrt函式 336
14.7.4 mrtfind函式 337
14.8 多播轉發:ip_mforward函式 338
14.8.1 phyint_send函式 343
14.8.2 tunnel_send函式 344
14.9 清理:ip_mrouter_done函式 345
14.10 小結 346
第15章 插口層 348
15.1 引言 348
15.2 代碼介紹 349
15.3 socket結構 349
15.4 系統調用 354
15.4.1 舉例 355
15.4.2 系統調用小結 355
15.5 進程、描述符和插口 357
15.6 socket系統調用 358
15.6.1 socreate函式 359
15.6.2 超級用戶特權 361
15.7 getsock和sockargs函式 361
15.8 bind系統調用 363
15.9 listen系統調用 364
15.10 tsleep和wakeup函式 365
15.11 accept系統調用 366
15.12 sonewconn和soisconnected
函式 369
15.13 connect系統調用 372
15.13.1 soconnect函式 374
15.13.2 切斷無連線插口和外部地址的
關聯 375
15.14 shutdown系統調用 375
15.15 close系統調用 377
15.15.1 soo_close函式 377
15.15.2 soclose函式 378
15.16 小結 380
第16章 插口I/O 381
16.1 引言 381
16.2 代碼介紹 381
16.3 插口快取 381
16.4 write、writev、sendto和sendmsg
系統調用 384
16.5 sendmsg系統調用 387
16.6 sendit函式 388
16.6.1 uiomove函式 389
16.6.2 舉例 390
16.6.3 sendit代碼 391
16.7 sosend函式 392
16.7.1 可靠的協定快取 393
16.7.2 不可靠的協定快取 393
16.7.3 sosend函式小結 401
16.7.4 性能問題 401
16.8 read、readv、recvfrom和recvmsg
系統調用 401
16.9 recvmsg系統調用 402
16.10 recvit函式 403
16.11 soreceive函式 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.12 soreceive代碼 410
16.13 select系統調用 421
16.13.1 selscan函式 425
16.13.2 soo_select函式 425
16.13.3 selrecord函式 427
16.13.4 selwakeup函式 428
16.14 小結 429
第17章 插口選項 431
17.1 引言 431
17.2 代碼介紹 431
17.3 setsockopt系統調用 432
17.4 getsockopt系統調用 437
17.5 fcntl和ioctl系統調用 440
17.5.1 fcntl代碼 441
17.5.2 ioctl代碼 443
17.6 getsockname系統調用 444
17.7 getpeername系統調用 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.3 SNMP變數 459
18.5 Radix結點數據結構 460
18.6 選路結構 463
18.7 初始化:route_init和rtable_init
函式 465
18.8 初始化:rn_init和rn_inithead
函式 468
18.9 重複鍵和掩碼列表 471
18.10 rn_match函式 473
18.11 rn_search函式 480
18.12 小結 481
第19章 選路請求和選路訊息 482
19.1 引言 482
19.2 rtalloc和rtalloc1函式 482
19.3 宏RTFREE和rtfree函式 484
19.4 rtrequest函式 486
19.5 rt_setgate函式 491
19.6 rtinit函式 493
19.7 rtredirect函式 495
19.8 選路訊息的結構 498
19.9 rt_missmsg函式 501
19.10 rt_ifmsg函式 503
19.11 rt_newaddrmsg函式 504
19.12 rt_msg1函式 505
19.13 rt_msg2函式 507
19.14 sysctl_rtable函式 510
19.15 sysctl_dumpentry函式 514
19.16 sysctl_iflist函式 515
19.17 小結 517
第20章 選路插口 518
20.1 引言 518
20.2 routedomain和protosw結構 518
20.3 選路控制塊 519
20.4 raw_init函式 520
20.5 route_output函式 520
20.6 rt_xaddrs函式 530
20.7 rt_setmetrics函式 531
20.8 raw_input函式 532
20.9 route_usrreq函式 534
20.10 raw_usrreq函式 535
20.11 raw_attach、raw_detach和raw_disconnect函式 539
20.12 小結 540
第21章 ARP:地址解析協定 542
21.1 介紹 542
21.2 ARP和路由表 542
21.3 代碼介紹 544
21.3.1 全局變數 544
21.3.2 統計量 544
21.3.3 SNMP變數 546
21.4 ARP結構 546
21.5 arpwhohas函式 548
21.6 arprequest函式 548
21.7 arpintr函式 551
21.8 in_arpinput函式 552
21.9 ARP定時器函式 557
21.9.1 arptimer函式 557
21.9.2 arptfree函式 557
21.10 arpresolve函式 558
21.11 arplookup函式 562
21.12 代理ARP 563
21.13 arp_rtrequest函式 564
21.14 ARP和多播 569
21.15 小結 570
第22章 協定控制塊 572
22.1 引言 572
22.2 代碼介紹 573
22.2.1 全局變數 574
22.2.2 統計量 574
22.3 inpcb的結構 574
22.4 in_pcballoc和in_pcbdetach函式 575
22.5 綁定、連線和分用 577
22.6 in_pcblookup函式 581
22.7 in_pcbbind函式 584
22.8 in_pcbconnect函式 589
22.9 in_pcbdisconnect函式 594
22.10 in_setsockaddr和in_setpeeraddr
函式 595
22.11 in_pcbnotify、in_rtchange和in_losing函式 595
22.11.1 in_rtchange函式 598
22.11.2 重定向和原始插口 599
22.11.3 ICMP差錯和UDP插口 600
22.11.4 in_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.3 SNMP變數 607
23.3 UDP 的protosw結構 607
23.4 UDP的首部 608
23.5 udp_init函式 609
23.6 udp_output函式 609
23.6.1 在前面加上IP/UDP首部和mbuf簇 612
23.6.2 UDP檢驗和計算和偽首部 612
23.7 udp_input函式 616
23.7.1 對收到的UDP數據報的一般確認 616
23.7.2 分用單播數據報 619
23.7.3 分用多播和廣播數據報 622
23.7.4 連線上的UDP插口和多接口主機 625
23.8 udp_saveopt函式 625
23.9 udp_ctlinput函式 627
23.10 udp_usrreq函式 628
23.11 udp_sysctl函式 633
23.12 實現求精 633
23.12.1 UDP PCB高速快取 633
23.12.2 UDP檢驗和 634
23.13 小結 635
第24章 TCP:傳輸控制協定 636
24.1 引言 636
24.2 代碼介紹 636
24.2.1 全局變數 636
24.2.2 統計量 637
24.2.3 SNMP變數 640
24.3 TCP 的protosw結構 641
24.4 TCP的首部 641
24.5 TCP的控制塊 643
24.6 TCP的狀態變遷圖 645
24.7 TCP的序號 646
24.8 tcp_init函式 650
24.9 小結 652
第25章 TCP的定時器 654
25.1 引言 654
25.2 代碼介紹 655
25.3 tcp_canceltimers函式 657
25.4 tcp_fasttimo函式 657
25.5 tcp_slowtimo函式 658
25.6 tcp_timers函式 659
25.6.1 FIN_WAIT_2和2MSL定時器 660
25.6.2 持續定時器 662
25.6.3 連線建立定時器和保活定時器 662
25.7 重傳定時器的計算 665
25.8 tcp_newtcpcb算法 666
25.9 tcp_setpersist函式 668
25.10 tcp_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.2 tcp_output概述 680
26.3 決定是否應傳送一個報文段 682
26.4 TCP選項 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.8 tcp_template函式 707
26.9 tcp_respond函式 708
26.10 小結 710
第27章 TCP的函式 712
27.1 引言 712
27.2 tcp_drain函式 712
27.3 tcp_drop函式 712
27.4 tcp_close函式 713
27.4.1 路由特性 713
27.4.2 資源釋放 716
27.5 tcp_mss函式 717
27.6 tcp_ctlinput函式 722
27.7 tcp_notify函式 723
27.8 tcp_quench函式 724
27.9 TCP_REASS宏和tcp_reass函式 724
27.9.1 TCP_REASS宏 725
27.9.2 tcp_reass函式 727
27.10 tcp_trace函式 732
27.11 小結 736
第28章 TCP的輸入 737
28.1 引言 737
28.2 預處理 739
28.3 tcp_dooptions函式 745
28.4 首部預測 747
28.5 TCP輸入:緩慢的執行路徑 752
28.6 完成被動打開或主動打開 752
28.6.1 完成被動打開 753
28.6.2 完成主動打開 756
28.7 PAWS:防止序號迴繞 760
28.8 裁剪報文段使數據在視窗內 762
28.9 自連線和同時打開 768
28.10 記錄時間戳 770
28.11 RST處理 770
28.12 小結 772
第29章 TCP的輸入(續) 773
29.1 引言 773
29.2 ACK處理概述 773
29.3 完成被動打開和同時打開 774
29.4 快速重傳和快速恢復的算法 775
29.5 ACK處理 778
29.6 更新視窗信息 784
29.7 緊急方式處理 786
29.8 tcp_pulloutofband函式 788
29.9 處理已接收的數據 789
29.10 FIN處理 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.2 tcp_usrreq函式 805
30.3 tcp_attach函式 814
30.4 tcp_disconnect函式 815
30.5 tcp_usrclosed函式 816
30.6 tcp_ctloutput函式 817
30.7 小結 820
第31章 BPF:BSD 分組過濾程式 821
31.1 引言 821
31.2 代碼介紹 821
31.2.1 全局變數 821
31.2.2 統計量 822
31.3 bpf_if結構 822
31.4 bpf_d結構 825
31.4.1 bpfopen函式 826
31.4.2 bpfioctl函式 827
31.4.3 bpf_setif函式 830
31.4.4 bpf_attachd函式 831
31.5 BPF的輸入 832
31.5.1 bpf_tap函式 832
31.5.2 catchpacket函式 833
31.5.3 bpfread函式 835
31.6 BPF的輸出 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.4 rip_init函式 842
32.5 rip_input函式 842
32.6 rip_output函式 844
32.7 rip_usrreq函式 846
32.8 rip_ctloutput函式 850
32.9 小結 852
結束語 853
附錄A 部分習題的解答 854
附錄B 原始碼的獲取 872
附錄C RFC 1122 的有關內容 874
參考文獻 895

相關搜尋

熱門詞條

聯絡我們