当前位置:首页 > 工业技术
LINUX内核源码剖析  TCP/IP实现  下
LINUX内核源码剖析  TCP/IP实现  下

LINUX内核源码剖析 TCP/IP实现 下PDF电子书下载

工业技术

  • 电子书积分:27 积分如何计算积分?
  • 作 者:樊东东,莫澜编著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2011
  • ISBN:9787111323734
  • 页数:1063 页
图书介绍:
《LINUX内核源码剖析 TCP/IP实现 下》目录

第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 getpeemame系统调用 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 tep_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

相关图书
作者其它书籍
返回顶部