网络传输的基本流程

目录

0.前言

1.TCP/IP四层协议模型的认识

2.数据传输的大致流程

3.局域网通信的原理

4.同一网段下两台主机之间的通信

5.不同网段下两台主机之间的通信

0.前言

不知道你有没有这样的疑问,为什么不同的设备之间能够进行数据的发送和接收?不同的通信设备之间到底是如何进行数据的发送和接收的?这似乎是一个很神奇不可思议的过程,但我相信,在这篇文章中,你会找到答案。

1.TCP/IP四层协议模型的认识

想要明白数据是如何从一台设备发送到另一台设备的,我们首先要弄清楚TCP/IP通信协议。世界上所有的要用于通信的设备,不管它内部是Linux操作系统,还是Windows操作系统,还是其他的任何操作系统,要想实现通信,必须遵守相同的通信协议,只有通信双方都遵守相同的通信协议,你发送的数据我才能认识,我发送的数据你也能认识。所以,早在网络发展之初,国际标准委员会(ISO)就制定了网络通信的标准模型 —— OSI七层网络模型;ISO只是负责制定标准,并不负责实现标准,而是由各个平台的开发人员来实现。开发人员在实现OSI七层模型的时候发现,OSI七层模型的上三层可以合并为一层,而且这样更实用,于是,便有了TCP/IP五层网络协议模型,但最下层的物理层我们一般不谈,所以便有了TCP/IP四层网络协议模型。

并且优化之后的网络协议模型可以和计算机的层次结构对应起来,网络协议的每一层都可以在计算机计算机中对应的层次实现。

物理层:物理层在计算机的底层硬件中实现,网络通信中具有代表性的硬件 —— 网卡,就是在这一层实现的,主要负责光电信号的传递。

数据链路层:数据链路层在驱动程序这一层中实现,网卡是硬件,硬件需要驱动程序来驱动。

网络层和传输层:我们可以看出这两层是在操作系统呢内部实现的,所以,操作系统中还有对应的网络管理。

应用层:应用层属于用户空间,由用户自己来实现。

需要注意的是:网络层和传输层在操作系统内部实现,是属于操作系统内核源代码的一部分,用户不能直接使用操作系统内部的程序,所以操作系统需要对外提供网络的系统调用接口给用户使用,但是系统调用接口不方便使用,于是,有人对网络的系统调用接口做封装,便有了网络库,开发人员就可以基于网络库和系统调用接口进行网络程序开发了。

2.数据传输的大致流程

假如有两台主机,分别是A主机和B主机,A主机给B主机发送数据,发送的数据不能直接传给B主机应用层的用户,而是需要通过TCP/IP五层协议栈进行传输,需要自顶向下,贯穿整个TCP/IP协议栈,到达物理层,物理层用于网络通信的硬件通过数据传输介质,将数据传输到B主机物理层的用于网络通信的底层硬件上,此时,B主机已经拿到了A主机发送的数据,但是用户还看不到,因为用户在应用层,所以还需要将数据自底向上,贯穿整个协议栈,将数据交付到用户空间,也就是应用层,此时,使用B主机的用户就能看到使用A主机的用户给他发送的数据了。

举个例子,小a住在五楼,小b也住在五楼,小a要给小b送一个东西,小a不可能说飞过去吧,他必须先下楼,到达物理的介质(地面),然后走到小b所住的楼栋,再上楼,到达小b家门口,然后将东西交给小b。

我们可以看到,不同主机之间进行通信的整个过程都是基于TCP/IP协议栈进行运转的。

看到这里,我们已经了解了网络传输的大致流程,但是还不够,在更细致的介绍网络传输之前,我还想介绍一下局域网通信的原理,这对于理解网络传输是有帮助的。

3.局域网通信的原理

铺垫:什么是mac地址?mac地址是一种硬件地址,是集成在网卡内部的,用于唯一标识一个网卡。(对于mac地址作用的理解,需要到 第五小节 —— 不同网段下两台主机之间的通信才能介绍清楚)

首先我们需要明确的一点是,同一个局域网的主机之间是可以直接通信的。那这是如何做到的呢?

比如主机A要和主机E通信,主机A会向整个局域网中广播数据,大家都看得见,但是只有主机E会做出处理,因为主机A广播数据的时候,会带上自己的源mac地址,和目的mac地址(mac地址是网络通信中,物理层的网络设备之间的寻址),网络中的其他主机一看,这是主机A发送给主机E的数据,与我无关,忽略。主机E一看,这是主机A发送给我的数据,于是接收数据,主机A上的数据就发送给了主机E。

但是在一个局域网中,不仅仅只有主机A给主机E发送消息,可能有多台主机都要发送消息,但是网络只有一个,并且还是公共的;多台主机都向局域网中发送数据,这个时候就会造成数据的碰撞,数据一旦产生碰撞,数据的可靠性就难以保证,于是,便产生了一种机制,数据碰撞的检测和避免;也就是说,局域网中的主机向局域网中发送数据的时候,会先检测是否有主机在通信,有的话,就等一等,没有主机发送数据我再发,这样就能避免数据碰撞了;这个时候,大家都选择退一步,海阔天空。

以上介绍的是以太网通信的原理,以太网是一种局域网。当然,还有其他的局域网,比如令牌环网,令牌环网的通信原理就相当于,有一个令牌,谁拿到令牌谁就可以发送数据,发送完之后,将令牌交给下一台主机,该令牌在整个局域网中循环传递。

不管是那种局域网通信,本质是任何时刻只允许有一台主机在局域网中发送数据,这就是局域网通信的原理。

4.同一网段下两台主机之间的通信

前面我们已经粗略地介绍过了不同的两台主机之间是如何实现通信的以及局域网通信的原理,建立了网络通信的基本认识,下面我们更深入的研究一下。

铺垫:

什么是IP地址?IP是分配给网络上的每个设备(如计算机、打印机、智能手机等)的数字标签。这些标签是唯一的,用于在网络上标识设备。

区分:

IP地址是用来标识主机的,mac地址是用来标识网卡的。

前面我们说过,不同的主机之间进行通信,是基于TCP/IP协议栈进行运转的,发送方的数据需要从发送方的应用层自顶向下传输到物理层,通过物理的介质,传输到接收方的物理层,然后再自底向上传输到接收方的物理层,那么这个自定向下和自底向上的过程是如何实现的呢?

假如用户A想给用户B发送一个hi,用户A将输入的数据交给应用层,应用层需要在接受到的数据前面添加应用层的协议报头,然后将数据传递给它的下一层传输层,传输层接收到数据之后,也要在接收到的数据前面添加自己的协议报头,然后向下交付给网络层,网络层接收到数据之后,在数据前面添加自己的协议报头,然后交给数据链路层,数据链路层再在接收到的数据见面添加自己的协议报头,然后把数据交给物理层;这个过程叫做数据的封装。

明确一点:用户A在向用户B发送数据的时候,需要知道,也必须知道用户B的IP地址,这样才知道数据要发送给谁,才能在网络中有目的地进行数据的传输。同时,也需要知道数据应该发送到哪个网卡上,所以需要知道网卡的mac地址。如果两台主机在同一个局域网内,就可以直接发送给对方的网卡,如果两台主机不在同一个局域网内,就需要将数据发送给路由器的网卡,由路由器根据IP地址将数据进行路由转发,并跟新源mac地址和目的mac地址。

物理层再将封装好的数据添加自己的mac地址和源mac地址,发送到网络中,然后对应的主机就会通过物理层的物理设备接收数据,然后将接收到的数据交给它的上层——数据链路层,数据链路层会剥离掉自己这一层的协议报头,然后将剩下的数据交给它的上层,每一层都是如此,直到将用户A要发送的数据交给用户B;这个过程叫做数据的解包和分用。 

我们需要明确的一点是,每一层中的协议都不止一个。接收方的物理层接收到的数据如何能够正确地进行解包和向上交付呢?

在发送方发送的数据自顶向下添加协议报头的时候,会包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息,等到接收方接收到数据之后,就能根据自己这一层的协议报头中的首部长度 正确地将数据进行解包,并将自己这一层的报头剥离下来,然后根据上层协议是什么的信息将剩下的数据交付给上层中对应的协议,这样,就能正确地完成数据的解包和分用了。

5.不同网段下两台主机之间的通信

铺垫:不同网段下两台主机之间的通信,数据从一台计算机传输到另一台计算机传输过程中要经过一个或多个路由器。

不同网段下两台主机之间的通信 和 同一网段下两台主机之间的通信 有相同点,也有不同点。相同点是,发送方的数据同样需要自顶向下进行分装发送到网络中,接收方同样要将从网络中接收到的数据自底向上进行解包和分用;不同的点在于 如何找到目标主机?

假如主机A要和主机B发送数据,发送的数据中带有主机A的IP地址 —— 源IP,也带有主机B的IP地址 —— 目的IP。一开始,发送的数据达到主机A物理层的设备,我们可以理解为网卡,这个时候,就会在传输的数据中添加源mac地址和目的mac地址,但是这两台通信的主机并不在同一局域网内,所以不知道主机B的mac地址,好在我们有路由器,此时的目的mac地址就可以填路由器的mac地址,从而将数据传输给路由器,路由器收到数据之后,将自己的mac地址填写为源mac地址,通过查看数据中的IP地址,从而将数据发送到主机B所在的局域网中,此时还是不知道主机B的mac地址,这种情况需要通过ARP协议解决(读者请自行了解),从而获得目的mac地址,从而将主机A要发送的数据传输到主机B的网卡上,然后自底向上进行解包和分用,最后将数据交给主机B的用户。

这样一来就实现了不同网段下主机之间的同行了。

在这个过程中源IP地址和目的IP地址始终是不变的,因为通信的主机没有变化,源IP地址和目的IP地址表明数据从哪台主机来,要发送到哪台主机上去;但是源mac地址和目的mac地址是会发生变化的,因为在通信的过程中,可能需要经过一个或多个路由器,路由器也是有网卡的,所以会改变源mac地址和目的mac地址。

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

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

相关文章

计算机毕业设计选题推荐-农家乐综合服务系统-乡村游乐购系统-田园休闲生活系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

基于微信小程序+Java+SpringBoot+Vue+MySQL的网上花店/鲜花销售小程序

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的网上花店/鲜花销售…

【计算机网络】socket编程 --- 实现简易TCP网络程序

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

【北京迅为】《STM32MP157开发板使用手册》- 第十二章 编译Linux内核

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

java黑马微项目

1 飞机票 代码实现: import java.util.Scanner; public class F1 {public static void main(String[] args) {Scanner input new Scanner(System.in);System.out.print("请输入票价: ");double jia input.nextDouble();System.out.print(&…

数据完整性常见缺陷以及对尘埃粒子计数器选择关注点!

数据完整性缺陷的全面回顾性评估 在评估工厂数据完整性缺陷时,首先需要系统地回顾和识别各个环节中可能存在的数据问题。以下是一些常见的与数据完整性相关的缺陷及其描述: 数据遗漏: 记录不全:生产过程中关键步骤或参数的记录…

chatglm4部署以及集成langchain

1.魔塔社区下载glm4 https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat 2.jupyter下载,自己修改下载模型位置 3.环境安装: 本机已经安装了conda,使用conda虚拟环境隔离,就不重复演示了 新项目新激活一个环境:conda create -…

vue3 ts语法在index.ts中vue有红色波浪线

vue.js - Vue 3 with Typescript Could Not Find A Declaration File - Stack Overflow 只要在 vue文件中 写上就好 <script setup lang"ts">

IIS 反向代理模块: URL Rewrite 和 Application Request Routing (ARR)

需要设置iis反向代理的场景其实挺多的。例如websocket、Server Sent Events(SSE) 都需要反向代理。 对于需要临时放公网访问的应用&#xff0c;直接运行127.0.0.1的开发环境&#xff0c;然后通过反向代理访问127.0.0.1就可以了&#xff0c;省去麻烦的iis设置。 IIS 实现反向代…

Java | Leetcode Java题解之第393题UTF-8编码验证

题目&#xff1a; 题解&#xff1a; class Solution {static final int MASK1 1 << 7;static final int MASK2 (1 << 7) (1 << 6);public boolean validUtf8(int[] data) {int m data.length;int index 0;while (index < m) {int num data[index];…

科研绘图系列:R语言差异基因四分图(Quad plot)

文章目录 介绍加载R包导入数据数据预处理画图参考介绍 四分图(Quad plot)是一种数据可视化技术,通常用于展示四个变量之间的关系。它由四个子图组成,每个子图都显示两个变量之间的关系。四分图的布局通常是2x2的网格,每个格子代表一个变量对的散点图。 在四分图中,通常…

安卓framework美化手势导航侧滑返回UI

文章目录 手势导航的侧滑返回效果图原生效果如下:要实现的功能,: 实现代码1. 初始化代码2. 修改绘制的代码,进行箭头与退出UI的显示3. 拖动的时候手指上下移动时,箭头ui跟着移动 以下是一些其他可以美化安卓右滑手势拖动 UI 的方法&#xff1a;视觉效果方面形状和布局方面 安卓…

C++解决:求排列数

描述 输入两个整数m,n&#xff0c;求m个数字中选n个数的排列数。&#xff08;1<n<m<50&#xff09; 输入描述 两个正整数m和n。 输出描述 一个正整数表示排列数。 用例输入 1 6 5 用例输出 1 720 AC code #include<bits/stdc.h> using namespace s…

孩子用的台灯哪个牌子好?挑选护眼台灯先了解护眼台灯十大排名

孩子们的日常生活中有高达80%的时间是在阅读、做作业或面对电脑屏幕中度过的&#xff0c;因此对良好照明的需求显得尤为严格和精确。一些家长可能认为&#xff0c;只要孩子使用的是纸质材料&#xff0c;不像电子产品那样对眼睛有害&#xff0c;使用普通的台灯照明就足够了&…

Qt_概述

目录 1、图形用户界面 2、客户端开发 3、什么是界面 4、Qt的发展史 5、Qt支持的平台 6、Qt的版本 7、Qt的优点 8、Qt的应用场景 小结 前言&#xff1a; Qt是一个应用程序开发框架&#xff0c;他具有跨平台性质&#xff0c;主要使用C语言进行编程&#xff0c;Qt的开发…

css之雪碧图(精灵图)

听到雪碧图是不是跟我一样&#xff0c;啥&#xff1f;雪碧图&#xff1f;不知所以。 如果一张大图由许多小图构成&#xff0c;那么每张小图都需要进行网络请求&#xff0c;这样一来就会有很多请求&#xff0c;为了减少网络请求&#xff0c;雪碧图就出现了。 雪碧图&#xff0…

MapBox Android版开发 4 国际化功能v11

MapBox Android版开发 4 国际化功能v11 前言遇到的问题国际化功能原文给出的方案(V10版)migrate-to-v11适用于V11版的代码 示例MapStyle类运行效果图 前言 在前文MapBox地图样式v11中&#xff0c;使用Style的localizeLabels方法本地化地图语言。但Mapbox Standard样式和Mapbox…

3DMax基础- 样条线和点,线,面,边界操作

目录 一、样条线 二、多边形编辑​​​​​​​ 三. 点操作 三、线操作 四、面操作 五. 边界 一、样条线 创建样条线&#xff1a; 在 “创建” 面板中选择 “图形”&#xff0c;然后可以看到各种样条线工具&#xff0c;如线、矩形、圆、椭圆等。以 “线” 工具为例&#…

EPIC超级“喜加N”!AOC U32G4ZMN助你畅玩缤纷九月

废土探险、绿茵征战、狙击猎杀&#xff0c;AOC U32G4ZMN带你玩转九月&#xff01; Epic游戏商城近日开启“喜加N”游戏盛宴&#xff0c;上周公布的免费游戏&#xff1a;《辐射经典合集》与《外卡橄榄球》&#xff0c;领取时间截止至9月5日&#xff0c;还没领取的玩家&#xff…

Kafka【九】如何实现数据的幂等性操作

为了解决Kafka传输数据时&#xff0c;所产生的数据重复和乱序问题&#xff0c;Kafka引入了幂等性操作&#xff0c;所谓的幂等性&#xff0c;就是Producer同样的一条数据&#xff0c;无论向Kafka发送多少次&#xff0c;kafka都只会存储一条。注意&#xff0c;这里的同样的一条数…