我是网络相关方面的新手。我有几个与tcp / ip协议和网络相关的基本问题
如果两台正在运行的客户端和服务器(通过异步套接字进行通信)之间的网络交换机(在LAN网络中)断电。是否可以通知客户端和服务器套接字连接不再处于活动状态。客户端和服务器在Win XP OS上运行,并使用C#进行编码。
在套接字客户端和套接字服务器之间建立半开连接时,网络拓扑是否起作用。对于例如将其中一个或两个的断开状态通知给另一端,是否取决于网络拓扑。
提前致谢。
答案 0 :(得分:2)
路由器/集线器/交换机等网络元件如果发生故障,不会激活TCP层上发生的任何事情。操作系统可能会注意到物理层已关闭并且错误输出绑定在该网卡上的所有套接字(如果它是直接连接到断开的PC的网络元素) - 这将因操作系统/网卡和其他内容而异。除此之外,为了检测连接已被切断,您将不得不发送一些内容并依赖TCP超时机制来排除错误。这可以通过在连接上启用TCP Keepalives来隐式完成。
如果这些消息到达另一方,如果网络拓扑发生变化或者在连接过程中发生某种情况中断,以使消息不再到达另一端,则只会注意到一方的断开连接,断开连接不会被注意到。 (NAT网关是此类问题的重要来源,他们可能会超时他们正在跟踪的TCP连接,除非您尝试编写某些内容(或启用TCP),否则您永远不会知道连接不再有效keepalives)连接)。请注意,大多数网络API都要求您从连接中读取另一端已关闭连接的情况 - 假设这些“关闭”消息实际到达您的身边。