【Linux网络-网络基础】TCP/IP五层(或四层)模型+网络传输的基本流程

一、TCP/IP五层(或四层)模型

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

TCP/IP 通讯协议采用了 5 层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

❍ 物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。

❍ 数据链路层:负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。

❍ 网络层:负责地址管理和路由选择。例如在 IP 协议中,通过 IP 地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。

❍ 传输层:负责两台主机之间的数据传输. 如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。

❍ 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。

物理层我们考虑的比较少,我们只考虑软件相关的内容,因此很多时候我们直接称为TCP/IP四层模型

一般而言:

  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容

  • 对于一台路由器,它实现了从网络层到物理层

  • 对于一台交换机,它实现了从数据链路层到物理层

  • 对于集线器,它只实现了物理层

但是并不绝对,很多交换机夜实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)

上面的内容我们只是懂了一些基本概念,还是达不到我们的目标,下面我们再次重新理解协议和协议分层

为什么要有TCP/IP协议?

首先,即便是单机,你的计算机内部,其实都是存在协议的,比如:其他设备和内存通信,会有内存协议。其他设备和磁盘通信,会有磁盘相关的协议,比如:SATA,IDE,SCSI等。只不过我们感知不到罢了。而且这些协议都在本地主机各自的硬件中,通信的成本,问题比较少

其次,网络通信最大的特点就是主机之间变远了。任何通信特征的变化,一定会带来新的问题,有问题就要解决问题,所以需要新的协议

 

所以,为什么要有TCP/IP协议?本质就是通信主机距离变远了

什么是TCP/IP协议?

TCP/IP协议的本质是一种解决方案

TCP/IP协议能分层,前提是因为问题们本身能分层

TCP/IP协议与操作系统的关系(宏观上,怎么实现的)

所以究竟什么是协议?

截止到目前,我们还没接触过任何协议,但是如何朴素的理解协议,我们已经可以试试了

OS源代买一般都是用C/C++语言写的

下面,仔细看看下面的图

 

问题:主机B能识别data,并且准确提取a=10,b=20,c=30吗?

回答:答案是肯定的!因为双方都有同样的结构体类型 struct protocol,也就是说,用同样的代码实现协议,用同样的自定义数据类型,天然就具有“共识”,能够识别对方发来的数据,这不就是约定吗?

关于协议的朴素理解:所谓协议,就是通信双方都认识的结构化的数据类型

因为协议栈是分层的,所以,每层双方都有协议,同层之间,互相可以认识对方的协议

网络购物,快递单的例子

二、网络传输的基本流程

局域网(以太网为例)通信原理

  • 首先回答,两台主机在同一个局域网,是否能够直接通信?是的

  • 原理类似于上课,老师和学生在同一个教室中,老师让张三同学起来,其他同学听见了,但是自动忽略这个信息,张三听见了,张三站了起来

  • 每台主机在局域网上,要有唯一的标识来保证主机的唯一性:mac地址

认识MAC地址

✸ MAC地址用来识别数据链路层中相连的节点

✸ 长度为48位,即6个字节,一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)

✸ 在网卡出厂时就确定了,不能修改,mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会会冲突;也有些网卡支持用户配置mac地址)

后续我们详细谈论数据链路层的时候,会谈mac帧协议,此处我们做一个了解即可

 

以太网中,任何时刻,只允许一台机器向网络中发送数据;如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞,所有发送数据的主机要进行碰撞检测和碰撞避免

没有交换机的情况下,一个以太网就是一个碰撞域,局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过mac地址判定

这里可以试着从系统角度来理解局域网通信原理,因为任何时刻,只允许一台机器向网络中发送数据,这不就是临界资源吗?对数据的访问就是对临界资源的访问

初步明白了局域网通信原理,再来看同一个网段内的两台主机进行发送消息的过程

其中每层都有协议,所以当我们进行上述传输流程的时候,要进行封装和解包 

下面我们明确一下概念

 

❍ 报头部分,就是对应协议层的结构体字段,我们一般叫做报头

❍ 除了报头,剩下的叫做有效载荷

❍ 故,报文 = 报头 + 有效载荷

然后我们在明确一下不同层的完整报文的叫法

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。

应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。

首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。

数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的"上层协议字段"将数据交给对应的上一层协议处理。

最后,在整体复盘一下

 

在网络传输的过程中,数据不是直接发送给对方主机的,而是先要自定向下将数据交付给下层协议,最后由底层发送,然后由对方主机的底层来进行接受,再自底向上进行向上交付

数据包封装和分用

下图为数据封装的过程

 下图为数据分用的过程

从今天开始,我们学习任何协议,都要先宏观上建立这样的认识:

❍ 要学习的协议,是如何做到解包的?只有明确了解解包,封包也就能理解

❍ 要学习的协议,是如何做到将自己的有效载荷,交付给上层协议的?

网络中的地址管理-认识IP地址

IP协议有两个版本,IPv4和IPv6,我们接下来,凡是提到IP协议,没有特殊说明的,默认都是IPv4

  • IP地址是在IP协议中,用来标识网络中不同主机的地址

  • 对于IPv4来说,IP地址是一个4字节,32位的整数

  • 我们通常也使用“点分十进制”的字符串表示IP地址,例如 192.168.0.1;用点分割的每一个数字表示一个字节,范围是0-255;

跨网段的主机的数据传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器

下面是一张示意图

 

首先理解一下IP地址的意义

  • 为什么要去目标主机,要先走路由器?

网络互联:互联网是由无数个不同的网络组成的,这些网络可能是局域网、城域网或广域网。路由器是连接这些不同网络的设备,它们负责将数据从一个网络传输到另一个网络。

最优路径选择:路由器根据网络拓扑和路由协议,选择数据包从源主机到目的主机的最优路径。这个过程涉及到路由表的查询和更新。

数据包转发:当数据包到达路由器时,路由器会检查数据包的目的IP地址,然后根据路由表决定下一个转发节点,并将数据包发送出去。

地址解析:IP地址是一个逻辑地址,而实际的数据传输需要在物理网络上进行。路由器负责将逻辑地址解析为物理地址(如MAC地址),以便在物理网络上正确传输数据包。

网络隔离:路由器还可以提供网络隔离的功能,通过设置访问控制列表(ACL)等安全措施,防止未经授权的访问。

  • 目的IP的意义?

目的IP地址在网络通信中具有至关重要的意义,以下是其主要作用和意义:

标识接收方:目的IP地址指定了数据包要发送到的最终目标设备。在网络中,每个设备都需要有一个唯一的IP地址,目的IP地址就是用来标识这个特定的接收设备。

数据包路由:网络中的路由器使用目的IP地址来确定数据包应该被转发到哪个网络。路由器根据目的IP地址在路由表中查找匹配的条目,以决定数据包的下一跳地址。

网络层寻址:在OSI模型中,IP地址属于网络层。网络层负责寻址和路由,目的IP地址是这一过程中的关键组成部分,它帮助网络层确定如何将数据包从源主机传输到目的主机。

分段和重组:在数据包传输过程中,如果数据包太大而无法在一个网络段中传输,它可能会被分段。每个分段都会包含目的IP地址,以确保所有分段都能正确地重组到目的地。

多播和广播:目的IP地址还可以用于特殊类型的通信,如多播(发送到一组特定的设备)和广播(发送到网络上的所有设备)。特殊的目的IP地址,如224.0.0.0到239.255.255.255用于多播,而255.255.255.255用于本地广播。

网络安全:目的IP地址在网络安全策略中也扮演重要角色。例如,防火墙可以使用目的IP地址来允许或拒绝特定的网络流量。

端到端通信:目的IP地址是实现端到端通信的关键,它确保了数据可以从发送方传输到接收方,无论这两者之间相隔多远或者经过多少个网络设备。

以下是目的IP地址的一些具体意义:

  • 唯一性:目的IP地址必须是唯一的,以确保数据包能够准确地到达预期的设备。

  • 层次性:IP地址具有层次结构,包括网络部分和主机部分,这有助于路由器高效地处理数据包。

  • 可路由性:目的IP地址必须是可路由的,这意味着它必须是一个有效的公网或私网地址,且在路由器的路由表中有所记录。

总之,目的IP地址是网络通信中不可或缺的元素,它确保了数据能够被正确地发送、路由和接收。

然后结合封装与解包,体现路由器解包和重新封装的特点

 

对比IP地址和MAC地址的区别

◉ IP地址在整个路由的过程中,一直不变(目前,我们只能这样说明,后面在修正)

◉ Mac地址一直在变

◉ 目的IP是一种长远目标,Mac是下一阶段目标,目的IP是路径选择的重要依据,mac地址是局域网转发的重要依据

提炼IP网络的意义和网络通信的宏观流程

 P网络层存在的意义:提供网络虚拟层,让世界的所有网络都是IP网络,屏蔽了最底层网络的差异

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

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

相关文章

POI优化Excel录入

57000单词原始录入时间258S 核心代码: List<Word> wordBookList ExcelUtil.getReader(file.getInputStream()).readAll(Word.class);if (!CollectionUtil.isEmpty(wordBookList)) {for (Word word : wordBookList) {//逐条向数据库中插入单词wordMapper.insert(word);}…

Solon —— 容器

说明 Solon 的核心概念有 IoC、AOP 和本地事件总线。有人常常有误解以为 IoC 和 AOP 是 Spring 提出的&#xff0c;其实这两种思想在Spring 之前就已经有了&#xff0c;但 Spring 把这两个思想在技术上落地和推广做得很好&#xff0c;让 Ioc 和 AOP 广为人知。 核心概念 IoC…

java每日精进 2.13 MySql迁移人大金仓

1.迁移数据库 1. 数据库创建语句 MySQL&#xff1a; CREATE DATABASE dbname; 人大金仓&#xff08;Kingbase&#xff09;&#xff1a; 在人大金仓中&#xff0c;CREATE DATABASE 的语法通常相同&#xff0c;但可能需要特别注意字符集的指定&#xff08;如果涉及到多语言支持…

《DeepSeek 一站式工作生活 AI 助手》

最近国产AI工具DeepSeek在全球火出圈&#xff0c;登顶多个国家应用商店&#xff0c;下载量一路飙升。这匹AI “黑马” 到底凭什么征服全球用户&#xff1f;让我们全方位解锁DeepSeek——从基础入门到高阶玩法&#xff0c;从实用技巧到隐藏功能。 DeepSeek是一款功能强大的国产A…

php-fpm

摘要 php-fpm(fastcgi process manager)是PHP 的FastCGI管理器&#xff0c;管理PHP的FastCGI进程&#xff0c;提升PHP应用的性能和稳定性 php-fpm是一个高性能的php FastCGI管理器&#xff0c;提供了更好的php进程管理方式&#xff0c;可以有效的控制内存和进程&#xff0c;支…

istio实现灰度发布,A/B发布, Kiali网格可视化(二)

代码发布是软件开发生命周期中的一个重要环节&#xff0c;确保新功能和修复能够顺利上线。以下是几种常见的代码发布流程。在学习灰度发布之前。我们首先回忆下代码发布常用的几种方法。 A/B&#xff08;蓝绿&#xff09;发布&#xff1a; 蓝绿部署是一种通过维护两套独立的环…

从零搭建微服务项目Base(第7章——微服务网关模块基础实现)

前言&#xff1a; 在前面6章的学习中已经完成了服务间的调用实现&#xff0c;即各微服务通过nacos或eureka服务器完成服务的注册&#xff0c;并从nacos中拉取配置实现热更新。当某个服务接口需要调用其他服务时&#xff0c;通过feign定义接口&#xff0c;并通过注解配置服务名…

【异常错误】pycharm debug view变量的时候显示不全,中间会以...显示

异常问题&#xff1a; 这个是在新版的pycharm中出现的&#xff0c;出现的问题&#xff0c;点击view后不全部显示&#xff0c;而是以...折叠显示 在setting中这么设置一下就好了&#xff1a; 解决办法&#xff1a; https://youtrack.jetbrains.com/issue/PY-75568/Large-stri…

2025最新智能优化算法:改进型雪雁算法(Improved Snow Geese Algorithm, ISGA)求解23个经典函数测试集,MATLAB

一、改进型雪雁算法 雪雁算法&#xff08;Snow Geese Algorithm&#xff0c;SGA&#xff09;是2024年提出的一种新型元启发式算法&#xff0c;其灵感来源于雪雁的迁徙行为&#xff0c;特别是它们在迁徙过程中形成的独特“人字形”和“直线”飞行模式。该算法通过模拟雪雁的飞行…

LearnOpenGL——高级OpenGL(下)

教程地址&#xff1a;简介 - LearnOpenGL CN 高级数据 原文链接&#xff1a;高级数据 - LearnOpenGL CN 在OpenGL中&#xff0c;我们长期以来一直依赖缓冲来存储数据。本节将深入探讨一些操作缓冲的高级方法。 OpenGL中的缓冲本质上是一个管理特定内存块的对象&#xff0c;它…

nodejs及搭建

java项目可以运行在tomcat服务器&#xff0c;开始完成前后端完全分离。前端有自己独立的工程。我们需 要把前端独立的工程运行起来。---运行在nodejs服务器下。 1.安装nodejs 检验是否安装过 node --version 2.安装npm java项目需要依赖jar&#xff0c;安装maven。 前端项目…

Jenkins插件管理切换国内源地址

安装Jenkins 插件时&#xff0c;由于访问不了国外的插件地址&#xff0c;会导致基本插件都安装失败。 不用着急&#xff0c;等全部安装失败后&#xff0c;进入系统&#xff0c;修改插件源地址&#xff0c;重启后在安装所需插件。 替换国内插件更新地址 选择&#xff1a;系统…

关于uniApp的面试题及其答案解析

我的血液里流淌着战意&#xff01;力量与智慧指引着我&#xff01; 文章目录 1. 什么是uniApp&#xff1f;2. uniApp与原生小程序开发有什么区别&#xff1f;3. 如何使用uniApp实现条件编译&#xff1f;4. uniApp支持哪些平台&#xff0c;各有什么特点&#xff1f;5. 在uniApp中…

2025年2月9日(数据分析_2)

散点图 from matplotlib import pyplot as plt from matplotlib import font_manager # 字体相关# 字体 font_path = r"C:\Windows\Fonts\msyh.ttc" my_font = font_manager.FontProperties(fname=font_path)x = list(range(31)) x2 = list(range(31, 62)) a3 = [11…

11.编写前端内容|vscode链接Linux|html|css|js(C++)

vscode链接服务器 安装VScode插件 Chinese (Simplified) (简体中⽂) Language Pack for Visual Studio CodeOpen in BrowserRemote SSH 在命令行输入 remote-ssh接着输入 打开配置文件&#xff0c;已经配置好主机 点击远程资源管理器可以找到 右键链接 输入密码 …

【插件】前端生成word 文件

文章目录 1、背景2、方式一&#xff1a;html-docx-js2.1 具体代码2.2 前端生成word文件的样式2.3 总结 3、方式二&#xff1a;pizzip docxtemplater3.1 具体代码3.2 前端生成word文件的样式3.3 总结 4、参考链接 1、背景 在实际开发中&#xff0c;业务需要&#xff0c;需要把数…

大道至简 少字全意 易经的方式看 缓存 mybatis缓存 rendis缓存场景 案例

目录 介绍 mybatis缓存 一级缓存 1.是什么 2.特点 3.场景 mybatis 二级缓存 1.是什么 2.特点 3.配置步骤 注意 一级缓存问题 二级缓存问题 扩展 1.MyBatis集成 Redis 2.直接使用Redis redis 缓存 一、String 字符串 二、Llst 列表 三、Hash 哈希 四、Set…

RocketMQ消息是如何储存的?

前言 之前有写过关于kafka的存储结构的文章。RocketMQ大部分是借鉴了Kafka的设计原理&#xff0c;但是副本集群机制和存储结构有些差异。看完本篇文章可以看看这篇。消息中间件之kafka RocketMQ 的消息存储机制是其高吞吐、高可用和高可靠性的关键。以下将介绍 RocketMQ 消息存…

10分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统

作者&#xff1a;后端小肥肠 目录 1. 前言 为什么选择DeepSeek&#xff1f; 本文技术栈 2. 环境准备 2.1. 后端项目初始化 2.2. 前端项目初始化 3. 后端服务开发 3.1. 配置文件 3.2. 核心服务实现 4. 前端服务开发 4.1. 聊天组件ChatWindow.vue开发 5. 效果展示及源…

Coze扣子怎么使用更强大doubao1.5模型

最近&#xff0c;豆包刚刚发布了最新的doubao1.5系列模型&#xff0c;并且加量不加价。 在性能极大进步的情况下&#xff0c;价格还与之前一致。真是业界良心了。 在同样的价格下&#xff0c;肯定要使用性能更强大的模型嘛 于是我准备把所有的智能体和工作流切换到doubao1.5…