网络-基础篇OSI网络模型网络模型

网络的基础知识 网络-基础篇(1)

七层网络模型/四层网络模型/五层网络模型

各层的名称和作用

分层

负责内容

Layer 1 物理层 Physical Layer

由于网络媒体只能传送 0 与 1 这种位串,因此物理层必须定义所使用的媒体设备之电压与讯号等, 同时还必须了解数据讯框转成位串的编码方式,最后连接实体媒体并传送/接收位串。

Layer 2 数据链结层 Data-Link Layer

这一层是比较特殊的一个阶层,因为底下是实体的定义,而上层则是软件封装的定义。因此第二层又分两个子层在进行数据的转换动作。 在偏硬件媒体部分,主要负责的是 MAC (Media Access Control) ,我们称这个数据报裹为 MAC 讯框 (frame), MAC 是网络媒体所能处理的主要数据报裹,这也是最终被物理层编码成位串的数据。MAC 必须要经由通讯协议来取得媒体的使用权, 目前最常使用的则是 IEEE 802.3 的以太网络协议。详细的 MAC 与以太网络请参考下节说明。 至于偏向软件的部分则是由逻辑链接层 (logical link control, LLC) 所控制,主要在多任务处理来自上层的封包数据 (packet) 并转成 MAC 的格式, 负责的工作包括讯息交换、流量控制、失误问题的处理等等。

Layer 3 网络层 Network Layer

这一层是我们最感兴趣的啰,因为我们提及的 IP (Internet Protocol) 就是在这一层定义的。 同时也定义出计算机之间的联机建立、终止与维持等,数据封包的传输路径选择等等,因此这个层级当中最重要的除了 IP 之外,就是封包能否到达目的地的路由 (route) 概念了!

Layer 4 传送层 Transport Layer

这一个分层定义了发送端与接收端的联机技术(如 TCP, UDP 技术), 同时包括该技术的封包格式,数据封包的传送、流程的控制、传输过程的侦测检查与复原重新传送等等, 以确保各个数据封包可以正确无误的到达目的端。

Layer 5 会谈层 Session Layer

在这个层级当中主要定义了两个地址之间的联机信道之连接与挂断,此外,亦可建立应用程序之对谈、 提供其他加强型服务如网络管理、签到签退、对谈之控制等等。如果说传送层是在判断资料封包是否可以正确的到达目标, 那么会谈层则是在确定网络服务建立联机的确认。

Layer 6 表现层 Presentation Layer

我们在应用程序上面所制作出来的数据格式不一定符合网络传输的标准编码格式的! 所以,在这个层级当中,主要的动作就是:将来自本地端应用程序的数据格式转换(或者是重新编码)成为网络的标准格式, 然后再交给底下传送层等的协议来进行处理。所以,在这个层级上面主要定义的是网络服务(或程序)之间的数据格式的转换, 包括数据的加解密也是在这个分层上面处理。

Layer 7 应用层 Application Layer

应用层本身并不属于应用程序所有,而是在定义应用程序如何进入此层的沟通接口,以将数据接收或传送给应用程序,最终展示给用户。

各层对应的协议

网络的基础知识 网络-基础篇(2)

TCP协议发送方/接收方对数据包的处理

网络的基础知识 网络-基础篇(3)

网络的基础知识 网络-基础篇(4)

TCP协议三次握手/四次挥手

网络的基础知识 网络-基础篇(5)

Time_Wait状态

客户端发起关闭连接请求后会进入Time_Wait状态,时长默认是2MSL(一分钟)。

此状态的作用是如果服务端没有收到最后的ACK回应的话,可以重发FIN包给客户端,这样客户端可以重新回应ACK,如果没有这个Time_Wait时间的话,服务端发送的FIN包会被认为是新的连接,这样就造成错误处理了。

由于Time_Wait时长比较长,所以在服务器上通过netstat命令经常可以看到很多的连接处于Time_Wait状态,很多运维同学会认为这是不正常的,觉得是哪里出了问题。

其实不用担心,这是正常现象,只要处于Time_Wait状态的连接不超过最大连接数和最大文件句柄数,就没有问题。

Close_Wait状态

服务端关闭连接时会进入Close_Wait状态,这是因为服务端在收到关闭连接的FIN包后,需要告诉相应的进程,由这个进程来决定什么时候关闭连接(通常要等到把相应的任务处理完了才会关闭),所以这中间是有个时间段的。

如果进程由于某种原因导致迟迟无法关闭连接,那就就会产生大量的Close_Wait状态的连接,出现这种情况说明服务有问题了,需要进行排查。

比如服务端连接了mysql数据库,并且开启了事务,但是在出现异常的时候没有关闭事务,那么就会导致上面说的情况。

TCP粘包、半包问题什么是粘包、半包?

TCP协议属于第四层传输层,那么一个TCP数据包的数据部分通常是UTF-8编码格式的一串字节。

比如,发送端发送的是下面的字符串,编码格式是UTF-8,这是一条完整的信息。

“我是发送端,我要发送给你一串字符串,请接受!”

接收端可能接受到的是部分字符串,剩下的部分字符串被封装在了下个数据包中了,这种情况就叫半包。

与之对应的,如果一个TCP数据包中包含了多条信息,那就叫粘包。

粘包、半包会导致什么问题?

这个问题涉及到编码格式的问题,常用的编码格式有UTF-8、GBK等,同学们可以去搜索编码格式相关的技术文章,这里就不展开了。

因为UTF-8编码涵盖了所有国家的各种不同语言文字,我们以最常用的UTF-8编码举例,一个文字由一个或多个字节组成,那么在一个TCP数据包中,如果数据包的结尾只包含了一个文字的一部分,那会出现什么问题呢?

聪明的你可能已经想到了,接收端如果想把这个数据包打印出来就会出现乱码的情况!

如何解决粘包、半包的问题?IP/子网掩码IP地址介绍

IP 地址(IPv4 地址)由32位正整数来表示。IP 地址在计算机内部以二进制方式被处理。然而,由于我们并不习惯于采用二进制方式,我们将32位的 IP 地址以每8位为一组,分成4组,每组以 “.” 隔开,再将每组数转换成十进制数。如下:

10101100

00010100

00000001

00000001

(2进制)

10101100.

00010100.

00000001.

00000001

(2进制)

172.

20.

1.

1

(10进制)

IP地址分类

IP 地址分为四个级别,分别为A类、B类、C类、D类。它根据 IP 地址中从第 1 位到第 4 位的比特列对其网络标识和主机标识进行区分。

网络的基础知识 网络-基础篇(6)

什么叫B段地址?

我们经常听到网络工程师说我需要划分一个B(C)段地址这种专业术语,这里的B段地址就是指一个B类IP地址段,可以容纳256*256-2=65534个IP地址。

子网掩码

用来自由划分网络标识段和主机标识段。

根据IP地址和对应的子网掩码,可以算出当前局域网内所能容纳的IP数量。

子网掩码用二进制方式表示的话,也是一个 32 位的数字。它对应 IP 地址网络标识部分的位全部为 “1”,对应 IP 地址主机标识的部分则全部为 “0”。

如下所示,IP地址是172.20.100.52,需要主机标识长度为6,那么对应的子网掩码可以表示为255.255.255.192,也可以表示为/26。

IP 地址

172.

20.

100.

52

/ 26

子网掩码

255.

255.

255.

192

/ 26

广播地址

172.

20.

100.

255

/ 26

广播地址

IP地址的主机标识部分全部为"1",就是广播地址。如上所示。

ARP协议

在传输一个 IP 数据报的时候,确定了源 IP 地址和目标 IP 地址后,就会通过主机「路由表」确定 IP 数据包下一跳。然而,网络层的下一层是数据链路层,所以我们还要知道「下一跳」的 MAC 地址。

由于主机的路由表中可以找到下一跳的 IP 地址,所以可以通过 ARP 协议,求得下一跳的 MAC 地址。

那么 ARP 又是如何知道对方 MAC 地址的呢?

简单地说,ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的。

网络的基础知识 网络-基础篇(7)

ARP 广播

  • 主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。
  • 当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。
交换机原理交换机工作原理

交换机工作在二层,可以用来隔离冲突域,在OSI参考模型中,二层的作用是寻址,这边寻址指的是MAC地址,而交换机就是对MAC地址进行转发,在每个交换机中,都有一张MAC地址表,这个表是交换机自动学习的。

网络的基础知识 网络-基础篇(8)

广播风暴

网络的基础知识 网络-基础篇(9)

可以使用路由器或者VLan来隔离广播。

VLan

用来隔离不同的局域网,不同的VLan之间原则上不能互相通讯。

  • VLan划分方法

基于端口的VLAN

基于MAC地址的VLAN

基于协议的VLAN

  • Trunk

Trunk 链路类型是允许多个 VLAN 通过,可以接收和发送多个 VLAN 的数据帧。所以 trunk 链路类型一般用户交换机之间的连接。

网络的基础知识 网络-基础篇(10)

路由器原理

路由器是用来做IP地址寻址的,可以隔离不同的广播域(局域网),本质上是一个或多个路由表。

当数据包到达路由器后,根据相应的路由表,匹配目的IP地址,来找到下一跳地址,然后把数据包发往下一跳地址。

路由表可以通过静态路由配置,也可以通过动态路由协议来自动学习。

静态路由就是手动配置的,动态路由协议包含RIP、EIGRP、OSPF和BGP等。

网络的基础知识 网络-基础篇(11)

路由表参数
  • 通过 route 命令查看 Linux 内核的路由表:

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.139.128.1 0.0.0.0 UG 0 0 0 eth0 10.0.0.10 10.139.128.1 255.255.255.255 UGH 0 0 0 eth0 10.139.128.0 0.0.0.0 255.255.224.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0ab63c131848

  • 各列字段说明

含义

Destination

目标网络或目标主机。Destination 为 default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关(这里是 10.139.128.1)

Gateway

网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关

Genmask

Destination 字段的网络掩码,Destination 是主机时需要设置为 255.255.255.255,是默认路由时会设置为 0.0.0.0

Flags

标记,含义参考表格后面的解释

Metric

路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的 (不在Linux内核中使用。)

Ref

路由项引用次数 (不在Linux内核中使用。)

Use

此路由项被路由软件查找的次数

Iface

网卡名字,例如 eth0

  • Flags 含义:

U 路由是活动的 H 目标是个主机 G 需要经过网关 R 恢复动态路由产生的表项 D 由路由的后台程序动态地安装 M 由路由的后台程序修改 ! 拒绝路由

策略路由

在主机或者路由器中可以配置多个路由表,实际使用中根据不同场景调用不同的路由表,这个就叫策略路由。

,