网络基本功(二十三):Wireshark抓包实例诊断TCP链接问题

网络基本功(二十三):Wireshark抓包实例诊断TCP链接问题web

 

转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese p_w_picpath001.gif数据库

 

介绍

 

前文论述了TCP基础知识,从本节开始,经过TCP抓包实例来诊断TCP常见问题。缓存

TCP进程通信时,双方打开链接,发送数据,最后关闭链接。当TCP打开链接时,从源端口到目的端口发送一个请求。在应用创建或关闭时可能发生一些问题。本文讨论用Wireshark网络抓包的方法来定位及解决这一问题。服务器


更多信息

 

问题的表现形式:网络

 

问题可能有多种表现类型:ide

·         尝试运行应用程序但发现应用程序没法工做。尝试浏览网络但没法得到响应。spa

·         尝试发送邮件但没法链接到邮件服务器。视频

·         问题可能由简单缘由引发,如服务器宕机,服务器上没有运行应用程序,或在客户端到服务器的某一处网络断开。blog

·         问题也可能由复杂缘由引发,如DNS问题,服务器内存不足没法链接(例如某一应用占用高内存空间),重复IP,以及其余缘由。进程


处理方法:


下文会介绍解决问题的线索以及如何经过抓包来诊断TCP链接问题。一般,这些问题会致使运行应用程序时没法获得任何结果。


当你在运行一个应用程序时,例如数据库客户端,邮件客户端,观看视频等等,而又没法得到输出,按照如下步骤诊断:

  1.    确认服务器和应用程序正在运行。

  2.    确认客户端正在运行,IP地址已配置(手动或经过DHCP),并链接至网络。

  3.   Ping服务器并确认链接正常。

  4.   在某些状况下,ping不通服务器但链接正常。这是因为防火墙拦截了ICMP信息,因此若是没法ping通并不必定表示链接有问题。防火墙多是网络中的专用设备或Windows/Linux/UNIX终端设备上安装的防火墙。


5.     抓包文件中,查找如下模式:

·         三重SYN信息而没有响应(见如下截屏)

·         SYN信息带一个reset(RST)响应

这两种状况下都有多是防火墙拦截了特定应用程序或应用程序没有在运行。

 

如下截屏是一个简单的case:客户端没法链接到web服务器81.218.31.171(报文61,62和63)。多是因为不被防火墙容许,或服务器发生故障。能够看到另外一个站点108.160.163.43(报文65,66和67)的链接正常,所以链接问题仅限于81.218.31.171。

p_w_picpath002.jpg

 

下例是一个这种状况相对复杂的case。该case中,客户想要登陆到camera服务器来访问远程站点的camera。camera服务器的IP地址为135.82.12.1,问题在于客户可以看到服务器主页上的登陆窗口,但没法登进系统。在下面的截图中能够看到,打开了一个到IP地址135.82.12.1的链接。到HTTP服务器的TCP链接是打开的,一开始看上去没有链接问题:

p_w_picpath003.jpg

 

当咱们过滤出目的IP地址为135.82.12.1的数据流,也就是camera服务器。这里能够看到,当尝试链接TCP端口6036时,获得了一个RST/ACK响应,有如下可能性:

·         防火墙拦截了端口6036

·         若是配置了端口地址转换(PAT),那么仅转换端口80而非6036

·         用户名和密码验证是在TCP端口6036上完成的,防火墙仅容许端口80,验证被拦截,应用没法工做

p_w_picpath004.jpg


总之,当没法正常链接服务器时,检查服务器和客户端是否全部TCP/UDP端口都能经过网络转发,以及是否有未知的端口。

 

 

工做过程:

 

TCP链接开始时,发生了如下三步:

p_w_picpath005.jpg

1.     客户端TCP进程发送了一个SYN报文。该报文中SYN标志位设置为1。这一报文中客户端:

·         指定本身的初始序列号。这是客户端发送给服务器的第一个字节。

·         指明本身的窗口大小。这是客户端分配给进程的缓存大小(位于客户端的RAM)。

·         设置本身将要使用的选项:MSS,Selective ACK,等等。

 

2.     当服务器收到创建链接请求,服务器:

·         发送SYN/ACK给客户端,确认接收到SYN请求。

·         指明服务器端的初始序列号。这是服务器发送给客户端的第一个字节。

·         指明服务器的窗口大小。这是服务器分配给进程的缓存大小(位于服务器RAM)。

·         回复请求选项并设置服务器端选项。

 

3.     当接收到服务器的SYN/ACK,客户端:

·         发送ACK报文给服务器,确认从服务器接收到SYN/ACK.

·         指明客户端窗口大小。尽管这一参数在第一个报文中定义过了,服务器仍是会参考这个值,由于这是最新的窗口大小。

      

       在TCP头部的选项字段中,有如下几个主要选项:

 

·         Maximum Segment Size(MSS):TCP数据报的最大字节数,即从TCP头部开始直到报文末尾的字节数。

·         Windows Scale Option (WSopt):这一因子与TCP头部的Window Size字段相乘,通知接收方扩大缓存。因为头部最大窗口大小是64KB,乘以因子4也就是256KB窗口大小。

·         SACK:Selective ACK,该选项使链接双方可以仅确认指定报文,当单个报文丢失,只有这个报文会被重传。链接创建时,双方都须要赞成SACK。

·         Timestamps Option(TSopt):该参数指客户端和服务器之间的延时。


       在这一阶段,双方:

 

·         赞成创建链接

·         知道对方的初始序列号

·         知道对方的窗口大小


       在创建链接时,除了三路握手信号以外,其余都表示有问题。包括SYN没有响应,SYN以后SYN/ACK最后没有ACK,SYN响应为RST,等等。


 

 

总结:

 

·         若是SYN报文收到回复RST,则检查拦截了port号的防火墙。

·         三次SYN而没有任何回复,或者是因为应用程序没有响应,或者是因为防火墙拦截了特定端口上的请求。

·         永远记住确认一下是否有NAT端口转发,以及涉及TCP和UDP端口的机制。这些机制可能会中断TCP正常操做。

 

 

 

 

参考

 

Network Analysis Using Wireshark Cookbook

相关文章
相关标签/搜索