绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
常用的网络命令大盘点
2021-11-16 15:19:28
作者、来源 | 小林coding

服务器一般都是命令页面,不像 windows 有图形页面,点点鼠标就好,所以掌握些基本的 Linux 命令是很有必要的,不然就无法操作 Linux,更体会不到 Linux 的精髓。

这次,我们就来看看网络相关的命令。

学习网络不应该只局限于理论,作为工程师的我们,掌握一些基本的网络命令对我们帮助会很大,因为平时在远程操作、开发、调试、排查线上问题的时候,会常常用到。

Linux 为我们提供了很多网络相关的命令,我们这次就来看看 Linux 系统里有哪些常用的网络命令。


远程连接命令

如果我们要想操作 Linux 服务器,不可能说拿个显示器、鼠标和键盘接到服务器上,服务器一般都是放在机房里的,只需让服务器把网络接通,我们在自己的电脑就可以使用 ssh 命令远程登录服务器,进而操作和管理服务器。

还有一个很常用的远程命令是 scp,它可以帮助我们传输文件到服务器上。

ssh

在需要远程登录 Linux 系统,可以使用 ssh 命令,比如你想远程登录一台服务器,可以使用 ssh user@ip 的方式,如下图:

接着,会有输入密码的提示,输入正确的密码后,就进入到了服务器的终端页面,之后你操作的命令就是控制服务器的了。

scp

当我们需要把一台机器上的文件传输给另一台机器时,使用 scp 命令就可以。

如下图,使用 scp 命令将本地 test.txt 文件传输给了 IP 地址为 192.168.12.35 机器的 /home 目录。

输入 scp 命令后,会弹出需要输入对方密码的提示,输入完成后,回车即可,如果密码验证通过后,就进行文件的传输。


查看本地网络状态

要想知道本地机器的网络状态,比较常用的网络命令是 ifconfig 和 netstat。

ifconfig

当你想知道机器上有哪些网口,和网口对应的状态信息时,使用 ifconfig 就可以,状态信息包含 IP 地址、子网掩码、MAC 地址等。

如下图,是在我设备上的 ifconfig 信息。

可以看到,这台机器一共有 3 个网口,分别是 eth0、eth1、lo。其中 lo 是本地回路,发送给 lo 就相当于发送给自己,eth0 和 eth1 都是真实的网口。

netstat

netstat 命令主要用于查看目前本机的网络使用情况。

查看所有 socket

如果只是单纯执行 netstat 命令,则查询的是本地所有 socket,如下图:

上图中,我们看到的都是 socket 文件,socket 负责在客户端与服务端之间收发数据,当客户端和服务端建立连接时,各自同时都会生成一个 socket 文件,用于管理这个连接。

查看 TCP/UDP 连接

如果只想看 TCP 连接的网络信息,可以使用 netstat -t。

比如下面我通过 netstat -t 看 tcp 协议的网络情况:

上图末尾的 state 描述的是当前 TCP 连接处于的状态。

另外,如果要想看 UDP 的网络信息,可以使用 netstat -u。

查看端口占用

如果你想知道某个端口是哪个进程在占用,比如我想查 80 端口被哪个进程占用了,如下图:

可以看到,80 端口被 http 进程占用了,末尾的信息也能看到这个进程对应的 pid。


网络测试

当我们想确认网络的延时情况,以及与服务器网络是否畅通,则可以使用 ping 和 telnet 命令。

ping

想知道本机到目标网页的网络延时,可以使用 ping 命令,如下图所示:

ping 是基于 ICMP 协议的,所以对方防火墙如果屏蔽了 ICMP 协议,那么我们就无法与它 ping 通,但这并不代表网络是不通的。

每一个 ICMP 包都有序号,所以你可以看到上图中 icmp 序号,如果序号是断断续续的,那么可能出现了丢包现象。

time 显示了网络包到达远程主机后返回的时间,单位是毫秒。time 的时间越小,说明网络延迟越低,如果你看到 time 的时间变化很大,这种现象叫做网络抖动,这说明客户端与服务器之间的网络状态不佳。

ttl 全称叫 time to live,指定网络包被路由器丢弃之前允许通过的网段数量,说白了就是定义了网络包大经过路由器的数量,这个目的是防止网络包在网络中被无限转发,永不停止。当网络包在网络中被传输时,ttl 的值通过一个路由器时会递减1,当 ttl 递减到 0 时,网络包就会被路由器抛弃。

另外,ping 不单单能输入 ip 地址,也能输入域名地址,如果输入的是域名地址,会先通过 DNS 查询该域名的 ip 地址,再进行通信。

telnet

有时候,我们想知道本机到某个 IP + 端口的网络是否通畅,也就是想知道对方服务器是否有对应该端口的进程,于是就可以使用 telnet 命令,如下所示:

telnet 192.168.0.5 

telnet 执行后会进入一个交互式的页面,这时就可以填写你将要发送给对方的信息,比如你想发 HTTP 请求给服务器,那么你就可以写出 HTTP 请求的格式信息。


DNS 查询

如果想知道 DNS 解析域名的过程,可以使用 host 和 dig 命令。

host

host 就是一个 DNS 查询命令,比如我们要查百度的 DNS,如下图所示:

可以看到,www.baidu.com 只是个别名,原名是 www.a.shifen.com,且对应了 2 条 IPv4 地址。

如果想追查某种类型的记录,可以加个 -t 参数,比如下图我们追查百度的 AAAA 记录,也就是查询域名对应的 IPv6 地址,由于百度还没部署 IPv6 地址,所以没有查询到。

dig

dig 同样也是做 DNS 查询的,区别在于,dig 显示的内容更加详细,比如下图是 dig 百度的结果:

也可以看到 www.baiu.com 的别名(CNAME)为 www.a.shifen.com,然后共有 2 条 A 记录,也就是 IPv4 地址的记录,通常对应多个是为了负载均衡或分发内容。


HTTP

在电脑桌面我们常使用浏览器去请求网页,而在服务器一般是没有可视化页面的,也就没有浏览器,这时如果想要 HTTP 访问,就需要网络相关的命令。

curl

如果要在命令行请求网页或者接口,可以使用 curl 命令,curl 支持很多应用协议,比如 HTTP、FTP、SMTP 等,实际运用中常用还是 HTTP。

比如,我用 curl 访问了百度网页,如下图:

如果不想看 HTTP 数据部分,只想看 HTTP GET 返回头,可以再加个 -I 参数,如 curl -I,如下图所示:

上面演示了 HTTP GET 请求,如果想使用 POST 请求,命令如下:

curl 向 http://localhost/myapi 接口发送 POST 请求,各参数的说明:

  • -d 后面是要发送的数据,例子中发送的是 JSON 格式的数据; 

  • -X 后面是指定 HTTP 的方法,例子中指定的是 POST 方法;

  • -H 是指定自定义的请求头,例子中由于发送的是 JSON 数据,所以内容类型指定了 JSON。


总结

后,列一下本文提到的 Linux 下常用的网络命令:

  • 远程登录的 ssh 指令;

  • 远程传输文件的 scp 指令;

  • 查看网络接口的 ifconfig 指令;

  • 查看网络状态的 netstat 指令;

  • 测试网络延迟的 ping 指令;

  • 可以和服务端进行交互式调试的 telnet 指令;

  • 两个 DNS 查询指令 host 和 dig;

  • 可以发送各种请求包括 HTTPS 的 curl 指令。



分享好友

分享这个小栈给你的朋友们,一起进步吧。

网络与CDN
创建时间:2020-06-17 17:59:30
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 栈栈
    专家
戳我,来吐槽~