网络传输的基本流程

news2024/11/13 9:40:35

目录

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地址。

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

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

相关文章

小米嵌入式面试题目RTOS面试题目 嵌入式面试题目

第一章-非RTOS bootloader工作流程 MCU启动流程 通信协议,SPI IIC MCU怎么选型,STM32F1和F4有什么区别 外部RAM和内部RAM区别,怎么分配 外部总线和内部总线区别 MCU上的固件,数据是怎么分配的 MCU启动流程 IAP是怎么升级的…

​​MEPA(Maximum Efficiency Per Ampere)控制

一.控制目的 与MTPA控制相比,没有忽略电机的铁耗,以电能损耗最小为目的优化电流。 分析思路与MTPA控制类似,在此省略。 二. 推导过程

【前端】读取csv文件,将数据转换为对象。spilce与slice的区别

一. 解决思路 解决思路:将csv文件的第一行作为key,后续的每一行作为value存入对象数组。 二. 代码写法 2 .1 JS写法 2.1.1 数组.map(function(item, index,arr){}) Item: 这个表示的是每一项对应的索引。 index: 这个表示的是每一项对应的索引。 a…

LTE PSS主同步信号PSS搜索阶段频偏估计

频偏的影响: 本期要讲到PSS搜索阶段,整数倍频偏和小数倍频偏的估计方法,整数倍频偏指的是子载波间隔的整数倍比如15k、30k等,小数倍频偏指的是一个子载波间隔以内的。在OFDM通信系统中,频偏是一个比较敏感的词,正常如果频偏估不准会带来一系列的问题,比如OFDM信号的正交…

高校大模型实验室大模型应用平台

大模型应用平台是一款专为高校大模型应用场景教学和科研打造的知识库问答系统。该平台易于使用,知识库支持常见的txt、doc、pdf、md等数据文件上传,同时提供了简洁易懂的操作配置界面,使用户可以轻松地搭建和训练AI应用,并快速进行…

Selenium:设置元素等待、上传文件、下载文件

前言:在工作和学习selenium自动化过程中记录学习知识点,深化知识点 1. 设置元素等待 元素定位之元素等待-- WebDriver提供了两种类型的等待:显示等待和隐式等待。 1.1 显示等待 显式等待使WebDriver等待某个条件处理时继续执行&#xff…

mycat双主高可用架构部署-mycat安装

MySQL5.7服务器IP是192.168.31.209及192.168.31.210 1、安装Java运行环境 ELK搭建日志平台里面有Java安装,同样也可以采用yum安装 yum install -y java java -version 2、下载并解压mycat wget http://dl.mycat.org.cn/1.6.7.6/20220524101549/Mycat-server-1.…

支小宝来了!支付宝AI生活管家,让AI帮你“干活“

众所周知,支付宝界面越来越复杂,从最初的一个支付工具逐渐演变成了一个综合性的平台,涵盖了生活中的各个方面。 功能的增加的同时不可避免的就会导致使用不便。 随着大模型的应用,支付宝基于百灵大模型推出了“支小宝”AI生活管家…

盘点4款比pr剪辑简单的视频剪辑工具。

PR剪辑软件对于很多不太懂剪辑的人来说确实有点不太好操作,需要去学习一些剪辑知识使用比较好。如果想要在短时间内掌握一些剪辑技巧,可以选择相对简单一点的剪辑工具。比如下面这4款,不管是新手还是会剪辑的人都可以使用。 1、福昕高效剪辑 …

超有趣,小白专用的python基础到大师人工智能教程!

2017年7月,国务院发布的《新一代人工智能发展规划》提出,要在中小学阶段设置人工智能相关课程,并逐步推广编程教育。 Python 是一种通用型编程语言,它具有良好的可扩展性和适应性,易于学习,被广泛应用于云计…

适合Python练手的8个经典项目,有趣又实用,提升Python编程能力必看!

今天给大家分享的,是一些实战练习的小案例,如果你还是Python小白,可以再看看我前面几篇文章,如果是有了一点基础,那就尝试完成下面这些案例吧! 这里插播一条粉丝福利,如果你在学习Python或者有…

阿卡迈 Akamai 逆向分析4 代码分拆3

阿卡迈函数解析10_获取EET数值.js // 这个值如果代码刷新了会变化 EHpvmPAvvbSFFBR7gXeSMA // 后续考虑如何自动化 window global Th \x1F\x0FBA\rw!6M\x03h6\x18\x18\x15\x05P8B3\rz\\\x06 //会变化// 直接在浏览器copy出来的值错误\n会解析错误 // Th "BA\n"…

用户缓冲区

目录 1. 引入问题2. 用户缓冲区2.1 解答上述问题2.2 缓冲区刷新策略 3. 全缓冲案例 1. 引入问题 // 输出信息带换行,调用完后close(1) int main() { const char* s1 "this is fwrite\n"; …

数据手套横向对比:4款手套哪款适合您?

数据手套是与虚拟物体交互、记录手部动作以及制作手部动画的重要工具。数据手套根据类别可分为只传输动作数据的数据手套,拥有触觉震动反馈的触觉手套,带有外骨骼的力反馈手套等。这些手套根据功能性的不同可分别应用于不同行业之中,在本文中…

【项目功能扩展】在线网站 -用户管理功能(用户注册登录修改等、利用cookie存储用户会话状态)

文章目录 0. 前言开发环境 & 涉及技术 1. 宏观结构2. 后端部分① sqlite 管理类② user 管理类 3. 前端部分(与后端交互)① 登录② 注册③ 查看登录用户的信息④ 更新用户信息⑤ 登出用户 & 注销用户注意 效果演示 0. 前言 源码链接&#xff1a…

【Unity】简易而又实用的概率算法

1.两个数中任选一个&#xff08;抛硬币&#xff09; 基础版本&#xff1a; public int RandomBetweenTwoNumber(int a,int b) {float random Random.Range(0,1f);return radom<0.5f ? a : b ; } 升级版本&#xff08;支持概率调整&#xff09;&#xff1a; /*pa表示“…

并发编程:读写锁

一、ReentrantReadWriteLock 1.ReentrantReadWriteLock 是什么&#xff1f; ReentrantReadWriteLock 实现了 ReadWriteLock &#xff0c;是一个可重入的读写锁&#xff0c;既可以保证多个线程同时读的效率&#xff0c;同时又可以保证有写入操作时的线程安全。 public class …

CDGA|做好数据治理的几个策略,不看后悔

在当今这个数据驱动的时代&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;随着数据量的爆炸性增长和来源的多样化&#xff0c;如何有效地管理和利用这些数据&#xff0c;即数据治理&#xff0c;成为了企业面临的重要挑战。 良好的数据治理不仅能够提升数据质量&…

中医世家龚洪海博士:用医术和真诚赢得患者的心

医生&#xff0c;可以说是世界上最伟大的人&#xff0c;他们以高超的医疗技术和崇高的职业道德&#xff0c;以患者为先&#xff0c;为患者带来生的奇迹&#xff0c;抚平患者的病痛&#xff0c;是生命忠诚的的捍卫者。明代御医龚廷贤龚氏传人龚洪海博士就是这样一个&#xff0c;…

英国数字化战略下的人工智能时代:挑战与发展机遇

文章目录 前言一、英国数字化转型初探二、数字化转型重点举措1、 供应链2、金融市场3、数字基础设施4、科学研究5、数字技术赋能绿色转型6、数字包容性7、国际合作:重视与发展中国家合作8、完善数字民主建设三、战略启示前言 后疫情时代,英国正面临包括首相更迭频繁导致的内…