TCP和UDP,你要知道的123 (TCP篇)
副标题[/!--empirenews.page--]
9月15日技术沙龙 | 与东华软件、AWS、京东金融、饿了么四位大咖探讨精准运维!
前言 作为一名网络运维人员,熟悉TCP和UDP两兄弟是必要的。TCP与UDP是隶属于TCP/IP协议族的两员大将,从TCP/IP诞生以来经历了几十年的发展,可以这么说不管世界如何变迁、无论沧海已变几多桑田,管它传统互联网还是移动互联网,都离不开他们,现在,今后很长一段时间都离不开。 即然取名123,就不想用过多的术语来解释他们,我想通过我实际的案例来和大家一起探索门道。我们先谈谈TCP TCP TCP,全称Transmission Control Protocol,中文译作传输控制协议。大家每天浏览的网页,不管是用手机还是电脑打开的,均会使用TCP协议来传输数据,TCP是面向连接的协议(稍后解释)。 我们通过一个小案例来理解TCP。笔者租用过一台云服务器,用来提供web(网页)服务。在所有配置完成后,发现从我的主机无法打开服务器上的网页,打开其它网页则是正常的。 在讲案例解决之前,我们先明确几个关于TCP的概念:端口、三次握手。 端口:我们访问网页,说白了,其实是访问运行在服务器上的一个应用程序,而我们与应用程序通信,就要用到端口。比如打开网页用的http协议,它默认使用的80端口,https(http加密版本)默认使用的443端口。 三次握手:TCP是面向连接的协议,比如打开一个网页,你需要先和网页服务器建立一个连接,而建立这个连接的过程,我们称为三次握手。 三次握手 三次握手 我通过抓包软件(windows下使用wireshark,linux下使用tcpdump)获取了三条报文数据,我们来详细分析一下。
有了概念的了解,我们开始处理问题,首先要确定我和服务器之间的通信是否存在问题,最简单的方式是使用ping 服务器ip命令测试,发现和服务器之间的通信是ok的。 然后在服务器上(centos 7)通过netstat -na命令查看80端口(网页服务标准端口)是否开启,发现也没有问题。 网络是通的,应用服务也正常,却打不开服务器网页。还是使用wireshark查看通信的过程,确认到底是哪一步出现了问题。 问题报文 不要被图中的英文吓到,我们只需要关注几个地方,就能定位这个故障的问题。我们一步一步来。 前文提过,http使用tcp协议传输数据,tcp协议要求任何一方要和另一方通信需要先建立连接,也就是三次握手。 而在上图中,仔细看,只有主机(192.168.88.127)发给140服务器的标志位为SYN的报文,但没收到服务器返回的报文。因为主机没有收到服务器的返回报文,自动启用了重传机制,连续又发了好几次标志位为SYN的报文给主机,其实就是请求建立连接,但都是肉包子打狗--有去无回。一种可能是服务器应用程序出现了问题,没有响应。另一种可能是服务器压根儿没收到主机发送的建立连接报文。 因为事先我们确认了服务器应用程序状态是正常的,将排查重点放在服务器侧接收报文这一块。在服务器侧和主机侧同时抓包,查看是否能抓到来自主机的报文。
通过抓包发现,主机在发送建立连接请求时,服务器没有抓到任何来自于主机192.168.88.127访问服务器80端口的报文,也就是说三次握手根本无法完成,更不要谈数据传输了。因为之前ping命令又能从主机ping通服务器,表示网络是通畅的。 这种情况下,很可能是防火墙策略阻档了报文,立即检查主机防火墙策略 。
防火墙状态 检测防火墙状态 发现防火墙的Active状态为inactive(未激活),表示防火墙是未启用的。那是什么阻止了报文呢,最终结果还是出在了防火墙策略上,是云服务器提供商提供的防火墙安全策略默认阻止了外部访问80端口的请求,将策略修改为允许访问80端口后,终于顺利和服务器建立了连接(三次握手)网页正常打开了。 (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |