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 命令是测试远程主机网络是否能通

出自:TCP 可靠连接的相关命令

回到顶部