10. 一文快速学懂常用工具——网络工具(上)
本章讲解知识点
- 引言
- 计算机网络基础知识
- 跨局域网通信原理
- OSI 七层通信原理和 TCP
- DHCP 与 DNS
- ip 地址与子网划分
<br/>
- 本专栏适合于软件开发刚入职的学生或人士,有一定的编程基础,帮助大家快速掌握工作中必会的工具和指令。
- 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。
- 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。
- 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。
<br/>
1. 引言
从本章就开始讲解 curl、tcpdump、wireshark。
1.1 curl
curl(URL客户端)是一个用于通过 URL 传输数据的命令行工具和库。它支持多种协议,包括 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等。curl 用于执行各种与网络相关的任务和数据传输:如从互联网下载文件、向 Web 服务和 API 发送 HTTP 请求并接收响应、自动化数据检索和处理、测试和调试网络服务。
1.2 tcpdump
tcpdump 是一个命令行数据包分析器,用于捕获和检查网络流量。它允许在网络接口上捕获数据包并实时分析或保存以供以后分析。tcpdump 是网络调试和故障排除的强大工具。用途如监视和分析网络流量、调试网络问题和诊断故障、捕获数据包以进行安全性和法医分析、验证网络配置和性能。
1.3 Wireshark:
Wireshark 是一个流行且功能强大的网络协议分析器,具有图形用户界面。它可以实时捕获、显示和分析网络上行进和返回的数据,或者从已保存的捕获文件中进行分析。Wireshark 支持各种网络协议,并提供详细的数据包级分析。
curl、tcpdump、wireshark 在工作中十分常用,常用来定位网络问题,十分有必要学习了解,但在这之前,需要点计算机网络基础知识来铺垫,以下介绍的知识在工作中必备。
<br/>
2. 计算机网络基础知识
2.1 什么是计算机网络,为什么需要它?
计算机网络是指连接在一起的多台计算机之间的通信和数据传输系统。它允许计算机之间交换信息、共享资源和协同工作。计算机网络可以是局域网(Local Area Network,LAN)、广域网(Wide Area Network,WAN)、互联网或其他形式的网络。
为什么需要计算机网络:
- 通信: 计算机网络允许计算机之间相互通信。这包括发送和接收数据、文件、消息等。通信是网络的核心功能,它使人们能够远程协同工作和共享信息。
- 资源共享: 计算机网络使共享资源变得容易。这些资源可以包括文件、打印机、数据库、应用程序等。用户可以访问这些资源,无论它们位于何处,只要它们连接到网络。
- 远程访问: 通过计算机网络,用户可以从远程地点访问其计算机或数据。这使得远程办公、远程维护和远程控制成为可能。
- 数据传输: 计算机网络允许快速和高效地传输大量数据。这在传输文件、媒体内容、电子邮件等方面非常有用。
2.2 计算机网络的结构体系(协议)
按照协议与网络层次划分,一共有三种模型:OSI七层体系结构、TCP/IP四层体系结构、五层协议体系结构。如图:后面章节我们会详细讲解最重要的分层模型——TCP/IP分层模型。
1.应用层:应用层是体系结构中的最高层。其任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义了应用进程间通信和交互的规则。应用层协议如域名系统DNS,支持互联网Web应用的协议HTTP,支持电子邮件的协议SMTP等等。应用层交互的数据单元称为报文(message)。
2.传输层。其任务是为两台主机中进程之间的通信提供通用的数据传输服务。主要有两种协议:TCP(Transmission Control Protocol)提供面向连接的、可靠的数据传输服务,其传输的基本单位是报文段(segment)。而UDP(User Datagram Protocol)提供无连接的、尽最大努力可靠交付的传输服务,其传输的基本单位是用户数据报。
3.网络层:其任务是负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把传输层产生的报文段或用户数据报封装成分组(包)(Packet)进行传送。由于网络层使用IP协议,因此分组也称为IP数据报。网络层的另一个任务就是要选择合适的路由,使源主机传输层所传下来的分组,能够通过网络中的路由器找到目的主机。路由(routing)是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。
4.数据链路层:两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要专门的链路层协议。在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧(framing),在两个相邻结点间的链路上传送帧(frame)。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。用于协作 IP 数据在已有网络介质上传输的协议,典型的是ARP/RARP。
网络接口层包括用于协作 IP 数据在已有网络介质上传输的协议,典型的是ARP/RARP。 网络接口层就相当于OSI模型的物理层+数据链路层,它定义了像 ARP (Address Resolution Protocol ,地址解析协议)这样的协议,提供 TCP/IP 协议的数据结构和实际物理硬件之间的接口 。
在接受数据时,控制信息使接受端能够知道一个帧从哪个比特开始到哪个比特结束。这样,数据链路层在收到一个帧后,从中提取数据,上交给网络层。
5.物理层:物理层传输的数据的单位是比特。传输的是电信号。
我们再通过表格直观看一下:
2.3 数据流向
我们要讲讲层之间如何传输数据的。传输数据的过程如图:
假定主机1的应用进程AP1向主机2的应用进程AP2传送数据。AP1先将数据交给本主机的第5层(应用层)。第5层加上必要的控制信息H5然后就成了下一层的数据单元。第4层(传输层)收到这个数据单元后,加上本层的控制信息H4,再交给第3层(网络层),成为第3层的数据单元。以此类推。不过到了第2层(数据链路层)后,控制信息被分成两部分,分别加到本层数据单元的首部(H2)和尾部(T2);而第1层(物理层)由于是比特流的传输,所以不再加控制信息。比特流从首部开始传送。
而H2、H3、H4、H5、T2都属于控制头,这些控制头是很有必要的,用于封包拆包
当这一串的比特流离开主机1到达路由器时,就从路由器的第1层依次上升到第3层。每一层都根据控制信息进行必要的操作,然后将控制信息除去,将剩下的数据单元上交给上一层。当分组上升到第3层时,就根据首部中的目的地址查找路由器中的转发表,找出转发分组的接口,接下来往下传送到第2层,加上新的首部和尾部后,再到最下面的第1层,将比特流发送出去。
当这串比特流到达目的主机2时,就从第1层按照上面讲的方式,依次上升到第5层。最后,把应用进程AP1发送的数据交给目的主机AP2。
我们再用个动图来展现该过程:
参考文章:https://www.cnblogs.com/linhaifeng/articles/5937962.html
2.4 以太网
早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议 ethernet
ethernet 规定
- 一组电信号构成一个数据包,叫做‘帧’
- 每一数据帧分成:报头 head 和数据 data 两部分
head包含:(固定18个字节)
- 发送者/源地址,6个字节
- 接收者/目标地址,6个字节
- 数据类型,6个字节
data包含:(最短46字节,最长1500字节)
- 数据包的具体内容
head 长度+data 长度=最短 64 字节,最长 1518 字节,超过最大限制就分片发送
2.5 mac 地址
head 中包含的源和目标地址由来:ethernet 规定接入 internet 的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即 mac 地址
mac 地址:每块网卡出厂时都被烧制上一个世界唯一的 mac 地址,长度为 48 位 2 进制,通常由 12 位 16 进制数表示(前六位是厂商编号,后六位是流水线号)
2.6 广播
广播是一种网络通信方式,其中信息(数据包、消息等)被发送到网络中的所有接收者,而不仅仅是特定的目标接收者。这意味着在广播通信中,发送方的信息会被网络中的每个设备接收和处理,不是目标设备就丢弃报文,是目标设备(拥有对应mac地址的设备)就响应报文。广播通常用于局域网(LAN)和广域网(WAN)等各种网络环境中。
简单来说就是计算机通信“靠吼”,所有计算机都会收到报文,只有目标设备才会响应该报文。
当有了广播工作模式 + 以太网协议,我们就可以实现一个局域网的通信,这个局域网的计算机只需要连入一个交换机即可。
交换机上有许多端口,每一个端口可以连接一个计算机,当报文汇聚到交换机后,交换机再通过一个 mac 地址表就可以从相应的端口发出数据包,mac 地址表记录了每个计算机 mac 地址与端口的映射关系。
这个地址表如何来的呢?表一开始是空白的,当数据包广播后,目标设备发出响应报文(报文中包含源地址和目标地址),这样收到响应报文的端口不就与 mac 地址对应起来了吗?这个过程称之为 mac 表学习。
以太网协议 + mac 地址只能在局域网中发挥作用,在公网中无法发挥效果。但是全世界的计算机可能连到一个交换机上吗?当然不可能,那样的交换机得多大?那么我们又如何访问到世界每一个角落的计算机呢?
所以我们需要引入一种方法,帮助我们实现公网计算机的访问,那就是 IP 协议 + 路由器。
2.7 IP 协议 + 路由器
IP(Internet Protocol)是因特网的核心协议之一,它负责在全球范围内管理和路由数据包。IP协议定义了数据包的格式、寻址方案和路由规则,以确保数据在网络中能够正确传输到其目的地。IPv4(Internet Protocol version 4)和IPv6(Internet Protocol version 6)是两个主要的IP协议版本
1.IP协议:
- 规定网络地址的协议叫 ip 协议,它定义的地址称之为 ip 地址,广泛采用的 v4 版本即 ipv4,它规定网络地址由 32 位 2 进制表示
- 范围0.0.0.0-255.255.255.255
- 一个 ip 地址通常写成四段十进制数,例:172.16.10.1
2.ip地址分成两部分
- 网络部分:标识子网
- 主机部分:标识主机
注意:单纯的 ip 地址段只是标识了 ip 地址的种类,从网络部分或主机部分都无法辨识一个 ip 所处的子网
例:172.16.10.1 与 172.16.10.2 并不能确定二者处于同一子网
3.子网掩码
所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于 IP 地址,也是一个 32 位二进制数字,它的网络部分全部为 1,主机部分全部为 0。比如,IP 地址 172.16.10.1,如果已知网络部分是前 24 位,主机部分是后 8 位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个 IP 地址与子网掩码分别进行 AND 运算(两个数位都为 1,运算结果为 1,否则为 0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
比如,已知 IP 地址 172.16.10.1 和 172.16.10.2 的子网掩码都是 255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行 AND 运算,
172.16.10.1:10101100.00010000.00001010.000000001255255.255.255.0:11111111.11111111.11111111.00000000
AND 运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
172.16.10.2:10101100.00010000.00001010.000000010255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
结果都是 172.16.10.0,因此它们在同一个子网络。
总结一下,IP 协议的作用主要有两个,一个是为每一台计算机分配 IP 地址,另一个是确定哪些地址在同一个子网络。
4.ip 数据包
ip 数据包也分为 head 和 data 部分,无须为 ip 包定义单独的栏位,直接放入以太网包的 data 部分
- head:长度为 20 到 60 字节
- data:最长为 65,515 字节。
而以太网数据包的”数据”部分,最长只有 1500 字节。因此,如果 IP 数据包超过了 1500 字节,它就需要分割成几个以太网数据包,分开发送了。
5.网络拓扑图
因此,当我们有了 IP + 路由器后,网络拓扑图就变为,多个局域网通过路由器来连接,局域网内部靠以太网协议 + mac 地址 + 交换机通信,跨局域网就得依赖于 IP 协议 + 路由器通信,如图:
<br/>
3. 跨局域网通信原理
局域网内,要通过 ARP 协议拿到目标计算机的 mac 地址,跨局域网,要通过 ARP 协议拿到网关的 mac 地址。
3.1. ARP
ARP 协议的全称是 Address Resolution Protocol(地址解析协议),它是一个通过用于实现从 IP 地址到 MAC 地址的映射,即询问目标 IP 对应的 MAC 地址 的一种协议。ARP 协议在 IPv4 中极其重要。
ARP协议是地址解析协议(Address Resolution Protocol)是通过解析IP地址得到MAC地址的,是一个在网络协议包中极其重要的网络传输协议,它与网卡有着极其密切的关系,在TCP/IP分层结构中,把ARP划分为网络层,为什么呢,因为在网络层看来,源主机与目标主机是通过IP地址进行识别的,而所有的数据传输又依赖网卡底层硬件,即链路层,那么就需要将这些IP地址转换为链路层可以识别的东西,在所有的链路中都有着自己的一套寻址机制,如在以太网中使用MAC地址进行寻址,以标识不同的主机,那么就需要有一个协议将IP地址转换为MAC地址,由此就出现了ARP协议,所有ARP协议在网络层被应用,它是网络层与链路层连接的重要枢纽,每当有一个数据要发送的时候都需要在通过ARP协议将IP地址转换成MAC地址,在IP层及其以上的层次看来,他们只标识IP地址,从不跟硬件打交道
简而言之,ARP 就是一种解决地址问题的协议,它以 IP 地址为线索,定位下一个应该接收数据分包的主机 MAC 地址。如果目标主机不在同一个链路上,那么会查找下一跳路由器的 MAC 地址。
3.2. ARP缓存表
既然已经解释了ARP协议的用途及重要性,那么它是如何工作的?为了实现IP地址与MAC地址的查询与转换,ARP协议引入了ARP缓存表的概念,每台主机或路由器在维护着一个ARP缓存表(ARP table),这个表包含IP地址到MAC地址的映射关系,表中记录了对,我称之为ARP表项,如我们前面那张图所展示的一样,他们是主机最近运行时获得关于其他主机的IP地址到MAC地址的映射,当需要发送数据的时候,主机就会根据数据报中的目标IP地址信息,然后在ARP缓存表中进行查找对应的MAC地址,最后通过网卡将数据发送出去。ARP缓存表包含一个寿命值(TTL,也称作生存时间),它将记录每个ARP表项的生存时间,生存时间到了就会从缓存表中删除。从一个表项放置到ARP缓存表中开始,一个表项通常的生存时间一般是10分钟吗,当然,这些生存时间是可以任意设置的,我们一般使用默认即可。
一句话总结ARP协议的工作
ARP协议的主要工作就是建立、查询、更新、删除ARP表项。
3.3. 局域网的 ARP 工作原理
我们前面讲过,局域网内通信靠 mac地址,那么如何拿到对方计算机的 mac 地址?就是通过 ARP 协议。
如果我想向局域网中的某个电脑发送一个数据,那么我的电脑就会从已有的ARP缓存表中寻找这个IP地址对应的物理地址的ARP表项,然后直接将数据写入以太网数据帧中让网卡进行发。
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
如题:一文快速学懂常用工具——包含Git、GDB、Makefile、Linux指令等常用工具的快速入门及实操,还包含相关面试题。