当前位置: 首页 > news >正文

网络协议分层:解密TCP/IP五层模型

一、网络背景

为了更好的学习网络,我们来简单了解一下网络的背景。

在早期实验室中,科学家们可以使用计算机来进行计算数据。大家也知道,科学家们计算的数据一般都是很庞大的。所以,可以利用多台计算机进行数据的分工计算,最后将多台计算机的数据通信起来计算即可。

但是,计算机之间是相互独立的,要如何进行计算机之间的通信呢?

所以有了网线,用网线将多台计算机连接起来就可以通信了。但是网线的长度毕竟是有限的,只能在实验室(小范围)里进行多台计算机之间的通信。

我们把这种在小范围内的通信叫做局域网

实验室也不止有一个,所以每个实验室之间都需要多台计算机之间通信,也就是有许多的局域网。而且,在人类世界中,我们不仅仅需要小范围的通信,更多的是需要远距离的通信,也需要网络。

所以,需要将远隔千里之外的计算机进行通信,也就是将许多个地方的局域网进行连接,形成一个大的网络,将这种叫做广域网

局域网与广域网是相对性的概念,无法对其进行具体的划分,什么是小范围(局域网),什么是广域网

二、认识网络

1. 初始协议

协议是一种约定。这也是课本上所给出的概念,但是单独这样说,相信大家是不理解的。举一个例子来说明。

在电视剧里能够看到,打仗的时候,人们总会想办法获取敌人的情报,而他们为了方便进行联系,会使用发电报的方式来传达消息。我们都知道发电报都是一种“密码”,没有对应的解码是看不懂的。比如发的电报是001代表的某某某是间谍,如果你不知道它的解码,即使敌人获取到了数据也是无法翻译的。像这种约定好了的编码,解码方式,本质上就是一种约定,代表了它是什么意思。

那么,计算机之间的传输媒介是光信号和电信号,通过“频率”和“强弱”来表示0和1这样的信息(计算机只认识二进制)。要想传递各种不同的信息,就需要双方约定好数据格式

所以,计算机之间要想通信,只需要约定好协议就可以了吗?

比如说,A计算机用频率表示0和1,B计算机用强弱表示0和1,即使定好了协议,这两台计算机之间也是不能通信的,这就好比你说中国话,他说俄语,互相之间是听不懂的。

因此,完善的协议还需要有更多细致的规定,并且都需要彼此遵守该协议。

一台计算机的诞生并不是由一家公司一条线产生的,它需要软件也需要硬件。因此有各种不同的生产商,比如:网卡,硬盘,操作系统…等等,如何要让不同的厂商之间生产的计算机之间能够互相通信呢?

这就需要有人制定一个共同的标准,让大家都来遵守,这就是网络协议

1.1 协议分层

协议本质上也是软件,在设计上为了更好的进行模块化,解耦合,也是被设计成为层状结构的。

比如:A和B现在用的是电话机进行通话,他们使用的是汉语,电话机接收A传输的信息传递给B电话机,然后再传给B。如果现在他们两个通话不再使用电话机,而是使用智能手机通话,那么通话的底层设备发生了变化,也就意味着协议发生了变化,但是即使协议发生了变化,并不影响上层进行通话,这不就解耦合了吗!

1.2 OSI七层模型

在这里插入图片描述
在这里插入图片描述

OSI七层模型是一个参考模型,在实际落地的过程中只有五层,会话层,表示层是不可能写到操作系统中的,所以最终落地的是五层协议

TCP/IP五层模型

在这里插入图片描述

2. 再识协议

为什么要有TCP/IP协议

在物理层上,你要把数据写到磁盘里,你怎么知道写到磁盘哪里呢?从磁盘上读取数据,你怎么知道从磁盘哪里的位置读取呢?设备之间通信要如何通信呢?

其实,即使在单机的情况下,在计算机内部也会有自己的协议,比如其它设备要和内存通信,会有内存协议,其它设备要和磁盘通信,会有磁盘相关的协议。

这些协议都是在本地主机各自的硬件中通信,成本低,问题少

但是在人类世界中,更多的却是远距离通信,所以需要网络通信。远距离通信有一个问题那就是通信距离变长了。正因为通信距离变长了,所以通信过程中一定会引出新的问题,那么就需要新的问题的解决方案。

比如:主机A要发送给主机C,由于通信距离变长,发送的数据应该先发送给路由器R吧,怎么发?网上有这么多的主机,我要怎么才能找到主机C呢?我发送的数据在发送过程中出现了数据的丢失,怎么办?发送的数据发送过去了,主机C怎么知道应该如何处理,使用数据呢?

在这里插入图片描述

出现了这么多的问题,要如何解决呢?提出解决问题的方案就是TCP/IP协议

TCP/IP协议就是解决网络通信的具体解决方案,而TCP/IP协议的出现本质上是因为网络通信过程中距离变长了

之所以说网络协议是层状的,是因为问题本身就是层状的。主机A发送数据给主机C,先把数据发送给路由器,属于局域网通信的问题;如何找到主机C,属于网络层IP地址协议的问题;发送过程中数据出现了丢失,属于TCP协议的问题;发送数据给主机C,主机C要如何处理数据,这是属于应用层的问题。

问题本身是层状的,所以TCP/IP也是层状的

3. TCP/IP协议与OS的关系

在这里插入图片描述

我们说,标准是由人定出来的,协议的实现却是由各大厂商实现的

以windows和linux为例,不同的OS系统之间要互相通信,就要求它们都要遵守TCP/IP协议模型。在底层硬件上有网卡,就要求各个网卡制造商都要遵守网卡协议,才能实现在不同的电脑上进行网卡上的数据传输

那要如何访问硬件呢?这就要通过数据链路层了,数据链路层属于网卡驱动的一部分。对于不同的电脑而言,数据链路层也要遵守相关的协议,两台电脑之间互相通信,发送过去的数据就应该能够被另一台电脑所解析,所以,协议必须遵守,否则就无法通信。

发送数据需要网络,所以不同OS的工程师就在OS里设计了网络层和传输层了,这两层是OS的一部分

最后就是应用层了,这层没有设计到OS里,因为场景太多了。比如有的协议是用来文件传输的,有的协议是用来音视频推送的,有的协议需要加密…等等。所以应用层一定要结合用户的应用场景,就没有被设计到OS里。换一个方面来讲,就算应用层被设计到了OS里,如此多的场景,必然会导致OS的代码量增加,所以,也不适合放在OS里。

对于Linux和windows来说,它们的内部细节可能不一样(比如名字…)但是它们的原理是一样的,它们都要遵守TCP/IP协议模型

这就保证了数据跨平台通信的能力因为它们的OS可能不同,但是它们都遵守了TCP/IP协议模型,那就可以发送数据,解析数据了。换句话说,发送数据的设备OS可能会不同,但是它们的网络协议栈是相同的

在TCP/IP协议模型里,网络层和传输层是最核心的,网络层的核心协议是IP,传输层的核心协议是TCP和UDP,简称TCP/IP协议

每一层都不止包含一个协议,在每一层里都有协议族,包含许多协议

现在,大家对于协议已经有了一个基本的理解了吧!那么,到底什么才是协议呢?

协议本质上是一种约定,那计算机OS里是如何设计约定的呢?

我们知道OS主要是由C语言写的,而OS里的协议是非常多的,这也就意味着协议也是要被OS管理的。那协议在OS里应该如何描述呢?不要忘了,OS是由C语言写的,所以协议本质上就是结构体

这个结构体的定义是在协议栈内部的

在不同的OS里,要如何通信呢?我们说了协议的本质是结构体,那么在不同的OS里进行通信,就必须要求具有相同的协议格式。比如传输层里有一个结构体,包含两个整型,一个字符,分别代表身高,体重,性别,那么在windows和linux里的传输层代码里,都要按照同一个标准文档来实现如何写入和读取这些数据,以便于通信。

在这里插入图片描述

4. 网络传输的基本流程

4.1 局域网(以太网为例)通信原理

提一个问题:两台主机在同一个局域网,是否能够直接通信

答案是可以。这就好比大家都是同一个班级里的学生,老师上课的时候问谁没有交作业,例如张三没有交作业,那么老师这句话就是对张三说的,张三给老师回答说我交了作业的,你没有看到。在这个对话的过程当中,并不是只有张三和老师两个人听到了,其他同学也听到了,但是由于与他们无关,所以他们自动摒弃掉了这些话。

在局域网多台主机之间互相通信,原理就和上课是类似的。主机A向主机E发送数据,主机B,主机C,主机D…都收到了数据,只不过这些主机发现数据并不是发送给自己的,所以丢掉了

那么问题来了,这些主机是如何知道发送的数据不是发送给自己的呢?老师向张三说,你为什么没有交作业,为什么只有张三回答了老师的问题,那是因为其他人不叫张三。主机之间也是一样的,那是因为主机也要有属于自己的“名字”。

这种局域网的通信属于数据链路层级的通信,局域网之间的主机要通信,就要求为每一台主机要配备MAC地址

在这里插入图片描述

4.2 认识MAC地址

. MAC地址是用来识别数据链路层中相连的节点

. 长度为48位,即6个字节,一般用16进制数字加上冒号的形式来表示

. MAC地址是被设定在网卡里的,在网卡出厂时就确定了,不能修改,MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会有冲突;也有些网卡支持用户配置MAC地址)

ifconfig//用于配置和显示系统内核中的网络接口的参数

在这里插入图片描述

云服务器上的MAC地址

如何查看windows上的MAC地址呢?

ipconfig /all

在这里插入图片描述

4.3 局域网内部细节

对于局域网的通信原理我们已经有了一个大致的了解。假设主机A向主机E发送数据,这个过程是怎样的呢?

主机A向主机E发送数据的时候,会带上自己的源MAC地址、目标MAC地址及发送的数据,这时候其它主机也会收到发送的数据,但是这些主机会检测是否是发给自己的,主机B的MAC地址通过与目标MAC地址比对,发现不是发送给自己的,就会丢弃掉,只有当主机E与目标MAC地址比对,发现是发送给自己的,才会接收数据

我们把这种网络通信叫做以太网。以太网是局域网中的一个技术局域网是一个范围概念,还包括Wi-Fi(无线局域网WLAN),令牌环网(已淘汰)等

但是在这个过程当中,难道只有主机A向主机E发送数据吗,主机B可不可以向主机C发送数据呢?当然是可以的了。

今天上课的时候,张三向李四说,老师查作业来了,别抄了,快把作业还给我;赵六向王五说,你欠我的10块钱什么时候还给我,大家都说话的话,那么课堂就会变得乱糟糟的.

同理如果有许多台主机之间要互相通信,大家都要发送数据,那么就会在以太网中出现数据碰撞,我们把以太网整个区域叫做碰撞域。在以太网中出现数据碰撞,这个数据就废掉了,所以出现数据碰撞的时候,发送数据的主机就应该休眠一会,等一会再发,需要进行碰撞检测和碰撞避免

所以以太网是一个基于碰撞检测和碰撞避免的通信模式,也是局域网中应用最广泛的通信局域网协议之一,它被内置到了数据链路层里

现在,我们站在系统的视角里去看待以太网,主机A可以通过以太网向主机E发送数据,主机B也可以通过以太网向主机C发送数据,许许多多的计算机之间都可以通过以太网进行互相通信。那么以太网本身不就是共享资源了吗!碰撞检测不就是为了避免数据不一致的问题,碰撞避免就是任何时刻都只允许一台主机,使用以太网向目标主机发送数据。这不就是锁的功能吗

所以访问以太网就应该以临界区的形式去访问

4.4 数据包封装和分用

我们已经知道了网络协议分为应用层,传输层,网络层,数据链路层,网卡五部分,每一层都有自己的协议。那么,用户A向用户B发送数据的时候,过程是怎么样的呢?

假设发送的数据是“你好”,那么当用户A向用户B发送数据的时候,首先会经过应用层,应用层会把发送的数据与应用层的报头进行封装

那么,什么是报头呢?

我们说过协议的本质就是结构体,所以报头就是结构体对象,将发送的数据写入到应用层协议里

我们把添加在数据前面的某某某报头统一叫做报头,后面的部分叫做有效载荷

接下来会经过传输层,传输层也会对上一层传送过来的数据进行封装,添加传输层报头。以此类推,最后将数据交给网卡。

这是封装的过程。计算机之间的通信可不是两台电脑在通信,本质上是两个用户通过计算机在通信,所以还应该有解包的过程,将数据发送给另一个用户。网卡拿到封装后的数据以后会将数据发送给目标用户的计算机,进行解包的,进而让用户看到发送过来的数据。

解包的过程刚好和封装的过程是相反的,封装是自顶向下的,而解包是自底向上的,用户A的网卡将数据发送给用户B的网卡,B的网卡会对封装后的数据进行网卡协议的解包,进而将有效载荷传给数据链路层,B的数据链路层会对数据链路层的报头进行解包,再将有效载荷传给网络层,以此类推,最后用户B就可以看到用户A发送过来的数据了。

之所以不同的计算机之间可以进行封装与解包的过程,是因为它们都遵守着同一套协议

从这个过程当中也可以看到,网卡解析的是网卡的报头,数据链路层解析的是数据链路层的报头,以此类推。所以,从逻辑上我们可以认为数据是从应用层发送给对方的应用层的,传输层发送给传输层,网络层发送给网络层...,也就是同层之间,都认为自己在和对方同层之间进行网络通信。从物理上认为数据是先从顶向下进行封装,再从底向上进行解包的过程

数据在应用层,我们把它叫做请求与应答,在传输层叫做数据段,在网络层叫做数据报,在数据链路层叫做数据帧

在这里插入图片描述

在这里我们需要注意什么是报头,什么是有效载荷,区分一下概念,以至于混淆。

在这里插入图片描述

封装与解包的过程其实就是一个出栈和入栈的过程,先将发送的数据入栈,再将应用层协议报头入栈,以此类推,解包先解析网卡协议报头,再解析数据链路层报头,以此类推,不就是一个入栈出栈操作吗!所以,我们经常把TCP/IP模型叫做TCP/IP协议栈

在每一层里,都会有许多协议,比如数据链路层里有arp,rap协议,网络层里有ip,icmp,igmp协议,传输层有tcp,udp协议,应用层里有http,ftp,ssh协议,那么问题来了在解包的过程当中,我们怎么知道解包之后,应该把有效载荷传输给哪一个协议呢?

协议的本质是一个结构体,只需要在这个结构体里设计一个字段就可以了,用来标识协议。解包之后,用有效载荷里的字段匹配即可

所以,任何协议里(应用层除外,上层就是用户)都要解决两个问题:1.将报头和有效载荷进行分离 2.把数据交付给上层的哪一种协议的问题。

现在,我们就知道了计算机之间通信,本质上是协议栈之间互相进行通信

4.5 跨网络传输流程图

跨网段的主机的数据传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器

在这里插入图片描述

假设现在有两台计算机,分别属于以太网和令牌环网,它们之间互相通信就属于跨网络通信,A主机(左边)发送数据给B主机,就要经过路由器,把路由器也当做是一台计算机,路由器要支持跨网络通信就要求路由器要有两张网卡(不一定只有两张网卡)。A主机和路由器通信时,它俩就是一伙的,反之,路由器和B主机通信,它俩就是一伙的。

那么,这两台主机通信有可能相距千里之外,那么要如何标识主机的唯一性呢?

这就不得不说到IP地址了。

IP协议有两个版本,IPv4和IPv6,IPv4是主流

IP地址是在IP协议中,用来标识网络中不同主机的地址。对于IPv4来说,IP地址是一个4字节,32位的整数,我们通常使用点分十进制的字符串表示IP地址,因为这样的可读性好。例如192.168.0.1 ,用点分割的每一个数字表示一个字节,范围是0-255。

那IPv6呢?IPv6地址是一个16字节,128bit的地址,IPv6的出现是因为IPv4无法满足需求而导致的,我们说IP地址是用来标识主机的唯一性的,如果是IPv4地址,它一共有32个bit,那它一共只能表示2^32台主机,而全世界的人口要比这个数字大,所以有了IPv6的出现。但是IPv6目前并不是主流,因为IPv4和IPv6不兼容,其次IPv6的推广受阻(因为这方面中国做的是最好的),但是为了解决IPv4的问题,有一种新的解决方案也可以暂时解决这个问题:NAT

但是前面我们说,MAC地址也是用来标识主机的唯一性的,现在又说IP地址也是用来标识主机的唯一性的,那应该怎么理解这两个呢

举一个例子来理解MAC地址和IP地址

相信大家都看过西游记吧,唐僧师徒四人去西天取经,途中会经过许多国家,比如车迟国,女儿国,黑风岭…,现在唐僧四人来到了车迟国,车迟国国国王问唐僧从哪里来,要到哪里去啊,上一站从哪里来,下一站要到哪里去啊?唐僧说贫僧从东土大唐而来,要到西天去,上一站从长安来,不知贫僧下一站应该如何走?这时候车迟国国王说你下一站应该去女儿国,接着就来到了女儿国,同样的问题,女儿国国王也会问。

像这种目的地一直不变的叫做源IP,目的IP,一直变化的叫做源mac和目的mac地址。经历的这些国家就相当于路由器,而这些国王就相当于路由器算法,根据目的IP,动态选择出要经历的mac地址

现在理解了IP地址和mac地址,再结合封装与解包,体现路由器解包和重新封装的特点:

在这里插入图片描述

数据在从上层交付到下层的时候,在网络层里会添加IP地址,在数据链路层会添加mac地址,发送方根据目的IP地址,选择mac地址,假设目的IP地址在千里之外,那么就需要通过路由器,但是发送方的局域网里也不会只有一台设备,所以需要通过目的IP地址与源IP地址比较,比如目的IP地址以172开头,源IP地址以192开头,就知道目的IP地址不是在发送方的这个子网内(发送主机,路由器,其它设备),数据就会发送给路由器,再经过路由器的数据链路层和网络层的解包,分析下一站应该去哪个路由器或者哪台主机,再经过该台路由器的封装过程(同一台路由器),发送给下一台的设备由于IP地址是不会变的,所以在解包和封装的过程当中,mac地址会发生改变(经过了路由器的数据链路层)

mac地址在变化,每经历一个路由器,就要进行向上交付,解包,向下交付,封装的过程

mac地址只在局域网有效

在网络层及以上,大家看到的数据报是一样的,因为IP地址没有发生变化,所以互联网是建立在ip网络的基础上的ip协议虚拟化了底层局域网的差异,不管你是以太网还是令牌环网,通过路由器的解包与封装的过程,更新mac地址即可

http://www.dtcms.com/a/478849.html

相关文章:

  • 邢台集团网站建设html登录页面代码
  • 【开题答辩全过程】以 办公耗材采购与领用管理系统设计与实现为例,包含答辩的问题和答案
  • 重生之我在大学自学鸿蒙开发第三天-《三层架构》
  • 深入linux的审计服务auditd —— 筑梦之路
  • 杭州拱墅网站建设软文发布平台乐云seo
  • AL2系统下编译安装PSQL16.4版本
  • wrapper+ xml文件进行SQL编写
  • sql题目练习——聚合函数
  • 鄂尔多斯网站开发广东深圳龙岗区天气
  • 运用photoshop设计网站首页北京vi设计公司怎么样
  • Day61 Linux内核编译、裁剪与驱动开发基础
  • 哪个网站可以做ppt模板深圳网站设计公司费用是
  • 中国十大发布信息网站排名2021年9月重大新闻
  • VBA数据结构性能革命:Dictionary与Collection的终极对决
  • 从 0 到 1 理解读者写者问题与读写锁:操作系统并发编程入门
  • 框架--Spring
  • 贵州网站建设营销公司免费推广网站入口202
  • 10.9 了解鸿蒙生态
  • 【win32】FFmpeg 硬件解码器
  • 网站怎么做留言板块阿玛尼手表官方网站查询正品
  • Flutter 跨平台文件上传 - GetX + ImagePicker + Dio 实现
  • 实现提供了完整的 Flutter Web 文件上传解决方案
  • 黑群晖建设个人网站免费制作链接的软件
  • 网站设计毕业设计任务书网站怎样做301跳转
  • 互联网从业者的数据能力突围:从焦虑到破局的能力成长路径
  • 2025三掌柜赠书活动第三十八期 EDR逃逸的艺术:终端防御规避技术全解
  • 怎么在工商网站做实名认证企业网站的搭建流程
  • 第14讲:深入理解指针(4)——函数指针与“程序跳转术”
  • 湖北省建设网站首页公众平台网站开发哪家好
  • 重庆最有效的网站推广腾讯云搭建wordpress