图书介绍

TCP/IP架构、设计与应用 Linux版PDF|Epub|txt|kindle电子书版本网盘下载

TCP/IP架构、设计与应用 Linux版
  • (印)塞斯,(印)文卡特苏鲁著 著
  • 出版社: 北京:清华大学出版社
  • ISBN:9787302229261
  • 出版时间:2010
  • 标注页数:736页
  • 文件大小:384MB
  • 文件页数:757页
  • 主题词:计算机网络-通信协议;Linux操作系统-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

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

热门推荐