网络基础

一、网络通信过程

image-20250324190708235

二、osi 七层模型

image-20250324182904137

image-20250324192904947

1.物理层

当数据准备要从设备发送到网络时,需要把数据包转换成电信号,让其可以在物理介质中传输,这一层就是物理层(Physical Layer),它主要是为数据链路层提供二进制传输的服务。

2.数据链接层

实际场景中,网络并不是一个整体,比如你家和我家就不属于一个网络,所以数据不仅可以在同一个网络中设备间进行传输,也可以跨网络进行传输。一旦数据需要跨网络传输,就需要有一个设备同时在两个网络当中,这个设备一般是路由器,路由器可以通过路由表计算出下一个要去的 IP 地址。那问题来了,路由器怎么知道这个 IP 地址是哪个设备的呢?于是,就需要有一个专门的层来标识网络中的设备,让数据在一个链路中传输,这就是数据链路层(Data Link Layer),它主要为网络层提供链路级别传输的服务

每一台设备的网卡都会有一个 MAC 地址,它就是用来唯一标识设备的。路由器计算出了下一个目的地 IP 地址,再通过 ARP 协议找到该目的地的 MAC 地址,这样就知道这个 IP 地址是哪个设备的了。

3.网络层

网络层最常使用的是 IP 协议(Internet Protocol),IP 协议会将传输层的报文作为数据部分,再加上 IP 包头组装成 IP 报文,如果 IP 报文大小超过 MTU(以太网中一般为 1500 字节)就会再次进行分片,得到一个即将发送到网络的 IP 报文。

image-20250324205523014

4.传输层

在传输层会有两个传输协议,分别是 TCP 和 UDP。TCP 的全称叫传输层控制协议(Transmission Control Protocol),大部分应用使用
的正是 TCP 传输层协议,比如 HTTP 应用层协议。TCP 相比 UDP 多了很多特性,比如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对方。

1
2
3
4
5
6
7
8
TCP协议在发送数据包的时候,会发送多种类型的数据包,每种数据包都有特殊的意义,每个中数据包都会在数据包里面添加上特定的标
识数据来表示数据包的意义,比如:
SYN 建立链接
ACK 回应标识
FIN 断开链接
PSH 数据包
RST 重复(重传) 网络不稳定时会看到许多重发包
URG 紧急指针

UDP 就相对很简单,简单到只负责发送数据包,不保证数据包是否能抵达对方,但它实时性相对更好,传输效率也高。当然,UDP 也可以实现可靠传输,把 TCP 的特性在应用层上实现就可以,不过要实现一个商用的可靠 UDP 传输协议,也不是一件简单的事情。

应用需要传输的数据可能会非常大,如果直接传输就不好控制,因此当传输层的数据包大小超过 MSS(TCP 最大报文段长度) ,就要将数据包分块,这样即使中途有一个分块丢失或损坏了,只需要重新这一个分块,而不用重新发送整个数据包。在 TCP协议中,我们把每个分块称为一个 TCP 段(TCP Segment)。

image-20250324205650387

当设备作为接收方时,传输层则要负责把数据包传给应用,但是一台设备上可能会有很多应用在接收或者传输数据,因此需要用一个编号将应用区分开来,这个编号就是端口。

比如 80 端口通常是 Web 服务器用的,22 端口通常是远程登录服务器用的。而对于浏览器(客户端)中的每个标签栏都是一个独立的进程,操作系统会为这些进程分配临时的端口号。

由于传输层的报文中会携带端口号,因此接收方可以识别出该报文是发送给哪个应用。

1
2
3
查看运行指令程序的端口
netstat -ano
netstat -lntup

5.应用层

最上层的,也是我们能直接接触到的就是应用层( Application Layer ),我们电脑或手机使用的应用软件都是在应用层实现。那么,当两个不同设备的应用需要通信的时候,应用就把应用数据传给下一层,也就是传输层。

所以,应用层只需要专注于为用户提供应用功能,不用去关心数据是如何传输的,就类似于,我们寄快递的时候,只需要把包裹交给快递员,由他负责运输快递,我们不需要关心快速是如何被运输的。

而且应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态。

三、IP地址

(一)IP的基本认识

IP的定义

在 TCP/IP 网络通信时,为了保证能正常通信,每个设备都需要配置正确的 IP 地址,否则无法实现正常的通信。

IP 地址(IPv4 地址)由 32 位正整数来表示,IP 地址在计算机是以二进制的方式处理的。

而人类为了方便记忆采用了点分十进制的标记方式,也就是将 32 位 IP 地址以每 8位为组,共分为 4 组,每组以「 . 」隔开,再将每组转换成十进制。

image-20250325175829729

IP的作用

IP 在 TCP/IP 参考模型中处于第三层,也就是网络层网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通
信。

image-20250325175349127

IP与MAC关系

IP(网络层) 和 MAC (数据链路层)之间的区别和关系在上面我们知道 IP 的作用是主机之间通信的,而 MAC 的作用则是实现「直连」的两个设备之间通信,而 IP 则负责在「没有直连」的两个网络之间进行通信传输。

IP用于区分不同的广播域。如果用MAC地址进行发送信息,那么会产生广播风暴

image-20250325180537081

(二)IP地址的基础知识

IP地址分类

互联网诞生之初,IP地址显得十分充裕,于是科学家将IP地址划分为A、B、C、D、E五类

image-20250325180919763

1
A、B、C 类主要分为两个部分,分别是网络号和主机号。这很好理解,好比小林是 A 小区 1 栋 101 号,你是 B 小区 1 栋 101 号。

image-20250325181217335

image-20250325181335468

image-20250325181355931

公有IP地址和私有IP地址

IP地址分为内网IP地址和公网IP地址,内网IP地址又叫做私网IP地址,或者保留IP地址。只有公网IP地址可以上网,这时候就需要NAT技术将内网IP地址转换为公网IP地址,有了公网IP,数据包才能发送到网上去,实现互联网通信

image-20250325182228633

1
2
3
4
5
平时我们办公室、家里、学校用的 IP 地址,一般都是私有 IP 地址。因为这些地址允许组织内部的 IT 人员自己管理、自己分配,而且可以重复。因此,你学校的某个私有 IP 地址和我学校的可以是一样的。

就像每个小区都有自己的楼编号和门牌号,你小区家可以叫 1 栋 101 号,我小区家也可以叫 1 栋 101,没有任何问题。但一旦出了小区,就需要带上中山路 666 号(公网 IP 地址),是国家统一分配的,不能两个小区都叫中山路 666。

所以,公有 IP 地址是有个组织统一分配的,假设你要开一个博客网站,那么你就需要去申请购买一个公有 IP,这样全世界的人才能访问。并且公有 IP 地址基本上要在整个互联网范围内保持唯一。

(三)IP协议相关技术

DNS解析流程

1.DNS的定义和由来

我们在上网的时候,通常使用的方式域名,而不是 IP 地址,因为域名方便人类记忆。那么实现这一技术的就是 DNS 域名解析,DNS 可以将域名网址自动转换为具体的 IP地址。

1
2
3
DNS:全称domain name system 域名系统
作用:将域名解析成ip地址
计算机和计算机之间通信是通过ip:端口来实现的。比如:192.168.19.36:51000<--->192.168.19.40:80服务端的某些服务程序的端口一般是固定的,客户端根据ip和端口进行连接通信,客户端的ip是固定的,但是端口一般是系统随机分配的。

2.DNS域名解析

1
2
3
4
5
6
根域.是在最顶层,它的下一层就是 com 顶级域,再下面是 server.com

所以域名的层级关系类似一个树状结构:
根 DNS 服务器( . )
顶级域 DNS 服务器(com)
权威 DNS 服务器(server.com)

image-20250325194423922

顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1、找本机的hosts文件Windowshost文件路径:c:\wINDows\system32\drivers\etc\hosts,hosts文件以静态映射的方式提供IP地
址与主机名的对照表。
2、浏览器缓存:浏览器会按照一定的频率缓存DNs记录。浏览器地址栏输入chrome://net-internals/#dns,就可以查看chormeDNS缓存。
3、操作系统缓存:如果浏览器缓存中找不到需要的DNs记录,那就去操作系统中找。cmd命令ipconfig /displaydrs 用于查看操作系统dns缓
存。ipconfig /flushdns刷新缓存,之前的记录就没了,只剩下一些固定的了。
4、路由缓存:路由器也有DNS缓存。
5、去DNS本地服务器查找,自己公司搭建的或者阿里DNS服务器、百度DNS服务器等等
6、去根域名服务器上找,全世界有13台根域名服务器,其实我们的网址,比如www.hc39.com后面都有个点.,这个.代表根域名的意思,我们可以
ns1ookup www.hc39.com. 发现还是可以查询到的,只不过这个.默认省略掉了。
7、根域名查不到的话,会直接下发本次请求给本地DNS服务器,并且把.com的顶级域名服务器地址发送给它,DNS服务器再向.com顶级域名服务器
来进行查询。.com\.cn\.cloud等都是顶级域名服务器。
8、如果.com找不到的话,.com顶级域名服务器会给本地DNs服务器下发请求,并且给它hc39.com域名服务器的地址,意思就是说hc39这个域名
下放给hc39这个域名所属公司的DNs服务器了,那么就去hc39.com域名服务器进行查询
9、查找到之后再还给你的电脑,你的电脑本地和路由器等都会自动缓存这些记录,下次再访问这个网站的时候,就从缓存中找,不然每次都按照流
程找一遍就太慢了。

image-20250325194816531

1
2
3
4
5
Linux上的DNS相关指令:
dig dig@DNS服务器 要查询的域名地址
nslookup nslook 域名地址
host hots 域名地址
ping ping 域名地址

3.域名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
一是国家和地区顶级域名(country code top-level domains,简称ccTLDs),目前200多个国家都按照ISO3166国家代码分配了项级域
名,例如中国是cn,日本是jp等;

二是国际顶级域名(generic top-level domains,简称gTLDs),例如表示工商企业的.com域名,表示网络提供商的.net域名,表示非盈
利组织的.org域名等;

三是新顶级域名(New Generic Top-level Domain,简称New gTLD)如通用的.xyz域名、代表“高端”的.top域名、代表“红色”的.red域
名、代表”人”的.men域名等一千多种。

从技术角度来看,一个完整的域名由顶级域名和下级域名构成,各部分之间用”.”隔开,最后一个“.”的右边被称为顶级域名(TLD,也称为一级域
名),“.”左边的部分被称为二级域名,二级域名的左边是三级域名,以此类推。
为了使于理解和交流,我们通常会把域名分为前缀+后缀,后缀一般就是我们常见的.com/.cn/.cc/.net等等,这些都属于顶级域名,前缀则是由
数字、字母自由组成的,用以和其他域名相区分的部分,这部分也是域名的核心价值所在。举个例子,中科三方的官网为http://www.sfn.cn,这其中.cn为顶级域名,也就是人们常说的后级部分,.sfn则是其前缀的二级域名部分,代表的是中科三方这个品牌,最前面的.www则是前缀的三级域名部分,代表的是中科三方的官网。

二级域名的拥有者可以任意定义三级及三级以上的域名,比如小米公司花费两千万买下的http://mi.com这个二级域名后,他就可以根据其产品和
业务再这个二级域名基础上无限定义三级域名或更高级的域名,比如,小米云服务:http://i.mi.com,小爱开放平台:
http://xiaoai.mi.com,小米iot开发者平台:http://iot.mi.com,小米金融:http://jr.mi.com等等:一般情况下,除了政府相关网
站外,很少有企业定义三级以上的域名。

ARP协议

ARP(Address Resolution Protocol),工作在网络层和数据链路层中间。osi七层模型中,属于数据链路基层的。
作用:把ip地址解析成mac地址

image-20250325205016629

1
2
3
4
5
6
7
8
9
10
11
12
13
ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的。

主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机IP 地址。
当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个设备就将自己的MAC 地址塞入 ARP 响应包返回给主机。
ARP缓存表记录收到的MAC地址。但是缓存表具有时效性
arp -a # 可以查看arp缓存

ARP 协议是已知 IP 地址求 MAC 地址,而RARP协议正好相反。它是已知 MAC 地址求 IP 地址。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到。

通常这需要架设一台 RARP 服务器,在这个服务器上注册设备的 MAC 地址及其IP地址。
然后再将这个设备接入到网络,接着:该设备会发送一条「我的 MAC 地址是XXXX,请告诉我,我的IP地址应该是什么」的请求信息。
RARP 服务器接到这个消息后返回「MAC地址为 XXXX 的设备,IP地址为 XXXX」的信息给这个设备。
最后,设备就根据从 RARP 服务器所收到的应答信息设置自己的 IP 地址。

四、文字编码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#我们要将生活中现实的情况转换到计算机的世界,叫做建模,比如我们常用的文字,要进入到计算机中使用,下面这些编码就是用来表示文字的。

ASCII码#每个数字和字母都占1个字节,不支持中文,00000000000000--11111111总共可以涵盖256种符号,包含大小写英文、特殊符号等

GB2312#每个数字和字母都占1个字节,中文占2个字节,但是可以涵盖的应为只有6700多个

GBK#升级版的GB2312,涵盖的中文2W多个和1800多个特殊符号,中文基本全部涵盖了

其他国家也有自己的文字,每个国家都需要自己的编码,并且这些国家都需要互联网通信,这怎么搞,那么就有一个组织将全世界的文字编码全部收
集起来了,然后重新编码,这个编码叫做万国码,Unicode。两个字节表示不了全世界的那么多国家的语言了,所以变成了4个字节来容纳这些文字
编码。
在这种情况下,英文的编码占用一个字节,现在硬盘空间莫名其妙的大了4倍,这就不太合理。
于是基于万国码推出了可变长编码,utf-8:一个英文一个字节,一个汉字三个字节。现在全世界用的最多的编码形式。
运行到内存中的程序数据编码都是万国码,所以什么语言的数据都不会乱码,但是我们如果非要自己指定gbk等编码,那么就可能要出现乱码了,

五、tcpdump抓包

tcpdump是linux上的一个轻量级的抓包工具。支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮
助你去掉无用的信息。tcpdump只能抓取流经本机的数据包,一般有三个类型,比如指定地址,指定协议,或者指定网卡。

先配置好nginx

1
2
3
4
5
6
7
8
yum install epel-release -y
yum install nginx -y

systemctl stop firewalld
systemctl disable firewalld

启动nginx:
/usr/sbin/nginx
1
2
3
4
5
tcpdump -i ens33 port 80  # 指定抓取ens33网卡的80端口
tcpdump -i ens33 port 80 -nn # 使得用户名显示为IP地址
tcpdump -i ens33 port 80 -nn -w nikta.pcap # 将抓包数据保存到nikta.pcap中
tcpdump -i ens33 port 80 -nn -c 20 -w nikta.pcap # 指定抓取20个数据包
tcpdump -i ens33 port 80 -nn -S -w nikta.pcap # 不把随机序列和确认序列解析为绝对值

六、网络工具

1、nmap

这个工具主要是做信息收集用的,后面安工作中都用的比较多,也叫做主机安全扫描器,探测主机存活、端口开放情况所用的工具

1
2
3
4
5
# centos7上安装nmap
yum install nmap -y

nmap -sn ip地址 # 查询哪些IP地址是存活的,也就是哪些主机在线并使用了哪些IP地址
nmap -sS ip地址 # 探测主机哪些端口开放

2.traceroute和tracert

这两个工具是进行路由追踪的,router是路由的意思,路由追踪的意思就是查看一下我们想访问某个网站到底会经历哪些设备地址的跳转。

1
2
3
4
5
6
7
8
tracert用于Windows查询
tracert -d nmap.org # 追踪namp.org(namp是国外的网站)
-4 #显示为IP v4格式

traceroute是linux上的工具
yum provides traceroute
yum install traceroute -y
traceroute -n nmap.org

七、修改网络配置

VMware虚拟机的三种网络模式

1
2
3
4
5
6
桥接模式(bridged):也就是将虚拟机的虚拟网络适配器与主机的物理网络适配器进行交接,虚拟机中的虚拟网络适配器可通过主机中的物理网络适配器直接访问到外部网络。简而言之,这就好像在局域网中添加了一台新的、独立的计算机一样。因此,虚拟机也会占用局域网中的一个IP地址,并且可以和其他终端进行相互访问,桥接模式网络连接支持有线和无线主机网络适配器,如果你想把虚拟机当做一台完全独立的计算机看待,并且允许它和其他终端一样的进行网络通信,那么桥接模式通常是虚拟机访问网络的最简单途径。

NAT模式:是Network Address Translation的缩写,意即网络地址转换:NAT模式也是VMware 创建虚拟机的默认网络连接模式。使用NAT模式网络连接时,VMware会在主机上建立单独的专用网络,用以在主机和虚拟机之间相互通信。虚拟机向外部网络发送的请求数据”包裹”,都会交由NAT网络适配器加上“特殊标记”并以主机的名义转发出去,外部网络返回的响应数据“包裹”,也是先由主机接收,然后交由NAT网络适配器根据“特殊标记”进行识别并转发给对应的虚拟机,因此,虚拟机在外部网络中不必具有自已的IP地址。从外部网络来看,虚拟机和主机在其享一个IP地址,默认情况下,外部网络终端也无法访问到虚拟机。

仅主机模式(host-on1y):是一种比NAT模式更加封闭的的网络连接模式,它将创建完全包含在主机中的专用网络。仅主机模式的虚拟网络适配器仅对主机可见,并在虚拟机和主机系统之间提供网络连接。相对于NAT模式而言,仅主机模式不具备NAT功能,因此在默认情况下,使用仅主机模式网络连接的虚拟机无法连接到Internet(在主机上安装合适的路由或代理软件,或者在Windows系统的主机上使用Internet连接其享功能,仍然可以让虚拟机连接到Internet或其他网络)。在同一台主机上可以创建多个仅主机模式的拟网络,如果多个拟机处于同一个仅主机模式网络中,那么它们之间是可以相互通信的:如果它们处于不同的仅主机模式网络,则默认情况下无法进行相互通信(可通过在它们之间设置
路由器来实现相互通信)。

image-20250326205621915

八、静态路由

1
2
3
4
5
6
7
8
hostnamectl set-hostname xxx  # 设置主机名

# 修改IP地址
cd /etc/sysconfig/network-scripts/
vim ifcfg-ens33

# 重启网卡
systemctl restart network

image-20250327193157262

1
2
route -n  # 查看路由跳转情况
route add -net 172.16.1.0/24 gw 192.168.61.161 # 只要给172.16.1.0发送数据包,就先将数据包发送给192.168.61.161,然后192.168.61.161再发送给172.16.1.0。 gw是设置网关的意思
1
2
3
4
打开转发功能
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
cat /etc/sysctl.conf
sysctl -p # 让配置生效

九、使用iptables实现nat上网

(一)、主机上网

1
2
3
4
5
route add -net 0.0.0.0/0 gw 实体网关地址  # 添加路由规则

# 修改配置文件
vim /etc/resolv.conf
nameserver ip地址

(二)、配置nat让其他主机上网

配置iptables的NAT规则

1
2
3
4
5
6
7
iptables -t nat -F  # 清空之前的规则
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 # 配置nat路由器(仅限172.16.1.0/24这个网段的IP地址上网)

-t nat 指定nat表
-A POSTROUTING链数据包离开的时候,做修改
-s 源ip或者源ip段
-j MASQUERADE指定动作为,模拟路由器的外网ip

image-20250327204819975

十、Linux的DHCP服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1.安装dhcp
yum install dhcp -y
# 2.修改dhcp服务端的配置文件
vim/etc/dhcp/dhcpd.conf
subnet 172.16.1.0 netmask 255.255.255.0{
range 172.16.1.100 172.16.1.250;
option domain-name-servers 119.29.29.29;
option routers 172.16.1.12;
default-lease-time 600;
max-lease-time 7200;
}

# subnet表示子网范围
# range表示分配的ip地址范围
# option domain-name-servers表示指定dns服务器
# option routers表示网关
# default-lease-time表示dhcp的默认租期
# max-lease-time表示最大租期

# 3.启动dhcp服务端
systemctl start dhcpd.service
systemctl enable dhcpd.service # 设置开机自启动

十一、防火墙

1
2
3
4
5
6
7
8
#开启防火墙
systemctl start firewalld

#关闭防火墙
systemctl stop firewalld

#查看防火墙的状态
systemctl status firewalld

image-20250327211430216