Golang实践经验和教训( 四 )

1.发送方发送一个SYN(ID)数据包 。

2.接收器存储接收到的ID并发送SYN-ACK(ID) 。

3.发送方接收SYN-ACK(ID)并发出ACK(ID) 。 它还开始发送从序列号0开始的数据包 。

4.接收器检查最后收到的ID , 如果ID匹配 , 则接受ACK(ID) 。 它还开始接受序列号为0的数据包 。

处理状态超时

基本上 , 在每种状态下 , 最多都需要处理三种类型的事件:链接事件 , 数据包事件和超时事件 。 这些事件会同时显示 , 因此必须正确处理并发 。

链接事件是链接更新或链接更新 。 这可以启动链接会话或中断现有会话 。

数据包事件是控制数据包(SYN/SYN-ACK/ACK)或只是探测响应 。

超时事件是针对当前会话状态的预定超时到期后触发的事件 。

这方面主要挑战是如何处理并发超时到期和其他事件 。 这是一个容易陷入僵局和竞争状况陷阱的地方 。

推荐阅读