此链接说明了TCP State Machine。它根据发送/接收事件列出所有状态转换。我觉得它只描述了明显的。我想知道当你处于LISTEN状态并且收到DATA数据包时,或者当你处于ESTABLISHED状态并且你收到SYN时会发生什么。
c / c ++中是否有TCP的实现,WINSOCK库或其他? TCP RFC文档很好,但实现起来会更有帮助,imo。
答案 0 :(得分:3)
这是您想要的优秀资源:
1995 - TCP / IP Illustrated,第2卷:实施(与Gary R. Wright合作) - ISBN 0-201-63354-X
答案 1 :(得分:3)
在任何网络协议(状态机等)的描述中,可以相当安全地假设对于给定状态无效的数据包将被丢弃。如果堆栈在已建立的TCP流中间获得SYN(源/目标IP:PORT匹配该流),则可能是某些欺骗攻击,或者报头校验和未捕获的损坏。数据包应该扔在地板上而不更新状态。
我并不怀疑在TCP状态机的描述中明确包含类似的情况会很有用。这就像在语言的语法描述中包含每个可能的语法错误:混乱,大而且令人困惑。
答案 2 :(得分:2)
正如您所提到的,TCP RFC是一篇内容丰富的读物。
您询问了实施情况,因此以下是您可能感兴趣的一些资源:
lwIP专注于最小化资源使用,并且已发布paper (PDF)详细说明了如何实现这一目标。本文还详细介绍了实施,可能会回答您上面的一些问题。 Linux内核提供了完整的实现和一些更具体的堆栈实现。由于其复杂性,导致源代码导航难度较大,但可能是您可以找到的最完整的开源实现。