【网络原理】网络原理简单认识 —— 内含网络通信基础、五元组、网络协议(OSI 七层协议、TCP/IP 五层(或四层)协议)、封装和分用

目录

1. 网络互连

1.1 局域网LAN

1.2 广域网WAN

2 网络通信基础

2.1 IP地址

2.2 端口号

2.3 网络协议

3. 五元组

4. 协议分层

4.1 OSI 七层网络模型

4.2 TCP/IP 五层(或四层)网络模型

4.3 网络设备所在分层(经典笔试题)

5. 网络数据传输的基本流程

5.1 发送方的工作(封装)

5.2 接收方的工作(分用)


1. 网络互连

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

网络互连:将多台计算机连接在一起,完成数据共享。实现跨主机通信。咱们未来工作很可能是成为后端开发工程师,就是写服务器.和客户端通信,肯定会涉及到网络。

数据共享本质是网络数据传输即计算机之间通过网络来传输数据,也称为网络通信。根据网络互连的规模不同,可以划分为局域网和广域网

1.1 局域网LAN

局域网,即 Local Area Network,简称LAN。Local 即标识了局域网是本地,局部组建的一种私有网络。(把几个电脑,通过路由器,连接到一起)

局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。

局域网组建网络的方式有很多种:

基于网线直连,基于集线器组建(一根网线,岔出来两根),基于交换机组建(组建局域网,但是不能跨局域网),基于交换机和路由器组建。

路由器:wifi本质上就是个无线路由器,路由器本质上就是把两个局域网给连起来.

现在也有带路由功能(三层转发)交换机也是很多很常见的,交换机和路由器之间的界限越来越模糊。

光猫算是路由器,路由器/交换机都是有电口(插网线的),也有光口的(插光纤的)。光纤、网线等都是传输信号的介质。

1.2 广域网WAN

广域网,即 Wide Area Network,简称WAN

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

如果有北、中、南等分公司,甚至海外分公司,把这些分公司以专线方式连接起来,即称为“广域 网”。

如果属于全球化的公共型广域网,则称为互联网(又称公网,外网),属于广域网的一个子集。

有时在不严格的环境下说的广域网,其实是指互联网。

所谓 "局域网" 和 "广域网" 只是一个相对的概念(没有明确的界线)。比如,我们有 "天朝特色" 的广域网,也可以看 做一个比较大的局域网。

2 网络通信基础

网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。

那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。

2.1 IP地址

IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机(设备)的网络地址。描述了一个设备,在网络上的地址。就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节数字),如:01100100.00000100.00000101.00000110。

通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。

  • 特殊IP:127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1本机环回。
  • 主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
  • 在Windows系统中,打开cmd窗口中,输入ipconfig命令,可以显示你设备的IP地址(IPv4或IPv6地址旁边的行)。

2.2 端口号

端口号用于描述某个具体的应用程序。区分一个主机上不同的程序。端口号也是一个整数,2个字节,相对较小的数字。0~65535范围的数字在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。

同一个主机上两个不同的进程(跑起来的应用程序),不能绑定同一个端口号。即一个端口号只能被一个程序绑定,但一个进程可以绑定多个端口号。

类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。在实际的通信过程中,IP和端口往往是"一对"。

2.3 网络协议

协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。

所谓的协议,就是通信双方进行的一种约定,发送方约好了我发的数据是啥样的,接收方按照这个固定的格式来进行解析。

协议(protocol)最终体现为在网络上传输的数据包的格式。

为什么需要协议?就好比见网友,彼此协商胸口插支玫瑰花见面,这就是一种提前的约定,也可以称之为协议。

计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。

  • 计算机生产厂商有很多;
  • 计算机操作系统,也有很多;
  • 计算机网络硬件设备,还是有很多;
  • 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是 网络协议

知名协议的默认端口

系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号(0 一般不使用),这些端口预留给服务端程序绑定广泛使用的应用层协议,如:

  • 22端口:预留给SSH服务器绑定SSH协议
  • 21端口:预留给FTP服务器绑定FTP协议
  • 23端口:预留给Telnet服务器绑定Telnet协议
  • 80端口:预留给HTTP服务器绑定HTTP协议
  • 443端口:预留给HTTPS服务器绑定HTTPS协议
以上只是说明 0 ~ 1023 范围的知名端口号用于绑定知名协议,但某个服务器也可以使用其他 1024 ~65535 范围内的端口来绑定知名协议。

3. 五元组

在TCP/IP协议中,用五元组来标识一个网络通信:
  • 源IP:标识源主机
  • 源端口号:标识源主机中该次通信发送数据的进程
  • 目的IP:标识目的主机
  • 目的端口号:标识目的主机中该次通信接收数据的进程
  • 协议类型:标识发送进程和接收进程双方约定的数据格式

五元组在网络通信中的作用,类似于发送快递:

可以在cmd中,输入 netstat -ano 查看网络数据传输中的五元组信息:

如果需要过滤(一般是通过端口号或进程PID过滤),可以使用 netstat -ano | findstr 过滤字符串

4. 协议分层

网络协议整体的规模很大,整体实现就很复杂,更好的解决方式就是把一个大的复杂的协议,拆成多个小的更简单的协议,每个协议负责一部分工作(负责一部分功能,化繁为简)。

但某些小协议之间,起到的功能和作用是类似,针对这些按照协议的功能/作用,再进行"分类"("分层")。这就好比代码拆分出很多类,有些类功能差不多,就可以放到同一个包里。构成了“协议栈”

分类并约定了不同层次之间的调用关系:"上层协议,调用下层协议","下层协议,给上层协议提供支持"。

协议分层优点:

  1. 每层协议不需要理解其它层协议的细节,降低了学习和维护成本(更好的做到了封装
  2. 把对应层的协议替换成其他协议不会对整体产生影响(更好的解耦合

当前互联网世界,协议分层有两种风格:OSI 七层网络模型(没有被实现),TCP/IP 五层(或四层)网络模型。

4.1 OSI 七层网络模型

OSI 七层模型既复杂又不实用,存在于教科书中,并没有被实现出来。

4.2 TCP/IP 五层(或四层)网络模型

TCP/IP 是 OSI 简化的实现方式。其中物理层是属于纯硬件层的,与程序员关系不大,所以也可以认为是 TCP/IP 是四层网络模型。

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。

简单版本理解:

  • 应用层:应用程序相关的,描述了传输的数据,用户要怎么使用等。
  • 传输层:只关注数据传输起点和终点,不关注过程,端到端之间的传输。
  • 网络层:主要负责数据传输路径的选择,走哪条路划算。路径规划
  • 数据链层:主要负责相邻两个节点(主机、路由器等设备)之间,具体是怎么传输的。比如是通过网线、光纤、还是wifi等方式。
  • 物理层:约定网络通信中基础硬件设备是什么样的规格的。比如像通信使用的网线,网口等设备是什么样的规格的。

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。即上层协议要调用下层协议,下层协议给上层协议提供服务。越往下的,越接近硬件设备越往上,就越接近用户。

详细版本解读:

  • 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远 程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
  • 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发 送到目标主机。
  • 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表 的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
  • 数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线 上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
  • 物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的 同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。 物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
  • 整个的网络协议中,协议分成了很多层。
  • 上层协议要调用下层协议(上层协议把数据交给下层,继续封装)。下层协议要给上层协议提供支持(下层协议解析好数据,交给上层)。
  • 这里的这几层协议之间是有明确的层级关系的,只有相邻的两层之间才能进行交互(不能跨层交互)。
  • 应用层是应用程序实现的(程序猿自己写的代码相关的),所以直接和咱们打交道的其实是应用层。下面四层都是现成的,只是需要知道是怎么工作的就行了,不需要你实现一个传输层协议,(但是经常会涉及到,实现一个应用层协议),后续重点讲解应用层和传输层。

4.3 网络设备所在分层(经典笔试题)

  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的四层整个一台主机,五层都会涉及到。
  • 对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层
  • 对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层
  • 对于集线器,它只实现了物理层

交换机的作用,是针对路由器的端口进行扩展。路由器上的端口可能是有限。

集线器的作用,是在物理层,把网线一分为二。两条线是冲突的,同一时刻只能一个方向传输数据。(不常用)

注意这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。

随着现在网络设备技术的不断发展,也出现了很多3层或4层交换机,4层路由器。以下说的网络设备都是传统意义上的交换机和路由器。

5. 网络数据传输的基本流程

站在协议分层的背景下来理解。以QQ为例,用户A给用户B发送一个hello。

此处网络数据传输的单位我们都以报来命名,不做区分。

5.1 发送方的工作(封装)

应用层

用户A在输入框中输入hello字符串,qq应用程序就把 字符串,给构造成一个 应用层数据报。
这里我们不清楚qq的 应用层协议具体的数据格式,每个应用程序都不一定一样(自定义的),
应用层协议,往往是根据具体的场景,具体的需要,由程序员自主决定的。
假设应用层协议的格式为:发送方qq号;发送时间;接收方qq号;消息内容
所谓的"应用层数据报"本质上就是一个遵守了约定格式的字符串(字符串拼接)。程序要调用操作系统的api,把这个应用层数据,交给传输层。

传输层

进入系统内核了,在传输层中要把上述应用层数据,构造成 传输层的数据报
传输层使用到最知名的协议UDP或TCP。此处以UDP协议为例,就需要构造出 UDP数据报(在应用层数据基础上,加个UDP报头,“字符串拼接”)
所谓的"报头"就是一个"标签",通过标签表示当前要把这个消息怎样进行传输。 传输层的协议报头包含了源端口和目的端口。
UDP报头是一个特定格式的字符串(二进制数据),此处就像字符串拼接一样,把报头和后面的数据(载荷(payload))拼到一起。
UDP数据报 = UDP报头 + 数据载荷(Payload,也就是完整的应用层数据)
然后传输层就把这个UDP数据报,交给网络层。

网络层

传输层使用到最知名的协议IР协议。基于上述数据,打包成一个 IP数据报。
IP报头也是一个字符串,包含了另外一组信息(最核心的信息, 源IP和目的IP)
然后网络层数据报准备好,还需要进一步的交给数据链路层。

数据链路层

数据链路层最知名的协议,叫做"以太网”,基于上述数据,还要打包成一个 "以太网数据帧"
以太网帧头中包含最重要的信息是,源mac地址和目的mac地址
mac地址,也是用来描述一个设备在网络上的地址的,主要关心的是两个相邻节点的数据传输。
然后数据链路层以太网数据帧准备好,继续往下传输,交给物理层。

物理层

把上述数据,转换成二进制的数据(一串0101),通过电信号/光信号进行传输,此时就真正的把数据给发送出去了。

    上述过程,从应用层到物理层,层层加码。这个过程称为"封装”(这个封装不是面向对象的封装)

    数据发送出去之后,就会经过一系列的交换机和路由器进行转发,A和B一般来说不是直接网线连接的,中间还要经过很多的交换机/路由器设备进行转发。

    当数据到达B这边之后,B就要针对上述数据进行"分用"(针对上述数据报进行层层的解析)

    5.2 接收方的工作(分用)

    此处只考虑B的接收(省略中间的转发过程)

    物理层

    网卡接收到的是光信号和电信号,是在物理层。

    把这个光电信号转换回二进制的数据。转换回的这个数据,其实是一个以太网数据帧。把这个数据交给数据链路层中解析。

    数据链路层

    数据链路层以太网协议对这个数据进行解析,去掉帧头和帧尾,取出载荷(IP数据报),交给上层网络层。

    以太网数据帧帧头里有记录,这个载荷是不是一个IP数据报。

    网络层

    网络层(IP协议)对这个数据进行解析,解析出IP报头,取出载荷(UDP数据报),交给上层传输层。

    IP报头里会记录,载荷是UDP还是 TCP协议的数据报。

    传输层

    传输层(UDP协议)再对这个数据进行解析,解析出UDP报头,取出载荷(应用层数据报),交给上层对应的应用层程序。

    UDP报头里有一个重要的字段"目的端口”,目的端口是一个具体的应用程序关联在一起的,因此就可以根据这个端口把数据交给应用程序。

    应用层

    应用层qq应用程序,就会针对应用层协议也进行解析,显示到界面上。

    上述从下到上层层解析,这个过程称为"分用"。

    数据报在网络中还会经历一定的转发过程。物理层传输给下一个节点:

    • 如果是交换机的话:交换机先分用数据解析到数据链路层,更新以太网数据帧的帧头里的地址,然后再重新封装并进行转发。
    • 如果是路由器的话:路由器先分用数据到网络层,拿到IP地址后,进行下一阶段的路径规划,然后重新往下封装并进行转发。


    好啦Y(^o^)Y,本节内容到此就结束了。下一篇内容一定会火速更新!!!

    后续还会持续更新网络通信方面的内容,还请大家多多关注本博主,第一时间获取新鲜的知识。

    如果觉得文章不错,还请一键三连哟!

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

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

    相关文章

    嵌入式之硬件学习(三)通信方式、串口通信

    目录 一、通信种类 1、并行通信 2、串行通信 3、单工模式(Simplex Communication) 4、半双工通信(Half-Duplex Communication) 5、全双工通信(Full-Duplex Communication) 6、串行的异步通信与同步通信 (1)异步通信 (2)同…

    【微信小程序】3、SpringBoot整合WxJava发送订阅消息

    1、创建消息模板 在公共模板库里面选择符合自己业务场景的消息模板,例如: 每个消息模板最多选择5项,可根据自己业务需求自行选择,顺序也可以自己决定。提交后,我们就得到了属于自己的消息模板ID 2、文档阅读 官方文…

    Flask 快速精通:从入门到实战的轻量级 Web 框架指南

    Flask 作为 Python 生态中最受欢迎的轻量级 Web 框架,以其简洁灵活的设计理念赢得了开发者的青睐。本文将系统梳理 Flask 的核心概念与实战技巧,帮助你快速掌握这一强大框架。 一、Flask 框架概述 1.1 轻量级框架的核心特性 Flask 诞生于 2010 年&…

    Python爬取豆瓣短评并生成词云分析

    一、项目概述 本项目的目标是爬取豆瓣上某部电影的短评数据,并生成词云进行情感分析。我们将使用Python编程语言,借助爬虫技术获取数据,并利用自然语言处理和数据可视化工具进行分析。具体步骤包括: 爬取豆瓣短评数据。数据清洗…

    Controller Area Network (CAN) 通信机制简介

    目录 1. CAN 概述 2. 物理结构与传输机制 3. 消息格式与仲裁机制 4. 错误检测与总线状态 5. 工业用 CAN 接口 6. 本讲总结 1. CAN 概述 CAN(Controller Area Network)是由德国博世(Bosch)公司于 1983 年提出的串行通信协议…

    我有一个想法

    我有一个想法 我想为家乡做点事情,但是又不知道从哪里开始。 也许为家乡的教育做点事情是比较靠谱的。 于是,我就想到了,是不是可以在高中学校,设立一个“鸿鹄”奖学金? 这个奖学金怎么使用呢? 在每年9月份…

    【Pandas】pandas DataFrame stack

    Pandas2.2 DataFrame Reshaping sorting transposing 方法描述DataFrame.droplevel(level[, axis])用于**从 DataFrame 的索引(行或列)中删除指定层级(level)**的方法DataFrame.pivot(*, columns[, index, values])用于重塑 Dat…

    Java 自动关闭资源语法糖 - try-with-resources

    文章目录 Java 自动关闭资源语法糖 - try-with-resources前言优势1、自动资源管理2、处理多重资源3、异常处理更健壮4、适用条件 总结 Java 自动关闭资源语法糖 - try-with-resources 前言 日常开发中,我们经常会看到如下代码: try (InputStream is …

    MyBatis中的动态SQL是什么?

    大家好,我是锋哥。今天分享关于【MyBatis中的动态SQL是什么?】面试题。希望对大家有帮助; MyBatis中的动态SQL是什么? 超硬核AI学习资料,现在永久免费了! MyBatis中的动态SQL指的是根据不同的条件&#x…

    【Java反射】如何新增对象中的属性,与JavaScript中的直接添加属性有什么区别?

    问&#xff1a; Object obj new Object(); //获取一个类的class对象 Class<?> objClass Object.class; try { //通过newInstance方法创建一个新的属性 Field newField Field.class.newInstance(); newField.setAccessible(true); newField.set(obj, “index”); }ca…

    java spring boot Swagger安装及使用

    https://springdoc.org/ 可能原因分析 &#x1f50d; 原因 1&#xff1a;SpringFox 版本与 Spring Boot 版本不兼容 ❌ SpringFox 3.0.0 不完全兼容 Spring Boot 2.6 及更高版本&#xff0c;可能导致 NullPointerException。 Spring Boot 3.x 完全不支持 SpringFox&#xff0c…

    电商云仓/前置仓的物流高效监控、管理、预警系统,快递鸟DMS

    在电商行业蓬勃发展的当下&#xff0c;电商云仓和前置仓作为物流配送体系的关键环节&#xff0c;其高效运作直接影响着消费者体验与企业竞争力。快递鸟 DMS 物流交付管理平台&#xff0c;以其卓越的物流监控、管理及预警功能&#xff0c;成为电商企业优化云仓和前置仓物流管理的…

    HarmonyOS Next深度解析:高德定位SDK高效集成与实战指南

    HarmoyOS Next 实现高德定位SDK 注&#xff1a;作者采用版本为 HarmonyOS 5.0.0 Release SDK和DevEco Studio 5.0.0 Release。 1.获取本地AppID&#xff1a; 在index.pages的abountToAppear( ) 方法中获取appID、并打印在Log日志&#xff0c;即可在程序运行时获取本地项目的…

    【技术】记一次 Docker 中的 ES 数据迁移,使用 Reindex API

    记一次 Docker 中的 ES 数据迁移&#xff0c;使用 Reindex API 环境背景需求背景开始迁移确认老 ES 的访问地址在新 ES 中创建索引的 Mapping (选配)在新 ES 中配置老 ES 的地址开始迁移数据数据验证 首先声明&#xff0c;是因为环境限制&#xff0c;没有办法使用同步工具&…

    yii2基础版本安装记录,实录有点乱看标题即可

    因为使用php 安装的是docker环境所有进入到容器安装ridh_mfe_api 为挂载目录 Nginx及PHP挂载配置 因为使用php 安装的是docker环境所有进入到容器安装 ridh_mfe_api 为挂载目录 进入容器 % docker exec -it php sh /var/www/html # ls index.html index.php composer crea…

    前端跨域解决方案(3):CORS

    1 CORS 核心 CORS&#xff08;Cross-Origin Resource Sharing&#xff09;&#xff0c;即跨域资源共享&#xff0c;是目前最主流的跨域方案&#xff0c;它通过服务器返回的特殊 HTTP 头&#xff0c;允许浏览器放行跨域请求。与传统的 JSONP 相比&#xff0c;CORS 具有明显的优…

    SpringBoot源码解析(十五):spring-boot-autoconfigure.jar的模块化设计

    前言 SpringBoot的自动配置是其革命性特性的核心&#xff0c;而spring-boot-autoconfigure.jar则是这一机制的物理载体。本文将深入剖析这个JAR包的模块化设计哲学&#xff0c;从包结构划分、条件注解体系到自动配置加载机制&#xff0c;全方位解析SpringBoot如何通过精妙的模…

    学习笔记九:docker容器日志问题

    docker容器日志问题 背景如何处理日志问题主要通过日志轮询方式处理。修改 Docker 配置日志快速清理 背景 Docker 默认使用的是 json-file 日志驱动。日志会一直写&#xff0c;一直写&#xff0c;没有限制、没有轮转、没有清理&#xff01; 日志默认位置&#xff1a; /var/lib…

    低成本同屏方案:电脑 + 路由器实现 50 台安卓平板实时同屏

    引言 在教育机构、小型培训场景或企业简易会议中&#xff0c;常面临以最低成本实现多设备同屏的需求。本文针对 "电脑 路由器 50 台安卓平板" 的极简硬件组合&#xff0c;详细剖析实时同屏的实现路径&#xff0c;从问题分析到技术落地提供全流程解决方案&#xff0…

    Unity ECS DOTS技术实现50000个cube随机循环移动流程

    前言 之前使用过ECS面向组件开发&#xff0c;一直想试一下Unity的ECS DOTS技术&#xff0c;但是苦于入门门槛太高&#xff0c;下载官方的Demo&#xff0c;发现代码哪哪儿都看不懂&#xff0c;一大堆API闻所未闻&#xff0c;而且没有一个入门的流程&#xff0c;导致无法进行下去…