TCP四路握手

TCP四路握手,tcp,handshake,Tcp,Handshake,四路握手连接终止可以减少为三路,甚至双向一路。三路握手连接是否可能扩展到四路 SYN=> <=ACK <=SYN ACK=> SYN=> 给定SYN和ACK的语义,应该可以在不同的数据包中发送SYN+ACK,这些数据包会延迟握手。例如,客户机发送SYN,服务器回复ACK,以确认客户机希望建立新连接,但尚未批准该愿望。稍后,服务器发送一个SYN,并从客户端获取匹配的ACK,然后建立连接。但我怀疑是否有人会以这种方式建立连接,也许有一些操作系统会在这种方式上发出嘎嘎声 但是

四路握手连接终止可以减少为三路,甚至双向一路。三路握手连接是否可能扩展到四路

SYN=>
<=ACK
<=SYN
ACK=>
SYN=>

给定SYN和ACK的语义,应该可以在不同的数据包中发送SYN+ACK,这些数据包会延迟握手。例如,客户机发送SYN,服务器回复ACK,以确认客户机希望建立新连接,但尚未批准该愿望。稍后,服务器发送一个SYN,并从客户端获取匹配的ACK,然后建立连接。但我怀疑是否有人会以这种方式建立连接,也许有一些操作系统会在这种方式上发出嘎嘎声

但是,对于四向握手还有另一种情况,不过数据包的顺序不同。如果双方同时尝试建立与另一方的连接,例如,双方都向对等方发送SYN,并获得ACK,则可能发生这种情况。RFC 793(TCP)第3.4节对此进行了描述。但我怀疑您是否会看到这样的握手,因为它不适合典型的客户机-服务器场景,即一端等待连接,另一端进行连接


编辑:您设想的握手是存在的,它被称为“分割握手”。看见正如我所料,它并没有得到普遍支持。

鉴于SYN和ACK的语义,应该可以在不同的数据包中发送SYN+ACK,这些数据包会延迟握手。例如,客户机发送SYN,服务器回复ACK,以确认客户机希望建立新连接,但尚未批准该愿望。稍后,服务器发送一个SYN,并从客户端获取匹配的ACK,然后建立连接。但我怀疑是否有人会以这种方式建立连接,也许有一些操作系统会在这种方式上发出嘎嘎声

但是,对于四向握手还有另一种情况,不过数据包的顺序不同。如果双方同时尝试建立与另一方的连接,例如,双方都向对等方发送SYN,并获得ACK,则可能发生这种情况。RFC 793(TCP)第3.4节对此进行了描述。但我怀疑您是否会看到这样的握手,因为它不适合典型的客户机-服务器场景,即一端等待连接,另一端进行连接


编辑:您设想的握手是存在的,它被称为“分割握手”。看见正如我所料,它并没有得到普遍支持。

“考虑到语义…应该是可能的”我不确定你是根据你的RFC知识证明这一点,还是仅仅假设它。ACK的语义只是确认收到了数据,SYN的语义只是请求连接。这两个标志相互正交,在一起使用时没有特殊意义,类似于FIN和ACK,因此它们是一起发送还是在单独的数据包中发送都不重要。“根据语义……应该是可能的”我不确定你是根据你的RFC知识来证明这一点,还是仅仅假设它。ACK的语义只是确认收到了数据,SYN的语义只是请求连接。这两个标志相互正交,在一起使用时没有特殊意义,类似于FIN和ACK,因此它们是一起发送还是在单独的数据包中发送都不重要。