网络基础
1. 基础概念
1.1. IP 地址
[!tip]
- 概念:用于唯一标识网络中的每台计算机
- 指令:
ifconfig
- IP表示:
IPV4:
: 4 个字节,32 位,十进制表示,xx,xx,xx,xx
,xx
表示一个字节0 - 255
IPV6
: 16 个字节,128位,十六进制表示,IPV4的最大问题资源有限,IPV6就是用来扩展资源的- IP的组成: 「网络地址」 + 「主机地址」,例如 192.168.16.96 = 192.168.16.0 + 96
IPV4
分类:
类别 | 范围 |
---|---|
A | 0.0.0.0~127.255.255.255 |
B | 128.0.0.0~191.255.255.255 |
C | 192.0.0.0~223.255.255.255 |
D | 224.0.0.0~239.255.255.255 |
E | 240.0.0.0~255.255.255.255 |
1.2. 子网掩码
[!tip] 作用:就是将某个IP地址划分成「网络地址」和「主机地址」两部分。
address 192.168.1.8
netmask 255.255.255.0
IP地址通过与掩码进行「与」运算可以把IP拆分为:192.168.1.0
与 8
192.168.1.0
: 网络地址(网段地址),就是互联网中的一个「局域网」8
: 主机地址,代表了一个「局域网」下的主机。255.255.255.0
: 最后一字节为0
,「主机地址」取值范围就是0 - 255
,其中192.168.1.0
是「网段地址」和192.168.1.255
是「广播地址」这两个IP不能用于表示计算机,因此,在该掩码下只能存在253
台主机。
1.3. 端口
[!tip] 作用: 用来标记一个进程的,让外部连接能识别到。
PID
号是变动的,每次启动都不一样,只能在用另外一个固定的编号,来标记进程,这样外部进来的连接才能准备找到这个进程。 数量: 最多65535
个。
端口分配:
- 服务器: 端口号手动设定,多个用户连接服务器的一个服务进程,只消耗服务器的一个端口。
- 客户端: 随机生成一个,客户端上的一个客户进程就要消耗一个端口,有两个客户进程就消耗两个端口。
1.4. 域名
[!tip]
- 域名(Domain Name): 是由一串字符组成的,域名指向某一个IP地址。
DNS
: 域名服务器,可以到域名服务器(例如,谷歌 8.8.8.8)上去查询对应域名的真实IP
。
1.5. 网关
[!tip]
- 作用:网关(Gateway)就是一个网络连接到另一个网络的「关口」。
- 两个「红圆主机」想要通讯,就需要从互联网这个「图」中找到一条相互连接的「路径」。对于这个路径,在主机中存下整个互联网的「图」,然后用算法找出一个路径,这个是不可能的。所以换了一个思路:当前主机只记录,下一个跳转的网络连接点在哪儿。
IP
路由表: 存储了本地计算机可以到达的网络目的地址范围和如何到达的路由信息。
上面ping
,查找网关步骤:
39.156.66.14
和route -n
第一行的Genmask:255.255.255.0
进行 「与」运算- 计算结果为
39.156.66.0
与第一行的Destination: 192.168.56.0
进行比较,不一样 - 换
route -n
第二行,重复步骤1和步骤2 - 发现第二行满足要求,这样下一次的跳转点就是
gateway: 192.168.1.1
1.6. socket
[!tip] 定义:服务端
ip:port
与 客户端ip:port
建立的连接;这个连接是独立隔离的。
1.7. MAC
作用:用来确认网络设备位置的位址,MAC
地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC
地址
1. 局域网
特点:
- 所有计算机均连接在一个「交换机」上
- 同一局域网下的所有「网络地址」一样,「子网掩码」一样
- 满足前面两个条件,局域网才能通讯
- 「交换机」会记录同「网络地址」下,所有主机的「MAC地址」
2. ARP
定义:地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP
协议。处于「网络层」
案例:pc2
想连接上pc3
,但是不知道对方的mac
,需要完成mac
查找
pc2
创建一个「数据包」:双方的IP地址和自己的MAC,对方的MAC瞎写一个- 「交换机」对数据包进行「广播」,
pc3
满足要求,接收数据包,其他主机无视 pc3
接收到pc2
的查找后,就把自己的mac
打包发回去。此时,由于之前「交换机」已经将pc2
的mac
地址记录了,所以直接发回,不用广播了。pc2
接收到了pc3
的回信,就能确定pc3
的mac
地址了。
2. 两个局域网
描述:两个局域网可以通过路由器进行连接,「路由器」也可以看作是一个主机,包含了两个「网卡」,每张网卡连接一个「交换机」。
案例:pc2
给pc4
发消息
pc2
应用层:pc2
按照协议规定:把数据写成标准协议格式。pc2
传输层:建立「连接」,把数据按照规定:打包pc2
网络层:查询gateway
,找到下一跳转点的IP
为路由器:192.168.1.3
pc2
链路层:根据跳转点的IP
查找到路由器对应的mac
地址:3.3.3
- 通过第一个交换机,数据就发给了「路由器」
- 「路由器」接收到数据后,又重复上面步骤,找下一跳转点,修改
mac
,通过第二个交换机发送给pc 4
[!note|style:flat] 通讯过程:
IP
:在数据传输中,不会改变,代表着通讯的两个「端点」mac
: 在地址往下一个点跳转的时候,会被修改;代表着通讯中的「节点」路由器与交换机:
- 交换机: 涉及「链路层」与「物理层」;存储「arp表」
- 路由器: 涉及「网络层」,「链路层」与「物理层」;存储「IP路由表」
- 如今实物「路由器」,其实是「交换机功能」和「路由器功能」的结合体。
- 主机: 全部;「arp表」与「IP路由表」都会储存。
互联网:
- 多准备几个交换机局域网,多连接几个路由器,然后把网络连接起来。
3. 单臂路由
- 问题:两个不同「网络地址」的主机(网线),插到了同一个「交换机」上,直接实现
pc2
与pc1
的通讯。这个是行不通的,两个主机的「网络地址」不一样,无法利用「交换机」构成「局域网」。 - 解决方案:在交换机上,再插入一个「路由器」(可以通过另一台
pc
实现)。在路由器pc上分别为两个网络地址设置一个网卡(一个物理网卡,可以配置多个字网段),这样就能间接实现pc1
与pc2
的通讯了。
4. TCP/IP
4.1. TCP/IP 协议模型
定义:双方通讯的约定,两边都能看得懂。
各层作用:
- 应用层:准备协议的具体内容,例如,准备
HTTP
协议的请求头GET / HTTP/1.0 \n
- 传输层:使用
TCP UDP
准备要发送的「数据包」,例如,syn,ack
这些数据包 - 网络互连层:根据路由表,寻找网关
gateway
,得到下一个跳转点的IP - 链路层:通过
arp
查询下一个跳转点的mac
,添加到「数据包」上 - 物理层:在「数据包」前面添加「前导码」,用于「交换机」识别「数据包」
4.2. 网络连接案例
exec 8<> /dev/tcp/www.baidu.com/80
:
8
:文件描述符/dev/tcp/www.baidu.com/80
:网页地址
'GET / HTTP/1.0\n'
: 请求头
GET
:请求HTTP/1.0
:协议版本
[!note]
client
与server
首先建立连接
- 「连接」是不会断开的
- 「超时」是先「连接」成功后,用户不发送请求,服务器自己把连接给断掉。
- 连接成功后,需要传输某种协议
5. TCP
协议
[!note]
- 传输层进行
- 面向「连接」
- 「可靠」的传输连接
1. 连接与三次握手
[!note] 三次握手:只是传输层测试用,和用户层没关系
- C 发送一个
syn
给 S- S 收到后,发送
syn
和ack
给 C- C 收到后,发送一个
ack
给 S- 1 和 2 : C 确认的收发通道的正常
- 2 和 3 : S 确认了收发通道的正常
开辟资源
- 在完成连接后,
S C
会分别开辟资源,等待正式通讯。完成「三次握手」和「资源开辟」后,一个「
TCP
连接」才算正式成立。当前的「连接」是虚拟的,没有实质性的保障,指不定啥时候对方就挂了,所以还需要额外手段保证「连接」的有效性。
2. 可靠
「三次握手」中,就存在syn
与ack
收发确认,这个保证了,通讯的「可靠」。
3. 四次分手
- C 发一个
fin
给 S:通知要断开- S 发
ack
给 C:回应一下,不代表同意断开- 然后 S 开始收尾工作, 可能还有数据没有传输完,C 还是可以接收数据。
- 收尾完毕,S 正式回应一个
fin
:表示可以断开了- C 回复一个
ack
- 最后双方开始
close
回收资源。fin
: 表示后面没有数据需要发送,通常意昧着所建立的连接需要关闭了。
4. 案例测试