1.TCP 协议分析流程
[1]要分析整个 TCP 协议, 需要从外向里去分析, 首先就是分析 af_inet.c, 这个里面就是 .NET 的接口函数, 例如 bind(),listen()等等, 之后就是弄清楚这些函数 (函数的参数) 是要干什么.
[2]之后继续分析 TCP 的握手流程.
[3]之后继续分析 TCP 的数据传输流程.
[4]之后继续分析 TCP 的断链流程.
[5]之后继续分析 TCP 的拥塞控制流程.
[6]之后继续分析 TCP 的其他分支流程.
2.TCP 连接建立(三次握手)
TCP 的根本目的是可靠地传输数据, 如果不需要可靠地传输, 则不需要握手, 直接发数据就可以(例如 UDP).
而为了保证可靠地传输数据, 便需要两端维护一些信息(序号, ACK 号等等). 握手就是同步这些信息的过程, 只有保证信息同步完成了, 才能开始交互数据.
[1]A 向 B 发送 SYN,A 向 B 同步本端的连接信息(seq,MSS,SACK 选项等等).
[2]B 向 A 发送 SYN ACK,SYN 表示 B 向 A 同步本端的连接信息(seq,MSS,SACK 选项等等),ACK 表示对 A 的 SYN 的确认.
[3]A 向 B 发送 ACK, 对 B 的 SYN 的确认.(A 发送出去后便进入到 establish 状态, 而 B 需要成功收到 ACK 后进入 establish 状态)
意思就是我有你的信息, 我还知道你有我的信息(因为我收到了 ACK), 我便单方面宣布握手完成.
另外解释为什么不是两次握手, 其实握手的目的是为了正式传输数据之前同步信息, 如果是前两次握手消息并不能保证信息确认同步完成(B 向 A 发送了 SYN ACK 后不能直接进入 establish 状态, 因为 B 不能保证 A 收到了自己的 SYN 报文).
来源: http://www.bubuko.com/infodetail-2975454.html