图书介绍
TCP/IP架构、设计与应用 Linux版PDF|Epub|txt|kindle电子书版本网盘下载
- (印)塞斯,(印)文卡特苏鲁著 著
- 出版社: 北京:清华大学出版社
- ISBN:9787302229261
- 出版时间:2010
- 标注页数:736页
- 文件大小:384MB
- 文件页数:757页
- 主题词:计算机网络-通信协议;Linux操作系统-程序设计
PDF下载
下载说明
TCP/IP架构、设计与应用 Linux版PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 引言1
1.1 TCP/IP协议栈概述2
1.1.1 沿协议栈向下的处理过程2
1.1.2 沿协议栈向上的处理过程4
1.2 Linux 2.4.20的源码组织结构6
1.3 TCP/IP协议栈和内核控制路径9
1.4 版本2.4之后Linux内核的可抢占性10
1.4.1 Linux系统调用13
1.4.2 添加新的系统调用14
1.5 Linux进程和线程16
1.5.1 fork()17
1.5.2 线程17
1.5.3 内核线程18
1.6 内核同步机制20
1.6.1 信号量20
1.6.2 原子操作21
1.6.3 旋转锁21
1.7 TCP/IP应用编程接口22
1.7.1 服务器应用23
1.7.2 客户端应用25
1.7.3 套接字选项27
1.7.4 选项值27
1.8 Shutdown33
1.8.1 关闭功能在内核的实现33
1.8.2 发送关闭33
1.8.3 接收关闭34
1.9 I/O35
1.9.1 read()35
1.9.2 write()35
1.9.3 recv()35
1.9.4 send()35
1.9.5 select()36
1.10 TCP状态36
1.10.1 部分关闭41
1.10.2 部分关闭的tcpdump输出43
1.11 本章总结43
第2章 协议基础45
2.1 TCP46
2.2 TCP选项(RFC 1323)49
2.2.1 mss选项50
2.2.2 窗口缩放选项50
2.2.3 时间戳选项51
2.2.4 有选择确认选项51
2.3 TCP数据流53
2.4 延时确认60
2.5 Nagle算法(RFC 896)62
2.6 TCP滑动窗口协议64
2.7 最大化TCP吞吐量71
2.8 TCP定时器73
2.8.1 重传定时器73
2.8.2 persistent定时器74
2.8.3 keepalive定时器75
2.8.4 TIME_WAIT定时器75
2.9 TCP拥塞控制76
2.10 TCP性能和可靠性76
2.10.1 RTTD77
2.10.2 SACK/DSACK77
2.10.3 窗口缩放77
2.11 IP(Internet协议)78
2.12 路由79
2.13 netstat80
2.14 traceroute81
2.15 ICMP84
2.16 Ping84
2.17 ARP/RARP86
2.18 本章总结88
第3章 套接字的内核实现89
3.1 套接字层90
3.2 VFS和套接字91
3.3 协议套接字注册92
3.4 结构inet_protosw94
3.5 内核中的套接字组织结构95
3.6 socket96
3.7 inet_create(见源码3-4)97
3.8 套接字调用流程图104
3.9 本章总结105
第4章 TCP连接设置的内核实现107
4.1 连接设置108
4.1.1 服务器端设置108
4.1.2 服务器端操作109
4.2 BIND109
4.2.1 套接字BIND相关的数据结构110
4.2.2 TCP bind的hash桶110
4.2.3 tcp_ehash111
4.2.4 tcp_listening_hash112
4.2.5 tcp_bhash112
4.2.6 tcp_hashinfo113
4.2.7 tcp_bind_hashbucket(见图4-6)114
4.2.8 tcp_bind_bucket114
4.2.9 bind()115
4.2.10 sys_bind()115
4.2.11 sockfd_lookup()116
4.2.12 fget()116
4.2.13 inet_bind()116
4.2.14 tcp_v4_get_port()117
4.2.15 tcp_bind_conflict()119
4.3 LISTEN121
4.3.1 sys_listen()122
4.3.2 inet_listen()122
4.3.3 tcp_listen_start()122
4.3.4 listen控制流125
4.3.5 结构open_request126
4.3.6 accept队列已满131
4.3.7 链接在tcp_ehash hash表中的已建立套接字134
4.3.8 当三次握手未完成时连接请求的状态134
4.3.9 当三次握手完成后连接请求的状态135
4.4 内核对连接请求的处理136
4.4.1 SYN队列处理137
4.4.2 accept队列处理138
4.4.3 处理新连接请求的流程140
4.5 ACCEPT140
4.5.1 inet_accept()143
4.5.2 当三次握手完成且应用程序接受后链接inode和套接字数据结构143
4.5.3 新连接已建立后链接VFS和内核套接字数据结构146
4.5.4 新已接受连接套接字的文件表入口项146
4.5.5 接受新建立连接的流控制147
4.6 客户端设置147
4.6.1 客户端操作147
4.6.2 connect147
4.6.3 tcp_v4_connect()148
4.6.4 ip_route_connect()148
4.6.5 生成连接请求的流控制149
4.6.6 tcp_v4_hash_connect()151
4.6.7 _tcp_v4_check_established()152
4.6 8 tcp_connect()155
4.6.9 tcp_transmit_skb()157
4.7 本章总结159
第5章 sk_buff和协议头161
5.1 结构sk_buff162
5.2 结构skb_shared_info(见图5-3)166
5.3 sk_buff和DMA-skb_frag_struct166
5.3.1 DMA和分段sk_buff167
5.3.2 sk_buff和IP分段167
5.3.3 sk_buff和分段169
5.4 sk_buff的例程操作169
5.4.1 alloc_skb()169
5.4 2 skb_reserve()170
5.4.3 skb_put()171
5.4.4 skb_push()173
5.4.5 skb_pull()174
5.5 构建向下遍历协议层时的协议头175
5.5.1 TCP头的添加175
5.5.2 IP头的添加176
5.5.3 链路层头的添加177
5.6 解析向上遍历协议层时的协议头178
5.6.1 sk_buff指向链路层驱动要处理的链路层头178
5.6.2 sk_buff指向IP层要处理的IP头179
5.6.3 sk_buff指向TCP层要处理的TCP头180
5.7 本章总结181
第6章 sk_buff在不同协议层的处理183
6.1 TCP/IP协议栈向下的报文处理184
6.1.1 从套接字层到设备的报文传输路径185
6.1.2 TCP报文沿协议栈向下处理的内核路径187
6.2 准备传输的报文192
6.3 报文向下处理的内核流193
6.4 协议栈向上的报文处理过程195
6.4.1 从设备(接收)到套接字层的报文处理路径198
6.4.2 TCP报文沿协议栈向上的内核处理路径198
6.5 沿协议栈向上的报文内核流程205
6.6 本章总结205
第7章 TCP发送207
7.1 TCP分段单元207
7.1.1 无分散-聚集支持下的分段单元处理208
7.1.2 无分散-聚集支持的分段处理210
7.1.3 通过套接字写1mss字节的数据211
7.2 分散-聚集支持的分段处理212
7.2.1 有分散-聚集支持的分段处理215
7.2.2 应用程序向套接字写Y字节的数据216
7.2 3 can_coalesce()216
7.2.4 tcp_copy_to_page()217
7.2.5 tcp_mark_push()217
7.2 6 forced_push()218
7.2.7 tcp_push()218
7.2.8 _tcp_push_pending_frames()219
7.2 9 tcp_snd_test()220
7.2.10 tcp_nagle_check()220
7.2.11 tcp_minshall_check()221
7.2.12 tcp_write_xmit()221
7.2.13 update_send_head()223
7.2.14 tcp_push_one()224
7.2.15 skb_entail()224
7.3 发送OOB数据225
7.4 TCP分段单元和发送处理流程226
7.5 分段和发送机制的函数调用流227
7.6 本章总结229
第8章 TCP接收231
8.1 排队机制231
8.1.1 tcp_rcv_established()的处理232
8.1.2 tcp_prequeue()234
8.1.3 队列处理235
8.1.4 tcp_data_wait()239
8.1.5 tcp_prequeue_process()240
8.1.6 lock_sock()241
8.1.7 _lock_sock()241
8.1.8 release_sock()242
8.1.9 _release_sock()242
8.2 接收队列中TCP数据的处理243
8.2.1 cleanup_rbuf()246
8.2.2 skb_copy_datagram_iovec()248
8.2.3 从接收缓冲区读取无分页的数据250
8.2.4 应用程序读取X个字节250
8.2.5 应用程序读取n个字节(1mss=n)251
8.2.6 应用程序读取n-X个字节252
8.2.7 从分页缓冲区读取数据253
8.2.8 应用程序读取n个字节253
8.2.9 应用程序读取1页的数据254
8.3 TCP紧急数据处理255
8.3.1 紧急字节读取的OOB数据模式255
8.3.2 tcp_recv_urg()256
8.3.3 紧急模式处理和紧急字节读取的内联数据模式257
8.4 通过TCP套接字接收数据的数据流图260
8.5 本章总结266
第9章 TCP内存管理267
9.1 发送端TCP内存管理267
9.1.1 select_size()270
9.1.2 tcp_alloc_pskb()271
9.1.3 alloc_skb()272
9.1.4 tcp_alloc_page()273
9.1.5 skb_charge()274
9.1.6 tcp_mem_schedule()274
9.1.7 tcp_free_skb()276
9.1.8 sock_wfree()277
9.1.9 tcp_write_space()277
9.1.10 tcp_mem_reclaim()278
9.1.11 _tcp_mem_reclaim()279
9.1.12 wait_for_tcp_memory()279
9.2 接收端TCP内存管理282
9.2.1 tcp_prune_queue()285
9.2.2 tcp_clamp_window()286
9.2.3 tcp_collapse_ofo_queue()288
9.2.4 tcp_collapse()289
9.2.5 _skb_queue_purge()296
9.3 接收缓冲区内存释放296
9.4 TCP内存管理中的系统级控制参数296
9.5 本章总结298
第10章 TCP定时器299
10.1 Linux中的定时器300
10.1.1 mod_timer()300
10.1.2 detach_timer()301
10.1.3 del_timer()301
10.1.4 执行定时器例程的时机302
10.2 TCP重传定时器302
10.2.1 安装重传定时器的时机302
10.2.2 重置或者取消重传定时器的时机303
10.2.3 tcp_enter_loss()306
10.2.4 tcp_retransmit_skb()308
10.2.5 tcp_retrans_try_collapse()309
10.2.6 skb_cloned()311
10.3 零窗口探测定时器312
10.3.1 首次安装探测定时器的时机312
10.3.2 取消连接探测定时器的时机313
10.3.3 tcp_ack_probe()313
10.3.4 窗口探测定时器的工作原理314
10.3.5 tcp_probe_timer()314
10.3.6 tcp_send_probeO()315
10.3.7 tcp_write_wakeup()316
10.4 延时确认定时器318
10.4.1 ACK的调度时机319
10.4.2 ACK数据段的发送时机和发送处理过程320
10.4.3 快速ACK模式321
10.4.4 _tcp_ack_snd_check()321
10.4.5 tcp_ack_snd_check()322
10.4.6 tcp_send_delayed_ack()323
10.4.7 tcp_delack_timer()324
10.4.8 tcp_reset_xmit_timer()326
10.4.9 tcp_write_timer()327
10.4.10 tcp_clear_xmit_timer()328
10.5 keepalive定时器329
10.5.1 激活keepalive定时器的时机330
10.5.2 如何重置定时器330
10.5.3 tcp_keepalive_timer()330
10.6 SYN-ACK定时器333
10.6.1 SYN-ACK定时器激活的时机333
10.6.2 SYN-ACK定时器停止的时机333
10.6.3 tcp_synack_timer()334
10.7 TIME_WAIT定时器338
10.7.1 TIME_WAIT定时器的触发时机338
10.7.2 tcp_time_wait()338
10.7.3 tcp_tw_schedule()339
10.7.4 非再生模式341
10.7.5 再生模式342
10.7.6 tcp_twkill()345
10.7.7 tcp_twcal_tick()347
10.7.8 _tcp_tw_hashdance()350
10.8 本章总结352
第11章 TCP核心处理353
11.1 传入TCP数据段处理354
11.1.1 预测标志354
11.1.2 构建预测标志355
11.1.3 使用快速路径的条件357
11.1.4 使用慢速路径的时机357
11.1.5 使用快速路径的时机358
11.1.6 与预测标志相关的注意点358
11.2 快速路径处理359
11.3 慢速路径处理362
11.3.1 tcp_sequence()363
11.3.2 tcp_replace_ts_recent()364
11.3.3 tcp_event_data_recv()365
11.3.4 tcp_incr_quickack()367
11.3.5 tcp_grow_window()367
11.3.6 _tcp_grow_window()369
11.3.7 计算通告窗口370
11.3.8 tcp_rrceive_window()370
11.3.9 tcp_select_window()371
11.3.10 tcp_space()372
11.3.11 tcp_data_snd_check()372
11.3.12 _tcp_data_snd_check()373
11.3.13 tcp_paws_discard()373
11.4 传入ACK的处理375
11.4.1 tcp_packets_in_flight()378
11.4.2 tcp_ack_is_dubious()379
11.4.3 tcp_cong_avoid()380
11.4.4 tcp_ack_update_window()381
11.4.5 tcp_may_update_window()382
11.4.6 tcp_clean_rtx_queue()382
11.5 处理SACK块385
11.6 重定序长度392
11.7 处理TCP紧急指针395
11.8 在慢速路径中处理数据段399
11.8.1 tcp_sack_new_ofo_skb()407
11.8.2 tcp_sack_maybe_coalesce()409
11.8.3 tcp_sack_extend()410
11.8.4 tcp_ofo_queue()411
11.8.5 tcp_sack_remove()415
11.9 TCP核心处理417
11.10 本章总结418
第12章 TCP状态处理419
12.1 拥塞状态处理概述420
12.2 TCP状态422
12.2.1 TCP_CA_CWR422
12.2.2 从TCP_CA_CWR状态撤消423
12.3 在恢复状态中处理重复/部分确认423
12.3.1 tcp_remove_reno_sacks()424
12.3.2 tcp_try_undo_partial()425
12.4 在丢失状态中处理重复/部分确认426
12.4.1 tcp_try_undo_loss()427
12.4.2 tcp_check_sack_reneging()429
12.5 TCP状态的默认处理429
12.5.1 tcp_time_to_recover()432
12.5.2 tcp_head_timedout()434
12.5.3 tcp_try_to_open()435
12.5.4 tcp_update_scoreboard()436
12.5.5 tcp_xmit_retransmit_queue()438
12.5.6 tcp_packet_delayed()440
12.6 当确认超过tp→high_seq时TCP非正常状态的处理440
12.6.1 TCP_CA_Loss441
12.6.2 TCP_CA_CWR441
12.6.3 TCP_CA_Disorder443
12.6.4 tcp_try_undo_dsack444
12.6.5 TCP_CA_Recovery444
12.6.6 tcp_add_reno_sack()446
12.6.7 tcp_check_reno_reordering()446
12.6.8 tcp_may_undo()447
12.6.9 tcp_packet_delayed()447
12.6.10 tcp_undo_cwr()448
12.6.11 tcp_mark_head_lost()449
12.6.12 tcp_sync_left_out()450
12.7 本章总结450
第13章 netlink套接字453
13.1 netlink套接字介绍453
13.2 启动时netlink套接字的注册和初始化454
13.3 内核netlink套接字的创建455
13.4 用户netlink套接字的创建457
13.5 netlink数据结构459
13.5.1 nl_table459
13.5.2 rtnetlink_link460
13.6 其他重要的数据结构463
13.6.1 nlmsghdr结构463
13.6.2 msghdr结构463
13.7 netlink报文格式464
13.8 netlink套接字例子——添加qdisc的tc命令465
13.8.1 用户空间中添加qdisc的tc命令流465
13.8.2 内核空间的tc命令466
13.9 内核空间中的tc命令流程图470
13.10 本章总结471
第14章 IP路由473
14.1 路由475
14.2 基于策略的路由477
14.3 多路径478
14.4 记录路由选项(RFC 791)以及Linux栈的处理482
14.5 源路由483
14.5.1 严格记录路由483
14.5.2 松散记录路由483
14.5.3 SRR处理实现484
14.6 路由表和路由缓存的Linux内核实现490
14.7 路由缓存实现概述491
14.8 管理路由缓存496
14.8.1 本地连接的路由缓存498
14.8.2 _sk_dst_check()499
14.8.3 链接失效并报告给路由子系统500
14.8.4 dst_link_failure()501
14.8.5 ipv4_link_failure()501
14.8.6 dst_set_expires()501
14.8.7 传入报文的路由缓存502
14.8.8 路由缓存计数器503
14.8.9 rt_periodic_timer504
14.8.10 rt_may_expire()506
14.8.11 dst_free()507
14.8.12 _dst_free()508
14.8.13 dst_destroy()509
14.8.14 dst_run_gc()509
14.8.15 关闭接口和rt_flush_timer511
14.8.16 rt_cashe_flush()512
14.9 转发信息库的实现概述513
14.9.1 结构fib_table515
14.9.2 结构fn_hash516
14.9.3 结构fn_zone516
14.9.4 结构fib_node517
14.9.5 结构fib_info519
14.9.6 结构fib_nh520
14.9.7 结构fib_rule521
14.10 使用ip命令在路由表中添加新的表项(RT Netlink接口)522
14.10.1 当使用向路由表中添加一个表项的路由选项运行ip命令时的情况523
14.10.2 inet_rtm_newroute()523
14.10.3 结构rtmsg524
14.10.4 结构kern_rta525
14.10.5 fn_hash_insert()525
14.10.6 fn_new_zone()528
14.10.7 fib_create_info()530
14.10.8 fn_hash_insert()531
14.11 当使用向路由表中添加一个表项的规则选项运行ip命令时的情况532
14.11.1 inet_rtm_newrule()532
14.11.2 FIB初始化534
14.12 FIB遍历流程图538
14.12.1 ip_route_output()539
14.12.2 ip_route_output_key()539
14.12.3 ip_route_output_slow()540
14.12.4 ip_dev_find()551
14.12.5 _in_dev_get()552
14.12.6 inet_select_addr()553
14.12.7 路由范围554
14.12.8 fib_lookup()555
14.13 本章总结563
第15章 Linux中的IP服务质量(IP QoS)565
15.1 简介565
15.2 Linux流量控制的基本组件566
15.3 Linux中pfifo_fast排队规则的实现567
15.4 排队规则数据结构570
15.4.1 结构Qdisc570
15.4.2 结构Qdisc_ops571
15.4.3 结构Qdisc_class_ops572
15.4.4 结构cbq_class573
15.5 tc用户程序及其内核实现细节575
15.5.1 tc_modify_qdisc()576
15.5.2 qdisc_create()578
15.5.3 cbq_init()579
15.5.4 qdisc_graft()580
15.5.5 dev_graft_qdisc()581
15.6 为CBQ创建类别层次的tc命令582
15.6.1 tc_ctl_tclass()582
15.6.2 cbq_change_class()584
15.7 过滤器585
15.8 u32过滤器实现589
15.9 路由过滤器实现592
15.10 enqueue596
15.10.1 cbq_enqueue()596
15.10.2 cbq_classify()597
15.10.3 cbq_enqueue()函数概述598
15.11 CBQ的Linux实现概述599
15.12 cbq_dequeue()599
15.12.1 从net/dev/core.c601
15.12.2 qdisc_run()602
15.12.3 qdisc_restart()603
15.12.4 cbq_dequeue()604
15.12.5 cbq_dequeue_l()605
15.12.6 cbq_dequeue_prio()605
15.13 本章总结609
第16章 IP Filter防火墙611
16.1 Netfilter Hook框架612
16.2 IP协议栈上的Netfilter Hook613
16.2.1 用于传出报文的钩子614
16.2.2 用于传入报文的钩子615
16.3 Neffilter Hook注册616
16.4 Netfilter Hook处理618
16.4.1 nf_hook_slow()618
16.4.2 nf_iterate()619
16.4.3 结构nf_hook_ops620
16.5 兼容性框架620
16.6 ipchains624
16.6.1 使用ipchains过滤625
16.6.2 ipchains的规则链626
16.6.3 结构ipchain626
16.6.4 结构ip_fwkernel627
16.6.5 结构ip_reent627
16.6.6 结构ip_fw628
16.6.7 ipchams中表的组织结构628
16.7 使用ipchains过滤报文629
16.7.1 ip_fw_check()629
16.7.2 ip_rule_match()632
16.8 iptables634
1 6.9 iptables过滤规则和目标组织635
16.9.1 结构ipt_table636
16.9.2 结构ipt_table_info636
16.9.3 结构ipt_entry638
16.9.4 结构ipt_entry_match639
16.9.5 结构ipt_tcp640
16.9.6 结构ipt_entry_target641
16.9.7 结构ipt_standard_target641
16.10 iptables过滤规则和目标的组织结构641
16.11 使用iptables过滤报文641
16.11.1 ipt_do_table()642
16.11.2 IPT_MATCH_ITERATE645
16.12 本章总结646
第17章 网络软中断647
17.1 使用软中断的原因和触发机制648
17.1.1 传输648
17.1.2 接收648
17.2 处理软中断651
17.3 软中断的注册654
17.4 报文接收以及Rx软中断的延迟处理655
17.5 网络Rx软中断的处理659
17.6 报文传输与软中断663
17.7 本章总结672
第18章 报文的传输和接收675
18.1 传输和接收报文的DMA环缓冲区675
18.2 报文接收处理676
18.2.1 支持DMA的报文接收处理流程677
18.2.2 环缓冲区的接收处理677
18.3 报文传输处理679
18.3.1 DMA支持的报文传输处理过程679
18.3.2 传输环缓冲区680
18.4 报文传输和接收的实现682
18.4.1 struct etrax_eth_descr683
18.4.2 struct etrax_dma_descr683
18.4.3 设备的初始化684
18.4.4 DMA传输环缓冲区的初始化685
18.4.5 DMA接收环缓冲区的初始化686
18.5 处理报文接收的Rx中断688
18.5.1 Rx DMA缓冲区的初始化689
18.5.2 e100_rx()689
18.5.3 产生Rx中断前DMA缓冲区接收到三个报文时的Rx描述符690
18.5.4 从DMA缓冲区中取出第一个报文交给操作系统Rx中断处理程序后的Rx描述符691
18.6 报文传输693
18.6.1 e100_send_packet()693
18.6.2 初始化后的Tx DMA环缓冲区描述符694
18.6.3 e100_hardware_send_packet()696
18.6.4 设备DMATx环缓冲区中有两个报文时的处理696
18.6.5 e100tx_interrupt()697
18.6.6 传输了第一个报文并且中断已产生时的情形698
18.7 本章总结699
第19章 lkcd和TCP/IP协议栈的调试701
19.1 lkcd源码和补丁702
19.2 套接字702
19.3 查看接收套接字缓冲区704
19.4 查看发送套接字缓冲区705
19.5 TCP分段单元708
19.6 发送拥塞窗口和ssthresh709
19.7 重传和路由711
19.8 查看连接队列和SYN队列712
19.9 使用lcrash来查看路由和IP服务质量715
19.10 使用lcrash调试CBQ(基于类别的)排队规则717
19.11 u32过滤器718
19.12 路由过滤器724
19.13 FIB表的lcrash输出724
19.14 使用tc命令建立路由过滤器728
19.15 NETLINK数据结构731
19.15.1 nl_table731
19.15.2 rtnetlink_link732
19.16 本章总结733
第20章 展望735