none
请教一下哪些方式来测试两台Windows服务器网络状态是否正常? RRS feed

  • 问题

  • 尊敬的微软工程师,

    请教一下哪些方式来测试两台Windows服务器网络状态是否正常?没有丢包断线的情况出现?


    谷青松

    2020年9月16日 1:33

答案

  • 您好,

     

    如果应用程序没有数据要传输,从客户端发起断开连接的TCP FIN包是正常现象。客户端与服务器两端如果需要传输数据,会通过TCP 三次握手建立连接,建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。

     

    下图演示了客户端主动断开连接的场景:

     

     

     

    建立连接后,客户端和服务器都处于ESTABLISED状态。这时,客户端发起断开连接的请求:

     

    1) 客户端调用 close() 函数后,向服务器发送 FIN 数据包,进入FIN_WAIT_1状态。FIN 是 Finish 的缩写,表示完成任务需要断开连接。

     

    2) 服务器收到数据包后,检测到设置了 FIN 标志位,知道要断开连接,于是向客户端发送“确认包”,进入CLOSE_WAIT状态。

     

    注意:服务器收到请求后并不是立即断开连接,而是先向客户端发送“确认包”,告诉它我知道了,我需要准备一下才能断开连接。

     

    3) 客户端收到“确认包”后进入FIN_WAIT_2状态,等待服务器准备完毕后再次发送数据包。

     

    4) 等待片刻后,服务器准备完毕,可以断开连接,于是再主动向客户端发送 FIN 包,告诉它我准备好了,断开连接吧。然后进入LAST_ACK状态。

     

    5) 客户端收到服务器的 FIN 包后,再向服务器发送 ACK 包,告诉它你断开连接吧。然后进入TIME_WAIT状态。

     

    6) 服务器收到客户端的 ACK 包后,就断开连接,关闭套接字,进入CLOSED状态。

     

    有关应用程序在没有数据需要传输时会断开连接的更多信息,请参考以下文章:

    https://segmentfault.com/a/1190000017411330

    https://www.cnblogs.com/felixzh/p/8359066.html

    此致,

    Sunny


    Please remember to mark the replies as an answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com   


    2020年9月21日 3:22

全部回复

  • 您好,

     

    关于您的问题测试两台Windows服务器网络状态是否正常, 请参考如下方法:

     

    方法一

     

    比较常用的方法是使用ping命令测试计算机之间的连通性,可以在cmd 窗口中输入 ping IP地址 ping -t IP 地址,返回的结果会有数据包已发送,已接受以及丢失的数据

    方法二

     

    如果通过ping命令查看出有丢包现象,可以使用traceroute命令测试计算机之间的路由,看一下哪个部分有问题。可以在cmd 窗口中输入 tracert IP地址并运行,然后观察并分析结果。

     

    方法三

     

    如果想更深层次分析两台服务器之间的网络通讯问题,还可以使用微软官方工具Network Monitor来捕获两台服务器之间的网络流量以进行具体分析。通常我们专业的网络工程师会使用这个工具为客户进行网络方面的故障排除。

    一般做法是在两台服务器上安装此工具,以管理员身份运行,然后在问题复现的时候使用此工具抓包以进一步分析查看是否有丢包现象。

     

    关于如何使用Network Monitor 工具,请参考以下链接:

    https://docs.microsoft.com/zh-cn/windows/client-management/troubleshoot-tcpip-netmon

     

    此致,

    Sunny


    Please remember to mark the replies as an answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com   

    2020年9月16日 7:10
  • 嗯嗯,我现在遇到的问题是客户那边开发写的应用程序跑在两台不同的Windows服务器上进行数据传输,这两台服务器网络状态都看了没有问题,但是那边开发说应用程序在不传输的情况下连接会断开,我查了一下我们网络都没有问题,我想问遇到这样的问题开发把问题推给系统我们该怎么处理这样的问题,特此求教

    谷青松


    • 已编辑 谷青松 2020年9月18日 1:20 补充
    2020年9月18日 1:19
  • 您好,

     

    如果应用程序没有数据要传输,从客户端发起断开连接的TCP FIN包是正常现象。客户端与服务器两端如果需要传输数据,会通过TCP 三次握手建立连接,建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。

     

    下图演示了客户端主动断开连接的场景:

     

     

     

    建立连接后,客户端和服务器都处于ESTABLISED状态。这时,客户端发起断开连接的请求:

     

    1) 客户端调用 close() 函数后,向服务器发送 FIN 数据包,进入FIN_WAIT_1状态。FIN 是 Finish 的缩写,表示完成任务需要断开连接。

     

    2) 服务器收到数据包后,检测到设置了 FIN 标志位,知道要断开连接,于是向客户端发送“确认包”,进入CLOSE_WAIT状态。

     

    注意:服务器收到请求后并不是立即断开连接,而是先向客户端发送“确认包”,告诉它我知道了,我需要准备一下才能断开连接。

     

    3) 客户端收到“确认包”后进入FIN_WAIT_2状态,等待服务器准备完毕后再次发送数据包。

     

    4) 等待片刻后,服务器准备完毕,可以断开连接,于是再主动向客户端发送 FIN 包,告诉它我准备好了,断开连接吧。然后进入LAST_ACK状态。

     

    5) 客户端收到服务器的 FIN 包后,再向服务器发送 ACK 包,告诉它你断开连接吧。然后进入TIME_WAIT状态。

     

    6) 服务器收到客户端的 ACK 包后,就断开连接,关闭套接字,进入CLOSED状态。

     

    有关应用程序在没有数据需要传输时会断开连接的更多信息,请参考以下文章:

    https://segmentfault.com/a/1190000017411330

    https://www.cnblogs.com/felixzh/p/8359066.html

    此致,

    Sunny


    Please remember to mark the replies as an answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com   


    2020年9月21日 3:22