网络初始:TCP/IP 五层协议模型 网络通信基本流程

目录

1. 名词解释

1.1 局域网

1.2 广域网

1.3 交换机

1.4 IP 地址

1.5 端口号

2. 协议

2.1 认识协议

2.2 五元组

 3. 协议分层

3.1 分层的作用

3.2 OSI 七层网络模型 & TCP/IP 五层(四层)协议模型

4. TCP/IP 五层(四层)网络模型

4.1 物理层

4.2 数据链路层

4.3 网络层

4.4 传输层

4.5 应用层

5. 网络数据通信的基本流程

5.1 封装

5.2 分用 

6. 网络设备所在分层 [面试题]


咱们国家的互联网发展历程: 

单机时代 => 局域网时代 => 广域网时代 => 移动互联网时代(目前阶段)

1. 名词解释

1.1 局域网

把两台设备连接到同一个路由器上, 那这两台设备就在同一个局域网中了.

举个例子, 

2000年后, 国内网络主键普及开来, 出现了很多的网吧, 但那时候, 想要进行联机对战, 就只能在同一个网吧/机房中, 使用同一个网络, 出了网吧就不行了.

那时候就是局域网时代.

1.2 广域网

广域网其实就是一个大的局域网. 把多个局域网连到一起, 就成了广域网.

全世界最大的广域网, 称为"因特网(The Internet)".

因此, 局域网和广域网只是一个相对的概念.

1.3 交换机

大家知道, 路由器上的接口很少, 家有路由器一般只能插 4 个网线(1 WAN口连运营商的设备).

而 交换机, 可以视为 "对路由器的接口进行了扩展"(类似于插排的功能), 交换机上有多个插口, 别的设备连接到交换机上, 就等价于连接到路由器上(都是同一个局域网).

1.4 IP 地址

IP地址用于定位一台设备所在的网络地址.

1.5 端口号

一台设备上会有多个应用程序, IP 地址是用来标识一台设备的, 而端口号就是用来区分这台设备上的应用程序的.(每个程序的端口号都是不同的)

举个例子:

我们在网购时, 需要填写收货地址, 比如: xxx省xxx市xxx大学.

这个地址就是 "IP 地址", 但是这个大学中有上万个人, 不能明确表示收货人是谁. 

那快递小哥就会通过手机号来确定收货人到底是谁, 而手机号就可以认为是 端口号.


2. 协议

2.1 认识协议

所谓协议, 通俗来讲, 就是指事先约定好的规则. 

网络协议, 就是通信双方对于 发送/接受 数据格式的约定. (约定好我该怎么发送, 你该怎么解析)

当多个主机设备进行通信时, 只有多个主机遵守的是同一套协议, 此时的通信才是有意义的.

举个例子:

大学中, 同学们都来自五湖四海, 都有着自己的家乡话, 但是大家交流起来毫无问题, 因为大家说话聊天时, 都遵循着同一个协议 --- 普通话.

2.2 五元组

五元组是非常关键的五个信息, 每进行一次网络通信, 就会涉及到五元组:

  1. 源 IP : 数据包从哪台设备来的
  2. 源端口 : 数据包从哪个程序来的
  3. 目的 IP : 数据包要发送到哪台设备
  4. 目的端口 : 数据包要发送到哪个程序
  5. 协议类型

"源" => 从哪来的;  "目的" => 到哪去

举个例子:

"贫僧自东土大唐而来, 到西方拜服求经而去" , 其中: 

东土大唐 => 源 IP

唐僧 => 源端口

西方 => 目的 IP

佛 => 目的端口

 3. 协议分层

网络通信是一个非常复杂的过程, 如果就设计一个协议来制定网络通信中方方面面的规则, 那这个协议将会非常大非常复杂.

于是, 就将协议进行了拆分, 并且将拆分后的这些小的, 功能单一的协议进行了分类, 也就是协议分层.

分层后, 不同层的协议间有以下的要求:

  • 只有上下两层相邻的协议间才可以进行交互
  • 上层协议可以调用下层协议(下层协议可以给上层协议提供服务)
  • 协议之间的交互, 不能跨层进行 (跨级汇报, 是职场大忌)

3.1 分层的作用

协议分层具有以下好处:

  1. 封装. 上层协议不需要了解下层协议的细节. (比如下图中, 我们打电话时, 只需会说汉语就可以了, 不需要关注电话机的工作原理)
  2. 解耦. 分层之后, 可以灵活的替换其中的某一层, 对整体的影响很小. (比如下图中, 打电话的人可以说汉语, 也可以说英语; 打电话可以使用电话机, 也可以使用无线电)

3.2 OSI 七层网络模型 & TCP/IP 五层(四层)协议模型

OSI 将协议分为七层, 分别为:

  1. 物理层(Physical Layer)
  2. 数据链路层(Data Link Layer)
  3. 网络层(Network Layer)
  4. 传输层(Transport Layer)
  5. ‌会话层(Session Layer)
  6. 表示层(Presentation Layer)
  7. 应用层(Application Layer)

但是呢, OSI 的协议分层体系, 只存在于教科书上, 由于体系太过复杂, 所以真实的网络分层方式并非如此, 而是采用了更加简化的版本, 即 TCP/IP 五层(四层)协议模型. 

4. TCP/IP 五层(四层)网络模型

(五层/四层 只是叫法上的差异, 四层是因为把数据链路层和物理层看做一个整体了(这俩和硬件的相关性都很大), 这里就按照五层来讲了~)

TCP/IP是⼀组协议的代名词,它还包括许多协议.

TCP/IP 五层模型又称为 TCP/IP 协议栈, 类似于调用栈, 即上层协议可以调用下层协议提供的 api.

在 TCP/IP 五层模型中 , 对协议这样进行分层(从上往下):

  1. 应用层
  2. 传输层
  3. 网络层
  4. 数据链路层
  5. 物理层

其中, 越往上层越偏向软件, 越往下层越偏向硬件.

其中应用层就是面向应用程序的, 以后咱们程序员主要就是工作在应用层.

而传输层和网络层是由操作系统内核实现的, 操作系统也提供了供应用层调用的接口(api).

数据链路层和物理层就是直接和硬件相关的了.

4.1 物理层

物理层规定了网络通信中的一些硬件设备要符合的要求.

比如, 约定 网线, WiFi, 光纤(光猫) ... 这些硬件设施要满足的要求是怎样怎样的.

可以把整个网络体系想象成是一个物流系统, 而物理层就是在铺桥修路~

有了物理层, 才能有后续的网络通信~

4.2 数据链路层

数据链路层, 是完成两个相邻的节点/设备间的通信. (通过网线, 电脑和路由器/交换机相连, 那么这台电脑和路由器/交换机就是相邻节点/设备)

通俗来说, 数据链路层, 就是先考虑一小步该怎么走.

举个例子, 

数据链路层, 可以想象成高中时, 你和你的同桌传纸条. 你和你同桌距离很近, 不容易被老师发现, 比较容易完成.

4.3 网络层

网络层, 是基于数据链路层的, 是指任意两个设备之间的通信(这两个设备间可能隔着很多的路由器和交换机). 

网络层, 侧重于通信的中间过程是怎样的.

举个例子,

网络层, 可以想象是你跟教室里另外一名同学传纸条, 可能你在最后一排, 而ta在第一排, 需要让中间的同学一个一个的传, 最终才能到那名同学的手中.

4.4 传输层

传输层, 也是任意的两个设备之间的通信, 但和网络层不同的是, 传输层不考虑中间过程是怎样的, 只考虑起点和终点.

举个例子,

淘宝上的卖家, 卖出去衣服后, 把商品给物流公司后:

  • 卖家只考虑包裹的发出地址和收件地址, 不用考虑中间的路程是怎样规划的, 不用考虑用什么设施来运输.
  • 而物流公司就得考虑中间是怎么走的, 走哪条路线才能到达目的地.

此时, 卖家就是传输层, 物流公司就是网络层.

4.5 应用层

应用层, 负责应用程序间沟通. 可以通俗的理解为, 我们买家拿到包裹后怎样使用.

这里通过网购的例子, 将这四层贯通一下:

  1. 应用层 => 我, 考虑好收到货后怎样使用
  2. 运输层 => 卖家, 考虑好发件地址和目的地址
  3. 网络层 => 物流公司, 考虑并规划好包裹发出地和目的地的路线, 进行运输
  4. 数据链路层 => 快递小哥, 考虑相邻的节点, 将包裹送到我手中

5. 网络数据通信的基本流程

5.1 封装

发送数据时, 从上层到下层, 需要对数据逐层进行加工(添加报头), 这个过程就称为 "封装"(包装数据).

比如, 我正在QQ上给别人发消息, 这个消息是 "hello".

那么, 这个消息的发出, 需要经过一系列 封装 的过程.

1. 第一步:

应用程序获取到用户的输入, 构造一个应用层的数据包.

这个数据包, 通常是"结构化数据"(类似 C 的结构体, 有多个属性), 

发送数据的时候, 会把 结构化数据, 转化为 字符串/二进制 bit 流的数据 => 序列化

接受数据的时候, 会把 字符串/二进制 bit 流的数据, 转化为 结构化数据 => 反序列化

因为网络传输的数据, 本质上都是以 ''字符串" 或者 "二进制 bit 流" 的形式进行传输的.

而这个应用层的数据包, 就遵守着应用层协议(这个协议都是开发这个程序的程序员设定的).

假设, 遵守这样的协议格式: 发送者QQ号, 接受者QQ号, 消息发送时间, 消息内容

那么, 应用层数据包如下:

2. 第二步

接着, 应用程序调用 传输层 提供的接口(socket api), 把数据往下层传输, 交给传输层.

传输层在拿到数据后, 会根据传输层的协议, 在 "应用层数据包" 的基础上构造出 "传输层数据包".

(传输层的主要协议有两种: TCP, UDP. 这里以 TCP 为例)

并且, "传输层数据包" 的 报头 中, 包含了五元组中的 源端口和目的端口.

报头 可以理解为 标签, 里面包含了本次传输的关键信息.

比如, 卖家发货时, 肯定不是把商品光秃秃的给物流公司, 肯定会先包装好, 物流公司也会在快递袋上贴快递单(上面有收货人信息).

报头, 就可以理解为这些商品外包装, 或者快递单.

3. 第三步

传输层构造好数据后, 调用网络层的 api , 把传输层数据包交给网络层.

网络层继续进行处理, 在网络层中, 最主要的协议是 IP 协议, IP 协议继续对数据包进行加工(拼上 IP 报头)

IP 数据包的报头中, 包含了五元组的中的 源IP和目的IP.

到目前为止, 五元组中的四个关键信息已经包含了(源端口, 目的端口, 源 IP, 目的 IP),

还差一个 协议类型.

但是, 协议不止只有一种(五层协议), 所以每层数据包的报头中, 都包含了上层使用的哪个协议:

  1. 物理层数据包的数据信息, 和数据链路层使用的协议直接相关.
  2. 数据链路层得到的数据包的报头中, 记录了网络层使用的哪个协议
  3. 网络层数据包(IP 数据包)的报头中, 记录了运输层使用的哪个协议
  4. 运输层数据包(TCP 数据包)的报头中, 记录了交给应用层的哪个应用程序

注意:

TCP 协议是不关心载荷内容是啥的; IP 协议也不关心载荷内容是啥.

4. 第四步

网络层继续调用 数据链路层 的api , 把 IP 数据包交给数据链路层.

数据链路层的核心协议, 就是"以太网", 以太网这个协议就会在网络层数据包的基础上进一步加工.

(数据链路层构建出的以太网数据包, 不仅添加了 以太网报头, 还添加了以太网报尾)

(到目前为止, 数据还在主机上转悠, 还没出门~~)

注意, 谈到网络传输的 "基本数据单位", 涉及多个术语(网络数据包/帧/报/段):

  1. 段(segment) --- TCP 使用
  2. 报(Datagram) --- UDP 使用
  3. 包(packet) --- IP 使用
  4. 帧(frame) --- 数据链路层使用(以太网数据帧)

我们 Java 程序员对这些术语就不做严格区分了, 混着用也没问题~

5. 第五步

以太网会继续将这样的数据交给物理层(硬件设备 --- 网卡)

网卡会把上述二进制数据, 最终以 光信号/电信号/电磁波信号 传播出去. (此时, 数据才真正出门了~~)

综上, 

发送数据时, 从上层到下层, 需要对数据逐层进行加工(添加报头), 这个过程就称为 "封装"(包装数据).

这里的 封装, 和面向对象中的封装, 不是一个封装, 这里的封装是指网络中的自己的专业术语.


5.2 分用 

数据到达接收方主机后, 需要从下层到上层, 逐层进行解析, 这个过程, 就叫做 "分用".(封装的逆向过程)

1. 第一步

数据(光电信号)到达接收方的网卡, 网卡把光电信号还原成二进制 0101...

网卡再把二进制数据交给数据链路层.

物理层接收到数据的类型, 和数据链路层是息息相关的.

  1. 光纤/网线(有线) 来的数据, 数据链路层则按照 以太网 协议进行解析
  2. wifi(无线) 来的数据, 数据链路层则按照 802.11 协议进行解析
  3. 以太网和 802.11 是并列的关系, 本质是一样的, 都是封装分用, 但其中报头报尾不同
  4. ......

2. 第二步

数据链路层按照以太网协议进行解析, 把报头和报尾取出来, 剩下载荷, 将载荷往上传递交给网络层.

注意: 以太网报头中有专门的属性, 描述了 网络层 使用的是哪个协议. 

 3. 第三步

网络层拿到数据后, 按照 IP 协议进行解析, 取出报头, 再把载荷向上传递交给传输层.

注意: IP 报头中也有专门的属性, 描述了传输层使用的是哪个协议.

4. 第四步

传输层拿到数据后, 也是类似: 按照 TCP 协议进行解析, 取出报头, 将载荷向上交给应用层(准确来说是交给哪个应用程序).

注意: 传输层报头中, 描述了目的端口号, 告知将数据交给哪个应用程序.

5. 第五步

QQ应用程序拿到传输层给的数据后, 按照程序员指定的协议, 解析应用层数据, 拿到关键信息, 展示到聊天界面上, 给出相应提升.

(不同的应用程序, 使用的是不同的应用层协议进行解析的)

综上, 发送的数据以光电信号的形式到达对方主机后, 从下层到上层逐层进行解析("拆包")的过程, 就叫做分用.


6. 网络设备所在分层 [面试题]

上文我们考虑的只是, 当前主机数据发送前和对方主机数据接受后的事情.

但是, 数据传输的中间过程也是涉及到 封装分用的.

  • 主机, 工作过程涉及: 物理层 => 应用层(通过应用程序满足网络通信的需求)
  • 路由器, 工作过程涉及: 物理层 => 网络层(组建局域网, 进行网络数据包的转发)
  • 交换机, 工作过程涉及: 物理层 => 数据链路层(对路由器接口的扩展, 不需要考虑组网的问题)

路由器的封装分用过程:

  • 主机的数据到达路由器后, 物理层, 数据链路层, 网络层(没有传输层) 逐层进行解析, 重新构造出网络层数据包, 重新构造出以太网数据帧, 重新构造出二进制数据, 再次进行转发.
  • 路由器工作在网络层(又称为三层转发)

交换机的封装分用过程:

  • 主机的数据到达交换机后, 物理层, 数据链路层(没有网络层)逐层进行解析, 再重新构造出 以太网数据包, 重新构造出二进制数据, 转发给下一个设备即可.
  • 交换机在数据链路层取得的 以太网报头, 其中的信息就足以支持交换机来进行下一步的工作.
  • 交换机工作在数据链路层(二层转发)

传输过程中, 信号是会有衰减的, 但是到达下一个节点时(交换机/路由器), 下个节点重新发送数据时, 又会把信号重新加强.


 END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/910095.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小新学习k8s第六天之pod详解

一、资源限制 Pod是k8s中的最小的资源管理组件,pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。k8s中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理Pod运行的StatefulSet和Deployment等…

安利一款超6K+ star的可拖放响应式灵活的网格布局Gridstack.js

Gridstack.js是一个现代JavaScript(或Typescript)库,旨在帮助开发人员快速构建交互式和响应式的布局。以下是对Gridstack.js的详细介绍: 一、主要特点 灵活的网格布局:Gridstack.js允许开发者轻松地创建和管理网格布局…

接口测试基础 --- 什么是接口测试及其测试流程?

接口测试是指针对软件系统的接口进行测试的过程,主要是验证系统之间的数据传输和通信是否正常、功能是否正确。接口测试主要关注接口的输入、输出以及相应的逻辑关系,而不关注底层实现细节。接口测试可以帮助开发团队发现和解决与接口相关的问题&#xf…

1分钟解决Excel打开CSV文件出现乱码问题

一、编码问题 1、不同编码格式 CSV 文件有多种编码格式,如 UTF - 8、UTF - 16、ANSI 等。如果 CSV 文件是 UTF - 8 编码,而 Excel 默认使用的是 ANSI 编码打开,就可能出现乱码。例如,许多从网络应用程序或非 Windows 系统生成的 …

python基础(1)

声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址:初识python,环境配置,编程基础以及数据类型_哔哩哔哩_bilibili 一、什么是python Python 是一种高级、解释型、通用编程语…

USB 设备数据安全管理解决方案

在当今数字化的办公环境中,USB 设备的广泛使用为企业和组织带来了便捷,但同时也隐藏着巨大的数据泄露风险。许多企业和机构都曾因 USB 设备使用不当而遭受严重损失。 一方面,员工可能会无意或有意地使用未经授权的 USB 设备接入公司网络。这…

【UE5】一种老派的假反射做法,可以用于移动端,或对反射的速度、清晰度有需求的地方

没想到大家这篇文章呼声还挺高 这篇文章是对它的详细实现,建议在阅读本篇之前,先浏览一下前面的文章,以便更好地理解和掌握内容。 这种老派的假反射技术,适合用于移动端或对反射效果的速度和清晰度有较高要求的场合。该技术通过一…

Flink滑动窗口(Sliding)中window和windowAll的区别

滑动窗口的使用,主要是计算,在reduce之前添加滑动窗口,设置好间隔和所统计的时间,然后再进行reduce计算数据即可。 窗口设置好时间间隔,和处理时间窗口的时间,比如将滑动窗口的时间间隔都设置为5s,处理时间…

基于YOLO11/v10/v8/v5深度学习的煤矿传送带异物检测系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

Golang--文件操作

1、文件 文件:文件用于保存数据,是数据源的一种 os包下的File结构体封装了对文件的操作(记得包os包) 2、File结构体--打开文件和关闭文件 2.1 打开文件 打开文件,用于读取(函数): 传…

BSAchongsds、

一、 ## 统计基因组整体信息 srun -A 2022099 -p Debug -n 2 -N 1 seqkit stats ~/yiyaoran/workspace/06.BSRseq/guo_BSR_pipline/ref/genome.fasta > genome.allstatcat genome.allstat 文件名 格式 类型 序列数量 总长度 最小长度 平均长…

聊一聊Elasticsearch的基本原理与形成机制

1、搜索引擎的基本原理 通常搜索引擎包括:数据采集、文本分析、索引存储、搜索等模块,它们之间的协作流程如下图: 数据采集模块负责采集需要搜索的数据源。 文本分析模块是将结构化数据中的长文本切分成有实际意义的词,这样用户…

**AI的三大支柱:神经网络、大数据与GPU计算的崛起之路**

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Python | Leetcode Python题解之第542题01矩阵

题目: 题解: class Solution:def updateMatrix(self, matrix: List[List[int]]) -> List[List[int]]:m, n len(matrix), len(matrix[0])# 初始化动态规划的数组,所有的距离值都设置为一个很大的数dist [[10**9] * n for _ in range(m)]…

RabbitMQ 管理平台(控制中心)的介绍

文章目录 一、RabbitMQ 管理平台整体介绍二、Overview 总览三、Connections 连接四、Channels 通道五、Exchanges 交换机六、Queues 队列查看队列详细信息查看队列的消息内容 七、Admin 用户给用户分配虚拟主机 一、RabbitMQ 管理平台整体介绍 RabbitMQ 管理平台内有六个模块&…

【机器学习】聚类算法分类与探讨

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

易语言模拟真人动态生成鼠标滑动路径

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

Linux:防火墙和selinux对服务的影响

1-1selinux 1-1 SELinux是对程序、文件等权限设置依据的一个内核模块。由于启动网络服务的也是程序,因此刚好也 是能够控制网络服务能否访问系统资源的一道关卡。 1-2 SELinux是通过MAC的方式来控制管理进程,它控制的主体是进程,而目标则是…

华为eNSP:QinQ

一、什么是QinQ? QinQ是一种网络技术,全称为"Quantum Insertion",也被称为"Q-in-Q"、"Double Tagging"或"VLAN stacking"。它是一种在现有的VLAN(Virtual Local Area Network&#xff0…

运动控制 PID算法

文章目录 一、自动控制简介1.1 开环控制系统1.2 闭环控制系统1.3 电机速度闭环控制系统 二、PID算法2.1 比例2.1.1 静态误差 2.2 积分2.3 微分环节2.4 位置式PID2.5 增量式PID 一、自动控制简介 自动控制系统是使用自动控制装置对关键控制参数进行自动控制,使它在收…