您的位置:首页 > 百科 > 正文

Linux内核源码剖析

《Linux内核源码剖析(上下册)》来自是2011年出版的图书,作者是樊东东莫澜。

  • 书名 《Linux内核源码剖析》
  • 作者 樊东东 莫澜
  • ISBN 9787111323730
  • 页数 1062
  • 定价 142.00元

内容介绍

  Linux内核的源代码分析:tcp/ip实现(软件包卷一和卷二来自)”详细讨论了tcp/ip在Linux内核版本2.6.20中的实现。本书给出了大量源代码,并通过对源代码的详细评论帮助读者掌握tcp/ip的实现。“Linux内核源代码分析:tc360百科p/ip实现(package volume I和II)”根据协议栈级别,从驱动层到传输层,包括驱动程序的实现、接口层的输入和输出、ip层的输入和输出,以及ip孩限静用选项、邻居子系统形范夜多于祖冲赵鲜获液、路由、,套接字接口和传输层。全书基本涵盖了网络架构的所有知识点。特别是TCP,包括TCP连接的建立和终止、输入和输出以及拥塞控制的实现。

  “Linux内核源代码分析:tcp/ip实现(软件包第一卷假浓妈烟抗测故历西齐和第二卷)”适用于市析行熟悉Linux的基本使布入用方法,对Linux内核史务检几雨核殖的工作原理和网络知识有一定了解,并渴望深入了范布吸留取孙量问善响解Linux中各种机制的具体实现的用户,包括应用程序编程人员,嵌入式程序员和网络管理员。当相关专业的科研人员在工作中遇到问题时,也可以参考“Linux内核源代码分析:tcp/ip实现(软件包第一卷和第二卷)”,了解相关内核部分的实现。此外,计算机相关专业的高年级本科生和研究生在学习相关课程(如操作系统、计算机网络等)时,可以将“Linux内核的源代码分析:tcp/ip实现(套件I和II)”作为辅助教程,并将其与理论相结宗条操形担系标阿顺结合,以更好地理解相应的知酸缩满识点。

作品目录

  上 册 目 录

  前言

  第1章 预备知识 1

  1.1 应用层配置诊断工具 2

  1.1.1 iputils 2

  1.1.2 net-t周走座脸工ools 2

  1.1.3 iproute2 2

  1.2 内核空间与用户空间的接口 2

  1.2.1 procfs 2

  1.2.2 sys裂欢全况ctl(/proc/sys目录) 4

  1.2.3 sysfs(/带毛使sys文件系统) 5

  1.2.4 ioctl系统调用 6

  1.2.5 netlink套接口 6

  1.3 网络I/O加速 6

  写音理弱龙殖孙降1.3.1 TSO/G亲触践常待题举陆SO 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

  下 册 目 录

  第20章 路由缓存 551

  20.1 系统参数 551

  20.2 路由缓存的组织结构 552

  20.2.1 rtable结构 552

  20.2.2 flowi结构 555

  20.2.3 dst_entry结构 556

  20.2.4 dst_ops结构 559

  20.3 初始化 561

  20.4 创建路由缓存项 563

  20.4.1 创建输入路由缓存项 563

  20.4.2 创建输出路由缓存项 565

  20.5 添加路由表项到缓存中:

  rt_intern_hash() 568

  20.6 输入路由缓存查询:

  ip_route_input() 571

  20.7 输出路由缓存查询 573

  20.7.1 ip_route_output_key() 573

  20.7.2 __ip_route_output_key() 573

  20.8 垃圾回收 575

  20.8.1 路由缓存项的过期 575

  20.8.2 判断缓存路由表项是否

  可被删除 575

  20.8.3 同步清理 576

  20.8.4 异步清理 580

  20.8.5 路由缓存项的释放 582

  20.9 刷新缓存 582

  20.9.1 通过定时器定时刷新 584

  20.9.2 网络设备的硬件地址发生

  改变 584

  20.9.3 网络设备状态发生变化 584

  20.9.4 给设备添加或删除一个

  IP地址 584

  20.9.5 全局转发状态或设备的转发

  状态发生变化 584

  20.9.6 一条路由被删除 585

  20.9.7 通过写/proc的flush文件 585

  20.10 ICMP重定向消息的处理 585

  20.11 ICMP目的不可达,需要分片

  消息的处理 588

  第21章 路由策略 590

  21.1 路由策略组织结构 590

  21.1.1 fib_rules_ops结构 590

  21.1.2 fib_rule结构 592

  21.1.3 fib4_rule结构 594

  21.2 三个默认路由策略 595

  21.3 IPv4协议族的fib_rules_ops

  结构实例 595

  21.3.1 fib4_rule_action() 595

  21.3.2 fib4_rule_match() 596

  21.3.3 fib4_rule_configure() 596

  21.3.4 fib4_rule_compare() 598

  21.3.5 fib4_rule_fill() 598

  21.3.6 fib4_rule_default_pref() 599

  21.4 netlink接口 599

  21.4.1 netlink路由策略消息结构 599

  21.4.2 fib_nl_newrule() 600

  21.4.3 fib_nl_delrule() 602

  21.5 受网络设备状态改变的影响 604

  21.6 策略路由的查找 604

  第22章 套接口层 606

  22.1 socket结构 607

  22.2 proto_ops结构 608

  22.3 套接口文件系统 610

  22.3.1 套接口文件系统类型 610

  22.3.2 套接口文件系统超级块操作

  接口 610

  22.3.3 套接口文件的inode 611

  22.3.4 sock_alloc_inode() 611

  22.3.5 sock_destroy_inode() 612

  22.4 套接口文件 612

  22.4.1 套接口文件与套接口的绑定 612

  22.4.2 根据文件描述符获取套接口 614

  22.5 进程、文件描述符和套接口 615

  22.6 套接口层的系统初始化 616

  22.7 套接口系统调用 617

  22.7.1 套接口系统调用入口 617

  22.7.2 socket系统调用 621

  22.7.3 bind系统调用 629

  22.7.4 listen系统调用 632

  22.7.5 accept系统调用 633

  22.7.6 connect系统调用 635

  22.7.7 shutdown系统调用 636

  22.7.8 close系统调用 638

  22.7.9 select系统调用的实现 640

  第23章 套接口I/O 641

  23.1 输出/输入数据的组织 641

  23.1.1 msghdr结构 641

  23.1.2 verify_iovec() 643

  23.1.3 memcpy_toiovec() 644

  23.1.4 memcpy_fromiovec() 644

  23.1.5 memcpy_fromiovecend() 644

  23.1.6 csum_partial_copy_

  fromiovecend() 644

  23.2 输出系统调用 644

  23.2.1 sock_sendmsg() 644

  23.2.2 sendto系统调用 645

  23.2.3 send系统调用 646

  23.2.4 sendmsg系统调用 646

  23.3 输入系统调用 649

  第24章 套接口选项 650

  24.1 setsockopt系统调用 650

  24.2 ioctl系统调用 655

  24.2.1 ioctl在文件系统内的调用过程 655

  24.2.2 套接口文件ioctl调用接口的

  实现 655

  24.2.3 套接口层的实现 658

  24.3 getsockname系统调用 659

  24.4 getpeername系统调用 660

  第25章 传输控制块 661

  25.1 系统参数 662

  25.2 传输描述块结构 662

  25.2.1 sock_common结构 662

  25.2.2 sock结构 663

  25.2.3 inet_sock结构 670

  25.3 proto结构 674

  25.3.1 proto实例组织结构 677

  25.3.2 proto_register() 677

  25.3.3 proto_unregister() 679

  25.4 传输控制块的内存管理 680

  25.4.1 传输控制块的分配和释放 680

  25.4.2 普通的发送缓存区的分配 682

  25.4.3 发送缓存的分配与释放 685

  25.4.4 接收缓存的分配与释放 686

  25.4.5 辅助缓存的分配与释放 688

  25.5 异步IO机制 688

  25.5.1 sk_wake_async() 689

  25.5.2 sock_def_wakeup() 690

  25.5.3 sock_def_error_report() 690

  25.5.4 sock_def_readable() 691

  25.5.5 sock_def_write_space()和

  sk_stream_write_space() 691

  25.5.6 sk_send_sigurg() 692

  25.5.7 接收到FIN段后通知进程 692

  25.5.8 sock_fasync() 693

  25.6 传输控制块的同步锁 694

  25.6.1 socket_lock_t结构 694

  25.6.2 控制用户进程和下半部间

  同步锁 695

  25.6.3 控制下半部间同步锁 698

  第26章 TCP:传输控制协议 699

  26.1 系统参数 699

  26.2 TCP的inet_protosw实例 705

  26.3 TCP的net_protocol结构 705

  26.4 TCP传输控制块 706

  26.4.1 inet_connection_sock结构 706

  26.4.2 inet_connection_sock_af_ops

  结构 710

  26.4.3 tcp_sock结构 711

  26.4.4 tcp_options_received结构 721

  26.4.5 tcp_skb_cb结构 723

  26.5 TCP的proto结构和proto_ops

  结构的实例 725

  26.6 TCP状态迁移图 725

  26.7 TCP首部 726

  26.8 TCP校验和 727

  26.8.1 输入TCP段的校验和检测 728

  26.8.2 输出TCP段校验和的计算 729

  26.9 TCP的初始化 729

  26.10 TCP传输控制块的管理 731

  26.10.1 inet_hashinfo结构 732

  26.10.2 管理除LISTEN状态之外的

  TCP传输控制块 733

  26.10.3 管理LISTEN状态的

  TCP传输控制块 734

  26.11 TCP层的套接口选项 735

  26.12 TCP的ioctl 736

  26.13 TCP传输控制块的初始化 737

  26.14 TCP的差错处理 737

  26.15 TCP传输控制块层的缓存

  管理 741

  26.15.1 缓存管理的算法 741

  26.15.2 发送缓存的管理 744

  26.15.3 接收缓存的管理 745

  第27章 TCP的定时器 746

  27.1 初始化 746

  27.2 连接建立定时器 747

  27.2.1 连接建立定时器处理函数 747

  27.2.2 连接建立定时器的激活 751

  27.3 重传定时器 751

  27.3.1 重传定时器处理函数 751

  27.3.2 重传定时器的激活 756

  27.4 延迟确认定时器 756

  27.4.1 延时确认定时器的处理函数 756

  27.4.2 延时确认定时器的激活 758

  27.5 持续定时器 758

  27.5.1 持续定时器处理函数 758

  27.5.2 激活持续定时器 762

  27.6 保活定时器 763

  27.6.1 保活定时器处理函数 763

  27.6.2 激活保活定时器 764

  27.7 FIN_WAIT_2定时器 764

  27.7.1 FIN_WAIT_2定时器处理函数 765

  27.7.2 激活FIN_WAIT_2定时器 765

  27.8 TIME_WAIT定时器 766

  第28章 TCP连接的建立 767

  28.1 服务端建立连接过程 767

  28.2 连接相关的数据结构 770

  28.2.1 request_sock_queue结构 770

  28.2.2 listen_sock结构 771

  28.2.3 tcp_request_sock结构 771

  28.2.4 request_sock_ops结构 774

  28.3 bind系统调用的实现 775

  28.3.1 bind端口散列表 775

  28.3.2 传输接口层的实现 775

  28.4 listen系统调用的实现 779

  28.4.1 inet_listen() 779

  28.4.2 实现侦听:

  inet_csk_listen_start() 780

  28.4.3 分配连接请求块散列表:

  reqsk_queue_alloc() 781

  28.5 accept系统调用的实现 782

  28.5.1 套接口层的实现:

  inet_accept() 782

  28.5.2 传输接口层的实现:

  inet_csk_accept() 783

  28.6 被动打开 785

  28.6.1 SYN cookies 785

  28.6.2 第一次握手:接收SYN段 786

  28.6.3 第二次握手:

  发送SYN+ACK段 793

  28.6.4 第三次握手:接收ACK段 798

  28.7 connect系统调用的实现 813

  28.7.1 套接口层的实现:

  inet_stream_connect() 813

  28.7.2 传输接口层的实现 815

  28.8 主动打开 816

  28.8.1 第一次握手:发送SYN段 816

  28.8.2 第二次握手:

  接收SYN+ACK段 823

  28.8.3 第三次握手:发送ACK段 828

  28.9 同时打开 828

  28.9.1 SYN_SENT状态接收SYN段 828

  28.9.2 SYN_RECV状态接收

  SYN+ACK段 830

  第29章 TCP拥塞控制的实现 831

  29.1 拥塞控制引擎 831

  29.2 拥塞控制状态机 832

  29.2.1 Open状态 833

  29.2.2 Disorder状态 833

  29.2.3 CWR状态 833

  29.2.4 Recovery状态 834

  29.2.5 Loss状态 834

  29.3 拥塞窗口调整撤销 836

  29.3.1 撤销拥塞窗口的检测 837

  29.3.2 tcp_undo_cwr() 837

  29.3.3 从Disorder拥塞状态撤销 838

  29.3.4 从Recovery状态撤销 838

  29.3.5 从Recovery拥塞状态撤销 839

  29.3.6 从Loss拥塞状态撤销 839

  29.4 显式拥塞通知 840

  29.4.1 IP对ECN的支持 841

  29.4.2 TCP对ECN的支持 841

  29.5 拥塞控制状态的处理及转换 843

  29.5.1 拥塞控制状态的处理:

  tcp_fastretrans_alert() 843

  29.5.2 拥塞避免 852

  29.6 拥塞窗口的检测:

  tcp_cwnd_test() 852

  29.7 F-RTO算法 853

  29.7.1 进入F-RTO算法处理阶段 853

  29.7.2 进行F-RTO算法处理 855

  29.8 拥塞窗口的检验 857

  29.8.1 tcp_event_data_sent() 857

  29.8.2 tcp_cwnd_validate() 858

  29.9 支持多拥塞控制算法的机制 859

  29.9.1 接口 859

  29.9.2 注册拥塞控制算法:tcp_register_

  congestion_control() 861

  29.9.3 注销拥塞控制算法:tcp_unregister_

  congestion_control() 861

  29.9.4 选取某种拥塞控制算法: tcp_set_

  congestion_control() 861

  29.9.5 Linux支持的拥塞控制算法 862

  第30章 TCP的输出 864

  30.1 引言 864

  30.2 最大段长度(MSS) 867

  30.3 sendmsg系统调用在TCP中的

  实现 870

  30.3.1 分割TCP段 871

  30.3.2 套接口层的实现 871

  30.3.3 传输接口层的实现 871

  30.4 对TCP选项的处理 889

  30.4.1 构建SYN段的选项 889

  30.4.2 构建非SYN段的选项 892

  30.5 Nagle算法 893

  30.6 ACK的接收 894

  30.6.1 tcp_ack() 894

  30.6.2 发送窗口的更新 899

  30.6.3 根据SACK选项标记重传

  队列中段的记分牌 900

  30.6.4 重传队列中已经确认段的删除 910

  30.7 往返时间测量和RTO的计算 913

  30.8 路径MTU发现 915

  30.8.1 路径MTU发现原理 915

  30.8.2 路径MTU发现时的黑洞 916

  30.8.3 有关数据结构的初始化 916

  30.8.4 创建路径MTU发现TCP段并

  发送 916

  30.8.5 路径MTU发现失败后处理 920

  30.8.6 处理需要分片ICMP目的

  不可达报文 920

  30.8.7 更新当前有效的MSS 921

  30.8.8 路径MTU发现成功后处理 922

  30.9 TCP重传接口 922

  第31章 TCP的输入 926

  31.1 引言 926

  31.2 TCP接收的总入口 927

  31.2.1 接收到prequeue队列 930

  31.2.2 有效TCP段的处理 931

  31.3 报文的过滤 932

  31.3.1 过滤器的数据结构 933

  31.3.2 安装过滤器 935

  31.3.3 卸载过滤器 937

  31.3.4 过滤执行 938

  31.4 ESTABLISHED状态的接收 938

  31.4.1 首部预测 939

  31.4.2 接收处理无负荷的ACK段 941

  31.4.3 执行快速路径 942

  31.4.4 执行慢速路径 945

  31.4.5 数据从内核空间复制到用户

  空间 948

  31.4.6 通过调节接收窗口进行

  流量控制 952

  31.4.7 确定是否需要发送ACK段

  (用于接收的数据从内核空

  间复制到用户空间时) 956

  31.5 TCP选项的处理 957

  31.5.1 慢速路径中快速解析TCP选项 957

  31.5.2 全面解析TCP选项 958

  31.6 慢速路径的数据处理 961

  31.6.1 接收处理预期的段 963

  31.6.2 接收处理在接收窗口之外的段 965

  31.6.3 接收处理乱序的段 966

  31.6.4 tcp_ofo_queue() 969

  31.7 带外数据处理 970

  31.7.1 检测紧急指针 970

  31.7.2 读取带外数据 972

  31.8 SACK信息 973

  31.8.1 SACK允许选项 973

  31.8.2 SACK选项 974

  31.8.3 SACK的产生 974

  31.8.4 发送方对SACK的响应 975

  31.8.5 实现 975

  31.9 确认的发送 975

  31.9.1 快速确认模式 976

  31.9.2 处理数据接收事件 977

  31.9.3 发送确认紧急程度和状态 978

  31.9.4 延迟或快速确认 979

  31.10 recvmsg系统调用在TCP中的

  实现 980

  31.10.1 套接口层的实现 980

  31.10.2 传输接口层的实现 980

  31.11 sk_backlog_rcv接口 991

  第32章 TCP连接的终止 992

  32.1 连接终止过程 993

  32.1.1 正常关闭 993

  32.1.2 同时关闭 994

  32.2 shutdown传输接口层的

  实现 994

  32.2.1 tcp_shutdown() 994

  32.2.2 tcp_send_fin() 995

  32.3 close传输接口层的实现:

  tcp_close() 995

  32.4 被动关闭:FIN段的接收

  处理 999

  32.5 主动关闭 1002

  32.5.1 timewait控制块的数据

  结构 1002

  32.5.2 timewait控制块取代TCP传输

  控制块 1006

  32.5.3 启动FIN_WAIT_2或TIME_WAIT

  定时器 1008

  32.5.4 CLOSE_WAIT、LAST_ACK、

  FIN_WAIT1、FIN_WAIT2与

  CLOSING状态处理 1010

  32.5.5 FIN_WAIT2和TIME_WAIT

  状态处理 1013

  32.5.6 timewait控制块的2MSL

  超时处理 1020

  第33章 UDP:用户数据报 1023

  33.1 引言 1023

  33.1.1 UDP首部 1023

  33.1.2 UDP的输入与输出 1024

  33.2 UDP的inet_protosw结构 1024

  33.3 UDP的传输控制块 1025

  33.4 UDP的proto结构和proto_ops

  结构的实例 1027

  33.5 UDP的状态 1027

  33.6 UDP传输控制块的管理 1027

  33.7 bind系统调用的实现 1028

  33.8 UDP套接口的关闭 1031

  33.9 connect系统调用的实现 1032

  33.9.1 udp_disconnect() 1033

  33.9.2 ip4_datagram_connect() 1033

  33.10 select系统调用的实现 1034

  33.11 UDP的ioctl 1037

  33.12 UDP的套接口选项 1037

  33.13 UDP校验和 1038

  33.13.1 输入UDP数据报校验和的

  计算 1038

  33.13.2 输出UDP数据报校验和的

  计算 1039

  33.14 UDP的输出:sendmsg系统

  调用 1040

  33.14.1 udp_sendmsg() 1040

  33.14.2 udp_push_pending_frames() 1047

  33.15 UDP的输入 1048

  33.15.1 UDP接收的入口:

  udp_rcv() 1048

  33.15.2 UDP组播数据报输入:

  __udp4_lib_mcast_deliver() 1052

  33.15.3 udp_queue_rcv_skb() 1053

  33.16 recvmsg系统调用的实现 1055

  33.17 UDP的差错处理:

  udp_err() 1059

  33.18 轻量级UDP 1061

  参考文献 1063

发表评论

用户头像 游客
此处应有掌声~

评论列表