【工作必备知识】Linux系统网络诊断与netstat命令

2024-06-12 05:28

本文主要是介绍【工作必备知识】Linux系统网络诊断与netstat命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【工作必备知识】Linux系统网络诊断与netstat命令

大家好,我叫秋意零。

今天分享一篇Linux系统中与网络相关的干货(包含相关面试题),有可能对你理解网络有一定帮助。同时工作中网络诊断也时常使用,对排查问题有帮助,绝对干货。

如果有帮助记得点赞三连呀。

netstat 命令

netstat 网络连接状态查看命令,同时也是强大的强大的网络诊断工具,广泛应用于各种网络管理和故障排查场景中。

它还可以查看网络中的传输层(TCP、UDP)信息。所以你首先需要知道传输层对应的相关知识(此处不做过多介绍),由此我们可以引出TCP三次握手和四次挥手。

TCP三次握手

**简单介绍:**TCP三次握手是数据传输时采用的一种可靠性连接方式(建立连接形象比喻为握手🤝)。

服务器端对应的服务端口一直进入LISTEN监听状态,等待客户端连接。客户端和服务器端最后经过三次握手达到可靠性连接。可能会问:为啥是三次握手,而不是二次握手?后面有介绍哦。

**本篇重点:**TCP三次握手中客户端或服务器端,每次发送请求后都会进入某种状态(记住这些状态如图),这些状态我们在 Linux 系统中可以通过 netstat 命令进行查看,有助于对网络理解。

相关面试题:为什么TCP客户进程最后还要发送普通的TCP确认报文段呢?是否多余,或者是否可以使用两报文握手建立连接呢?

答案: 并不多余,不能简化为“两报文握手”

场景: 首先我们客户端发送TCP连接请求报文,如果该请求因为网络原因导致卡在了路上服务端没收到,造成了超时重传这时客户端需要重新发送TCP连接请求报文,这次服务器端收到信息后,进入ESTABLISHED 连接已建立状态

于是返回信息给客户端,同时客户端进入 ESTABLISHED 连接已建立状态,这时就可以传输数据了,数据传输完毕后进行关闭连接;

关闭连接后,这时服务器端收到了第一次TCP连接请求报文,于是服务器端进去ESTABLISHED 连接已建立状态,接着返回给客户端,但是客户端就懵逼了,说我没有发送连接请求,于是不理睬。这就导致服务器端一直进入连接状态并发送连接给客户端,导致资源浪费

解决方案: 如果采用三次握手就不会出现这种情况,因为服务器端接受到TCP连接请求后是进入SY-RCVD 同步已接受状态,而不是二次握手的 ESTABLISHED 连接已建立状态,SY-RCVD如果没有继续接受到对应的确认连接确认请求,根据超时策略是会中止的。

一句话总结: TCP采用三次握手,是为了防止已失效的连接请求报文段突然又传送到了TCP服务器端进程,导致资源的浪费和错误。

TCP四次挥手

**简单介绍:**TCP四次挥手是TCP建立连接之后需要进行释放连接的过程(释放建立连接形象比喻为挥手👋拜拜)。

TCP四次挥手同TCP三次握手中客户端或服务器端,每次发送请求后都会进入某种状态(记住这些状态如图),这些状态我们在 Linux 系统中可以通过 netstat 命令进行查看,有助于对网络理解。

**相关面试题:**TCP客户进程在发送完最后一个确认报文段后,为什么不直接进入关闭状态,而是要进入2MSL时间等待状态,2MSL后才进入关闭状态,这是否有必要呢?

答案:有必要

场景: 假设,这时服务器端进入了 CLOSE-WAIT关闭等待状态

接着客户端进入FIN-WAIT-2终止等待2状态(等待服务器端将剩下的数据传输完毕);

服务器端数据传输完毕后,发送通知给客户端,同时服务器端进入LAST-ACK最后关闭确认状态(等待客户端确认关闭请求信息);

客户端收到数据传输完毕通知后,发送关闭确认请求信息同时进入CLOSED关闭状态,这时因为网络出现故障,导致最后的关闭确认请求没有到达服务器端,从而服务器TCP连接未被关闭。然而服务器端因为超时发送最后的TCP释放连接请求,然而客户端已然进入了CLOSED关闭状态不理睬该请求,从而导致TCP连接无法正常关闭。

解决方案: 当客户端收到数据传输完毕通知后,发送关闭确认请求信息同时进入TIME-WAIT时间等待状态(一半是2MSL,2分钟),这个时间等待状态就是为了确保最后的关闭确认请求能顺利通知到服务器端;如果在这个等待时间之内没有收到服务器端,因为超时发送最后的TCP释放连接请求时,则视为TCP连接关闭成功。

一句话总结: 确保TCP服务器端进程,可以收到最后一个TCP确认报文段而进入关闭状态。另外,TCP客户进程在发送完最后一个TCP确认报文段后,再经过2MSL时长,就可以使本次连接持续时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的TCP连接,不会出现在旧连接中。

netstat 命令应用

netstat 命令详解,看我这篇:netstat 命令的详解

链接:https://www.qiuyl.com/2024/03/03/121

基础应用

1)查看SSH远程连接的监听状态

$ netstat -tulnpa
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      44841/docker-proxy
tcp        0      0 192.168.200.7:22        192.168.200.1:53570     ESTABLISHED 44987/sshd: root@pt
tcp        0      0 192.168.200.7:22        192.168.200.1:52043     ESTABLISHED 3284/sshd: root@pts
tcp6       0      0 :::9090                 :::*                    LISTEN      2901/prometheus
udp        0      0 192.168.200.7:68        192.168.200.1:67        ESTABLISHED 784/NetworkManager
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1/systemd
udp        0      0 0.0.0.0:5355            0.0.0.0:*                           557/systemd-resolve
udp        0      0 127.0.0.1:323           0.0.0.0:*                           624/chronyd
...
...

上面第二行:tcp 0 0 192.168.200.7:22 192.168.200.1:53570 ESTABLISHED 44987/sshd: root@pt

可以看到,这是我们SSH远程连接所建立的TCP连接信息;本端地址192.168.200.7:22,远端地址192.168.200.1:53570,以及连接状态ESTABLISHED

PS:这里使用的VMware虚拟机,远端地址192.168.200.1是我宿主机NAT网卡的地址

2)统计tcp连接状态

$ netstat -ant | awk '{print $NF}' | sort | uniq -c1 established)3 ESTABLISHED9 LISTEN1 State1 TIME_WAIT

3)判断服务使用了什么协议

在不是-n参数时就能看到,服务使用的协议

  • -n:以数字形式显示地址和端口号,如果不加则以协议名称显示

相关面试题

1)建立连接的TCP链路,如果客户端主动断开连接,netstat如何查看链路连接状态

netstat -ant | grep "TIME_WAIT"

2)打印本机与9.110.120.130机器的连接信息、及连接数量

# 连接信息,这里以192.168.200.1为例
$ netstat -ant | grep 192.168.200.1 | grep  ESTABLISHED
tcp        0      0 192.168.200.7:22        192.168.200.1:52375     ESTABLISHED
tcp        0     36 192.168.200.7:22        192.168.200.1:52371     ESTABLISHED
# 连接数量
$ netstat -ant | grep 192.168.200.1 | grep  ESTABLISHED  | awk '{print $NF}' | uniq -c2 ESTABLISHED
更多应用场景
  1. 查看活动连接:使用 -a--all 选项,可以显示所有当前的TCP和UDP连接,包括监听状态的端口,这对于检查哪些服务正在运行和它们的连接状态非常有用。
  2. 监控网络状态:结合 -c--continuous 选项,netstat 可以周期性地输出网络连接信息,帮助实时监控网络状态的变化,比如检测是否有新的连接建立或旧的连接断开。
  3. 诊断端口问题:当服务无法启动或客户端无法连接到服务时,使用 -an--numeric-all 查看占用端口的进程ID(PID)和详细信息,有助于定位端口冲突或服务未正确绑定的问题。
  4. 统计网络流量和连接:通过 -s--statistics 选项,可以获得每个协议的统计信息,如TCP连接的建立、终止数量,以及数据包的发送、接收、丢失情况,有助于分析网络性能和瓶颈。
  5. 检查路由表:使用 -r--route 选项,可以显示IP路由表,这对于理解数据包如何在网络中转发以及排查路由问题至关重要。
  6. 多播和组播诊断:使用 -g--groups 选项可以显示多播组成员关系,对于诊断多播服务或应用的问题很有帮助。
  7. 接口统计信息:通过 -i--interfaces,可以查看各个网络接口的发送、接收字节数、错误率等信息,有助于评估网络接口的健康状况。
  8. 检测SYN洪水攻击:观察处于SYN_RECV状态的连接数量,如果异常增多,可能表明系统正遭受SYN洪水攻击。

End

这篇关于【工作必备知识】Linux系统网络诊断与netstat命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1053319

相关文章

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor