Sockets FIN包保证到达吗?

Sockets FIN包保证到达吗?,sockets,networking,tcp,winsock,Sockets,Networking,Tcp,Winsock,在4向握手中,我们有以下几点: FIN -------> <------- ACK <---x--- FIN (what if this packet is lost?) ACK -------> FIN-----> TCP协议 FIN之前和包括FIN在内的所有段将重新传输,直到确认 资料来源: 插座 您可以使用操作系统工具查看打开的TCP套接字及其状态。在TCP终结过程中,套接字首先为双向通信打开,然后每一方关闭其方向,在操作系统中释放资源之前,必须确认每个FIN 为

在4向握手中,我们有以下几点:

FIN ------->
<------- ACK
<---x--- FIN (what if this packet is lost?)
ACK ------->
FIN----->
TCP协议
FIN之前和包括FIN在内的所有段将重新传输,直到确认

资料来源:

插座 您可以使用操作系统工具查看打开的TCP套接字及其状态。在TCP终结过程中,套接字首先为双向通信打开,然后每一方关闭其方向,在操作系统中释放资源之前,必须确认每个FIN

为了重新传输FIN数据包,在FIN确认或超时之前,连接必须仍在操作系统中表示。

TCP协议 FIN之前和包括FIN在内的所有段将重新传输,直到确认

资料来源:

插座 您可以使用操作系统工具查看打开的TCP套接字及其状态。在TCP终结过程中,套接字首先为双向通信打开,然后每一方关闭其方向,在操作系统中释放资源之前,必须确认每个FIN

为了重新传输FIN数据包,在FIN确认或超时之前,连接必须仍在操作系统中表示。

TCP协议 FIN之前和包括FIN在内的所有段将重新传输,直到确认

资料来源:

插座 您可以使用操作系统工具查看打开的TCP套接字及其状态。在TCP终结过程中,套接字首先为双向通信打开,然后每一方关闭其方向,在操作系统中释放资源之前,必须确认每个FIN

为了重新传输FIN数据包,在FIN确认或超时之前,连接必须仍在操作系统中表示。

TCP协议 FIN之前和包括FIN在内的所有段将重新传输,直到确认

资料来源:

插座 您可以使用操作系统工具查看打开的TCP套接字及其状态。在TCP终结过程中,套接字首先为双向通信打开,然后每一方关闭其方向,在操作系统中释放资源之前,必须确认每个FIN



为了重新传输FIN数据包,在FIN确认或超时之前,连接必须仍在操作系统中表示。

决不信任网络,一切皆有可能。没有什么是可以保证的编辑将等待响应,直到timout启动。永远不要相信网络,一切都是可能的。没有什么是可以保证的编辑将等待响应,直到timout启动。永远不要相信网络,一切都是可能的。没有什么是可以保证的编辑将等待响应,直到timout启动。永远不要相信网络,一切都是可能的。没有什么是可以保证的编辑将等待响应,直到timout启动。因此,当发送第三个数据包(FIN数据包)时,当我调用
closesocket()
销毁套接字时,套接字并没有真正销毁,对吗?而是等待来自另一端的ACK数据包,如果ACK数据包在一段时间后仍未收到,它将重新发送FIN数据包?我还有另一个问题,如果FIN数据包发送后,另一端的另一台计算机已断电,会发生什么情况,这意味着发送方将永远不会收到FIN数据包(因为没有人发送它)。那么在这种情况下会发生什么呢?发送方会一直等待直到收到一个FIN数据包(它永远不会到达)?超时通常由操作系统配置决定。它当然不会永远等待。@user4572253:即使在您关闭套接字之后,操作系统也必须跟踪连接,直到握手完成并且等待期(如果仍有数据包在传输中)结束。它是通过保持套接字对象的活动状态来实现这一点,还是仅仅单独跟踪连接,这是一个需要更改的实现细节。在Windows IIRC中,您将能够通过
netstat
查看连接,如果您的进程退出,连接的所有权将重新分配给系统进程。(或者类似的,我的记忆是模糊的。)所以当第三个数据包被发送时(FIN数据包),当我调用
closesocket()
销毁套接字时,套接字并没有真正被销毁,对吗?而是等待来自另一端的ACK数据包,如果ACK数据包在一段时间后仍未收到,它将重新发送FIN数据包?我还有另一个问题,如果FIN数据包发送后,另一端的另一台计算机已断电,会发生什么情况,这意味着发送方将永远不会收到FIN数据包(因为没有人发送它)。那么在这种情况下会发生什么呢?发送方会一直等待直到收到一个FIN数据包(它永远不会到达)?超时通常由操作系统配置决定。它当然不会永远等待。@user4572253:即使在您关闭套接字之后,操作系统也必须跟踪连接,直到握手完成并且等待期(如果仍有数据包在传输中)结束。它是通过保持套接字对象的活动状态来实现这一点,还是仅仅单独跟踪连接,这是一个需要更改的实现细节。在Windows IIRC中,您将能够通过
netstat
查看连接,如果您的进程退出,连接的所有权将重新分配给系统进程。(或者类似的,我的记忆是模糊的。)所以当第三个数据包被发送时(FIN数据包),当我调用
closesocket()
销毁套接字时,套接字并没有真正被销毁,对吗?但是它会等待来自另一方的ACK数据包,如果ACK数据包在一段时间后没有收到,它会重新发送FIN数据包?我还有另一个问题