TCP/IP网络传输模型

news2024/9/28 5:29:31

先来个总结:

TCP/IP的网络传输模型可以分为以下四层:应用层、传输层、IP网络层、网络接口层。

 

下面我们来简单介绍每一层的作用和工作原理

 应用层(Application Layer


        从网络传输模型来说,应用层能说的东西不是太多,应用层指定是我们平常生活中的应用程序,比如移动端\PC网站等,他们普遍使用HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP等等已经包装好并且成熟的通信协议或者框架,在应用层我们并不需要关注传输层是怎么实现,在传输中应用层代表的是操作系统的用户态,应用层以下叫做内核态。

     在我们常说的网络七层架构中,应用层其实就包含了表示层(数据的安全、压缩等),会话层(建立、管理、终止会话等)在七层架构中,

传输层(Transport Layer


     传输层一般我们指的都是TCP/UDP传输层,TCP(Transmission Control Protocol)是可靠的传输层协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,同时兼有流量控制、超时重传、拥塞控制等特性,比如HTTP、HTTP1.1、HTTP2都是使用TCP作为传输层协议,同时要注意在TCP传输中可能数据会特别大,所以会将数据切割为小块发送,在tcp中叫做TCP段,要注意的是TCP的报文是基于流,UDP是基于数据包。

    UDP相对TCP来说就比较简单,它属于传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上,它只负责将数据发送往指定端口,不管成功还是失败,所以它的优点就是快,但是就不可靠,通常用于视频等大文件传输,当然我们也可以在UDP的基础上进行包装,自己组装上层的可靠协议,类似TCP。

     为什么上文我们要说指定端口,而不是指定的地址了,因为在网络传输模型中,在传输层其实并不做网络传输工作,在实际网络传输中网络传输错综复杂,各类情况也层出不穷,所以根据不同模型处理不同的事情的原则,在传输层我们只会记录对应的接收应用的端口号,端口号的作用是在一台服务上区分去不同的接收应用,比如常见的3306、80等端口来区分应用。

     其实我们到这里可以总结一下传输层的具体作用:传输层协议主要的作用(TCP为例)就是控制我们请求的数据是否能成功不靠谱的网络环境中将数据靠谱发送到指定的接收端,并且自动实现流量控制、超时重传、拥塞控制等功能,而我们只需要关注操作系统和应用层的开发,无需关注内核级别的实现,具体的表现如TCP的三次握手建立链接。

网络层(Internet Layer


    网络层我们通常指IP协议层,IP 协议会将传输层的报文作为数据部分,再加上 IP 包头组装成 IP 报文,如果 IP 报文大小超过 MTU(以太网中一般为 1500 字节)就会再次进行分片,得到一个即将发送到网络的 IP 报文(数据结构如下图,图取自 小林coding)。 

 网络层传输主要是作用就是让我们在庞大的网络海洋中找到我们应该连接那台机器,而IP协议主要是区分机器的编号,

我们一般用 IP 地址给设备进行编号,对于 IPv4 协议, IP 地址共 32 位,分成了四段(比如,192.168.100.1),每段是 8 位。只有一个单纯的 IP 地址虽然做到了区分设备,但是寻址起来就特别麻烦,全世界那么多台设备,难道一个一个去匹配?这显然不科学。

因此,需要将 IP 地址分成两种意义:

  • 一个是网络号,负责标识该 IP 地址是属于哪个「子网」的;
  • 一个是主机号,负责标识同一「子网」下的不同主机;
  • 举个例子,比如 10.100.122.0/24,后面的/24表示就是 255.255.255.0 子网掩码,255.255.255.0 二进制是「11111111-11111111-11111111-00000000」,,是 24 个1,为了简化子网掩码的表示,用/24代替255.255.255.0。

    知道了子网掩码,该怎么计算出网络地址和主机地址呢?

    将 10.100.122.2 和 255.255.255.0 进行按位与运算,就可以得到网络号,如下图:

  • 计算出对应的网络号和主机号,我们需要借助路由,路由会根据你传递的ip地址信息,在网络世界中层层传递,将数据包传递到你要传递的最终的机器上。

         I

网络接口层(Link Layer


     上面我们提到了网络层的路由定向问题,比如说我们公司服务器或者办公网络都是局域网,都是使用统一的ip地址,那怎么定位到我们具体服务器了,这就要用到MAC地址,而网络接口层就是用来做这个活的,对于以太网来说,存在很多交换机、路由器,我们需要正确的定位是很难的,MAC 头部是以太网使用的头部,它包含了接收方和发送方的 MAC 地址等信息,我们可以通过 ARP 协议获取对方的 MAC 地址(个人理解,有不同解释在评论区提一下)。

   在七层架构中,网络接口层包括数据链路层和物理层,对应的是网卡和芯片级别的操作,沿用上图,我们看下最终的数据请求包结构:

 

补充


     网络分层结构可以说是将模块式思维融入的很透彻,每一层做的事情都很明确,我们平常了解的网络七层架构为什么没有成为现在的主流了,主要是因为七层架构虽然很好,但是造价太高,同时实践也证明四层架构能满足目前需求。

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

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

相关文章

Merkle trees vs Verkle trees

什么是默克尔树,它们是如何工作的?使用加密哈希算法的二叉树称为 Merkle 树。哈希树也称为 Merkle 树,用数据块的加密哈希标记叶节点。此外,它还使用其子节点标签的加密散列来标记非叶节点。每个节点都会生成一个摘要(Hash)&#…

SpringBoot笔记(持续更新)

要学习SpringCloud,但是SpringBoot是基础,所以需要开个篇补一下 突发奇想:学习编程,一定要自顶向下学习,刚刚入门了SC,对整个开发部署流程有了一个大概的认知,在听SB的课程发现理解起来很容易…

菲鹏生物冲刺创业板上市:毛利率稳中有降,崔鹏、曹菲夫妇控股

2023年1月6日,菲鹏生物股份有限公司(下称“菲鹏生物”)在深交所更新招股书(注册稿),准备在创业板上市,泰联合证券为其独家保荐人。本次冲刺上市,菲鹏生物计划募资25.056亿元。 其中…

SpringCloud(12)— 分布式事务(Seata)

SpringCloud(12)— 分布式事务(Seata) 一 事务基础 1.事务的ACID原则 2.分布式事务问题 在分布式系统下,一个业务跨越多个服务或数据源,每一个服务都是一个事务。 要保证所有分支事务的最终状态一致&am…

【Qt】为应用程序设置标题栏、状态栏、可执行程序显示 三种状态下的图标

Qt为应用程序添加图标的几种方式 应用程序的图标分为: 程序左上角显示的标题栏的图标: 程序打开后在任务栏显示的状态栏图标: 程序在文件管理器中显示的可执行程序图标: 设置这几种图标的方式有以下几种。 方式1,一…

Maven项目管理

01-Maven概述02-Maven简介03-Maven基本使用04-IDEA配置Mavenhelloworld 版本错误 已解决 https://blog.csdn.net/qq_41428418/article/details/12416917505-依赖管理&依赖范围找不到Any changes??? 感觉无关紧要compile 最大的 默认的scope,表示 dependency …

Linux——文件的读取与搜索

文章目录文件读取cat和tac命令head和tail命令more和less命令wc和du命令文件读取 cat和tac命令 cat命令将文件中全部内容都打印到屏幕上,适合较小文件的读取,不适合大文件。 tac命令是从最后一行开始反向打印,这一点与cat命令正好相反。 语法&…

2023.1.9 学习总结

1.二叉排序树的相关操作 二叉排序树的相关操作可以分为这几种: 1.创建二叉排序树 2.插入值 3.查找值 4.删除值 首先给出二叉排序树的结点类型定义:(就是一个二叉树) struct bis {int data;bis* left;bis* right; }; 因为创…

熊海cms1.0代码审计

目录 一、环境搭建 二、代码审计 (1)后台存在登录绕过漏洞 (2)登录后台user处存在SQL注入 (3)前(后)台文件包含漏洞 (4)后台SQL注入 1、admin/files/…

程序员简历上写这种项目,难怪面试当炮灰。。。

目录: 高级工程师必备:系统设计能力如何让你的项目更有技术含量 上篇文章 《我只是把握好了这3点,1个月后成功拿下大厂offer!》我们聊了聊Java工程师在跳槽前的1个月,如何利用较短的时间从技术广度、技术深度、基础功…

实现一个二叉搜索树

目录 1、认识二叉搜索树 2、实现一个二叉搜索树 2.1 成员变量 2.2 insert 方法 2.3 search 方法 2.4 remove 方法(重点) 3、二叉搜索树总结 1、认识二叉搜索树 从字面上来看,它只比二叉树多了搜索两个字,我们回想一下,如果要是在二…

TP4056国产替代DP4056 1A 锂离子电池充电器芯片

DP4056是一款单节锂离子电池恒流/恒压线性充电器,采用底部带散热片的SOP8封装以及简单的外部应用电路,非常适合便携式设备应用,适合USB电源和适配器电源工作,内部采用防倒充电路,不需要外部隔离二极管。热反馈可对充电电流进行自动调节,以便在…

一篇文章了解 StarRocks

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 正文 StarRocks 是新一代极速全场景 MPP 数据库。St…

php宝塔搭建部署实战响应式园林景观设计公司网站系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套php开发的响应式园林景观设计公司网站系统源码,感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码…

12月更新2022亮点总结 | Java on Visual Studio Code

大家好,一年的时间过得很快,我们已经来到了2023年。回顾2022年,我们的产品也经历了很多的迭代,在此之中,我们有几个亮点想与大家分享! 2022年的亮点 Spring Boot 插件的重大可视化体验升级 从今年年初开始…

基于springboot+mybatis+mysql+vue房屋租赁管理系统

基于springbootmybatismysqlvue房屋租赁管理系统一、系统介绍二、功能展示1.用户登陆2.管理员端主要功能2.房主角色端主要功能3.租客角色端主要功能三、其它系统一、系统介绍 功能说明: 普通用户角色: 寻找房源功能–提供了两种寻找房源的功能&#xff…

JS日期格式化——数字日期转中文日期(封装函数,dayjs时间格式化YYYY-MM-DD)

JS数字日期转中文日期往期相关文章场景复现封装函数(数字日期转中文日期)实际应用往期相关文章 文章内容文章链接JS数组对象——根据日期进行排序,按照时间进行升序或降序排序https://blog.csdn.net/XSL_HR/article/details/128579840?spm1…

10分钟完全理解golang context

当前go的各种源码中应该都可以看到context的使用,Context是golang 1.7的引入的核心结构,本质是为了处理go的并发控制问题。本文主要带大家深入理解context如何使用,为什么需要context和context设计原理。 并发控制问题 先来看下并发控制到底…

Unity 3D 使用高度图创建地形|| Unity 3D 使用笔刷绘制地形

Unity 3D 使用高度图创建地形 在 Unity 3D 中编辑地形有两种方法: 通过地形编辑器编辑地形。通过导入一幅预先渲染好的灰度图来快速地为地形建模。 地形上每个点的高度被表示为一个矩阵中的一列值。这个矩阵可以用一个被称为高度图(heightmap&#xff0…

Win11关闭Windows Defender实时保护,暂时关闭和永久关闭方法 | Win10怎么永久关闭Windows Defender实时保护

文章目录1. 按2. 暂时关闭Windows Defender实时保护3. 永久关闭实时保护3.1. 方法一:改组策略(Windows11实测可以)3.2. 方法二:改注册表(Windows11实测不行)1. 按 开启Windows Defender实时保护有时候会导…