【问题标题】:TCP/IP protocol and network topologyTCP/IP 协议和网络拓扑
【发布时间】:2010-08-03 18:30:03
【问题描述】:
我是网络相关方面的新手。我有一些与 tcp/ip 协议和网络相关的基本问题
如果两台 PC 正在运行的客户端和服务器(通过异步套接字进行通信)之间的网络交换机(在 LAN 网络中)断电。可以通知客户端和服务器端的套接字连接不再活跃。客户端和服务器在 Win XP 操作系统上运行,并使用 C# 编码。
在套接字客户端和套接字服务器之间连接半开的情况下,网络拓扑是否起作用。例如是否将其中一方或双方的断开状态通知给另一端,是否取决于网络拓扑。
提前致谢。
【问题讨论】:
标签:
network-programming
tcp
【解决方案1】:
如果路由器/集线器/交换机等网络元素出现故障,它不会主动导致 TCP 层发生任何事情。操作系统可能会注意到物理层已关闭,并且如果它是直接连接到损坏的 PC 的网络元素,则该网卡上绑定的所有套接字都会出错 - 这将因操作系统/网卡和其他事物而异。除此之外,为了检测连接已被切断,您必须发送一些东西并依靠 TCP 超时机制来出错。这可以通过在连接上启用TCP Keepalives 来隐式完成。
只有当这些消息到达另一端时,才会注意到一侧的断开连接,如果网络拓扑发生变化或在连接中间出现某些中断,导致消息不再到达另一端,不会注意到断开连接。 (NAT 网关是此类问题的一大来源,它们可能会超时他们正在跟踪的 TCP 连接,除非您尝试编写某些内容(或启用 TCP keepalives),否则您永远不会知道该连接不再有效到连接)。请注意,大多数网络 API 要求您从连接中读取以发现另一端已关闭连接 - 假设这些“关闭”消息实际到达您身边。