假设两个主机A和B都试图彼此建立连接,但是A的SYN在B的SYN到达A之前就到达了B。
我的回答是,A会发送SYN ACK,而忽略B的SYN。我正确吗?
将建立两个连接。TCP不能以这种方式了解状态-两个连接都不会具有其他连接的任何概念。
例如:
Connection 1:
192.168.1.5 sends SYN to 192.168.1.6 on port 80.
Connection 2:
192.168.1.6 sends SYN to 192.168.1.5 on port 80.
为了继续进行此操作,双方都需要在端口80上侦听服务,因此每个人都需要在TCP上侦听端口80的内容,并且该服务将接收SYN并以SYN-ACK进行响应:
Connection 1:
192.167.1.6 responds with SYN-ACK to 192.168.1.5 on port 80
Connection 2:
192.167.1.5 responds with SYN-ACK to 192.168.1.6 on port 80
请记住,这些侦听服务在相反的机器上-无法知道对方也已收到SYN,因此没有理由它们不应该发送SYN-ACK。
正如TCP协议所规定的,一旦发起方接收到SYN-ACK,它将做出响应:
Connection 1:
192.168.1.5 sends ACK to 192.168.1.6 on port 80.
Connection 2:
192.168.1.6 sends ACK to 192.168.1.5 on port 80.
现在,您具有两个独立的连接,并具有完整的TCP握手。正如SvW的评论中提到的那样:如果这是一件坏事,则取决于哪个应用程序启动了连接以确定该状态是否存在并找出断开的连接-这不是TCP的工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句