网络常用命令
1. 实验介绍
1.1 实验内容
本节实验主要介绍了七层模型中的应用层、网络层的相关协议以及常用的网络命令。
1.2 实验知识点
- 应用层协议
- 网络层协议
- 常用命令
2. 应用层协议
2.1 HTTP 协议
简介
HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于网络服务中传输超文本到本地浏览器的一种应用层的传送协议。 HTTP 是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
工作原理
HTTP 协议是基于客户端-服务端(C/S)架构上的,客户端通过 URL 向 HTTP 服务端(Web 端)发送请求。Web 服务器根据接收的请求,向客户端发送响应信息。HTTP 默认端口是 80 ,也可以修改为 8080 或其他端口。
结构特点
- HTTP 基于 C/S 架构模型,通过可靠连接(TCP 连接)完成信息交换,是一个无状态(无状态是指协议对于事务处理没有记忆能力)的请求/响应协议。
- HTTP 是通过统一资源标识符(URL,Uniform Resource Identifiers)传输数据和建立连接。
- HTTP 的客户端和服务器端均是一个应用程序,来完成一个请求和响应。
URL:统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。 基本 URL 结构: 模式(协议:http 、https、ftp 等)、服务器名称(IP 地址)、路径和文件名。eg:https://www.shiyanlou.com/courses
客户端请求消息
1)请求报文格式
2)请求方法
- HTTP1.0:通过 GET,POST,HEAD
- HTTP1.1:通过 OPTIONS,PUT,DELETE,TRACE,CONNECT
常用的是:GET 用来请求指定的页面信息,返回实体主体。
服务端响应消息
1)响应报文格式
实例
应为实验环境的限制,可以打开本地的 Chrome 浏览器,然后点击菜单栏中的"更多工具","开发者工具",就可以显示开发者工具了。
Network 是显示 web 端和服务端之间的通信,Elements 显示网页的结构。点击 Network,确保第一个红灯是亮着的,这样就会记录下所有 web 端和服务器之间的通信。
在地址栏输入:www.shiyanlou.com,web 浏览器就会跳转到实验楼的首页。然后点击左边第一栏的第一个记录,右侧就会显示 Request Headers,点击旁边的 view source,就可以显示请求内容。
HTTP 状态码
服务器端的响应报文包含 3 位数的状态码。
常见的 HTTP 状态码:
- 1xx:信息,服务器接收请求。eg:100- 客户端继续进行请求。
- 2xx:成功,操作成功接收。eg:200- 请求成功
- 3xx:重定向,需要进一步进行请求。301 - 网页等资源被永久转移到其它 URL。
- 4xx:客户端错误,请求出现语法错误或无法完成请求。eg:404 - 网页等请求的资源不存在。
- 5xx:服务器错误,在处理请求过程中出现错误。eg:502 - Bad Gateway 。
2.2 FTP 协议
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议族中的协议之一。FTP 协议包括两个组成部分,FTP 服务器,和 FTP 客户端。 其中,文件传输协议分别有基于 TCP 的 FTP 和基于 UDP 的简单文件传输协议 TFTP。
作用
用于 Internet 上的控制文件的双向传输。用户可以通过它把自己的 PC 机和所有运行 FTP 协议的服务器相连,访问服务器上的大量程序和信息。用户通过连接上一个远程计算机,然后把文件从远程计算机上拷到本地计算机,或者把本地计算机的文件传送到远程计算机上去。
工作原理
典型的使用 FTP 协议在本地系统和远程文件系统间进行数据文件交换。如下图所示:
用户首先提供远程主机的主机名,使本地主机的 FTP 客户机进程建立一个到远程主机 FTP 服务器进程的 TCP 连接。然后,为用户提供一个用户标识和口令,作为 FTP 命令的一部分在该 TCP 连接上进行传送。服务器只要向该用户授权,用户就能从本地文件系统向远程文件系统传送文件。
FTP 特点
- FTP 是文件传输协议,面向文件。
- FTP 协议的默认端口:21 号端口。
- FTP 使用两个并行的 TCP 连接来传输文件,分别是:控制连接(端口号 21)和数据连接(端口号 20)。
- FTP 的控制连接是持久连接的,数据连接是非持久的。
- FTP 服务器在通信期间时保留用户的状态信息的(state)。
2.3 Telnet
Telnet(teletype network)协议是 TCP/IP 协议族中的一个,主要是 Internet 远程登录服务的标准协议。用来和远程主机进行通信或者获取远程主机对应端口的信息。主要基于 TCP 协议,使用端口 23。
工作原理
1)使用 Telnet 协议的条件:
- 在本地计算机上必须装有包含 Telnet 协议的客户程序
- 必须知道远程主机的 IP 地址或域名
- 必须知道登录标识与口令。
2)Telnet 远程登录服务分为以下 4 个过程:
- 本地与远程主机建立连接。实际上是建立一个 TCP 连接,用户必须知道远程主机的 IP 地址或域名;
- 将本地终端上输入的用户名和口令及以后输入的任何命令或字符以特殊的格式(NVT,Net Virtual Terminal ) 传送到远程主机。实际上是从本地主机向远程主机发送一个 IP 数据包;
- 将远程主机输出的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;
- 最后,本地终端对远程主机进行撤销连接。即撤销一个 TCP 连接。
工作原理图解:
Telnet 实例
1)通过 Telnet 协议来测试一下目标机器的端口开放情况。
命令格式:
telnet IP 地址 端口号
通过 telnet 命令来测试
$ telnet 192.168.42.4 22
$ telnet 192.168.42.4 3389
从图中可以看出 3389 端口无法进行连接说明没有开放,而 22 端口是开放的。
连接失败的可能原因有:
- 防火墙屏蔽
- 目标机器没有启用相关远程服务
- 修改默认占用了端口
最后我们可以用 netstat -lunat 命令来验证一下。
$ netstat -lunat
从 status 可以看出 22 端口是处于 LISTEN 的。
Telnet 及 netstat 验证网络服务状态操作视频:
3. 网络层协议
3.1 ICMP
概述
ICMP(Internet Control Message Protocol)是介于网络层和传输层的协议。主要用于传输网络诊断信息。
根据 RFC 792 文档,可以知道:
ICMP 协议主要是用于源 host 到目的 host 之间的数据报服务。当目的 host 与源 host 进行通信时,ICMP 会用来,比如说通过处理数据报来报告一个错误。 ICMP 基于 IP 协议,所以有点像一个上层协议。一个 ICMP 包需要封装在 IP 包中,然后在互联网传送。任何一个支持 IP协议的计算机,都要实现 ICMP。
ICMP 传输信息分类
- 错误信息:用来诊断网络故障
- 资讯信息:可以查询到路径上的路由器
ICMP 包结构
每个 ICMP 包都会有 Type、Code、Checksum 三个部分。
- Type:用来标识 ICMP 包的大的类型
- Code:是一个 Type 之内细分小类型。针对不同的错误信息或者资讯信息,会有不同的 Type 和 Code。
- Checksum: 与 IP 协议的 header Checksum 相类似,但与 IP 协议中 checksum 只校验头部不同,这里的 Checksum 所校验的是整个 ICMP 包(包括头部和数据)。
常见包类型
- Echo :咨询信息,ping 命令利用到了这个类型的 ICMP 包。
- Source Quench :错误信息。
- Destination Uncreachale :错误信息
- Time Exceded:错误信息,traceroute 命令利用了这个类型的 ICMP 包。
- Redirect:错误信息
ICMP 协议实现举例
- ping 命令实现
ping 程序是对两台主机之间连通性进行测试的基本工具,利用的是 ICMP ECHO 和 ICMP ECHO REPLY 包来探测主机是否存在。
ping 程序通过在 ICMP 报文数据中存放发送请求的时间值来计算往返时间,当应答返回时,用当前时间减去存放在 ICMP 报文中的时间值,即是往返时间。
ping 命令格式:
ping IP地址
参数 | 说明 |
---|---|
-n | 输出数值 |
-c | 指定发送一定数目的包 |
-i | 设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次 |
-t | 设置存活数值 TTL 的大小 |
-v | 详细显示执行过程 |
-R | 记录路由过程 |
TTL 是 Time To Live 的缩写,该字段指定 IP 包被路由器丢弃之前允许通过的最大网络数量。假如没有 TTL 字段,网络中的 IP 包将越来越多造成网络阻塞,TTL 避免 IP 包在网络中的无限循环和收发,节省了网络资源,并能使 IP 包的发送者能收到告警信息。
$ ping 127.0.0.1
补充:可以通过 TTL 值判断操作系统类型。
UNIX TTL: 255
Linux TTL: 64
WINDOWS 95/98 TTL: 32
Windows NT 4.0/2000/XP/2003/7/8/10 TTL:128
- traceroute 命令实现
Traceroute 是用来侦测主机到目的主机之间经过的路由情况。在 ping 命令中加上参数-R也能记录路由过程,但是由于 IP 头的限制,不能完整记录所有经过的路由,而 traceroute正好弥补了这个缺憾。
Traceroute 工作原理
1)发送一份TTL 为 1 的 IP 数据报给目的主机,经过第一个路由器时,TTL 值被减为 0,则第一个路由器丢弃该数据报,并返回一份超时 ICMP 报文,于是就得到了路径中第一个路由器的地址;
2)再发送一份 TTL 值为 2的数据报,就可以得到第二个路由器的地址;
3)以此类推,一直到到达目的主机为止,这样便记录下了路径上所有的路由 IP。
traceroute 命令格式
traceroute [参数][主机]
参数 | 说明 |
---|---|
-f | 设置第一个检测数据包的存活数值TTL的大小 |
-g | 设置来源网关,最多可设置8个 |
-i | 使用指定的网络界面送出数据包 |
-m | 设置检测数据包的最大存活数值TTL的大小 |
-p | 设置 UDP 传输协议的通信端口 |
-v | 详细显示指令的执行过程 |
-w | 设置等待远端主机回报的时间 |
举例
$ sudo apt-get install traceroute
$ traceroute www.github.com
记录按序列号从 1 开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是 -q 的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间。
根据输出可以看出本机到 www.github.com对应的 IP 地址经历了 20 个路由迂回。traceroute命令会对这 20 个路由的节点做 3 次的 ICMP 的回应测试。如果在指定时间内检测不到路由信息,屏幕就会输出 *,表示无法通过。其中的原因可能会是设置了防火墙等原因。
3.2 ARP
ARP 协议是Address Resolution Protocol(地址解析协议)的缩写。 ARP 协议的基本功能就是通过目标设备的 IP地址(32 位),查询目标设备的 MAC 地址(48 位),以保证通信的顺利进行。
OSI 模式把网络工作分为七层,彼此不直接接触,只能通过接口(layre interface)来进行。由于 IP 地址在第三层, MAC 地址在第二层,协议在发送数据包时,首先要封装第三层 (IP 地址)和第二层 (MAC 地址)的报头, 但协议只知道目的节点的 IP 地址,不知道物理地址,又不能跨第二、三层,所以就需要用到了 ARP 的服务。
ARP 报文段示意图:
工作原理:
在以太网(因为 ARP 协议只适用于局域网)中,本地主机想要向某一个 IP 地址的主机发包,但并不知道其硬件地址,此时就可以利用 ARP 协议提供的机制来获取硬件地址。
过程如下:
- 本地主机要进行通信前会先检查自己的 ARP 缓存内是否有目的主机的 MAC 地址。若没有就会在局域网中发送一个ARP 请求广播包,ARP 请求广播数据包中含目的主机的 IP 地址。
- 目的主机收到广播后会解析这个广播报文,识别出是询问其硬件地址。于是发送 ARP 应答包,里面包含 IP 地址和 MAC 地址,同时更新自身的 ARP 缓存,包括保存请求(本地)主机的 IP 地址/MAC 地址对。
- 本地主机收到 ARP 应答后,知道目的地址的硬件地址,同时,本地主机也将目的主机的 IP地址/MAC 地址对保存在自己的 ARP 协议缓存中。之后的数据报就可以传送了。
ARP 代理
如果 ARP 请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器可以回答该请求,这个过程称作委托 ARP 或者 ARP 代理。这样可以欺骗发起 ARP 请求的发送端,使它误以为路由器就是目的主机。
3.3 RARP
RARP:逆地址解析协议,是将局域网中某个主机的物理地址转换为 IP 地址,和 ARP 刚好相反。比如局域网中有一台主机只知道物理地址而不知道 IP 地址,那么可以通过 RARP 协议发出征求自身 IP 地址的广播请求,然后由 RARP 服务器负责回答。
报文格式同 ARP 协议,类型字段和操作类型不同(这里不做详细讲解)。
4. 其他常用网络命令
4.1 ifconfig
主要用来获取网络接口配置信息并对此进行修改。常需要以 root 身份登录或使用 sudo 在 Linux 机器上使用 ifconfig 工具。
命令格式
ifconfig [网络设备][参数]
参数 | 说明 |
---|---|
-a | 显示全部接口信息 |
-s | 显示摘要信息 |
up | 启动指定网络设备/网卡 |
down | 关闭指定网络设备/网卡 |
add | 向指定网卡配置 IPv6 地址 |
del | 删除指定网卡的 IPv6 地址 |
…... | …... |
举例
显示网络设备信息
$ ifconfig
说明:
eth0 表示第一块网卡, (硬件地址)HWaddr 表示当前网卡的物理地址。
inet addr 表示网卡的 IPv4 地址,此网卡的 IP 地址是 192.168.42.4,广播地址: 0.0.0.0,掩码地址 Mask:255.255.255.0
lo 表示主机的回环地址,一般用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。
第一行:连接类型:Ethernet(以太网)HWaddr(硬件 MAC 地址)
第二行:网卡的 IP 地址、子网、掩码
第三行:UP(代表网卡开启状态)、RUNNING(代表网卡的网线被接上)、MULTICAST、MTU:1500(最大传输单元):1500字节 跃点数(Metric):1
第四、五行:接收、发送数据包情况统计
第七行:接收、发送数据字节数统计信息
4.2 netstat
netstat 命令用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat 是在内核中访问网络及相关信息的程序,能提供 TCP 连接,TCP 和 UDP 监听,进程内存管理的相关报告。
命令格式:
netstat [参数][IP]
参数 | 说明 |
---|---|
-a | 显示所有选项 |
-A | 列出网络类型连线中的相关地址 |
-n | 直接使用 IP 地址,而不通过域名服务器 |
-t | 显示 TCP 传输协议的连线状况 |
-u | 显示 UDP 传输协议的连线状况 |
-l | 显示监控中的服务器的 Socket |
-c | 持续列出网络状态 |
-i | 显示网络界面信息表单 |
…... | …... |
举例
无参数使用:
$ netstat
说明:
netstat 的输出结果分为两个部分:
- 一个是 Active Internet connections,称为激活 Internet 连接,其中"Recv-Q"和"Send-Q"指的是接受队列和发送队列。
状态(state) | 说明 |
---|---|
ESTABLISHED | 代表一个打开的链接 |
LISTEN | 侦听来自远方的 TCP 端口的连接请求 |
SYN-SENT | 再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了) |
SYN-RECEIVED | 再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被 flood 攻击了) |
FIN-WAIT-1 | 等待远程 TCP 连接中断请求,或先前的连接中断请求的确认 |
FIN-WAIT-2 | 从远程 TCP 等待连接中断请求 |
CLOSE-WAIT | 等待从本地用户发来的连接中断请求 |
CLOSING | 等待远程 TCP 对连接中断的确认 |
CLOSED | 没有任何连接状态 |
LAST-ACK | 等待原来的发向远程 TCP 的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击) |
TIME-WAIT | 等待足够的时间以确保远程 TCP 接收到连接中断请求请求的确认 |
UNKNOWN | 状态不知道 |
- 另一个是 Active UNIX domain sockets,称为活跃的 Unix 域套接口。
Proto: 显示连接使用的协议
RefCnt: 表示连接到套接口上的进程数
Types: 显示套接口的类型
State: 显示套接口当前的状态
Path: 表示其进程连接到套接口使用的路径名
(可以通过 man 命令查看详细的内容)
实例
eg1:列出所有端口
$ netstat -a
eg2:显示网卡列表
$ netstat -i
eg3:显示关于路由表的信息
$ netstat -r
eg4:筛选监控中的服务器端口
$ netstat -lunat
4.3 route
router 命令主要用于显示和操作 IP 路由表。
命令格式
route [参数]
参数 | 说明 |
---|---|
-c | 显示更多信息 |
-n | 不解析名字 |
-f | 请求相互所有网关入口的路由表 |
-p | 和 add 命令一起使用路由具有永久性 |
…... | …... |
举例
显示当前路由
$ route -n
说明:
数据传送目的是访问 Internet,则由接口 eth0,将数据包发送到网关 192.168.42.1 Flags:路由标志,标记当前网络节点的状态。
4.4 mtr
mtr 是 Linux 中有一个判断网络连通性的工具。一般 ping 命令可以用来判断丢包率,traceroute 命令可以用来追踪路由,而在 mtr 命令结合了 ping,traceroute,nslookup 的相关特性可以用来判断网络的连通性。
参数 | 说明 |
---|---|
-s | 指定 ping 数据包的大小 |
-a | 用来设置发送数据包的 IP 地址 |
-r | 报告模式显示 |
-v | 显示 mtr 的版本信息 |
-h | 帮助命令 |
-n | 不对 IP 地址做域名解析 |
-4 | IPv4 |
-6 | IPv6 |
安装 mtr 工具:
$ sudo apt-get install mtr
举例
$ mtr -r 192.168.42.4
说明:
第一列:显示 IP 地址和本机域名。
第二列:显示对应 IP 的丢包率。
第三列:snt:10 设置每秒发送数据包的数量,默认值是 10 。
第四列:显示最近一次的返回时延。
第五列:平均值,是发送 ping 包的平均时延。
第六列:最短时延。
第七列:最长时延。
第八列:标准偏差。
4.5 tcpdump
tcpdump(dump the traffic on a network),根据使用者的定义对网络上的数据包进行截获的包分析的工具。 tcpdump 可以将网络中传送的数据报的“头”完全截获下来提供分析。支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来帮助你去掉无用的信息。
命令格式
tcpdump [参数]
参数 | 说明 |
---|---|
-nn | 直接以 IP 和端口号显示 |
-i | 监听网络界面 |
-c | 监听的封包数 |
-w | 将监听的封包数保存下来 |
…... | …... |
举例
用 IP 和端口号抓下 eth0 网卡上的封包。
$ sudo tcpdump -i eth0 -nn
常用网络操作命令演示视频:
5. 总结
通过本节实验的学习,将 OSI 七层模型剩下的应用层、网络层和链路层中涉及到的相关协议以及相应的网络常用命令学习了一下,根据实验可以为后面的学习打下一定的网络基础。