用户层的 TCP 编程模型大致如下,对于服务端,调用 listen 监听端口,之后接受客户端的请求,然后就可以收发数据了。结束时,关闭 socket。

对于客户端,则调用 connect 连接服务端,之后便可以收发数据。最后关闭 socket。

一般游戏的主角手中,都会有一张万能的地图。为了搞定 TCP,我们自然也是需要一张地图的,要不连该去找那个函数看都不知道。很有幸,在tcp_ipv4.c中,tcp_prot定
义了 tcp 的各个接口。

tcp_prot 的类型为 struct proto,是这个结构体是为了抽象各种不同的协议的差异性而存在的。类似面向对象中所说的接口 (Interface) 的概念。这里,我们仅保留我们关系的部分。

准备部分
用户层TCP
探寻tcp_prot,地图get~
RFC
RFC793 : Transmission Control Protocol
RFC1323 : TCP Extensions for High Performance
RFC1337 : TIME-WAIT Assassination Hazards in TCP
RFC2018 : TCP Selective Acknowledgement Options
RFC2525 : Known TCP Implementation Problems
RFC3168 : The Addition of Explicit Congestion Notification (ECN) to IP
RFC6937 : Proportional Rate Reduction for TCP
RFC7413 : TCP Fast Open(Draft)
网络子系统相关核心数据结构
网络子系统数据结构架构
sock底层数据结构
sock_common
sock
crequestsock
sk_buff
msghdr
inet层相关数据结构
cipoptions
cinetrequestsock
cinetconnectionsockafops
cinetconnectsock
cinettimewaitsock
csockaddr sockaddrin
ip_options
路由相关数据结构
cdstentry
crtable
flowi
TCP层相关数据结构
tcphdr
ctcpoptionsreceived
ctcpsacktagstate
ctcpsock
ctcpfastopencookie
ctcpfastopenrequest
ctcprequestsock
ctcpskbcb
TCP输出
数据发送接口
ctcpsendmsg
ctcpsendmsgfastopen
TCP Push操作
输出到IP层
ctcpwritexmit
tcp_transmit_skb
tcp_select_window(struct sk_buff *skb)
TCP输入
Linux内核网络数据接收流程概览
自底向上调用与自顶向下调用
自底向上处理
自顶向下处理
TCP建立连接
TCP主动打开-客户
基本流程
第一次握手:构造并发送SYN包
第二次握手:接收SYN+ACK包
第三次握手:发送ACK包
TCP被动打开-服务器
基本流程
第一次握手:接受SYN段
第二次握手:发送SYN+ACK段
第三次握手:接收ACK段
TCP拥塞控制
拥塞控制实现
拥塞控制状态机
显式拥塞通知(ECN)
拥塞控制状态的处理及转换
拥塞控制引擎
接口
CUBIC拥塞控制算法
TCP释放连接
tcp_shutdown
主动关闭
第一次握手:发送FIN
第二次握手:接收ACK
第三次握手:接受FIN
第四次握手:发送ACK
同时关闭
TIME_WAIT
被动关闭
基本流程
第一次握手:接收FIN
第二次握手:发送FIN的ACK
第三次握手:发送FIN
第四次握手:接收FIN的ACK
非核心代码分析
BSD Socket层
cmsgflag
数据报类型
Sock CheckSum
SK Stream
cskstreamwaitconnect
cpskbmaypull
Inet
cinetstreamconnect
cinethashconnect inethashconnect
cinetcskreqskqueueadd
cinettwskput
TCP相关参数
TCP 标志宏
函数宏
TCP CheckSum
ctcpchecksumcomplete
ctcpv4checksuminit
TCP Initialize
TCP Initialize Handle
cTCP Options
TCP Options Handle
TCP PAWS
TCP PAWS Flags
ctcppawscheck
ctcppawsreject
TCP TimeStamp
ctcpstoretsrecent
ctcpreplacetsrecent
TCP ACK
ACK Check
ACK Update
TCP Window
Window Compute
Window Update
TCP Urgent Data
相应标识
TCP Urgent Check
TCP Urgent Deal
Congestion Control
COngestion Control Flag
Congestion Control Window
Congestion Control Window Undo
About Restransmit
TCP Finish
cTime Compute
TCP Close
TCP Close Flags
TCP State Machine
ctcpdone
ctcpshutdown
附录:基础知识
计算机底层知识
机器数
GNU/LINUX
错误处理
调试函数
C语言
结构体初始化
位字段
GCC
cattribute
分支预测优化
Sparse
cbitwise
操作系统
RCU
CPU
存储系统
字节序
缓存 Cache

下载地址:https://www.wenjiangs.com/wp-content/uploads/2023/01/tcp.zip
举报/反馈

文江博客

2081获赞 765粉丝
文江的个人博客,平凡的草根站长。
关注
0
0
收藏
分享