前言作为网络运维人员,熟悉TCP和UDP这两兄弟是很有必要的。TCP和UDP是属于TCP/IP协议族的两大将领。从TCP/IP诞生至今,它已经经历了几十年的发展。可以说,不管世界怎么变,不管沧海桑田变了多少,还是传统互联网吧。无论是移动互联网还是移动互联网,都离不开它们,现在和未来很长一段时间。既然叫123,我就不想用太多术语来解释了。想通过我的实际案例和大家一起探秘门道。先说TCPTCPTCP,全称TransmissionControlProtocol,中文翻译为传输控制协议。大家每天浏览的网页,不管是手机打开还是电脑打开,都会使用TCP协议来传输数据。TCP是一种面向连接的协议(稍后解释)。我们通过一个小案例来了解TCP。笔者租用了一台云服务器,提供web(网页)服务。全部配置完成后,发现服务器上的网页无法从我的主机打开,其他网页打开正常。在破案之前,我们先搞清楚TCP的几个概念:端口和三次握手。端口:当我们访问一个网页时,说白了,我们实际上访问的是一个运行在服务器上的应用程序,我们需要通过一个端口来与该应用程序进行通信。例如,用于打开网页的http协议默认使用80端口,https(http加密版)默认使用443端口。三向握手:TCP是一种面向连接的协议。例如,要打开一个网页,首先需要与Web服务器建立连接,建立这个连接的过程称为三次握手。Three-wayhandshakeThree-wayhandshake我通过抓包软件(windows下使用wireshark,linux下使用tcpdump)获取了三个报文数据,下面详细分析一下。第一条消息:192.168.253.4(主机)向目标ip以140开头的服务器的80端口发送标志位(Flag)为SYN(SynchronizeSequenceNumbers)的消息。翻译成大白话,主机告诉服务器我准备和你的80端口通信,把我要访问的网页数据发给我。(第一次握手)第二条消息:服务器发送标志位为SYN、ACK(Acknowledge,确认位)的消息,返回给主机。表示服务器已经收到主机的连接请求,如果你发送确认信息,我就给你数据。(第二次握手)第三条消息:主机向服务器发送标志位为ACK的消息。说白了,就是宿主机告诉服务器,收到消息后你要我发确认消息,它会把确认标志发给你。(第三次握手)当服务器收到第三次消息时,主机与服务器之间的连接建立(Established),然后服务器就可以将网页的数据传输给主机,并在浏览器上显示内容主人。理解了概念之后,我们就开始处理问题了。首先我们要判断是不是我和服务器的通讯有问题。最简单的方法是使用pingserverip命令测试,发现与服务器的通信是可以的。然后在服务器(centos7)上使用netstat-na命令查看80端口(web服务的标准端口)是否开启,发现没有问题。网络已连接,应用服务正常,但无法打开服务器网页。或者用wireshark查看通信过程,确认哪一步有问题。不要被图片中的英文吓倒了。我们只需要注意几个地方就可以定位故障。让我们一步一步来。前面说过,http是使用tcp协议来传输数据的。tcp协议要求任何一方与另一方通信都先建立连接,即三次握手。上图中,仔细看,只有主机(192.168.88.127)向140服务器发送了标志位为SYN的报文,并没有收到服务器返回的报文。由于宿主机没有收到服务器的返回报文,自动启用了重传机制,连续向宿主机发送了几条带有SYN标志的报文。其实是请求建立联系,不过都是肉包子。不归路。一种可能是服务器应用程序有问题并且没有响应。另一种可能是服务器根本没有收到主机发送的连接建立消息。因为我们事先确认了服务端应用程序的状态是正常的,所以我们将重点放在服务端消息的接收上。在server端和host端同时抓包,检查是否能抓到host端的包。//服务器使用linux系统,使用tcpdump软件抓包。-port80表示抓取80端口的包,srchost表示抓取源地址为192.168.88.127的包,表示同时满足以上两个条件。$tcpdump-port80andsrchost192.168.88.127-nn通过抓包发现,当主机发送连接建立请求时,服务器并没有抓到主机192.168.88.127访问服务器80端口的报文,也就是说这三个-way握手根本无法完成,更谈不上数据传输了。因为之前的ping命令又能从主机ping通服务器,说明网络畅通。在这种情况下,很可能是防火墙策略阻止了数据包,因此请立即检查主机防火墙策略。//在centos7环境下,$systemctlstatusfirewalldfirewallstatus检查firewallstatus发现防火墙的Active状态为inactive(未激活),说明防火墙没有启用。什么阻止了消息?最后的结果就是防火墙策略。云服务器提供商提供的防火墙安全策略默认阻断外部访问80端口的请求。修改策略允许80端口访问后,终于成功与服务器建立连接(三次握手),网页正常打开。TCP协议是TCP/IP协议族中最重要的协议之一。了解其运行机制对提高运维工作效率有很大帮助。这篇简短的文章只是为了让大家了解TCP的概念和它的重要性。学习的路漫漫其修远兮,我们只是在路上。
