计网之初识网络(理解网络传输的基本流程)

news2024/11/29 0:45:15

文章目录

  • 一. 网络发展史
  • 二. IP地址和端口号
  • 三. 计算机网络分层
    • 1. 什么是网络协议
    • 2. OSI七层网络模型
    • 3. TCP/IP五层网络模型
    • 4. 数据在各个层的传输过程
    • 5. 网络设备所在分层

一. 网络发展史

🍂独立模式(单机模式)

我们最初的计算机是在单机模式下使用的, 此时的计算机是没有连接网络的, 也就是我们的计算机之间是相互独立, 是没有办法进行设备之间的通信的.

🍂网络互联

随着时代的发展, 越来越需要计算机之间互相通信, 共享软件和数据, 即以多个计算机协同工作来完成业务, 就有了网络互连.

网络互连: 将多台计算机连接在一起, 完成数据共享, 数据共享本质是网络数据传输, 即计算机之间通过网络来传输数据, 也称为网络通信.

根据网络互连的规模不同, 可以划分为局域网和广域网.

局域网和广域网区分的主要网络的覆盖面, 广域网比比局域网的网络覆盖面更广泛, 比如全世界最大的广域网就是因特网, 再缩小范围, 只有一个城市组成的网络, 就是一个局域网, 网络的覆盖面是相对的, 其实这两者之间并没有一个明确的界限.

🍂 局域网LAN

局域网, 即 Local Area Network, 简称LAN, 局域网是本地, 局部组建的一种私有网络.

局域网把—些设备通过交换机和路由器连接到—起(设备之间不能离得太远), 使得局域网内的主机之间能方便的进行网络通信, 局域网又称为内网, 局域网和局域网之间在没有连接的情况下, 是无法通信的.

🍂广域网WAN

广域网, 即 Wide Area Network, 简称WAN, 通过路由器, 将多个局域网连接起来, 在物理上组成很大范围的网络, 就形成了广域网, 广域网内部的局域网都属于其子网.

🍂组建网络的设备

最初局域网之间的设备只是简单的使用网线, 集线器和网口来进行简单的连接, 这种方式也比较古老了, 可以想象如果大范围的使用这种方式来进行网络连接明显是不可取的; 所以随之又有了交换机, 将一些电脑都连接到这一台交换机上就能实现这些计算机之间的通信, 这就算是组成了一个简单的局域网, 但此时还不能进行跨局域网通信, 所以又有了路由器, 路由器可以把两个局域网给连起来, 生活中更常见也是通过路由器进行组网, 路由器上有LAN口与WAN口, 设备插在LAN口的设备组成了一个局域网, 路由器再通过WAN口连接广域网, 实现网络通信, 现在的wifi本质上就是一个无线路由器.

img

img

img

网络通信本质传输的是电信号与光信号, 通过信号的频率来决定电平到底是0还是1, 对于电信号, 可以使用低电平表示1, 高电平表示0, 对于光信号, 可以使用高频光表示1, 低频光表示0.

二. IP地址和端口号

IP地址和和端口号在网络通信中用于标识不同的主机和同一主机下不同的进程.

🍂IP地址

主要用于标识网络主机, 其他网络设备(路由器等)的网络地址; 简单来说IP地址是用于定位主机的网络地址.

通俗点讲IP地址就相当于我们平常的住址, 地址啥的, 就像我们发送快递一样, 需要知道对方的收货地址, 快递员才能将包裹送到目的地, 网络中就需要知道主机的位置在哪里才能将将数据传输过去.

IP本质上就是一个32位的二进制整数, 通常被分割为4个 “8位二进制数” (也就是4个字节), 如: 01100100.00000100.00000101.00000110; 进二而把这4部份在转化为10进制来表示(即 “点分十进制”), 得到100.4.5.6这一串数字;

还有一个些特殊的IP地址, 叫做环回IP(127.*), 通常是127.0.0.1, 这个IP地址表示自己这个主机, 主要用于本机到本机的网络通信.

🍂端口号

在网络通信中, IP地址用于标识主机网络地址, 端口号可以标识主机中发送数据, 接收数据的进程; 简单来说端口号是用于定位主机中的进程.

一个设备上是运行着很多的程序的, 仅仅确定了IP地址(也就是知道了设备在哪里)是不够的, 类似于发送快递时, 不光需要指定收货地址(IP地址), 还需要指定收货人(端口号)才能把快递送到指定的人手里; 对应到网络中就是在一个进程中正在执行的那个应用程序是有一个唯一的端口号与之对应的, 知道了IP地址数据到了主机还需要知道端口号才能将数据传输到指定的应用程序当中.

端口号本质上就是一个2字节的整数, 范围是0-65535, 要注意的是两个不同的进程不能绑定同一个端口号.

三. 计算机网络分层

1. 什么是网络协议

协议是网络通信中最为核心的概念, 想要进行有效的通信, 需要明确通信双方间的协议, 这里的协议可以理解为约定, 本质上就是对数据发送的格式做出约定, 通信双方分别按照这个约定去构造数据和解析数据.

这也是很好理解的, 想象如果一个英国人只会说英语, 而我的英语又没有达到可以交流自如的水平, 这就没办法有效沟通了…

img

网络通信是一个比较复杂的过程, 需求场景复杂了, 我们所需要实现功能也就复杂了, 而如果这里的协议太复杂了, 那么我们的学习, 使用, 理解的成本和维护成本都会非常高, 所以使用协议更好的办法就是把一个复杂的大协议给拆分成若干个相对简单的小的协议, 每个协议负责一小部分的工作,在这些小的协议中, 某些协议之间起到的功能和作用是相似的类似的, 于是我们就将这些小协议分层(分类).

这样的协议分层有以下好处:

  1. 该层协议不必关心其他层协议的实现细节, 更好地做到了封装, 极大的降低了我们的学习和维护的成本.
  2. 分层后不同层之间的协议耦合性是很低的, 这样就能灵活的针对某一层协议进行替换.

通俗点来讲, 分层的效果就相当于打电话时, 打电话的人不必知道电话的工作原理(封装), 打电话的人可以使用有线电话, 也可以使用无线电话(解耦合).

img

当前互联网中协议分层主要有两种风格: OSI七层网络模型(教科书上的), TCP/IP五层网络模型(实际实现的), 下面就分别来看一下这两种模型是什么样的.

2. OSI七层网络模型

OSI七层网络模型是教科书上面的协议分层模型, 从硬件到软件分别为物理层, 数据链路层, 网络层, 传输层, 会话层, 表示层, 应用层.

img

因为OSI七层网络模型既复杂又不实用, 所在实际实现协议的时候并不会按照这种模型去落地实现, 实际组建网络时, 只是以OSI七层模型设计中的部分分层, 也即是以下TCP/IP五层模型来实现.

3. TCP/IP五层网络模型

这里的TCP/IP五层协议有些说法也叫做是四层协议, 因为物理层是属于纯硬件的, 和程序员关系不大.

img

这里各层的协议越靠近物理层越接近硬件设备, 越靠近应用层就越接近用户; 各层的协议之间是不能跨层交互的, 上层协议会调用下层协议, 而下层协议在为上层协议提供服务.

🎯各协议层的作用:

  • 物理层: 针对硬件设备间的协议, 约定了网络通信中基础的硬件设备的规格, 保证主机和网络设备之间是相互匹配的.
  • 数据链路层: 负责相邻的两个节点之间数据的传输方式(即相邻两个设备的通信), 看是通过哪种(网线/光纤/wifi无线/网口选择)方式进行传输.
  • 网络层: 负责网络中任意两个节点之间的通信, 为这两点的通信规划出一条 “最佳” 路径.
  • 传输层: 负责端与端之间的通信, 只关注起点和终点(数据是否成功发送和接收, 只关注结果, 不关心过程).
  • 应用层: 和应用程序密切相关, 描述了所传输的数据要如何使用.

其中物理层和数据链路层是通过硬件和驱动程序来实现的, 网络层和传输层是由操作系统内核实现的, 这四层都是现成的, 不需要我们去实现, 而我们也没办法去修改; 应用层是在应用程序中实现的, 也就是说, 一般和程序员打交道的是应用层, 这里的实现和我们自己写的代码息息相关, 再次要的就是需要关注一下传输层, 毕竟在应用层需要去调用传输层的API.

4. 数据在各个层的传输过程

以QQ为例, 假设有用户A给用户B上发送了一个hello, 发送时间为2023-02- 08 12:00:00, 下面模拟该数据发送的过程.

  • 首先从发送方的角度来看:

🍂1. 应用层.

应用层代码就是QQ这个应用程序了, 首先应用层会将用户要发送的数据进构造成一个应用层数据报文, 本质上就是一个遵守了约定格式的字符串.

QQ应用层的具体数据格式我们是不清楚的, 假设这里的应用层协议的格式是: 发送方QQ号, 发送时间, 接收方QQ号, 消息内容; 此时得到的应用层的报文如下:
img

然后, QQ程序会调用操作系统的API, 将这个应用层数据报文交给传输层.

🍂2.传输层(进入了操作系统内核)

传输层会基于应用层的数据来构造一个传输层的数据报文, 传输层常用的协议有UDPTCP, 以UDP为例, 该报文由协议报头加上数据载荷构成, UDP报头中是另外一个特定格式的字符串(涉及源端口和目的端口), 这个的"报头"相当于是一个"标签", 通过标签可以表示出当前要把这个消息怎样进行传输.

img

然后传输层会将得到的UDP数据报交给网络层.

🍂3. 网络层

网络层最常用的是IP协议, 会将TCP数据报继续封装成IP数据报, 也是在原来数据的基础上加上一个IP协议报头, 新的网络层IP数据报是由IP协议报头加上数据载荷组成, IP报头也是一个特定的字符串, 包含了另一组信息(核心是源IP和目的IP).

img

然后网络层会将封装的数据交给数据链路层.

🍂4. 数据链路层

数据链路层最知名的协议是 “以太网”, 会基于IP协议数据报再加上帧头与帧尾, 封装构造成一个 “以太网数据帧”.

img

最后, 数据链路层的数据继续往下传输交给物理层.

🍂5. 物理层

物理层会将上述的 “以太网数据帧” 的二进制数据转换为高低电平电信号/光信号, 然后通过网线或者无线的形式发送出去.

🎯那么大家是否理解上面说到的传输过程为什么要加报头呢, 其实也好理解, 网络通信中需要知道到基础的五元组是源IP, 源端口, 目的IP, 目的端口, 协议类型(协议号, 标识发送进程和接收进程双方约定的数据格式 ); 这就好比唐僧取经时的自我介绍: 贫僧自东土大唐而来, 到西方拜佛求经而去.

img

这些报头中就有端口, IP这些信息, 有了这些才能知道数据是从哪里来到哪里去.

  • 然后再从接收方的角度再看:

🍂1. 物理层

网卡接收到的是光信号/电信号的信息, 接收方物理层会接收到这些信号转换回二进制数据, 转回的这个数据是一个 “以太网数据帧”.

物理层会把这个数据帧再交给数据链路层.

🍂2. 数据链路层

img

数据链路层把得到的这个数据进行解析, 然后去掉帧头帧尾, 取出中间的数据载荷, 再交给上层的网络层.

🍂3. 网络层

img

IP协议对这里的数据继续进行解析, 再去掉IP报头,取出数据载荷交给上层的传输层.

🍂4.传输层

img

UDP继续进行解析, 去掉UDP报头, UDP报头里有一个目的端口, 这个目的端口是关联着着一个具体的应用程序的, 此时取出的数据载荷就可以交给对应的应用层程序.

🍂5. 应用层.
img

最后QQ的应用层协议会对上述数据进行解析, 将hello显示到用户界面上.

上面从应用层到物理层(从上层至下层)数据层层加码的过程称为 “封装”, 当接收方收到数据时会将已经封装好的数据从下层至上层进行解析拆分, 这个过程叫做 “分用”; 通俗点理解, 封装就类似于包装快递, 分用就是拆快递了.

img

上面演示的发送流程实际上省略了中间的发送过程, 在实际的发送过程中, 并不是直接从A的主机到达B的主机上, 而是在这两个节点的中间还会经历许多的 “中转站”, 最常见的就是路由器, 交换机等设备.

上面涉及到一些专有名词, 包 (packet), 报(datagram), 帧(frame), 段(segment)等, 这些都是网络传输数据的单位, 不同的协议层对数据包有不同的称谓, 在传输层叫做段, 在网络层叫做数据报/包, 在链路层叫做帧.

5. 网络设备所在分层

对于主机设备来说是有五层转发能力的(实现了物理层到应用层五层), 从传统意义上来说, 交换机有两层转发能力(实现了物理层到数据链路层两层), 路由器有三层转发能力(实现了物理层到网络层三层), 对于集线器只有一层转发能力(只实现了物理层), 但实际上现在的路由器与交换机的界限越来越模糊了, 出现了很多3层或4层交换机和4层路由器, 也就是交换机能当路由器使用, 路由器也能当交换机使用, 任意一台设备接收到数据时都会先进行分用, 分用获取到相关传输信息后再决定是继续发送还是直接使用.

有些路由器/交换机是甚至可以封装分用到应用层, 那么路由器/交换机为什么要封装到应用层呢; 要知道交换机, 路由器这些网络设备都是运营商的, 运营商有的时候要做些别的事情, 就需要进行应用层级别的封装分用; 这里典型的一个例子就是运营商进行舆情分析, 网民通过互联网传播一些言论, 这个时候其实数据是谁在上面时候发的, 数据是发到哪里的, 数据发的是什么内容, 通过运营商这样的设备都是可以有办法监测到的, 所以常说到互联网不是法外之地, 也是需要对自己的一言一行负责的.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

遇到“独自开”,开发出属于自己一套专属系统的时代还会远吗?

目录 一、前言 二、介绍 三、详细介绍 四、总结 一、前言 哈喽,大家好,我是追,看到标题独自开时,可能此处会有疑问了。独自开?半山居士王安石的“墙角数枝梅,凌寒独自开”?哈哈,…

北京化工大学2/7寒假集训题解(>1800)

目录 A-Fence B-D again​ C-Cut the Sequence D-Parade E-trade A-Fence #include<algorithm> #include<string.h> #include<stdio.h> #include<queue> using namespace std; struct nob {int v,p;bool operator <(const nob &a)const{retu…

网络协议(四):网络分类、ISP、上网方式、公网私网、NAT

网络协议系列文章 网络协议(一)&#xff1a;基本概念、计算机之间的连接方式 网络协议(二)&#xff1a;MAC地址、IP地址、子网掩码、子网和超网 网络协议(三)&#xff1a;路由器原理及数据包传输过程 网络协议(四)&#xff1a;网络分类、ISP、上网方式、公网私网、NAT 目录…

【沁恒WCH CH32V307V-R1开发板两路ADC读取实验】

【沁恒WCH CH32V307V-R1开发板两路ADC读取实验】1. 前言2. 软件配置2.1 安装MounRiver Studio3. ADC项目测试3.1 打开ADC工程3.2 编译项目4. 下载验证4.1 接线4.2 演示效果5. 小结1. 前言 ADC 模块包含 2 个 12 位的逐次逼近型的模拟数字转换器&#xff0c;最高 14MHz 的输入时…

2022年这5款熟悉的软件退出了历史舞台

在过去的一年里&#xff0c;有很多新产品发布&#xff0c;当然也有很多产品与我们就此别过。这些产品曾陪伴我们的生活&#xff0c;给我们带来欢乐&#xff0c;帮助我们成长。所以本文将盘点一下在2022年和我们告别的产品。1.微软IE浏览器IE浏览器1995年8月16日正式上线&#x…

window 安装debian的Linux系统+一些环境初始化

文章目录一、安装&#xff1a;1、安装WSL22、微软商店搜索debian安装&#xff1a;3、也可以官方安装&#xff1a;二、更改镜像源1、查看debian系统版本&#xff1a;2、修改3、升级三、安装zsh1&#xff1a;检查2、安装zsh3、安装oh-my-zsh4、安装插件5、配置文件~/.zshrc:6、配…

软件工程详细知识点(下)

文章目录七、面向对象的分析设计1、面向对象分析&#xff08;OOA&#xff09;2、面向对象设计&#xff08;OOD&#xff09;八、编码1、程序设计语言九、软件测试十、软件维护十一、软件项目管理RUP&#xff08;统一软件开发过程&#xff09;面向对象编程和面向对象设计的五个基…

【C++STL】双向循环链表与其迭代器的深度剖析及实现(百字短文速通)

1&#xff0c;双向循环链表基本结构的实现&#xff08;不包含需要迭代器的部分&#xff09;先用struct封装链表的节点&#xff0c;这里我们仅需要提供一个构造函数即可&#xff0c;并且构造函数必须提供缺省值&#xff0c;因为会有如下使用场景&#xff1a;new Node();此时需要…

crawler爬虫抓取数据

crawler爬虫实现 学习目标&#xff1a; 了解 crawler爬虫运行流程了解 crawler爬虫模块实现 1. crawler功能 初始化driver输入公司名称,并点击判断是否需要验证如果需要验证&#xff0c;获取验证图片并保存获取打码坐标点击验证图片判断查询结果选择第一条查询结果获取主要信…

电脑自带的录屏软件在哪?图文教学,教你如何快速录屏

很多小伙伴或许都听说过电脑有一款自带的录屏软件&#xff0c;但却不知道这款录屏软件在哪里。电脑自带的录屏软件在哪&#xff1f;其实很简单&#xff0c;如果你的电脑是Win10或者Win11的电脑&#xff0c;那么就可以使用电脑自带的录屏软件&#xff0c;一起跟着小编来看看吧。…

初次认识C++类

目录 前言&#xff1a; 面向过程和面向对象的区别&#xff1a; C语言&#xff1a; C&#xff1a; 类的引入&#xff1a; 类的定义&#xff1a; 类的权限&#xff1a; 类的作用域&#xff1a; 类的实例化&#xff1a; 类的大小计算&#xff1a; 空类或则只…

急速肝了一波ChatGPT,听说阿里面试题都没问题~

目录前言注册步骤&#xff1a;最后总结前言 互联网圈子里面ChatGPT现在实在是太火了&#xff0c;但是你还没用过&#xff1f;我只能说你OUT了&#xff0c;ChatGPT是什么呢&#xff1f; 由人工智能实验室OpenAI发布的对话式大型语言模型ChatGPT引爆中文互联网。它可以与人类轻松…

2022年ts学习记录

以下记录的是&#xff0c;我在学习中的一些学习笔记&#xff0c;这篇笔记是自己学习的学习大杂烩&#xff0c;主要用于记录&#xff0c;方便查找一、TS 是什么 &#xff1f;##1、简介TS&#xff1a;是TypeScript的简称&#xff0c;是一种由微软开发的自由和开源的编程语言。ts …

朗润外盘国际期货:SC原油市场情绪回暖领涨期市

今日值得回溯的三个行情&#xff1a;①SC原油主力合约今日收高4.23%&#xff0c;研报建议仍以震荡行情对待&#xff1f;②沪锡主力合约收涨3.20%&#xff0c;现在做多合适吗&#xff1f;③鸡蛋主力合约收跌1.32%&#xff0c;研报称这只是小幅回调。 【今日期市盘面概况】 整体…

深度学习 Day25——使用Pytorch实现彩色图片识别

深度学习 Day25——使用Pytorch实现彩色图片识别 文章目录深度学习 Day25——使用Pytorch实现彩色图片识别一、前言二、我的环境三、前期工作1、导入依赖项和设置GPU2、下载数据3、加载数据4、数据可视化四、构建CNN网络结构1、函数介绍2、构建CNN并打印模型3、可视化模型结构五…

Docker安装EalasticSearch、Kibana,安装Elasticvue插件

使用Docker快速安装部署ES和Kibana的前提&#xff1a;首先需要确保已经安装了Docker环境。 如果没有安装Docker的话&#xff0c;先在Linux上安装Docker。 有了Docker环境后&#xff0c;就可以使用Docker安装部署ES和Kibana了 一、安装ES 1、拉取EalasticSearch镜像 docker p…

SpringIOC之创建Bean的核心方法doGetBean

概述面向资源&#xff08;XML、Properties&#xff09;、面向注解定义的 Bean 是如何被解析成 BeanDefinition&#xff08;Bean 的“前身”&#xff09;&#xff0c;并保存至 BeanDefinitionRegistry 注册中心里面&#xff0c;实际也是通过 ConcurrentHashMap 进行保存。Spring…

强缓存与协商缓存

Ⅰ、http缓存 HTTP 缓存策略 分为 > 「强制缓存」 和 「协商缓存」 为什么需要 HTTP 缓存 呢 ? &#x1f447; 直接使用缓存速度 >> 远比重新请求快 缓存对象有那些呢 &#xff1f;&#x1f447; 「图片」 「JS文件」 「CSS文件」 等等 文章目录Ⅰ、http缓存Ⅱ…

Hi3559av100平台8路1080P/720P输入配置流程梳理

平台&#xff1a; hi3559av100 硬件连接&#xff1a; 8路YUV422 -> 4路 2lane MIPI -> hi3559av100 最终效果&#xff1a; 经过处理后&#xff0c;后端可以实现8路独立视频流处理&#xff1b; 可以自由和后级VPSS/VENC/VO等模块进行绑定和处理 前言&#xff1a; &…

Spring-整合Mybatis

Spring-整合Mybatis 6&#xff0c;Spring整合 6.1 Spring整合Mybatis思路分析 6.1.1 环境准备 在准备环境的过程中&#xff0c;我们也来回顾下Mybatis开发的相关内容: 步骤1:准备数据库表 Mybatis是来操作数据库表&#xff0c;所以先创建一个数据库及表 create database…