共找到2條詞條名為tcp/ip詳解的結果 展開

tcp/ip詳解

卷2

TCP/IP詳解》是2000年4月機械工業出版社出版的圖書,作者Gary.Wrigh、W.Richard Stevens編著,譯者范建華 。描述了屬於每一層的各個協議以及它們如何在不同操作系統中運行。

圖書信息


作 者:(美)萊特,(美)史蒂文斯 著,陸雪瑩等 譯
出 版 社:機械工業出版社
出版時間:2000年4月
版 次: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