5. lsof命令
lsof , 即list opened filedescriptor , 即列出当前操作系统中打开的所有文件描述符 , socket也是一种file descriptor , 常见的选项是:
-i 列出系统打开的socket fd
-P 不要显示端口号别名
-n 不要显示ip地址别名(如localhost会用127.0.0.1来代替)
+c w 程序列名称最大可以显示到w个字符 。
常见的选项组合为lsof –i –Pn:
文章插图
可以看到列出了当前侦听的socket , 和连接socket的tcp状态 。
6.pstack
严格意义上来说 , 这个不算网络排查故障和调试命令 , 但是我们可以利用这个命令来查看某个进程的线程数量和线程调用堆栈是否运行正常 。指令使用格式:
pstack pid
即 , pstack 进程号 , 如:
文章插图
7.nc命令
即netcat命令 , 这个工具在排查网络故障时非常有用 , 因而被业绩称为网络界的“瑞士军刀” 。常见的用法如下:
- 模拟服务器端在指定ip地址和端口号上侦听
- 模拟客户端连接到指定ip地址和端口号
我们知道客户端连接服务器一般都是操作系统随机分配一个可用的端口号连接到服务器上去 , 这个指令甚至可以指定使用哪个端口号连接 , 如:
nc –p 12345 127.0.0.1 8888
客户端使用端口12345去连接服务器127.0.0.1::8888 。
- 使用nc命令发消息和发文件
文章插图
服务器
文章插图
8 .tcpdump
这个是linux系统自带的抓包工具 , 功能非常强大 , 默认需要开启root权限才能使用 。
文章插图
其常见的选项有:
-i 指定网卡
-X –XX 打印十六进制的网络数据包
-n –nn 不显示ip地址和端口的别名
-S 以绝对值显示包的ISN号(包序列号)
常用的过滤条件有如下形式:
tcpdump –i any ‘port 8888’tcpdump –i any ‘tcp port 8888’tcpdump –i any ‘tcp src port 8888’tcpdump –i any ‘tcp src port 8888 and udp dst port 9999’tcpdump -i any 'src host 127.0.0.1 and tcp src port 12345' -XX -nn -vv
关于tcpdump命令接下来将会以对tcp三次握手和四次挥手的包数据进行抓包来分析 。三、 tcp三次握手和四次挥手过程解析
熟练地掌握tcp三次握手和四次挥手过程的每一个细节是我们排查网络问题的基础 。
文章插图
下面我们来通过tcpdump抓包能实战一下三次握手的过程 , 假设我的服务器端的地址是 127.0.0.0.1 : 12345 , 使用nc命令创建一个服务器程序并在这个地址上进行侦听:
nc –v -l 127.0.0.0.112345
文章插图
然后在客户端机器上开启tcpdump工具:
文章插图
然后在客户端使用nc命令创建一个客户端去连接服务器:
文章插图
我们抓到的包如下:
文章插图
图片看不清 , 可以放大来看 。上面我们需要注意的是:
三次握手过程是客户端先给服务器发送一个SYN , 然后服务器应答一个SYN+ACK , 应答的序列号是递增1的 , 表示应答哪个请求 , 即从4004096087递增到4004096088 , 接着客户端再应答一个ACK 。这个时候 , 我们发现发包序列号和应答序列号都变成1了 , 这是tcpdump使用相对序号 , 我们加上-S选项后就变成绝对序列号了 。
文章插图
这是正常的tcp三次握手 , 假如我们连接的服务器ip地址存在 , 但监听端口号并不存在 , 我们看下tcpdump抓包结果:
推荐阅读
- Linux常用的10个性能检测命令!
- MySQL服务器最近偶尔出现cpu居高不下的情况,如何排查?
- linux系统root密码忘记了怎么办
- Linux 防火墙入门教程
- app开发完成后为什么需要进行ios签名内测?
- 高并发服务器逻辑处理瓶颈,如何解决?
- 5分钟快速搭建FTP服务器的图文教程
- 苹果企业开发者账号卖多少钱
- 程序员和开发者,细品之下见差别
- 传统服务器与云服务器的对比