2023-08-02  阅读(2)
原文作者:Ressmix 原文地址:https://www.tpvlog.com/article/346

在计算机网络领域,有两个非常重要的网络模型—— ISO/OSI参考模型TCP/IP协议模型

ISO/OSI参考模型,是一个具有 7层 协议结构的开放式系统互联模型,并不基于某个特定的协议集而设计,而是一套普遍适用的规范集合,更偏向于理论层面,是其它各类协议模型的理论基础。与OSI模型相关的协议实际应用很少,但该模型本身具有较高的参考价值。

TCP/IP协议模型,主要基于实践而来,先有协议实现再有模型,模型只是对现有协议的描述,因此模型与协议非常吻合,在实际中也运用最为广泛。

一、网络模型

1.1 OSI参考模型

OSI参考模型一共七层,下层为上层提供服务:

202308022221325621.png

从上图可以看出,数据流动是 从上层往下层流动

  1. 数据在 传输层 被附加上“TCP/UDP首部”,然后传送给 网络层
  2. 数据在网络层附加“IP”首部,然后传送给 数据链路层
  3. 数据在数据链路层又附加上“Mac头”,最后由交换机广播到整个子网内;
  4. 如果目标Mac地址不在同一子网内,则由路由器进行转发,路由器负责连接多个不同的子网;
  5. 最后,目标子网的网关接收到请求后,发现目标电脑的Mac地址在自己的子网内,于是再通过交换机在自己的子网内广播,最终目标电脑接收到报文。

202308022221372302.png

1.2 TCP/IP协议模型

TCP/IP协议模型一共五层(有时会将数据链路层和物理层合并成一层,统称为网络接口层),它与OSI参考模型的对应关系如下:

202308022221385633.png

二、分层详解

我们自底向上来看各层的核心功能和常见协议。

2.1 物理层

物理层,负责传输0/1电信号,对应物理上的电路通信设备,比如光纤、电缆等等,数据在这一层完全以0/1电信号的方式进行传输。

2.2 数据链路层

数据链路层,其核心是 以太网协议 ,负责组包和解析0/1电路信号,将一组电信号封装成一个数据包——帧(frame),每个帧分成两个部分:标头(head)和数据(data)。标头包含一些说明性的东西,比如说发送端Mac地址、接收端Mac地址和以太网类型等等。

以太网协议规定:接入网络里的所有设备必须得包含网卡,而每个网卡都有一个Mac地址(48位的二进制),Mac地址在网卡出厂时就确认了,是这个网卡的唯一标识。

我们通过ifconfig命令看到的物理地址,就是这块网卡的Mac地址,比如1B-2A-1C-90-7A-9C这种形式。

举个例子来理解下数据通过以太网协议的发送过程,假设A电脑要往B电脑发送数据:

  1. 首先,A电脑需要通过网卡将数据发送到交换机,数据包中会携带源Mac地址(A电脑)和目标Mac地址(B电脑);
  2. 交换机本身连接了这个子网内的所有设备,所以它会将数据包广播给当前子网内的所有电脑;
  3. 每台电脑都通过网卡接收数据,如果发现目标Mac地址与自己的网卡Mac地址一致,就接收数据。

但是上面这种广播的方式,仅适用于一个子网(局域网)内的电脑,那么不同子网之间的电脑如何通信呢?这就要依赖网络层协议了。

2.3 网络层

网络层,其核心协议是 IP协议 。IP协议规定:每一个网卡都有一个IP地址,IP地址有IPv4和IPv6两个版本,目前广泛使用的是IPv4,由32个二进制数字组成,一般4个十进制数字表示,范围从0.0.0.0255.255.255.255

我们要判断两台机器,比如192.168.0.1192.168.3.5,是不是属于同一个子网,需要使用 子网掩码 分别与IP地址进行 与运算 ,如果前N位结果都相同,则说明属于同一个子网:

     11000000.10101000.00000000.00000001            # 192.168.0.1
     11111111.11111111.11111111.00000000            # 这里使用24位掩码
    =11000000.10101000.00000000.00000000
    
     11000000.10101000.00000011.00000101            # 192.168.3.5
     11111111.11111111.11111111.00000000            # 这里使用24位掩码
    =11000000.10101000.00000011.00000000

上述192.168.0.1192.168.3.5分别与24位的子网掩码255.255.255.0进行与运算,运算结果的前24位值不相同,说明这两个IP不属于同一个子网。


有了网络层的IP地址之后,两台在不同子网内的电脑就可以通信了。这里补充一下:数据链路层有一个非常重要的 ARP协议 ,通过ARP协议,一个子网内的所有设备都可以通过广播的方式,知道其它设备的MAC地址和IP的映射关系。

还是以A电脑发送数据到B电脑为例:

  1. 首先,A电脑通过网卡发送数据,数据包里包含了自己的IP地址和目标机器的IP地址;
  2. 数据包首先到达交换机,当交换机发现目标Mac地址不在自己的子网内,就会将数据包交给路由器;
  3. 路由器有多块网卡,连接了不同的子网,所以它会根据目标IP找到对应的子网,然后将数据包交给该子网的交换机;
  4. 最后目标子网的交换机,将目标Mac地址广播,每台电脑都通过网卡接收数据,如果发现目标Mac地址与自己的网卡Mac地址一致,就接收数据。

202308022221411034.png

通过上图可以看到,交换机工作在数据链路层,通过MAC地址寻址;路由器工作在网络层,通过IP地址寻址。

2.4 传输层

一台主机上的很多程序都会通过一个网卡收发数据,那么网卡怎么知道收发的数据是对应哪个程序的呢?这就要依靠传输层了。

传输层,主要是提供不同主机上的进程之间的逻辑通信(端到端的通信)。传输层寻址,最重要的就是进程的 端口号 了。我们熟悉的TCP/UDP协议就是传输层的协议。

比如,A机器发送数据包到B机器的某个指定端口,那么B机器上监听该端口的程序,就可以从这个端口获取需要的数据。

TCP(Transmission Control Protocol 传输控制协议) :是一种 面向连接 的、 可靠 的、基于字节流的传输层通信协议,是为了在不可靠的互联网络上提供可靠的端到端字节流而设计的一个专门协议。

UDP :是一种 面向无连接 的传输层协议。

后续章节,我会专门详细讲解TCP协议。

2.5 应用层

传输层的TCP/UDP等协议,可以通过端口寻址的方式传输数据,但是目标程序接收到数据之后,该怎么来解释这些数据呢?

比如说,邮件程序怎么处理?网页程序怎么处理?所以,针对各种不同的应用程序,都是定义有不同的应用层协议的。最常见的HTTP协议、SMTP协议等,都属于应用层协议。

在TCP/IP协议模型中,应用层对应OSI参考模型中得包含了会话层、表示层和应用层。

三、总结

本章,我对计算机网络的两种模型——OSI参考模型和TCP/IP协议模型进行了讲解,重点分析了各分层的主要作用以及常见协议。从下一章开始,我将讲解各层核心的网络协议。


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文