引言

我们在学习计算机网络的时候,都会接触到网络的分层模型,那么,这个分层模型是怎么来的呢?
本次博客,张大帅比将写出自己对于这个网络分层模型的详细理解

分层模型的理解

a.为什么需要分层,分层的作用

假设你现在在创业,因为公司规模比较小,那么公司初期的员工就比较少,那么你将会身兼数职位,可能董事长,总经理,财务都是你一个人来做,用来应付原本就规模不大的业务。
随着公司的发展,业务的规模越来越大,一个人的力量终究是有限的,公司招人也不可能招到每个人都是全面型的人才,因此,就要考虑给公司分层次了,每一个层次解决部分问题。

分了层以后,每个层次只需要关注他们要解决的问题的部分,然后上层将解决了的提供给下层,下层为上层提供服务,再继续解决他们所需要解决的问题,这样就有了多个好处:

  1. 因为每一层只需关注自己这层需要解决的问题,那么术业有专攻,解决起来就会更专业
  2. 层与层之间不需要关注下层是怎么完成的,层与层之间独立,下层为上层提供服务,问题得到了简化

所以,分层模型的本质是:

  • 将一个复杂规模大的问题分解成相互独立的几个小问题,然后根据问题进行分层,每一层解决部分小问题
  • 下层为上层提供服务,上层下层之间有接口
  • 同一层次的实体称为对等实体,两个对等实体要干的事都是这层需要解决的问题
  • 最下层一定落实到可以实现的技术上

b.分层的实例

经过上面举得例子,相信大家已经对为什么要分层有了一个答案,那么如何来进行分层呢?如何理解分层模型呢?

下面我将举一个快递模型的栗子来理解分层

假设A要给B发一个快递,那么A有什么样的选择呢?
1.A自己将货物包装好,然后自己规划线路,自己联系B,给B送货物。
2.将A视作发送货物的上层,在下层使用快递服务层次来对A进行服务。

可以看出,第一个就是上述说的亲历亲为,A同时是发送方,也是快递方也是物流方
第二个就进行了一定的分层,在发送方A和接收方B这个层次上只需要解决货物的准备和签收就行,对于
A和B来说,他们两大大简化了流程

那么第二个的具体分层是什么呢?

层次

对等实体1

对等实体2

第一层

A包装好货物,叫快递

B收取快递

第二层

快递上门取件

快递送货上门

第三层

物流配送

物流接收,物流点的中转

第四层

货物运输层(飞机,火车等)

同右边,是个傻瓜层,只干运输这一件事

从上面的表格可以看出,

  1. 同一层两个对等实体加总在一起就是这个层要解决的问题,同时,这些问题也是上层遗留下来未解决的问题,下层为上层提供了这种解决未解决问题的服务(本质就是上层给下层不断的提需求,最后落实到已经有的技术上面来)
  2. 整个模型呈现出U字型,最下一层只干一件事情(把U扳直,就是A->C,C->B的一个过程)
  3. 我们在设计分层模型时,通常先确定第一层(大规模问题(即需求层))和最后一层(实现的技术手段(技术层))再推导中间层层次

总的来说,就相当于上层给下层提需求,下层解决部分,没有解决的,下层又给自己的下层提需求,直到最后一层就是已有的技术手段为止。

c.OSI参考模型

层次

功能

协议

应用层

为应用软件提供接口,使得应用程序能够使用网络服务

http(浏览器等协议)

表示层

1数据的解码和编码。2数据的加密和解密。3数据的压缩和解压缩。

会话层

建立、维护、管理应用程序之间的会话

传输层

负责建立端到端的连接,保证报文在端到端之间的传输(PC端到PC端)

网络层

负责将分组数据从源端传输到目的端,进行路由选择(寻址)和分组转发

ip(用于不同网段上的寻址,相当于一个村的地址)

数据链路层

点到点的运输

mac( 相当于一个人的身份证,用于在局域网中标识身份)

物理层

传输数据的介质,光波电波等

网络层
路由器的功能:(相当于市)

  1. 广播、组播控制
  2. 对数据寻址,选择到达目的网络的最佳路径
  3. 流量管理
  4. 连接广域网(WAN)

数据链路层
交换机的功能:(相当于村)
一个端口有一个冲突域
一个村有一个广播域(广播域的单位)
因为一个局域网里面存在共享介质,就会产生冲突,有冲突域(同一时刻,只能有一个设备在通信)

TCP/IP协议簇

TCP/IP是美国国防部DoD所创建的,是有一组不同功能的协议组合在一起构成的协议簇
利用一组协议完成OSI所实现的功能

层次

对应OSI层次

协议

应用层

应用层,表示层,会话层

Telnet,FTp,TFTP,SNMP,HTTP,SMTP,NFS,DHCP

主机到主机层

传输层

TCP,UDP

因特网层

网络层

ICMP,ARP,RARP,IP

网络接入层

数据链路层,物理层

Ethernet,Fast Eth,TokenRIng,FDDI

  1. TCP/UDP
    TCP是面向连接的,可靠的传输,(电话,必须接通才能传送数据),常用于保持浏览器与服务器的连接(因为一次连接还要不停的访问服务器),有三次握手和滑动窗口机制
    UDP是无连接,不可靠的传输,尽力传输(对讲机),常用于视频的组播技术(因为视频是发给多个人点播的,因此IP地址不唯一,而采用TCP,是用点到点的,所以不适合进行视频的组播技术)

注:若不是两个设备点到点的连接,那么一定不是TCP连接

  • DHCP是应用层的程序,
    ip地址的获取两种方式
    a.静态设置ip地址
    b.在内网架设一台服务器,由该服务器代替管理员来给内网中的pc分配ip地址
  • 如果学校或者公司在内网中架设一台自己的域名服务器,就可以让这个域名服务器将人们熟知的域名转换成别的IP地址,比如,在公司为了防止有人在网站上看优酷,就可以把优酷的域名解析成公司的网站的ip地址,从而达到禁止员工看优酷的目的
  • 端口号的概念
    ip地址是一个村
    而端口号就是这个村民的门牌号
    mac地址是村民的身份证
    因此我们会用 ip:port来确定要发送的数据包裹的地址,mac来确定发送的人
    ip+mac确定pc端,port确定pc端上的应用程序
    端口号是用来区分不同的应用程序的,比如80端口就是访问web程序
  • ARP协议(因为mac地址作用域在内网)
    ARP协议将IPV4地址解析为MAC地址
    有一张ARP表,其中将内网的ip地址对应了mac地址,保存了内网ip与mac地址的映射关系
    为什么不用mac地址来寻址呢?因为mac地址是固定好了的,所以如果按照mac地址来构造网络的话,设备就不能进行移动了,因为mac地址无法再更改,而ip地址可以更改,要组建局域网的时候,只要有一个ip地址和ARP表记录mac和ip的映射就能找到该设备
    如何查看arp表?

    初始的时候,ARP表中是没有数据的,那么如何构造这个ARP表呢?
    因为我们的局域网在配置pc网卡的时候已经将网关的ip已经配置给了pc端,初始话的时候,pc端会发送一个arp请求报文(用广播的形式),填上发送人的ip,mac,和获得对方的mac,ip
  • 因特网层的工具
    ping,看网络是否通畅
    Tracert www.baidu.com,追踪,看到目标ip有几跳

ipv4详解

假设有一个被封锁的村子,只有村子里的人之间才可以密切交流,而一旦出村,必须要知道村里的邮局在哪里,通过在邮局告诉地址,由邮局给你发邮件进行交流
那么关于ip地址就有以下几个可以类比理解的概念

概念

类比

ip地址=所在网段+主机号(其中网段和主机号的位数,由子码掩网来确定)

一个村民地址=所在村名+村民名称

子网掩码

类比收件码,你是住在XXX村的XXX吗?是的话就能抓包

广播地址

村里的大喇叭所在地址,村民去这个地址就能让全村人听到,回不回复看别的村民

网关(内外网的交界处)

类比国家的海关

在组建局域网的时候,首先,大家要选举出一个地址为邮局(并代理村长)所在,这个地址存在交换机(只能构造局域网)或者路由器(既能内网也能外网)
那么在建村的时候,就需要将邮局地址告诉村里的每一个人,这样,当每个人去跟外面的人通信的时候就去找邮局(路由器)
而很多服务的地址很难记住,就产生了域名,域名通过解析就能得到ip地址,但这需要访问域名解析的服务器,所以在配置上网时,还需要知道域名解析服务器dns的ip地址

综上,在设置一台电脑联网时,需要配置路由器ip地址和dns域名解析服务器的ip地址给pc端

注:1. 如何查找ip地址

win+R输入cmd,然后输入ipconfig

ios7层每层对应的协议 七层协议对应的设备_子网


ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_02

  1. ping
    ping一个网站就能得到他的回复
    若没有回复,则:a.查无此机器或者没开机 。b.开了防火墙
  2. List item如何手动解析某个网站的ip地址

ios7层每层对应的协议 七层协议对应的设备_子网掩码_03


3. dir文件操作,table可以自动补齐文件名

ios7层每层对应的协议 七层协议对应的设备_ip地址_04


dir 查找目录下的所有文件

cd 打开文件

按住table键可以切换,若输入了字母,可以自动补齐文件名

4. pc端发送数据包的过程

pc端向外发包时首先判断自己和目标是不是在同一个网段,若在直接发包,否则的话去找路由器,所以如果没连上网的话就相当于不知道海关在哪里,没办法跟外面的人交流

各层网络的设备与协议

链路层 物理层的组建和设备以及协议

组建以太网(就是局域网,链路层网络)

设备:集线器,交换机
集线器特点:逻辑上是一种总线结构,总线内的所有设备处在一个冲突域中(集线器是物理层设备)
交换机特点:内部有一张帧交换表,通过自学习算法自动逐渐建立起来的,在收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,通过该接口进行转发。(交换机器是链路层设备,也可用于物理车层)

接下来本帅将使用仿真实验工具packet tracer来展示一下集线器与交换机的区别

ios7层每层对应的协议 七层协议对应的设备_子网_05


可以看到,上图的集线器只维护了一个端口状态表

ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_06


而下方的交换机不仅维护了一个端口状态表,还维护了一个MAC地址表,记录端口与MAC地址的映射关系,并通过该映射对帧进行转发

ios7层每层对应的协议 七层协议对应的设备_子网_07


ios7层每层对应的协议 七层协议对应的设备_子网掩码_08


可以看到,原本交换机的端口表中是没有mac地址与交换机端口的映射的,在进行帧的发送以后,交换机会记录端口和mac地址的映射,这也体现了交换机的自学习功能,值得注意的是端口表中的表项只会存在300s,300s后会清空,因为mac地址并不是一成不变的,因此要进行刷新更新(ARP表也是如此)

下面演示一下交换机如何发送广播

ios7层每层对应的协议 七层协议对应的设备_网络_09

上面既然说了交换机是自学的,那么是如何自学建立端口表的呢?

当交换机中的端口表中没有找到mac对应的端口记录项时,交换机就会泛洪(发送广播给全员)

ios7层每层对应的协议 七层协议对应的设备_子网_10


ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_11

  • 交换机的生成树协议

ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_12


交换机的生成树协议,当交换机构成的以太网中存在环路时,生成树协议会生效,自动阻塞掉交换机的某一端口,使得避免成环(生成树数据结构)

ios7层每层对应的协议 七层协议对应的设备_网络_13


ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_14


此时我们用左边主机去ping右边主机的时候,可以发现可以ping通如上图所示的拓扑结构中,绿色小点代表可以通信的端口,橙色小点代表被阻塞的端口,当我们模拟网络链路故障时(关闭箭头处的端口,使得该条链路不通),可以发现如下图:

ios7层每层对应的协议 七层协议对应的设备_ip地址_15


ios7层每层对应的协议 七层协议对应的设备_ip地址_16


此时我们可以看到,当链路发生故障时,stp协议检测到链路中未存在环路,此时为了保障可以通信,原本被阻塞的端口被重新开启。

组建ip网络(网络层网络)

所需设备路由器(网络层设备)
通过ip地址+子网掩码将网络进行不同网段的划分,不同的网段之间需要通过路由器将其连接。

ipv4地址分类

A类,子网掩码255.0.0.0
B类,子网掩码255.255.0.0
C类,子网掩码255.255.255.0

ipv4划分子网

有时,我们需要对网络进行划分,划分子网。

子网的划分普通方法,以及快速划分方法。

a.普通划分方法

判断是哪个大类网络

A类,子网掩码255.0.0.0

B类,子网掩码255.255.0.0

C类,子网掩码255.255.255.0

在此基础上,多一位子网掩码,意味着网络位向主机位进行了借位,多出的位数i可以构成2的i次方个子网

其余主机位去掉1个最高地址和最低地址,其余为主机可用地址

b.快速划分方法

如:

ip:172.16.0.0 子网掩码:255.255.192.0

子网号的增量:256-192=64

ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_17


如图所示,左右两边属于不同的子网,因为256-192=64,子网增量为64,所以,左边的广播地址为

192.168.0.63

为了使得两个不同的子网之间可以通信,我们要使用不同网段之间通信的设备,也就是网络层的设备

路由器,而为了使得两个不同网段之间可以进行通信,我们必须给每个网段设置网关,通过网关与别的网络进行通信

我们将路由器连接网段的端口设为与网段相同的网段ip,主机号一般为最大主机号,这样,就可以实现通信了

ios7层每层对应的协议 七层协议对应的设备_ip地址_18


如上图,我们打开端口,因为192.168.0.127是一个广播地址,所以我们把网关设为192.168.0.126

设置好网关以后,我们需要将网关地址告诉pc端,让他要出门访问别的pc时,找网关

ios7层每层对应的协议 七层协议对应的设备_子网_19

至此,两个子网已经通过路由器连接起来了,接下来我们使用左边pc对右边pc进行ping操作

ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_20


可以看到,此时我们已经能够ping通了,但是第一次超时了,这时是因为第一次时,还不知道目标ip对应的mac地址,需要arp请求来确定mac与ip的映射,从而找到目标ip对应的主机

ipv4构造超网(路由聚合)

ios7层每层对应的协议 七层协议对应的设备_网络_21


128.14.35.7/20

  • 网络前缀占用的比特数量:20
  • 主机编号占用的比特数量:32-20=12
    CIDR(路由聚合)实际上是将网络前缀都相同的连续的IP地址组成一个”CIDR地址块“。

接下来根据如下题目要求进行仿真实验

ios7层每层对应的协议 七层协议对应的设备_子网_22


我们按照上述题目要求,在仿真实验中画出上述结构的网络拓扑图,并配置好子网

但是我们在画结构图时,会需要将路由器添加一个以太网端口(因为默认路由器只有两个以太网端口)

此时,我们选择如下的路由器

ios7层每层对应的协议 七层协议对应的设备_子网_23


拖动到桌面上以后,单击他

ios7层每层对应的协议 七层协议对应的设备_网络_24


找到图中路由器的开关,单击进行关闭

ios7层每层对应的协议 七层协议对应的设备_ip地址_25


ios7层每层对应的协议 七层协议对应的设备_网络_26


ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_27


然后我们选择箭头处的模块拖入所指位置处,再打开开关

ios7层每层对应的协议 七层协议对应的设备_网络_28


这样就能看到有三个接口了。

ios7层每层对应的协议 七层协议对应的设备_ip地址_29


接下来我们画好拓扑图,图中的两个pc端是不能进行通信的,因为路由表中只记录与路由器直接相连的子网网络网段

ios7层每层对应的协议 七层协议对应的设备_ip地址_30


我们需要在路由器中手动配置路由表,告诉没有与它直接相连的子网网段以及下一跳的地址,如上图所示

ios7层每层对应的协议 七层协议对应的设备_子网_31


当下一跳地址相同时,我们可以把路由表中的多条记录进行聚合,变成前缀一致的路由记录保存起来

192.168.16.0/25

192.168.16.128/26

192.168.16.0 0000000

192.168.16.1 0000000

可以得到,前缀为192.168.16.0/24

聚合为此记录在路由表中

ios7层每层对应的协议 七层协议对应的设备_ip地址_32


ios7层每层对应的协议 七层协议对应的设备_子网_33


ios7层每层对应的协议 七层协议对应的设备_子网_34


ios7层每层对应的协议 七层协议对应的设备_子网_35


下面将进行一个仿真实现

搭建网络的步骤

  1. 利用快速搭建以太子网,进行子网的搭建,并将路由相连端口也算入子网的搭建
  2. 与路由器直接相连的直接计入了路由表,与路由器不直接相连的局域网手动进行配置
  3. 将下一跳地址相同的目的网络进行路由聚合

经过上面三个步骤之后就能够搭建一个互联网啦。

ios7层每层对应的协议 七层协议对应的设备_ip地址_36


接下来,我们用两个pc进行ping操作,可以通信,注意:ping操作相当于发送了4次简单的ICMP报文,并且,路由器会有丢包操作(即不知道mac地址时发送arp请求,并会丢包),因此刚开始进行通信的时候,经过几个路由器就会有几次丢包操作,也就有几次超时。

路由表项的精简手段

  • 启用路由聚合
    当我们发现下一跳地址相同并且网络ip地址前缀有一致时,我们可以启用路由聚合
  • ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_37

  • 如图中所示两个子网
    192.168.2.0/24
    192.168.3.0/24
    我们可以发现有共同前缀192.168.2.0/23
    因为第三个字段中,最大为3,也即第三段00000011 和00000010,共8*3-1位不同
    所以可以路由聚合为192.168.2.0/23
    设置ip和子网掩码如下:
  • ios7层每层对应的协议 七层协议对应的设备_子网_38

  • 当路由聚合完毕以后,我们可以发现,与该路由器不直接相连的网络还有192.168.0.0/24和192.168.4.0/24
    这时我们可以设置一个默认路由
  • 启用默认路由
  • 当我们发现,某一个网段去别的网络都只经过某一个路由器,我们可以将这个设为默认路由,也就是不管访问什么ip我们都去这个默认路由的下一跳去找
  • 默认路由表项中,ip和子网掩码都为0.0.0.0
  • 启用特定主机路由
    当我们只想让一台主机去某一个特定主机上去访问时,我们可以选择添加一个默认路由
  • ios7层每层对应的协议 七层协议对应的设备_子网掩码_39

  • 如上图,我们只想让pc去访问这个服务器,就可以在路由器上设置此特定路由,特定路由的子网掩码为255.255.255.255,ip就为服务器的ip
  • ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_40

下面进行一个仿真实验,对路由表项的精简手段进行一个认识

1.局域子网的搭建,利用快速划分子网以及主机位数等(包括主机pc选择,路由器网关选择)
优先弄有pc的,再弄没有pc的

ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_41

2.用尽可能少的ip对仅有路由器的两端进行ip配置,使得在同一个子网中

先计算出需要ip的个数=路由器端口所需+广播地址+网段地址,选择子网掩码

ios7层每层对应的协议 七层协议对应的设备_网络_42

3.遍历每个路由器,为每个路由器设置除直接相邻的网段以外的其他网段

注意使用路由聚合和默认路由还有特定路由来减少路由表项

4.检查每个路由器是否可以到达所有的网络

并且ping检测

ios7层每层对应的协议 七层协议对应的设备_子网掩码_43


经过以上几步以后,整个网络已经可以完全ping通了,并且路由表项也是最精简的

路由器的配置

路由器在配置好子网以后,只知道与他的端口直接相连的子网段的存在(距离为0),而不知道别的网络的
存在,那么如何让路由器知道别的子网段的存在呢(距离大于等于1的网络呢),有下面两种方式

  1. 为路由器配置静态路由
  2. ios7层每层对应的协议 七层协议对应的设备_子网掩码_44

  3. 启动路由信息协议RIP,动态获得路由信息,得知别的网络的存在
  4. ios7层每层对应的协议 七层协议对应的设备_子网_45


  5. ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_46

  6. 将路由附近的网络添加到RIP协议中,通过RIP协议广播出去
  7. ios7层每层对应的协议 七层协议对应的设备_子网掩码_47

  8. 此时该路由器就会发送一个周期性的RIP更新数据包(广播形式)给别的路由器,从而别的路由器就会得知该路由器的路由表项进而更新自己的路由表
  9. 启动开放最短路径优先协议OSPF
  10. 启动边界网关协议BGP

网络层协议讲解

  • ip协议
  • ICMP(网际控制报文协议)


    icmp的衍生工具
    1.ping,将发送四个ICMP
    2.tracert/traceroute 跟踪路由记录

    由于网络层的作用范围是pc到pc(主机到主机),而主机上有很多应用程序,那么到底是哪一个应用程序之间进行通信呢?这就需要传输层来确定了

传输层

传输层协议的作用范围提供进程之间的逻辑通信

ios7层每层对应的协议 七层协议对应的设备_ip地址_48


ios7层每层对应的协议 七层协议对应的设备_网络_49


ios7层每层对应的协议 七层协议对应的设备_ip地址_50


下面我们来创建一个仿真实验

ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_51


ios7层每层对应的协议 七层协议对应的设备_子网_52


设置一个DNS服务

ios7层每层对应的协议 七层协议对应的设备_网络_53


然后将DNS服务器地址告诉pc

ios7层每层对应的协议 七层协议对应的设备_ip地址_54


配置好域名服务和域名服务器之后再次在pc中ping就能ping通了

ios7层每层对应的协议 七层协议对应的设备_网络_55


ios7层每层对应的协议 七层协议对应的设备_网络_56

TCP与UDP

ios7层每层对应的协议 七层协议对应的设备_网络_57


ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_58


ios7层每层对应的协议 七层协议对应的设备_ios7层每层对应的协议_59


TCP可靠传输的实现机制

  • 停止-等待协议SW
    每发送一个数据帧就停止发送,等待对方的确认
    收到确认后再发送下一个数据帧
    每发送完一个数据帧就启动一个相应的重传计时器,当计时器超时却还未收到确认时就重传该数据帧
  • ios7层每层对应的协议 七层协议对应的设备_子网掩码_60


  • ios7层每层对应的协议 七层协议对应的设备_ip地址_61

  • 后退n帧协议GBN
  • 选择重传协议SR