前言

本文是非常浅显的技术总结,仅聚焦工作中常用到的一些Linux命令。

由于nio的普及,ck10k的问题已经成为过去式。现在随便一台服务器,就可以支持数十万级别的连接了。那么我们来算一下,100万的连接需要多少资源。

首先,每一个连接都是文件句柄,所以需要文件描述符数量支持才行,每一个socket内存占用15k-20k之间,这样,仅维护相应socket,就需要20G内存;而广播一个1KB的消息需要占用的带宽为1000M!

查看当前系统的连接

如何看当前系统有多少连接呢?可以使用netstat结合awk进行统计。如下脚本,统计了每一种状态的tcp连接数量

netstat -antp | awk '{a[$6]++}END{ for(x in a)print x,a[x]}'LISTEN 41CLOSE_WAIT 24ESTABLISHED 150Foreign 1TIME_WAIT 92

但如果你在一台有上万连接的服务器上执行这个命令,你可能会等上很长时间。所以,我们有了第二代网络状态统计工具:netstat => ss(可别和那个越狱工具搞混了)。

ss -sTotal: 191 (kernel 220)TCP: 5056 (estab 42, closed 5000, orphaned 3, synrecv 0, timewait 5000/0), ports 3469...

netstat属于net-tools工具集,而ss属于iproute。其命令对应如下,是时候和net-tools说Bye了。

ss命令

基本使用

我们按照使用场景来看下ss的用法。

查看系统正在监听的tcp连接

ss -atr ss -atn #仅ip

查看系统中所有连接

ss -alt

查看监听444端口的进程pid

ss -ltp | grep 444

查看进程555占用了哪些端口

ss -ltp | grep 555

显示所有udp连接

ss -u -a

查看TCP sockets,使用-ta选项
查看UDP sockets,使用-ua选项
查看RAW sockets,使用-wa选项
查看UNIX sockets,使用-xa选项

和某个ip的所有连接

ss dst 10.66.224.130ss dst 10.66.224.130:httpss dst 10.66.224.130:smtpss dst 10.66.224.130:443

显示所有的http连接

ss  dport = :http

查看连接本机最多的前10个ip地址

netstat -antp | awk '{print $4}' | cut -d ':' -f1 | sort | uniq -c  | sort -n -k1 -r | head -n 10

Recv-Q和Send-Q

注意ss的执行结果,我们说明一下Recv-Q和Send-Q。

这两个值,在LISTEN和ESTAB状态分别代表不同意义。一般,正常的应用程序这两个值都应该为0(backlog除外)。数值越大,说明问题越严重。

LISTEN状态

Recv-Q:代表建立的连接还有多少没有被accept,比如Nginx接受新连接变的很慢
Send-Q:代表listen backlog值

ESTAB状态

Recv-Q:内核中的数据还有多少(bytes)没有被应用程序读取,发生了一定程度的阻塞
Send-Q:代表内核中发送队列里还有多少(bytes)数据没有收到ack,对端的接收处理能力不强

查看网络流量

查看流量

有很多工具可以看网络流量,但我最喜欢sar。sar是linux上功能最全的监控软件。如图,使用sar -n DEV 1即可每秒刷新一次网络流量。


当然,你也可以使用ifstat、nload、iptraf等命令查看。然而数据来源,还是来自我们的/proc目录

watch cat /proc/net/dev

查看占流量最大的IP

有时候我们发现网络带宽占用非常高,但我们无法判断到底流量来自哪里。这时候,iftop就可以帮上忙了。如图,可以很容易的找出流量来自哪台主机。

当你不确定内网的流量来源,比如有人在压测,api调用不合理等,都可以通过这种方法找到他。

抓包

tcpdump

当我们需要判断是否有流量,或者调试一个难缠的netty应用问题,则可以通过抓包的方式去进行进一步的判断。在Linux上,可以通过tcpdump命令抓取数据,然后使用Wireshark进行分析。

tcpdump -i eth0 -nn -s0 -v port 80

-i 指定网卡进行抓包

-n 和ss一样,表示不解析域名

-nn 两个n表示端口也是数字,否则解析成服务名

-s 设置抓包长度,0表示不限制

-v 抓包时显示详细输出,-vv、-vvv依次更加详细

1)加入-A选项将打印ascii ,-X打印hex码。

tcpdump -A -s0 port 80

2)抓取特定ip的相关包

tcpdump -i eth0 host 10.10.1.1tcpdump -i eth0 dst 10.10.1.20

3)-w参数将抓取的包写入到某个文件中

tcpdump -i eth0 -s0 -w test.pcap

4)tcpdump支持表达式,还有更加复杂的例子,比如抓取系统中的get,post请求(非https)

tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"

抓取的数据,使用wireshark查看即可。


http抓包

抓包工具将自身当作代理,能够抓取你的浏览器到服务器之间的通讯,并提供修改、重放、批量执行的功能。是发现问题,分析协议,攻击站点的利器。常用的有以下三款:

Burpsuite (跨平台)

Fiddle2 (Win)

Charles (Mac)

坏事要偷偷的干哦。

流量复制

你可能需要使你的生产环境HTTP真实流量在开发环境或者预演环境重现,这样就用到了流量复制功能。

有三个工具可供选择,个人倾向于Gor。

Gor

TCPReplay

TCPCopy

连接数过多问题

根据TCP/IP介绍,socket大概包含10个连接状态。我们平常工作中遇到的,除了针对SYN的拒绝服务攻击,如果有异常,大概率是TIME_WAIT和CLOSE_WAIT的问题。
TIME_WAIT一般通过优化内核参数能够解决;CLOSE_WAIT一般是由于程序编写不合理造成的,更应该引起开发者注意。

TIME_WAIT

TIME_WAIT是主动关闭连接的一方保持的状态,像nginx、爬虫服务器,经常发生大量处于time_wait状态的连接。TCP一般在主动关闭连接后,会等待2MS,然后彻底关闭连接。由于HTTP使用了TCP协议,所以在这些频繁开关连接的服务器上,就积压了非常多的TIME_WAIT状态连接。

某些系统通过dmesg可以看到以下信息。

__ratelimit: 2170 callbacks suppressedTCP: time wait bucket table overflowTCP: time wait bucket table overflowTCP: time wait bucket table overflowTCP: time wait bucket table overflow

通过ss -s命令查看,可以看到timewait已经有2w个了。

ss -sTotal: 174 (kernel 199)TCP:   20047 (estab 32, closed 20000, orphaned 4, synrecv 0, timewait 20000/0), ports 10785

sysctl命令可以设置这些参数,如果想要重启生效的话,加入/etc/sysctl.conf文件中。

修改阈值net.ipv4.tcp_max_tw_buckets = 50000 # 表示开启TCP连接中TIME-WAIT sockets的快速回收net.ipv4.tcp_tw_reuse = 1#启用timewait 快速回收。这个一定要开启,默认是关闭的。net.ipv4.tcp_tw_recycle= 1 # 修改系統默认的TIMEOUT时间,默认是60snet.ipv4.tcp_fin_timeout = 10

测试参数的话,可以使用 sysctl -w net.ipv4.tcp_tw_reuse = 1 这样的命令。如果是写入进文件的,则使用sysctl -p生效。

CLOSE_WAIT

CLOSE_WAIT一般是由于对端主动关闭,而我方没有正确处理的原因引起的。说白了,就是程序写的有问题,属于危害比较大的一种。

我们拿”csdn 谐音太郎”遇到的一个典型案例来说明。

代码是使用HttpClient的一个使用片段。在这段代码里,通过调用in.close()来进行连接资源的清理。但可惜的是,代码中有一个判断:非200状态的连接直接返回null。在这种情况下,in连赋值的机会都没有,当然也就无法关闭,然后就发生了连接泄漏。

所以,HttpClient的正确关闭方式是使用其api:abort()。

其他常用命令

应用软件

断点续传下载文件wget -c $url# 下载整站wget -r -p -np -k $url# 发送网络连接(常用)curl -XGET $url# 传输文件scpsftp# 数据镜像备份rsync

检测工具

连通性检测ping## 标题 google.com# 到对端路由检测tracepath google.com# 域名检测dig google.comnslookup google.com# 网络扫描工具nmap# 压力测试iperf# 全方位监控工具(好东西)nmon

配置工具

停止某个网卡ifdown# 开启某个网卡ifup# 多功能管理工具 ethtool

压力测试

wrkabwebbenchhttp_load

多功能工具

远程登录telnetsshnc# 防火墙iptables -L

结尾

除了基本的工具,本文提到的很多网络命令,都不是预装的,需要使用yum自行安装。

【网络工程师必备】请注意查收 Linux 网络命令集锦相关推荐

  1. 《Network Warrior中文版—思科网络工程师必备手册 》

    <Network Warrior中文版-思科网络工程师必备手册 >china-pub推荐 适合从事计算机网络技术.管理和运维工作的工程技术人员阅读. 可以让有经验的网络工程师和管理员巩固并 ...

  2. 《Network Warrior中文版(第2版)——思科网络工程师必备手册》一3.3 自动协商故障...

    本节书摘来自异步社区<Network Warrior中文版(第2版)--思科网络工程师必备手册>一书中的第3章,第3.3节,作者[美]Gary A. Donahue,更多章节内容可以访问云 ...

  3. 2023年网络工程师必备10大软件,最新安装包分享

    常听人说:拳头再硬,也比不上锤子!同样的,作为一个网络工程师只有满腹的技术而不会使用对应的软件工具,是完全不行的.那作为一个2023年的网络工程师必备的软件有哪些呢? 以下10大网工必备软件都已整理好 ...

  4. 31个网络工程师必备高频软件大汇总

    今日份唠嗑已营业. 晚上好,我是老杨.我之前更新过两期网络工程师必备工具,从阅读量上都能知道到底有多受欢迎. 老杨10月太忙,没法整理.正好11月初还有点时间,更新第三期给你们. 前两期的工具安利我放 ...

  5. 《Network Warrior中文版(第2版)——思科网络工程师必备手册》一3.4 自动协商最佳做法...

    本节书摘来自异步社区<Network Warrior中文版(第2版)--思科网络工程师必备手册>一书中的第3章,第3.4节,作者[美]Gary A. Donahue,更多章节内容可以访问云 ...

  6. 《Network Warrior中文版(第2版)——思科网络工程师必备手册》一第2章 HUB和交换机2.1 HUB...

    本节书摘来自异步社区<Network Warrior中文版(第2版)--思科网络工程师必备手册>一书中的第2章,第2.1节,作者[美]Gary A. Donahue,更多章节内容可以访问云 ...

  7. 【网络通信】【电信运营商实战工程师】思科设备篇-网络工程师必备基础知识

    电信运营商实战工程师系列文章. 思科设备篇-网络工程师必备基础知识. 文章目录 1. 电信运营商网络设备机房 2. 认识并管理运营商网络设备 3. GNS3 安装与配置 4. IPv4地址及子网划分 ...

  8. 【网络工程师必备干货】Smart Link可靠性技术详解

    给大家推荐一个公众号"网络工程师笔记",每天更新网络知识,网络工程师必备公众号. 后台回复"资料",领取华为HCNA/HCNP/HCIE培训所有资料 下面进行今 ...

  9. 《Network Warrior中文版(第2版)——思科网络工程师必备手册》一导读

    前 言 Network Warrior中文版(第2版)--思科网络工程师必备手册 本书所举示例,均取自笔者以及笔者有幸曾与共事的同事们的工作经历.当然,出于法律和名誉上的原因,笔者已对具体细节,以及任 ...

最新文章

  1. 新技术“红”不过十年,半监督学习为什么是个例外?
  2. 自动发邮件的程序 c语言,5分钟!教你用C语言发送邮件:附送源码+教学!
  3. 关于mbzuai的offer的三点思考
  4. carsim学习笔记6——转向系统的学习
  5. Spring Boot 2.X 使用@Cacheable时注意事项
  6. excel实战应用案例100讲(十四)-Excel可直接分析的大数据语义层
  7. c语言贪吃蛇最简单代码_C语言指针,这可能是史上最干最全的讲解啦(附代码)!!!...
  8. OPencv_边缘检测算法
  9. softmax实现多分类算法推导及代码实现
  10. swift 异常捕获try catch的使用
  11. python自学行吗-大家觉得自学python多久能学会?
  12. Linux 基本命令(十)--grep 常用命令
  13. 【网络流24题】星际转移问题(最大流)(网络判定)
  14. android 当手柄打游戏,玩手游需不需要配手柄?谈移动游戏外设的三个机会
  15. 2019-07-04:python音频处理库
  16. (转)OpenGL与DirectX 比较
  17. 西安市:外地职工离职如何提取公积金
  18. Processing 网格纹理制作(棋盘格)
  19. 设备管理——Spooling技术原理
  20. 游承超:手机防爆膜可以降低手机的压力(15P)

热门文章

  1. 嵌入式电子护照应用在自助机上的案例
  2. 强烈向喜欢玩魔兽TD的朋友推荐这个小游戏(附下载)
  3. 2019内蒙古大学计算机复试笔试题目
  4. 关于MediaRecord一边录制一边拍照的问题
  5. java程序设计基础_陈国君版第五版_第九章例题
  6. 女生乘火车时离奇死亡 铁路局称按规定只赔6万
  7. Springcloud----SkyWalking链路追踪
  8. java 导出Excel乱码解决方案,以及内在的原因
  9. 想创业不知道做什么好?如何选择创业行业?
  10. c语言取字符数组最后几位