LINUX核心源碼剖析 TCP/IP實現下

LINUX核心源碼剖析 TCP/IP實現下

Linux核心源碼剖析 TCP/IP實現(下冊)詳細論述了linux核心2.6.20版本中tcp/ip的實現。書中給出了大量的原始碼,通過對原始碼的詳細注釋,幫助讀者掌握tcp/ip的實現。本書根據協定棧層次,從驅動層逐步論述到傳輸層,包括驅動的實現、接口層的輸入輸出、ip層的輸入輸出以及ip選項的處理、鄰居子系統、路由、套接口及傳輸層等內容,全書基本涵蓋了網路體系架構全部的知識點。特別是tcp,包括tcp連線的建立和終止、輸入與輸出,以及擁塞控制的實現。 本書適用於熟悉linux的基本使用方法,對linux核心工作原理以及網路知識有一定的了解,而又極想更深入理解各個機制在linux中的具體實現的用戶,包括應用程式員和嵌入式程式設計師,以及網路管理員等。相關專業的科研人員在工作中遇到問題時,也可以查閱本書,理解相關核心部分的實現。此外,計算機相關專業的本科高年級學生和研究生,在學習相關課程(如作業系統、計算機網路等)時,可將本書作為輔助教程,與理論相結合以便更好地理解相應的知識點。

基本介紹

  • 中文名:LINUX核心源碼剖析 TCP/IP實現下
  • 作 者:樊東東,莫瀾編著
  • 出版發行信息:北京市:機械工業出版社
  • ISBN號:978-7-111-32373-4
簡介,部分閱讀,目錄,

簡介

【作 者】樊東東,莫瀾編著
【出版發行信息】 北京市:機械工業出版社 , 2011.01
【ISBN號】978-7-111-32373-4
【頁 數】 1063
【原書定價】142.00(上下冊)
【主題詞】計算機網路-通信協定-LINUX作業系統-機器代碼程式-程式分析

部分閱讀

【中圖法分類號】TP316.89;TN915.04 (工業技術>自動化技術、計算機技術>計算技術、計算機技術>計算機軟體>作業系統>網路作業系統>其他)
【參考文獻格式】樊東東,莫瀾編著. LINUX核心源碼剖析 TCP/IP實現 下. 北京市:機械工業出版社
本書詳細論述了linux核心2.6.20版本中tcp/ip的實現。書中給出了大量的原始碼,通過對原始碼的詳細注釋,幫助讀者掌握tcp/ip的實現。本書根據協定棧層次,從驅動層逐步論述到傳輸層,包括驅動的實現、接口層的輸入輸出、ip層的輸入輸出以及ip選項的處理、鄰居子系統、路由、套接口及傳輸層等內容,全書基本涵蓋了網路體系架構全部的知識點。特別是tcp,包括tcp連線的建立和終止、輸入與輸出,以及擁塞控制的實現。
本書適用於熟悉linux的基本使用方法,對linux核心工作原理以及網路知識有一定的了解,而又極想更深入理解各個機制在linux中的具體實現的用戶,包括應用程式員和嵌入式程式設計師,以及網路管理員等。相關專業的科研人員在工作中遇到問題時,也可以查閱本書,理解相關核心部分的實現。此外,計算機相關專業的本科高年級學生和研究生,在學習相關課程(如作業系統、計算機網路等)時,可將本書作為輔助教程,與理論相結合以便更好地理解相應的知識點。

目錄

前言
第1章 預備知識 1
1.1 套用層配置診斷工具 2
1.1.1 iputils 2
1.1.2 net-tools 2
1.1.3 iproute2 2
1.2核心空間與用戶空間的接口 2
1.2.1 procfs 2
1.2.2 sysctl(/proc/sys目錄) 4
1.2.3 sysfs(/sys檔案系統) 5
1.2.4 ioctl系統調用 6
1.2.5netlink套接口 6
1.3 網路i/o加速 6
1.3.1 tso/gso 7
1.3.2 i/o at 8
1.4 其他 8
1.4.1 slab分配器 9
1.4.2 rcu 9
第2章 網路體系結構概述 10
.2.1 引言 10
2.2 協定簡介 10
2.3 網路架構 11
2.4 系統調用接口 11
2.5 協定無關接口 12
2.6 傳輸層協定 12
2.7 套接口快取 13
2.8 設備無關接口 14
2.9 設備驅動程式 14
2.10 網路模組原始碼組織 14
第3章 套接口快取 15
3.1 引言 15
3.2 sk_buff結構 15
3.2.1 網路參數和核心數據結構 16
3.2.2 skb組織相關的變數 19
3.2.3 數據存儲相關的變數 20
3.2.4 通用的成員變數21
3.2.5 標誌性變數 24
3.2.6 特性相關的成員變數 25
3.3 skb_shared_info結構 25
3.3.1 “零拷貝”技術 25
3.3.2 對聚合分散i/o數據的支持 27
3.3.3 對gso的支持 30
3.3.4 訪問skb_shared_info結構 31
3.4 管理函式 31
3.4.1 skb的快取池31
3.4.2 分配skb 32
3.4.3 釋放skb 34
3.4.4 數據預留和對齊 36
3.4.5 克隆和複製skb 38
3.4.6 鍊表管理函式 42
3.4.7 添加或刪除尾部數據 42
3.4.8 拆分數據:skb_split() 44
3.4.9 重新分配skb的線性數據區:pskb_expand_head() 46
3.4.10 其他函式 46
第4章 網路模組初始化 48
4.1 引言 48
4.2 網路模組初始化順序 48
4.3 最佳化基於宏的標記 49
4.4 網路設備處理層初始化 52
第5章 網路設備 55
5.1 pci設備 55
5.1.1 pci驅動程式相關結構 55
5.1.2 註冊pci驅動程式 57
5.2 與網路設備有關的數據結構 59
5.2.1 net_device結構 59
5.2.2 網路設備有關結構的組織 71
5.2.3 相關函式 72
5.3 網路設備的註冊 73
5.3.1 設備註冊的時機 73
5.3.2 分配net_device結構空間 73
5.3.3 網路設備註冊過程 75
5.3.4 註冊設備的狀態遷移 79
5.3.5 設備註冊狀態通知 79
5.3.6 引用計數 80
5.4 網路設備的註銷 80
5.4.1 設備註銷的時機 80
5.4.2 網路設備註銷過程 81
5.5 網路設備的啟用 86
5.6 網路設備的禁用 88
5.7 與電源管理互動 89
5.7.1 掛起設備 90
5.7.2 喚醒設備 90
5.8 偵測連線狀態改變 91
5.8.1 調度處理連線狀態改變事件 91
5.8.2 linkwatch標誌 95
5.9 從用戶空間配置設備相關信息 95
5.9.1 ethtool 95
5.9.2 媒體獨立接口 97
5.10 虛擬網路設備 97
第6章 ip編址 99
6.1 接口和ip地址 99
6.1.1 主ip地址、從屬ip地址和ip別名 99
6.1.2 ip地址的組織 99
6.1.3 in_device結構 100
6.1.4 in_ifaddr結構 101
6.2 函式 102
6.2.1 inetdev_init() 102
6.2.2 inetdev_destroy() 104
6.2.3 inet_select_addr() 104
6.2.4 inet_confirm_addr() 106
6.2.5 inet_addr_onlink() 107
6.2.6 inetdev_by_index() 107
6.2.7 inet_ifa_byprefix() 108
6.2.8 inet_abc_len() 108
6.3 ip地址的設定 109
6.3.1 netlink接口 109
6.3.2 inet_insert_ifa() 111
6.3.3 inet_del_ifa() 112
6.4 ioctl 115
6.5 inetaddr_chain通知鏈 121
第7章 接口層的輸入 122
7.1 系統參數 122
7.2 接口層的ioctl 123
7.2.1 siocxifxxx類命令 123
7.2.2 siocethtool 126
7.2.3 私有命令 127
7.3 初始化 127
7.4 softnet_data結構 128
7.5 napi方式 130
7.5.1 網路設備中斷例程 131
7.5.2 網路輸入軟中斷 131
7.5.3 輪詢處理 133
7.6 非napi方式 134
7.7 接口層輸入報文的處理 137
7.7.1 報文接收例程 137
7.7.2 netif_receive_skb() 138
7.7.3 dev_queue_xmit_nit() 141
7.8 回響cpu狀態的變化 142
7.9 netpoll 143
7.9.1 netpoll相關結構 143
7.9.2 註冊netpoll實例 145
7.9.3 netpoll的輸入 148
7.9.4 netpoll的輸出 156
7.9.5 tx_work工作佇列 159
7.9.6 netpoll實例:netconsole 160
第8章 接口層的輸出 163
8.1 輸出接口 163
8.1.1 dev_queue_xmit() 163
8.1.2 dev_hard_start_xmit() 167
8.1.3 e100的輸出接口:e100_xmit_frame() 168
8.2 網路輸出軟中斷 168
8.2.1 netif_schedule() 168
8.2.2 net_tx_action() 169
8.3 網路設備不支持gso時的處理 170
8.3.1 dev_gso_cb私有控制塊 171
8.3.2 dev_gso_segment() 171
8.3.3 skb_gso_segment() 172
第9章 流量控制 174
9.1 通過流量控制後輸出 174
9.1.1 dev_queue_xmit() 175
9.1.2 qdisc_restart() 176
9.2 構成流量控制的三種元素 178
9.2.1 排隊規則 179
9.2.2 類 186
9.2.3 過濾器 189
9.3 默認的fifo排隊規則 192
9.3.1 pfifo_fast_init() 194
9.3.2 pfifo_fast_reset() 194
9.3.3 pfifo_fast_enqueue() 194
9.3.4 pfifo_fast_dequeue() 195
9.3.5 pfifo_fast_requeue() 195
9.4 netlink的tc接口 195
9.5 排隊規則的創建接口 197
9.5.1 類的創建接口 201
9.5.2 過濾器的創建接口 204
第10章 internet協定族 209
10.1 net_proto_family結構 209
10.2 inet_protosw結構 210
10.3 net_protocol結構 212
10.4 internet協定族的初始化 214
第11章 ip:網際協定 217
11.1 引言 217
11.1.1 ip首部 218
11.1.2 ip數據報的輸入與輸出 219
11.2 ip的私有信息控制塊 220
11.3 系統參數 220
11.4 初始化 223
11.5 ip層套接口選項 223
11.6 ipv4_devconf結構 227
11.7 套接口的錯誤佇列 229
11.7.1 添加icmp差錯信息 231
11.7.2 添加由本地產生的差錯信息 232
11.7.3 讀取錯誤信息 233
11.8 報文控制信息 235
11.8.1 ip控制信息塊 235
11.8.2 報文控制信息的輸出 235
11.8.3 報文控制信息的輸入 236
11.9 對端信息塊 237
11.9.1 系統參數 239
11.9.2 對端信息塊的創建和查找 239
11.9.3 對端信息塊的刪除 241
11.9.4 垃圾回收 242
11.10 ip數據報的輸入處理 244
11.10.1 ip數據報輸入到本地 247
11.10.2 ip數據報的轉發 249
11.11 ip數據報的輸出處理 253
11.11.1 ip數據報輸出到設備 253
11.11.2 tcp輸出的接口 255
11.11.3 udp輸出的接口 261
11.12 ip層對gso的支持 275
11.12.1 inet_gso_segment() 275
11.12.2 inet_gso_send_check() 277
第12章 ip選項處理 278
12.1 ip選項 278
12.1.1 選項列表的結束符 279
12.1.2 空操作 279
12.1.3 安全選項 279
12.1.4 嚴格源路由選項 280
12.1.5 寬鬆源路由選項 281
12.1.6 記錄路由選項 282
12.1.7 流標識選項 282
12.1.8 時間戳選項 283
12.1.9 路由器警告選項 283
12.2 ip_options結構 284
12.3 在ip數據報中構建ip選項 285
12.4 複製ip數據報中選項到指定的ip_options結構 286
12.5 處理待傳送ip分片中的選項 290
12.6 解析ip選項 291
12.7 還原在校驗ip選項時修改的ip選項 297
12.8 處理轉發ip數據報中的ip選項 298
12.9 處理ip數據報的源路由選項 299
12.10 解析並處理ip首部中的ip選項 300
12.11 路由警告選項的處理 301
12.12 由控制信息生成ip選項信息塊 302
第13章 ip的分片與組裝 303
13.1 系統參數 303
13.2 分片303
13.2.1 快速分片 306
13.2.2 慢速分片 309
13.3 組裝 312
13.3.1 ipq結構 312
13.3.2 ipq散列表和鍊表的維護 315
13.3.3 ipq散列表的重組 316
13.3.4 逾時ip分片的清除 317
13.3.5 垃圾收集 318
13.3.6 相關分片組裝函式 319
13.3.7 分片組裝 327
第14章 icmp:internet控制報文協定 330
14.1 icmp報文結構 330
14.2 註冊icmp報文類型 330
14.3 系統參數 330
14.4 icmp的初始化 332
14.5 輸入處理 333
14.5.1 差錯處理 337
14.5.2 重定向處理 342
14.5.3 請求回顯 343
14.5.4 時間戳請求 345
14.5.5 地址掩碼請求和應答 346
14.6 輸出處理 346
14.6.1 傳送icmp報文 346
14.6.2 傳送回顯應答和時間戳應答報文 350
第15章 ip組播 353
15.1 初始化 353
15.2 虛擬接口 354
15.2.1 虛擬接口的添加 355
15.2.2 虛擬接口的刪除:
vif_delete() 358
15.2.3 查找虛擬接口:ipmr_find_vif() 358
15.3 組播轉發快取 358
15.3.1 組播轉發快取的創建 361
15.3.2 組播轉發快取的刪除 361
15.3.3 組播轉發快取的查找 361
15.3.4 向組播路由守護進程傳送報告 362
15.4 臨時組播轉發快取 364
15.4.1 臨時組播轉發快取佇列 365
15.4.2 創建臨時組播轉發快取 365
15.4.3 用於逾時而刪除臨時組播轉發快取的定時器 367
15.4.4 釋放臨時組播快取項中保存的臨時組播報文 368
15.5 外部事件 369
15.6 組播套接口選項 369
15.6.1 ip_multicast_ttl 369
15.6.2 ip_multicast_loop 370
15.6.3 ip_multicast_if 370
15.6.4 ip_add_membership 372
15.6.5 ip_drop_membership 372
15.6.6 ip_msfilter 373
15.6.7 ip_block_source和ip_unblock_source 375
15.6.8 ip_add_source_membership和ip_drop_source_membership 375
15.6.9 mcast_join_group 376
15.6.10 mcast_leave_group 377
15.6.11 mcast_block_source和mcast_unblock_source 377
15.6.12 mcast_join_source_group和mcast_leave_source_group 377
15.6.13 mcast_msfilter 378
15.7 組播選路套接口選項 378
15.7.1 mrt_init 379
15.7.2 mrt_done 379
15.7.3 mrt_add_vif和mrt_del_vif 380
15.7.4 mrt_add_mfc和mrt_del_mfc 380
15.7.5 mrt_assert 380
15.8 組播的ioctl 380
15.8.1 siocgetvifcnt 380
15.8.2 siocgetsgcnt 380
15.9 組播報文的輸入 381
15.10 組播報文的轉發 383
15.10.1 ip_mr_forward() 383
15.10.2 ipmr_queue_xmit() 385
15.11 組播報文的輸出 388
第16章 igmp:internet組管理協定 390
16.1 in_device結構中的組播參數 390
16.2 ip_mc_list結構 391
16.3 系統參數 393
16.4 igmp的版本與協定結構 393
16.4.1 igmp的版本 393
16.4.2 第一版和第二版的igmp報文結構 395
16.4.3 第三版的igmp查詢報文結構 395
16.4.4 第三版的igmp報告結構 396
16.5 igmp報文的輸入 398
16.6 函式 399
16.6.1 ip_mc_find_dev() 399
16.6.2 ip_check_mc() 400
16.7 成員關係查詢 400
16.8 成員關係報告 404
16.8.1 最近離開組播組列表的維護 404
16.8.2 is_in() 404
16.8.3 add_grec() 406
16.8.4 普通查詢的報告 409
16.8.5 v1和v2的報告以及v3的當前狀態記錄報告 410
16.8.6 主動傳送組關係報告 413
16.9 維護套接口組播狀態 416
16.9.1 套接口加入組播組 417
16.9.2 套接口離開組播組 418
16.10 維護網路設備組播狀態 419
16.10.1 被阻止的組播源列表的維護 421
16.10.2 網路設備加入組播組 421
16.10.3 網路設備離開組播組 425
16.11 ip_mc_source() 430
16.12 ip_mc_msfilter() 434
16.13 網路設備組播硬體地址的管理 436
第17章 鄰居子系統 437
17.1 什麼是鄰居子系統 437
17.2 系統參數 437
17.3 鄰居子系統的結構 438
17.3.1 neigh_table結構 438
17.3.2 neighbour結構 441
17.3.3 neigh_ops結構 444
17.3.4 neigh_parms結構 445
17.3.5 pneigh_entry結構 447
17.3.6 neigh_statistics結構 447
17.3.7 hh_cache結構 448
17.4 鄰居表的初始化 449
17.5 鄰居項的狀態機 450
17.6 鄰居項的添加與刪除 452
17.6.1 netlink接口 452
17.6.2 ioctl 456
17.6.3 路由表項與鄰居項的綁定 456
17.6.4 接收到的並非請求的應答 456
17.7 鄰居項的創建與初始化 456
17.7.1 neigh_alloc() 456
17.7.2 neigh_create() 457
17.8 鄰居項散列表的擴容 459
17.9 鄰居項的查找 460
17.9.1 neigh_lookup() 460
17.9.2 neigh_lookup_nodev() 461
17.9.3 __neigh_lookup ()和neigh_lookup_errno() 461
17.10 鄰居項的更新 461
17.11 垃圾回收 465
17.11.1 同步回收 465
17.11.2 異步回收 466
17.12 外部事件 468
17.13 鄰居項狀態處理定時器 469
17.14 代理項 472
17.14.1 代理項的查找、添加和刪除 472
17.14.2 延時處理代理的請求報文 472
17.15 輸出函式 474
17.15.1 丟棄 474
17.15.2 慢速傳送 474
17.15.3 快速傳送 477
第18章 arp:地址解析協定 480
18.1 arp報文格式 480
18.2 系統參數 481
18.3 註冊arp報文類型 483
18.4 arp初始化 483
18.5 arp的鄰居項函式指針表 483
18.6 arp表 484
18.7 函式 485
18.7.1 arp_error_report() 485
18.7.2 arp_solicit() 485
18.7.3 arp_ignore() 486
18.7.4 arp_filter() 488
18.8 ipv4中鄰居項的初始化 488
18.9 arp報文的創建 490
18.10 arp的輸出 490
18.11 arp的輸入 491
18.11.1 arp_rcv() 491
18.11.2 arp_process() 492
18.12 arp代理 497
18.12.1 arp_process() 498
18.12.2 arp_fwd_proxy() 499
18.12.3 parp_redo() 500
18.13 arp的ioctl 500
18.14 外部事件 501
18.15 路由表項與鄰居項的綁定 502
第19章 路由表 503
19.1 什麼是路由表 503
19.1.1 路由的要素 503
19.1.2 特殊路由 505
19.1.3 路由快取 505
19.2 系統參數 506
19.3 路由表組成結構 506
19.3.1 fib_table結構 508
19.3.2 fn_zone結構 510
19.3.3 fib_node結構 511
19.3.4 fib_alias結構 511
19.3.5 fib_info結構 512
19.3.6 fib_nh結構 515
19.4 路由表的初始化 516
19.5 netlink接口 517
19.5.1 netlink路由表項訊息結構 517
19.5.2 inet_rtm_newroute() 519
19.5.3 inet_rtm_delroute() 520
19.6 獲取指定的路由表 520
19.7 路由表項的添加 520
19.8 路由表項的刪除 526
19.9 外部事件 528
19.9.1 網路設備狀態變化事件 528
19.9.2 ip地址變化事件 529
19.9.3 fib_add_ifaddr() 529
19.9.4 fib_del_ifaddr() 531
19.9.5 fib_disable_ip() 534
19.9.6 fib_magic() 534
19.10 選路 535
19.10.1 輸入選路:ip_route_input_slow() 535
19.10.2 組播輸入選路:ip_route_input_mc() 539
19.10.3 輸出選路:ip_route_output_slow() 541
19.10.4 fib_lookup() 546
19.10.5 fn_hash_lookup() 548
19.11 icmp重定向訊息的傳送 548

相關詞條

熱門詞條

聯絡我們