通俗讲解计算机网络五层模型

帅地:用心写好每一篇文章!

前言

天各一方的两台计算机是如何通信的呢?在成千上万的计算机中,为什么一台计算机能够准确着寻找到另外一台计算机,并且把数据发送给它呢?

可能很多人都听说过网络通信的 5 层模型,但是可能并不是很清楚为什么需要五层模型,五层模型负责的任务也有可能经常混淆。下面是网络通信的五层模型

说实话,五层模型的具体内容还是极其复杂的,不过今天这篇文章,我将用最简洁的模式,通过网络通信的五层模型来讲解一台计算机是如何找到另外一台计算机并且把数据发送给另一台计算机的,就算你没学过计算机网络,也能够听的懂。

1. 物理层

一台计算机与另一台计算机要进行通信,第一件要做的事是什么?当然是要把这台计算机与另外的其他计算机连起来啊,这样,我们才能把数据传输过去。例如可以通过光纤啊,电缆啊,双绞线啊等介质把他们连接起来,然后才能进行通信。

也就是说,物理层负责把两台计算机连起来,然后在计算机之间通过高低电频来传送0,1这样的电信号。

2. 数据链路层

前面说了,物理层它只是单纯着负责把计算机连接起来,并且在计算机之间传输0,1这样的电信号。如果这些0,1组合的传送毫无规则的话,计算机是解读不了的。一大堆0,1谁知道是什么鬼啊。

因此,我们需要制定一套规则来进行0,1的传送。例如多少个电信号为一组啊,每一组信号应该如何标识才能让计算机读懂啊等等。

于是,有了以太网协议。

1. 以太网协议

以太网协议规定,一组电信号构成一个数据包,我们把这个数据包称之为。每一个桢由标头(Head)和数据(Data)两部分组成。

帧的大小一般为 64 - 1518 个字节。假如需要传送的数据很大的话,就分成多个桢来进行传送。

对于表头和数据这两个部分,他们存放的都是一些什么数据呢?我猜你眯着眼睛都能想到他们应该放什么数据。 毫无疑问,我们至少得知道这个桢是谁发送,发送给谁的等这些信息吧?所以标头部分主要是一些说明数据,例如发送者,接收者等信息。而数据部分则是这个数据包具体的,想给接守者的内容。

大家想一个问题,一个桢的长度是 64~1518 个字节,也就是说桢的长度不是固定的,那你觉得标头部分的字节长度是固定的吗?它当然是固定的啊,假如不是固定的,每个桢都是单独发的,那计算机怎么知道标头是几个字节,数据是几个字节呢。所以标头部分的字节是固定的,并且固定为18个字节。

把一台计算的的数据通过物理层和链路层发送给另一台计算机,究竟是谁发给谁的,计算机与计算机之间如何区分,,你总得给他们一个唯一的标识吧?

于是,MAC 地址出现了。

文章首发于公众号『苦逼的码农』,更多经常文章欢迎搜索关注,已有150多篇原创。

2. MAC 地址

连入网络的每一个计算机都会有网卡接口,每一个网卡都会有一个唯一的地址,这个地址就叫做 MAC 地址。计算机之间的数据传送,就是通过 MAC 地址来唯一寻找、传送的。

MAC地址 由 48 个字节所构成,在网卡生产时就被唯一标识了。

3. 广播与ARP协议

(1). 广播

如图,假如计算机 A 知道了计算机 B 的 MAC 地址,然后计算机 A 想要给计算机 B 传送数据,虽然计算机 A 知道了计算机 B 的 MAC 地址,可是它要怎么给它传送数据呢?计算机 A 不仅连着计算机 B,而且计算机 A 也还连着其他的计算机。 虽然计算机 A 知道计算机 B 的 MAC 地址,可是计算机 A 却不知道知道计算机 B 是分布在哪边路线上,为了解决这个问题,于是,有了广播的出现。

在同一个子网中,计算机 A 要向计算机 B 发送一个数据包,这个数据包会包含接收者的 MAC 地址。当发送时,计算机 A 是通过广播的方式发送的,这时同一个子网中的计算机 C, D 也会收到这个数据包的,然后收到这个数据包的计算机,会把数据包的 MAC 地址取出来,与自身的 MAC 地址对比,如果两者相同,则接受这个数据包,否则就丢弃这个数据包。这种发送方式我们称之为广播,就像我们平时在广场上通过广播的形式呼叫某个人一样,如果这个名字是你,你就理会一下,如果不是你,你就当作听不见。

(2). ARP 协议

那么问题来了,计算机 A 是如何知道计算机 B 的 MAC 地址的呢?这个时候就得由 ARP 协议这个家伙来解决了,不过 ARP 协议会涉及到IP地址,我们下面才会扯到IP地址。因此我们先放着,就当作是有这么一个 ARP 协议,通过它我们可以知道子网中其他计算机的 MAC 地址。

3. 网络层

上面我们有说到子网这个关键词,实际上我们所处的网络,是由无数个子网络构成的。广播的时候,也只有同一个子网里面的计算机能够收到。

假如没有子网这种划分的话,计算机 A 通过广播的方式发一个数据包给计算机 B , 其他所有计算机也都能收到这个数据包,然后进行对比再舍弃。世界上有那么多它计算机,每一台计算机都能收到其他所有计算机的数据包,那就不得了了。那还不得奔溃。 因此产生了子网这么一个东西。

那么问题来了,我们如何区分哪些 MAC 地址是属于同一个子网的呢?假如是同一个子网,那我们就用广播的形式把数据传送给对方,如果不是同一个子网的,我们就会把数据发给网关,让网关进行转发。

为了解决这个问题,于是,有了 IP 协议。

1. IP协议

IP协议,它所定义的地址,我们称之为IP地址。IP协议有两种版本,一种是 IPv4,另一种是 IPv6。不过我们目前大多数用的还是 IPv4,我们现在也只讨论 IPv4 这个版本的协议。

这个 IP 地址由 32 位的二进制数组成,我们一般把它分成4段的十进制表示,地址范围为0.0.0.0~255.255.255.255。

每一台想要联网的计算机都会有一个IP地址。这个IP地址被分为两部分,前面一部分代表网络部分,后面一部分代表主机部分。并且网络部分和主机部分所占用的二进制位数是不固定的。

假如两台计算机的网络部分是一模一样的,我们就说这两台计算机是处于同一个子网中。例如 192.168.43.1 和 192.168.43.2, 假如这两个 IP 地址的网络部分为 24 位,主机部分为 8 位。那么他们的网络部分都为 192.168.43,所以他们处于同一个子网中。

可是问题来了,你怎么知道网络部分是占几位,主机部分又是占几位呢?也就是说,单单从两台计算机的IP地址,我们是无法判断他们的是否处于同一个子网中的。

这就引申出了另一个关键词————子网掩码。子网掩码和IP地址一样也是 32 位二进制数,不过它的网络部分规定全部为 1,主机部分规定全部为 0.也就是说,假如上面那两个IP地址的网络部分为 24 位,主机部分为 8 位的话,那他们的子网掩码都为 11111111.11111111.11111111.00000000,即255.255.255.0。

那有了子网掩码,如何来判端IP地址是否处于同一个子网中呢。显然,知道了子网掩码,相当于我们知道了网络部分是几位,主机部分是几位。我们只需要把 IP 地址与它的子网掩码做与(and)运算,然后把各自的结果进行比较就行了,如果比较的结果相同,则代表是同一个子网,否则不是同一个子网。

例如,192.168.43.1和192.168.43.2的子码掩码都为255.255.255.0,把IP与子码掩码相与,可以得到他们都为192.168.43.0,进而他们处于同一个子网中。

2. ARP协议

有了上面IP协议的知识,我们回来讲一下ARP协议。

有了两台计算机的IP地址与子网掩码,我们就可以判断出它们是否处于同一个子网之中了。

假如他们处于同一个子网之中,计算机A要给计算机B发送数据时。我们可以通过ARP协议来得到计算机B的MAC地址。

ARP协议也是通过广播的形式给同一个子网中的每台电脑发送一个数据包(当然,这个数据包会包含接收方的IP地址)。对方收到这个数据包之后,会取出IP地址与自身的对比,如果相同,则把自己的MAC地址回复给对方,否则就丢弃这个数据包。这样,计算机A就能知道计算机B的MAC地址了。

可能有人会问,知道了MAC地址之后,发送数据是通过广播的形式发送,询问对方的MAC地址也是通过广播的形式来发送,那其他计算机怎么知道你是要传送数据还是要询问MAC地址呢?其实在询问MAC地址的数据包中,在对方的MAC地址这一栏中,填的是一个特殊的MAC地址,其他计算机看到这个特殊的MAC地址之后,就能知道广播想干嘛了。

假如两台计算机的IP不是处于同一个子网之中,这个时候,我们就会把数据包发送给网关,然后让网关让我们进行转发传送

3. DNS服务器

这里再说一个问题,我们是如何知道对方计算机的IP地址的呢?这个问题可能有人会觉得很白痴,心想,当然是计算机的操作者来进行输入了。这没错,当我们想要访问某个网站的时候,我们可以输入IP来进行访问,但是我相信绝大多数人是输入一个网址域名的,例如访问百度是输入 www.baidu.com 这个域名。其实当我们输入这个域名时,会有一个叫做DNS服务器的家伙来帮我们解析这个域名,然后返回这个域名对应的IP给我们的。

因此,网络层的功能就是让我们在茫茫人海中,能够找到另一台计算机在哪里,是否属于同一个子网等。

文章首发于公众号『苦逼的码农』,更多经常文章欢迎搜索关注,已有150多篇原创。

4. 传输层

通过物理层、数据链路层以及网络层的互相帮助,我们已经把数据成功从计算机A传送到计算机B了,可是,计算机B里面有各种各样的应用程序,计算机该如何知道这些数据是给谁的呢?

这个时候,**端口(Port)**这个家伙就上场了,也就是说,我们在从计算机A传数据给计算表B的时候,还得指定一个端口,以供特定的应用程序来接受处理。

也就是说,传输层的功能就是建立端口到端口的通信。相比网络层的功能是建立主机到主机的通信。

也就是说,只有有了IP和端口,我们才能进行准确着通信。这个时候可能有人会说,我输入IP地址的时候并没有指定一个端口啊。其实呢,对于有些传输协议,已经有设定了一些默认端口了。例如http的传输默认端口是80,这些端口信息也会包含在数据包里的。

传输层最常见的两大协议是 TCP 协议和 UDP 协议,其中 TCP 协议与 UDP 最大的不同就是 TCP 提供可靠的传输,而 UDP 提供的是不可靠传输。

5. 应用层

终于说到应用层了,应用层这一层最接近我们用户了。

虽然我们收到了传输层传来的数据,可是这些传过来的数据五花八门,有html格式的,有mp4格式的,各种各样。你确定你能看的懂?

因此我们需要指定这些数据的格式规则,收到后才好解读渲染。例如我们最常见的 Http 数据包中,就会指定该数据包是 什么格式的文件了。

文章首发于公众号『苦逼的码农』,更多经常文章欢迎搜索关注,已有150多篇原创。

总结

五层模型至此讲到这里。对于有些层讲的比较简洁,就随便概况了一下。因为如果我说的详细一点的话,篇幅肯定会特别特别长,我着已经是尽最大的努力以最简洁的方式来讲的了。如果你想详细去了解,可以去买计算机网络相应的资料,强烈推荐《计算机网络:自顶向下》这本书。希望我的讲解能让你对计算机之间数据的传输有个大概的了解。

**最后,给大家推荐一个珍藏已久的 github,改 github 上收藏了几百本常用电子书,并且还提供了下载的地址。**部分截图如下
在这里插入图片描述
例如数据结构与算法有哪些呢?
在这里插入图片描述

地址在这里:点击前往Github

兄dei,如果觉得我写的不错,不妨帮个忙

1、关注我的原创微信公众号「帅地玩编程」,每天准时推送干货技术文章,专注于写算法 + 计算机基础知识(计算机网络+ 操作系统+数据库+Linux),听说关注了的不优秀也会变得优秀哦。

2、给俺点个赞呗,可以让更多的人看到这篇文章,顺便激励下我,嘻嘻。

作者简洁

作者:大家好,我是帅地,从大学、自学一路走来,深知算法计算机基础知识的重要性,所以申请了一个微星公众号『帅地玩编程』,专业于写这些底层知识,提升我们的内功,帅地期待你的关注,和我一起学习。 转载说明:未获得授权,禁止转载

<think>好的,用户让我介绍一下计算机网络的OSI模型。我需要先回顾一下OSI的基本知识,确保自己记得准确。OSI是开放系统互连参考模型,分为七层,对吧?每一层有不同的功能,比如物理层、数据链路层、网络层等等。 首先,我得确认用户的需求是什么。可能他们正在学习计算机网络的基础知识,或者需要准备考试、面试。用户之前问了局部变量和全局变量的生存期,现在转向OSI模型,说明他们可能在系统地学习计算机科学的不同主题。这时候,我需要用清晰的结构来讲解,帮助他们逐步理解。 接下来,我要考虑如何组织内容。通常,OSI模型是分层讲解的,每一层的名称、功能、协议以及例子。用户可能对每一层的具体作用不太清楚,所以需要详细但简洁的解释。同时,比较OSI和TCP/IP模型可能也是必要的,因为实际应用中TCP/IP更为常见,但OSI的理论框架很重要。 另外,用户可能想知道为什么OSI模型分为七层,每层存在的意义是什么。比如,物理层负责传输原始比特流,而应用层处理用户接口。需要举例说明,比如HTTP在应用层,TCP在传输层,这样用户更容易联想。 还要注意常见的错误或混淆点。例如,数据在不同层的名称不同,如数据帧、数据包、段等,这些术语需要明确区分。同时,OSI模型虽然设计完善,但实际中TCP/IP模型更常用,这一点要指出来,避免用户混淆。 另外,用户可能对层与层之间的交互感兴趣,比如数据如何从应用层层层封装,最后通过物理层传输,接收方又如何解封装。这个过程可以用生活中的例子来类比,比如寄信,每层相当于不同步骤的处理,增加理解。 还要检查是否有遗漏的关键点,比如每层的协议例子是否正确。例如,网络层的IP,传输层的TCP和UDP,数据链路层的MAC地址等。确保这些例子准确,避免误导用户。 最后,总结OSI模型的重要性,以及学习它的意义,比如帮助理解网络通信的原理,排查故障时的分层检查方法。这部分能帮助用户认识到理论的实际应用价值。 现在,我需要将这些思考整理成结构化的回答,确保层次清晰,语言通俗易懂,同时遵循用户之前的格式要求,比如使用列表、表格来对比分层和功能,可能的话加入示例和对比,帮助用户记忆和理解。</think>### 计算机网络的OSI模型详解 #### 一、基本概念 **OSI(开放系统互连参考模型)** 是国际标准化组织(ISO)提出的网络通信理论框架,用于统一不同设备的通信标准。它将网络通信分为**7个层次**,每层独立完成特定功能,并通过接口与相邻层交互。 --- #### 二、OSI七层结构及功能 | **层级** | **名称** | **核心功能** | **典型协议/设备** | **数据单位** | |-------------|----------------|---------------------------------------------|-----------------------------|-----------------| | **第7层** | 应用层 | 提供用户接口,直接面向应用程序(如文件传输、电子邮件) | HTTP, FTP, SMTP | 数据(Data) | | **第6层** | 表示层 | 数据格式转换(加密、压缩、编码) | SSL/TLS, JPEG, ASCII | 数据(Data) | | **第5层** | 会话层 | 建立、管理和终止会话(连接) | NetBIOS, RPC | 数据(Data) | | **第4层** | 传输层 | 端到端可靠传输,流量控制,错误恢复 | TCP, UDP | 段(Segment) | | **第3层** | 网络层 | 路径选择与逻辑寻址(跨网络传输数据包) | IP, ICMP, 路由器 | 数据包(Packet)| | **第2层** | 数据链路层 | 物理寻址(MAC地址),帧同步与错误检测 | Ethernet, PPP, 交换机 | 帧(Frame) | | **第1层** | 物理层 | 传输原始比特流(电压、光信号、电缆规范) | RS-232, 光纤, 集线器 | 比特(Bit) | --- #### 三、各层核心机制与示例 1. **应用层** - **功能**:浏览器访问网站时,HTTP协议生成请求数据。 - **示例**:`GET /index.html HTTP/1.1`。 2. **传输层** - **TCP vs UDP**: - TCP(可靠):三次握手建立连接(如网页浏览)。 - UDP(快速):无连接(如视频直播)。 - **端口号**:区分不同应用程序(如80端口对应HTTP)。 3. **网络层** - **IP地址**:标识全球唯一设备(如`192.168.1.1`)。 - **路由选择**:路由器根据IP地址决定数据包转发路径。 4. **数据链路层** - **MAC地址**:网卡唯一标识(如`00-1A-2B-3C-4D-5E`)。 - **交换机**:通过MAC地址表转发数据帧。 --- #### 四、数据传输过程(封装与解封装) 1. **发送方封装**: - 应用层数据 → 表示层加密 → 会话层建立连接 → 传输层添加端口号 → 网络层添加IP地址 → 数据链路层添加MAC地址 → 物理层转为比特流。 2. **接收方解封装**: - 物理层接收比特流 → 数据链路层校验MAC → 网络层解析IP → 传输层检查端口 → 应用层还原数据。 **示例**: 发送邮件时,数据从应用层(SMTP协议)逐层封装,最终通过物理层发送;接收方反向解封装后显示邮件内容。 --- #### 五、OSI vs TCP/IP模型 | **对比项** | OSI模型 | TCP/IP模型 | |----------------|----------------------------|--------------------------| | **层级数量** | 7层 | 4层(应用层、传输层、网络层、网络接口层)| | **实际应用** | 理论框架(少直接使用) | 实际互联网标准(如HTTP/IP)| | **会话/表示层**| 独立定义 | 合并到应用层 | --- #### 六、学习OSI模型的意义 1. **故障排查**:分层定位问题(如网络不通时,先检查物理层连接,再测试IP连通性)。 2. **协议设计**:明确各层职责(如加密在表示层实现,路由在网络层处理)。 3. **跨设备协作**:不同厂商设备通过统一分层标准互联(如路由器和交换机分工明确)。 --- #### 七、常见问题 1. **为什么需要分层?** - 解耦复杂性,各层独立优化(如物理层升级光纤不影响应用层协议)。 2. **物理层和数据链路层的区别?** - 物理层关注比特流传输,数据链路层管理帧的可靠传输。 3. **HTTP属于哪一层?** - 应用层(直接为浏览器和服务器提供通信服务)。 --- **总结**:OSI模型是理解网络通信的基石,尽管实际中TCP/IP模型更常用,但掌握OSI分层逻辑能帮助深入分析网络问题并设计高效协议。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值