TCP 可靠连接的相关命令
文章目录
关于 TCP可靠连接在之前有专门的介绍,点击连接查看.
netstat 命令
netstat 用于打印网络连接、路由表、连接的数据统计等,我们上文中介绍的各种连接状态都可以通过该命令进行统计
参数介绍:
- -a:列出所有状态的连接
- -l:列出正在监听状态(State=LISTEN的连接
- -t:列出所有 tcp 协议的连接
- -u:列出所有 udp 协议的连接
- -n: 开启域名解析,将对应的域名解析为 IP
- -p:列出正在监听的进程名称和进程 PID(PID/Program name),在 root 用户下启动的进程,普通用户是查不到对应的进程名称的
- -e:列出进程对应的用户 ID 或者用户(USER),是用户 ID 还是用户名由 -n 参数决定
- -s:打印每种协议网络包统计数据
- -r:打印内核路由信息
- -i:打印网络接口信息,同 ifconfig 命令
列出所有 tcp 的连接:
$ netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:15778 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN
tcp 0 0 10.122.139.165:62411 10.199.136.43:80 ESTABLISHED
tcp 0 0 106.2.124.34:443 115.236.119.139:39120 ESTABLISHED
只列出处于监听状态的连接:
$ netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:15778 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN
查看监听中的进程名和用户名
$ netstat -tnl
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 localhost:15778 *:* LISTEN root 538503951 -
tcp 0 0 *:shell *:* LISTEN root 509846560 -
tcp 0 0 localhost:15779 *:* LISTEN root 538504573 -
查看网络接口:
和 ifconfig 和 ip a 的效果一样
$ netstat -ie
统计 TCP 每个连接状态信息:
$ netstat -n | awk `/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}`
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 15
FIN_WAIT1 51
FIN_WAIT2 5
TIME_WAIT 10
ping 命令
ping 命令用于测试到达目的主机的网络是否可用,可以接收域名或者 ip,不能检查端口,工作在 OSI 参考模型的第三层-网络层
ping 命令和 traceroute 命令一样都是通过 ICMP 协议实现的,尽管 ping 工具也可以进行侦测,但是因为 ip 头的限制,ping 不能完全的记录下所经过的路由器。所以 traceroute 正好就填补了这个缺憾,所以如果想查询整个路由信息还是需要 traceroute
# 直接 ping ip
$ ping 10.165.124.134
PING 10.165.124.134 (10.165.124.134): 56 data bytes
64 bytes from 10.165.124.134: icmp_seq=0 ttl=63 time=3.923 ms
64 bytes from 10.165.124.134: icmp_seq=1 ttl=63 time=4.103 ms
# ping域名,可以获取到指定域名的 ip
$ ping dev.youdata.com
PING dev.youdata.com (106.2.44.33): 56 data bytes
64 bytes from 106.2.44.33: icmp_seq=0 ttl=58 time=3.477 ms
64 bytes from 106.2.44.33: icmp_seq=1 ttl=58 time=3.904 ms
64 bytes from 106.2.44.33: icmp_seq=2 ttl=58 time=3.878 ms
// -c 参数指定发送包的个数
$ ping -c 2 dev.youdata.com
// -W 参数指定 ping 命令的等待时间
$ ping -W 2 dev.youdata.com
traceroute 命令
raceroute 原理是利用 ICMP 的 ttl expired 通知机制,每次通过不断增加 ttl 从而不断发现下一跳路由,traceroute 发送的是端口号 > 30000 的数据报,所以到达目的主机的时候,会收到端口不可达的 ICMP 回应,这个时候源主机就知道主机可以连通了
$ traceroute www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
1 192.168.74.2 (192.168.74.2) 2.606 ms 2.771 ms 2.950 ms
2 211.151.56.57 (211.151.56.57) 0.596 ms 0.598 ms 0.591 ms
3 211.151.227.206 (211.151.227.206) 0.546 ms 0.544 ms 0.538 ms
4 210.77.139.145 (210.77.139.145) 0.710 ms 0.748 ms 0.801 ms
5 202.106.42.101 (202.106.42.101) 6.759 ms 6.945 ms 7.107 ms
6 61.148.154.97 (61.148.154.97) 718.908 ms * bt-228-025.bta.net.cn (202.106.228.25) 5.177 ms
7 124.65.58.213 (124.65.58.213) 4.343 ms 4.336 ms 4.367 ms
8 202.106.35.190 (202.106.35.190) 1.795 ms 61.148.156.138 (61.148.156.138) 1.899 ms 1.951 ms
9 * * *
30 * * *
raceroute 命令可以让你实现追踪网络数据包的路由途径,以及每个网关消耗的时间,预设数据包大小是 40 Bytes
raceroute 输出结果会看到有一些行是以星号表示的记录,可能是因为防火墙封掉了 ICMP 的返回信息,所以我们得不到什么相关的数据包返回数据
每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的
每个跳跃点默认情况下会发送 3 次数据包,但是不一定会是同一个 ip,因为两个网关之间也有可能有负载均衡策略,所以有些记录中可能会有 2 个或者 3 个 ip
ip 头所能纪录的路由列表是非常有限的,所以 traceroute 采取不断增加 ttl 的方式去发送,这也正是 traceroute 越到后面记录返回越慢的原因
主要参数说明:
-q: 探测数据包向每个网关发送数据包的个数,默认是 3 次,会记录每次的时间长度
-m: 设置数据包经过网关的最大个数(TTL)
-n: 显示 ip,不查主机名
lsof 命令
lsof(list open files)是一个查看当前系统文件的工具。在 linux 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。例如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统都会在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息
参数说明
- -a: 列出打开文件存在的进程查找某个文件相关的进程
- -c<进程名>: 列出指定进程所打开的文件
- -g:列出GID号进程详情
- -d<文件号>: 列出占用该文件号的进程
- +d<目录>: 列出目录下被打开的文件
- +D<目录>: 递归列出目录下被打开的文件
- -n<目录>: 列出使用NFS的文件
- -i<条件>: 列出符合条件的进程。(4、6、协议、:端口、 @ip )
- -p<进程号>: 列出指定进程号所打开的文件
- -u: 列出UID号进程详情
- -h: 显示帮助信息
- -v: 显示版本信息
查找某个文件相关的进程
$ lsof /bin/bash
列出某个用户打开的文件信息
$ lsof -u username
列出某个程序进程所打开的文件信息
$ lsof -c mysql
通过某个进程号显示该进程打开的文件
$ lsof -p 11968
列出所有 tcp 网络连接信息
$ lsof -i tcp
列出某个端口被哪个进程占用
$ lsof -i :3306
telnet 命令
telnet 命令用于登录远程主机
telnet 因为采用明文传送报文,安全性不好,很多 Linux 服务器都不开放 telnet 服务,而改用更安全的 ssh 方式
telnet 位于 OSI 模型的第七层(应用层)的一种协议
telnet ip port 用于测试远程主机的某个端口是否开放,而 ping 命令是测试远程主机网络是否能通