网络初识 二

一、TCP/IP五层协议

  ->   应用层 : 传输的数据在应用程序中如何使用

   ->   传输层 : 关注的是通信的起点终点

   ->   网络层 : 关注的是通信中的路线规划

   ->   数据链路层 : 关注的是相邻节点之间的通信细节

   ->   物理层 : 网络通信的基础设施

说是五层,实际上下面这四层都是在 操作系统内核,硬件,驱动程序中已经实现好了,(计算机内置了)

我们程序员在网络编程过程中能影响到的也就只有应用层了.

对于一台主机,他的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;

对于一台路由器,他实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;  ->  路由器工作在网络层

对于一台交换机,他实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;   ->  交换机工作在数据链路层

对于集线器,他只实现了物理层;

二、封装和分用

封装和分用,是网络传输数据过程中,最核心的流程.

例:

比如说,A通过QQ给B发送了一个hello   ->   会经历以下流程

2.1 分装

2.1.1 应用层(应用程序)

QQ从消息输入框获取到用户输入的hello

就要把这个字符串构造成一个应用层的数据包

QQ这样的程序就内置了一个应用层协议,应用层数据包就是按照这个应用层协议约定的格式来构造.

约定格式如下:

接下来,应用程序就会调用操作系统提供的api,把这个数据包交给传输层.

2.1.2 传输层

传输层就会把上述数据作为一个整体,再构造成一个传输层的数据包.

传输层涉及到的协议就是TCP和UDP

此处假定是使用UDP来进行通信.就会构造成一个UDP数据包.

这个数据包,由应用层传输过来的内容看作一个整体,叫做载荷,添加一个UDP报头,叫做报头.

这个整体就是我们的UDP数据包.

形容这样的添加报头的过程就叫做 " 封装 ",其实就是,字符串拼接.

只不过拼接的报头,具有一定的结构.

UDP报头,虽然不能保护数据,但是可以起到 " 贴标签 " 类似效果.

就能承载一些关键的用来转发数据的信息.

对于UDP报头来说,承载的最重要的信息就是 源端口 和 目的端口.

拼好传输层数据包后,就要把这个数据包进一步的交给下层,网络层继续进行了封装.

(交给下层,指的是,下层协议提供一组api(函数),上层调用这个api,并且把刚才构造好的数据通过参数传过去,下层协议就可以来处理这个数据了)

2.1.3 网络层 

网络层,这里涉及到了最核心的协议   ->   IP协议

网络层 IP协议,把刚才的传输层的UDP数据包作为一个整体,再拼上IP协议的报头.

构造成一个IP数据包.

构造完成完整的IP数据包之后,IP协议继续调用数据链路层的api,把数据再交给数据链路层这里的协议进行处理.

2.1.4 数据链路层

数据链路层这里涉及到的核心协议   ->   以太网   ->   此处 " 以太 " 用来表示网络数据传输的介质.

以太网就是我们日常最常见到的有线网络.

我们日常用到的网线,也叫做 " 以太网线 ",日常用到的网口也叫做 " 以太网口 ".

用到的交换机,也叫做 " 以太交换机 '.

以太数据帧.也是以IP数据包作为一个整体,在这个基础上添加帧头和帧尾.

接下来,再把这个数据交给物理层.

2.1.5 物理层

物理层   ->   硬件设备

把上述这样的以太网数据帧,二进制结构( 一串0 1 0 1 这样的数据),转换成 光信号/电信号/电磁波,然后进行发送.

经过上述一些列的操作,数据就从电脑上发送出去了.

2.2 分用

暂时不考虑中间过程,假定数据包已经到达B网卡了,B如何处理,B的处理过程就称为 " 分用 ".

2.2.1 物理层

B的物理层收到了光信号/电磁波/电信号,就会把这些物理信号转换成 数字信号(二进制的0 1 0 1 ),得到一个以太网数据帧,进一步的把这个数据帧交给数据链路层处理.

2.2.2 数据链路层   以太网

按照以太网数据帧的格式,来解析,取出其中的载荷,再交给上层协议.

2.2.3 网络层 IP协议

按照IP协议的格式进行解析,去除其中的载荷,再交给上层协议.

2.2.4 传输层 UDP协议

按照UDP协议格式来解析,取出其中的载荷,再交给上层协议.

2.2.5 应用层

按照应用程序的内部应用层协议来解析数据

例:

QQ在拿到信息后,就会在窗口中显示,让你看到信息(聊天消息).

分用的过程,就是封装的逆向过程.

真实情况下,两个主机不太会是通过网线直连的,通过一系列的交换机和路由器来进行数据转发的.

但是实际上,即使是经过交换机或者路由器,上述的分装分用过程,也是同样适用的.

只不过,封装分用的程度不一定是到应用层.

经典交换机来说,就只需要封装分用到数据链路层即可.

经典的路由器来说,就只需要封装分用到网络层即可.

交换机会把光电信号转换成以太网数据帧二级制数据,交给数据链路.

交换机的数据链路层就会对上述数据进行解析.

这个解析过程,一方面要取出载荷部分,另一方面,就要解析到帧头中的关键信息.

根据帧头中的关键信息,决定下一步把数据往哪里进行发送,根据这个情况再进一步的构造出新的以太网数据帧.

把这个新的数据通过物理层发送出去.

如果是路由器,情况稍微复杂一点点,就是封装分用到网络层.

先是物理层拿到光电信号,转成二进制数据交给数据链路层

IP协议对进行解析,取出载荷,再重新封装

继续交给数据链路层,继续加上帧头帧尾

这个数据再交给物理层,转成光电信号,继续传输.

三、几个术语

描述一个网络上传输的数据,单位"可能会用到这几个术语:

包   ->   packet

段   ->   segment

报   ->   datagram

帧   ->   frame

如 : IP数据包 / IP数据报

网络编程,本质上就是学习 传输层 给 应用层 提供的 API,就可以写入代码,把数据交给传输层,进一步通过层层封装,就可以把数据通过网卡发送出去了.

四、网络编程中一些重要的概念

4.1 客户端VS服务器

        再网络中,主动发起通信的这一方,称为 " 客户端 ",被动接受的这一方,称为 " 服务器 ".

同一个程序再不同的场景中,可能是客户端,也可能是服务器.

客户端给服务器发送的数据,称为 " 请求 " (request)

服务器给客户端返回的数据,称为 " 响应 " (response)

客户端和服务器之间的交互,也是有很多种模式的.

1   ->   一问一答

一个请求对应一个响应,一对一        常见于网页开发(web开发)

2   ->   一问多答

一个请求对应多个响应                常见于 "下载"

3   ->   多问一答

多个请求对应一个响应        常见于 "上传"

4   ->   多问多答

一个请求可能对应多个响应

一个响应也可能对应多个请求                常见于 "远程控制/远程桌面"

五、TCP和UDP特点上的差别

要想进行网络编程,需要使用系统的API,本质上是传输层提供的.

传输层涉及到的协议主要是两个,TCP,UDP

由于这两个协议,之间差异很大,他们的api差距也很大.

TCP和UDP特点上的差别:

        TCP                                   UDP

     有连接                                  无连接

     可靠传输                            不可靠传输

     面向字节流                         面向数据报

      全双工                                 全双工

有链接/无连接   ->   指的是抽象的,本质上就是是否有记录对方的信息

可靠传输/不可靠传输   ->   尽可能的完成数据传输,虽然无法确保数据到达对方,至少可以知道,当前这个数据对方是不是收到了.

ps : 网络上存在的 "异常情况" 是很多的,无论什么手段都无法保证这个数据100%能从A到达B

此处的可靠传输,主要是指发的数据到没到,发送方能知道.

面向字节流   ->   此处谈到的字节流与文件中的字节流完全一致.        TCP

网络中传输数据的基本单位是字节.

面向数据包   ->   每次传输的基本单位是一个 "数据报" 特定的结构   UDP

全双工   ->   一个信道,可以双向通信

半双工   ->   一个信道,只能单向通信

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

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

相关文章

Qt案例练习(有源码)

项目源码和资源:Qt案例练习: qt各种小案例练习,有完整资源和完整代码 1.案例1 项目需求:中间为文本框,当点击上面的复选框和单选按钮时,文本框内的文本会进行相应的变化。 代码如下: #include "dialog.h" …

C++的数据结构(十):AVL树

AVL树是一种自平衡的二叉搜索树,得名于其发明者G.M. Adelson-Velsky和E.M. Landis。在AVL树中,任何节点的两个子树的高度最多相差1,这种性质确保了AVL树的查找、插入和删除操作的时间复杂度接近O(log n)。 AVL树是一种二叉搜索树,…

MongoDB基础入门到深入(七)建模、调优

文章目录 系列文章索引十一、MongoDB开发规范十二、MongoDB调优1、三大导致MongoDB性能不佳的原因2、影响MongoDB性能的因素3、MongoDB性能监控工具(1)mongostat(2)mongotop(3)Profiler模块(4&a…

K8S认证|CKA题库+答案| 16. 升级集群

16、升级集群 CKA v1.29.0模拟系统免费下载试用: 百度网盘:https://pan.baidu.com/s/1vVR_AK6MVK2Jrz0n0R2GoQ?pwdwbki 题目: 您必须在以下Cluster/Node上完成此考题: Cluster Ma…

CTF网络安全大赛简单web题目:eval

题目来源于&#xff1a;bugku 题目难度&#xff1a;简单 一道简单web的题目 题目源代码&#xff1a; <?phpinclude "flag.php";$a $_REQUEST[hello];eval( "var_dump($a);");show_source(__FILE__); ?> 这个PHP脚本有几个关键部分&#xff0c;但…

太阳诱电:顺应时代需求的新型电容器为何能在全球得到广泛应用(下)

随着汽车电动化和电子控制化的进展&#xff0c;车载计算机和电气部件也在逐渐向大功率化的方向发展。而构成这些车载设备电源电路的电子元器件也必须随之进行技术革新。太阳诱电集团携手全资子公司ELNA&#xff0c;开发并供应新型电容器“导电性高分子混合铝电解电容器”&#…

【热门话题】一文带你读懂公司是如何知道张三在脉脉上发了“一句话”的

按理说呢&#xff0c;A公司和脉脉属于不同的平台&#xff0c;而且脉脉上大家可以匿名发言&#xff0c;所以&#xff0c;即便我坐在你边上&#xff0c;我发了一句话上去&#xff0c;你也不知道是谁发的。但通过一些技术&#xff0c;我们却可以分析出&#xff0c;公司是如何知道张…

IOC控制反转

IOC IOC&#xff0c;全称为Inversion of Control(控制反转)&#xff0c;是一种设计原则&#xff0c;它反转了传统编程中的控制流程。在传统的编程模式中&#xff0c;组件之间的依赖关系是由组件自身在内部创建和维护的。而在控制反转模式中&#xff0c;这种依赖关系由外部容器(…

PS —— 制作证件照

PS —— 制作证件照 裁剪工具魔棒工具油漆桶工具扩展画布 老是看编程&#xff0c;会有些疲劳&#xff0c;这个专栏我会放一些其他的知识&#xff0c;我们今天利用PS制作证件照&#xff08;注意&#xff0c;这里一些ps的基础操作我不会很展开的去讲&#xff09;&#xff1a; 裁…

深入解析R语言的贝叶斯网络模型:构建、优化与预测;INLA下的贝叶斯回归;现代贝叶斯统计学方法;R语言混合效应(多水平/层次/嵌套)

目录 ①基于R语言的贝叶斯网络模型的实践应用 ②R语言贝叶斯方法在生态环境领域中的应用 ③基于R语言贝叶斯进阶:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析 ④基于R语言的现代贝叶斯统计学方法&#xff08;贝叶斯参数估计、贝叶斯回归、…

抽象工厂模式(AbstractFactoryPattern)

文章目录 1.抽象工厂模式定义2.UML类图3.抽象工厂模式具体实现工厂模式实现单一产品族抽象工厂实现多产品族产品类工厂类使用 4.抽象工厂模式优缺点 1.抽象工厂模式定义 提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类。 工厂方法模式是单一产…

2024电工杯B题食谱评价与优化模型思路代码论文分析

2024年电工杯数学建模竞赛B题论文和代码已完成&#xff0c;代码为B题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求解&#xff09;、模型…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-17讲 定时器按键消抖

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

计算机网络安全控制技术

1.防火墙技术 防火墙技术是近年来维护网络安全最重要的手段&#xff0c;但是防火墙不是万能的&#xff0c;需要配合其他安全措施来协同 2.加密技术 目前加密技术主要有两大类&#xff1a;对称加密和非对称加密 3.用户识别技术 核心是识别网络者是否是属于系统的合法用户 …

【设计模式深度剖析】【1】【结构型】【代理模式】| 玩游戏打怪、升级为例加深理解

&#x1f448;️上一篇:创建型设计模式对比 | 下一篇:装饰器模式&#x1f449;️ 目 录 代理模式定义英文原话直译如何理解&#xff1f; 3个角色UML类图1. 抽象主题&#xff08;Subject&#xff09;角色2. 代理类&#xff1a;代理主题&#xff08;Proxy Subject&#xff0…

UE5 OnlineSubsystem Steam创建会话失败解决方法

连接上Steam但是创建会话失败 解决方法 在DefaultEngine.ini中加上bInitServerOnClienttrue,这个其实在官方文档里用注释给出了&#xff0c;直接取消注释就行 删除项目目录中的Saved、Internmediate、Binaries目录 右键你的项目.uproject选择Generate Visual Studio project f…

ASP.Net MVC在控制台添加视图时没有模型类并且不能添加视图

情况如下&#xff1a; 解决方法&#xff1a; 1.查看vs能否创建asp.net mvc项目&#xff0c;这种情况一般是更换了vs打开老项目 2.点击跳转至修改安装选项界面 3.选择安装项即可 如果以上都有&#xff1a; 看看你的视图文件是否存在在项目中 也不能点击添加&#xff0c;如果…

探索数值分析的奥秘:掌握NumPy与Pandas基础

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、NumPy&#xff1a;数值计算的效率提升器 二、Pandas&#xff1a;数据处理与分析的利器 …

Linux文本三剑客之sed

set的定义&#xff1a; sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据&#xff0c;这些命令要么从命令行中输入&#xff0c;要么存储在一个命令文本文件中。 sed的执行过程&a…

Nextjs 动态路由获取参数

目录 一、创建page目录下的路由文件 二、通过useRouter来获取动态参数 先看官方文档&#xff1a;Routing: Dynamic Routes | Next.js 使用Nextjs13版本参考官方文档后实现仍有问题&#xff0c;网上的材料大多和官网一致&#xff0c;经过测试后&#xff0c;我找到了这个解决方…