【网络原理】TCP/IP协议五层模型

news2024/11/19 16:55:37

🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。

🤼专栏收录于:计算机网络原理


本期讲解协议、OSI七层模型、TCP/IP五层模型、网络设备所在的分层、数据的封装和分佣。

目录

1. 什么要有协议?

2. 协议的分层

2.1 协议分层的好处

3. OSI七层模型

4. TCP/IP协议五层模型

5、网络设备所在分层

6、封装和分用

6.1 封装

6.1 分用


1. 什么要有协议?

假如网络通信过程中,我给别人发一条信息“你吃饭了吗?紧接着发了一个动图表情包。有一个问题,接收者是如何区分我发的是文字还是图片呢?

我们知道,数据传输的过程是通过 0和1 这样的二进制数据进行发送的。那么发送者和接受者如何区分传输的 0和1 二进制数据是关于文字的还是图片的呢?因此,我们可以通过协议来规定相应的格式。


2. 协议的分层

TCP/IP协议分层模型有:TCP/IP四层模型、TCP/IP五层模型、OSI七层模型。

对于我们程序猿来说,我们需要搞懂 TCP/IP五层协议 中的前四种协议即可。因为物理层主要是一些传输介质(网线等)类似于电脑的硬件部分,我们软件开发无需深入了解。

网络编程是通过应用层进行的,因此我们在后期 网络编程 的学习中,把应用层的一些规范与使用深入学习即可,而其他层我们只需要了解它们是什么就足够了。


2.1 协议分层的好处

分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。

调用方,当调用方使用这些接口时候不关心接口具体是怎么实现的。

提供方,提供方利用封装的特性,隐藏了协议实现的细节,只需要开放接口即可。


3. OSI七层模型

OSI:即Open System Interconnection,开放系统互连。它分为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层(由低到高)。

应用层:针对特定引用的协议。

表示层:设备固有数据格式和网络标准数据格式的转换。

会话层:通信管理,负责建立和断开通信连接,管理传输层以下的分层。

传输层:管理两个节点之间的数据传输,负责可靠的数据传输。

网络层:地址管理与路由选择。

数据链路层:互联设备之间传送和识别数据帧。

物理层:传输 0、1 这样的代表高低电平数据,通过特定的传输介质来传输。

OSI七层模型是教科书级别的。我们作为一名程序猿,只需要掌握TCP/IP五层协议即可。


4. TCP/IP协议五层模型

作为一名程序猿,对于TCP/IP五层协议,应掌握应用层熟悉传输层,特别是以下两层对应协议:

  1. 应用层:HTTP协议、FTP协议、SMTP协议和POP3协议等。这些协议是应用程序与网络的接口,程序猿需要了解其通信过程和数据格式,从而编写适合的程序进行数据交互。
  2. 传输层:TCP和UDP协议。TCP协议可确保传输的数据完整性和顺序性,使用范围较广;UDP协议传输速度更快,但无法保证数据的完整性和顺序性。

应用层:负责程序之间的沟通,简单的电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议等(Telent)等。我们程序员网络编程就是针对应用层来进行的。

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

送到目标主机。

网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表

的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。

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

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

举例说明:我在网上买一个物品,需要卖家信息(源IP地址)、我的信息(目的IP地址)。物流(协议)要历经广州,长沙,武汉。运输路径可以是空运(广州直达武汉)、慢达(广州、长沙、武汉)。

应用层:告诉快递站,卖家要快递给我的货物是什么,根据货物的类型好用相应的包装发送。

应用层负责程序之间的沟通,规定使用的格式。

传输层:我和卖家都不关注中间是怎么传输的,只关心起点和终点对应的就是源IP地址与目的IP地址。

传输层主要关注源IP地址与目的IP地址,不考虑中间路径。

网络层:发货地址是长沙,收获地址是武汉。长沙到武汉可以空运、火车,网络层可选择合适的路径进行运输。

网络层主要负责两个遥远节点之间的路径规划。

 数据链路层:运输路径选择了慢达,广州到长沙使用的是货车,长沙再到武汉使用的火车。

数据链路层主要负责两个相邻节点之间的传输。

物理层:网络通信的基础设施,也就是一些网线、光纤、网络接口,也就是网络上的告诉公路。 


5、网络设备所在分层

何为网络设备,就是联网所需要的设备,如电脑主机、路由器、交换机、集线器等。

主机:主机,它的操作系统内核实现了从传输层到物理层的内容,对应的TCP/IP五层模型的下四层即:传输层、网络层、数据链路层、物理层。

路由器: 路由器,它实现了从网络层到物理层,对应的是TCP/IP五层模型的下三层即:网络层、数据链路层、物理层。

交换机:交换机,它实现从了从数据链路层到物理层,对应的是TCP/IP五层模型的下两层。

集线器:集线器,只实现了物理层。

我们日常生活中所说的交换机也称为 二层交换机 工作在 TCP/IP五层模型中的下两层(数据链路层、物理层)。

路由器也称为 三层路由器 工作在 TCP/IP五层模型中的下三层(网络层、数据链路层、物理层)。


6、封装和分用

在协议被分层好的情况下,数据是怎样通过网络传输的的呢?答案是通过封装和分用。

发送方发送数据,要把数据从上到下,依次交给对应层次的协议,进行封装。

接收方收到数据,要把数据从下到上,依次也交给对应层次的协议,进行分用(解封装)。

假设我给张三发一条信息:“你吃饭了吗?”。模拟这条信息,在各个层次进行封装与分用的效果。


6.1 封装

(1) 应用层

应用层拿到“你吃饭了吗?”这条信息,进行封装,封装成应用层数据包。一个应用层数据包大概分为发送方,接收方,时间,发送内容这四个模块。

当然,以上的信息会变成一个字符串。通过 + 号进行连接。如1234;6698;2023061510503;"你吃饭了吗?",分别对应的是发送方、接收方、时间、发送内容 。真实开发中,这些数据包可能封装得更难,在此大家理解即可。


(2) 传输层

传输层在拿到应用层的数据包后,把该数据包再次封装成传输层对应的数据包。传输层对应的协议比较多,最典型的是 TCP 和 UDP。

在本篇博文中以 UDP 协议为例,UDP 会提供一个 UDP 数据报头里面包含源端口和目的端口。源端口即发送方程序的端口号,目的端口即接收方程序的端口号。

本质上,加上了UDP数据报头也相当于字符串拼接。


(3)网络层

传输层已经把数据封装成带有 UDP 数据报头的数据包了,接下来网络层就要把数据包加上 IP 协议报头。

源IP地址就是表示这次传输过程中的起点,目的IP就是表示这次传输过程中的终点。加上了 IP 协议报头,也是通过字符串拼接的。


 (4)数据链路层

网络层把数据包交给数据链路层,此时会用到以太网帧,此时涉及到mac地址。mac地址也叫做物理地址,描述的是主要在网络中的位置,跟IP地址很像,但比IP地址更详细。

IP地址是两个较远节点之间交互,mac地址是相邻节点之间交互。在本文 4. TCP/IP协议五层模型中有详细介绍。

注意,以太网帧分为帧头帧尾,目前我们只需要掌握帧头即可。帧头包括源mac地址和目的mac地址。mac地址是和网卡进行绑定的,每个设备都会有一个唯一标识的 mac 地址(理论上)。 


(5)物理层

物理层在接受到上层以太网的数据帧后,就把数据包所拼接的字符串 0和1 这样的二进制数据转换为光信号/电信号等信号进行传输了。


6.1 分用

通过上述讲解,我们知道了封装是从应用层到物理层,而分用恰好相反,从物理层到应用层。

(1)物理层

把光信号/电信号进行解析,还原成 0和1 的二进制序列。交给数据链路层。


(2)数据链路层

把得到 0和1 二进制序列当作一个以太网帧。把以太网帧头、帧尾去掉,得到中间的载荷再往上把数据包交给网络层。

以太网数据帧头有一个消息类型,根据这个类型,网络层就能知道数据包开头是IP协议了。 


(3)网络层

网络层得到数据包后,也是进行去IP报头,以及取出剩余载荷,把数据包上传给传输层。

 IP报头也有一个消息类型,标识当前数据包对应的是传输层的哪个协议。


(4)传输层

传输层得到是 UDP 报头,因此去掉 UDP 报头,得到载荷把数据包传给应用层。

传输层会标识端口号,这样应用层就能区分程序所在位置。


(5)应用层

最后应用层的工作,就是把数据包放到对应的程序当中。取出数据包中的信息,显示在界面中。

注意:

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
  • 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理。 

关于封装和分用在程序上,实际各层就是把数据用字符串拼接的方式进行传输。在现实传输中更为复杂,涉及到模电以及物理相关知识。在我们程序猿的眼中,知道知道传输的过程大致是什么样即可。

 本编博文到这里就结束了,感谢点赞、评论、收藏、关注~

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

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

相关文章

Linux基础内容(22)—— 信号

Linux基础内容(21)—— 进程消息队列和信号量_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130770830?spm1001.2014.3001.5501 目录 1.定义 1.介绍 2.解释 例子 操作系统信号 实现的大致思路 2.信号的产生方式 …

【C语言】计算含多种运算符的表达式

计算含多种运算符的表达式 引入运算符的优先级算术表达式的运算规则引例例题 引入 诸如下面这些表达式,它的计算过程,计算顺序是怎样的?计算结果为多少? 今天我们就一起来解决一下这个问题吧! 运算符的优先级 解决…

6.数据结构期末复习之查找和排序1

概念 静态查找: 无插入和删除 动态查找: 边插入删除边查找静态和动态查找的实现方式 1.线性表: 静态查 2.树表(二叉排序树)动态查 3.散列表 静态动态都可以查找: 集合中查找满足条件的数据关键码 1.主关键码:可以表标识数据唯一性 2.次关键码: 不能标识查找效率: 比较次数决定的…

八、进程程序替换

文章目录 一、进程程序替换(一)概念(二)为什么程序替换(三)程序替换的原理(四)如何进行程序替换1. execl2. 引入进程创建——子进程执行程序替换,会不会影响父进程呢? &…

PDF 内容替换器软件工具 PDF Replacer Pro Crack

PDF 内容替换器软件工具 批量查找和替换 PDF 中的指定文本 PDF Replacer 是一款 Windows 软件程序,可在 PDF 文件中查找指定的单词或短语文本并替换为新文本,并保持 PDF 布局不变。 Windows 7/Win 8/Win 10 或更高版本(32/64 位) …

devart ADO.NET Data Providers 2023

ADO.NET Data Providers 2023 dotConnect 开发与数据相关的 .NET 应用程序的终极解决方案,具有 ORM 支持的快速灵活综合功能丰富的 ADO.NET 提供程序 ADO.NET 数据提供者 高性能 ADO.NET 数据提供程序 dotConnect 是一个增强的数据连接解决方​​案,它建立在 ADO.N…

为什么齐次线性方程组有非零解的充要条件是D=0

下面是对这两个定理的解释: 定理1:如果是齐次线性方程组(方程个数未知量个数),且系数行列式D不等于0,则只有0解; 定理2:若齐次线性方程组(方程个数未知量个数&#xff…

C语言---形参所导致的段错误

前言 今天刷B站&#xff0c;无意之间看到一个宣称90%人都会错的嵌入式面试题。感兴趣就看了一下。卡了十多分钟才想明白&#xff0c;只是一个小知识点&#xff0c;但还是分享一下。 题目 #include <stdio.h> #include <stdlib.h> #include <string.h>void g…

如何将bootloader和APP程序一次性烧录到单片机中

在做单片机的IAP升级时&#xff0c;通常需要两个程序&#xff0c;一个bootloader程序&#xff0c;一个app程序。首先将bootloader程序烧写到单片机中&#xff0c;然后通过串口将app程序写入到单片机内容&#xff0c;在平时学习和测试的时候这种方法没啥问题&#xff0c;但是如果…

K8S 生态周报| Ingress-NGINX v1.8 发布,升级前请先检查

“ 「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」[1]。 ” 大家好&#xff0c;我是张晋涛。 很抱歉&#xff0c;最近一段时间真的太忙了&#xff0c;写文章都断断续续的。主要在使用 Langchain 搭配 GPT-4 开发…

Nginx扩展篇之Location语法规则

1 Location语法规则 1.1 Location规则 语法规则&#xff1a; location [||*|^~] /uri/ {… } 首先匹配 &#xff0c;其次匹配^~,其次是按文件中顺序的正则匹配&#xff0c;最后是交给 /通用匹配。当有匹配成功时候&#xff0c;停止匹配&#xff0c;按当前匹配规则处理请求。 …

Nginx部署多个前端项目【Linux/Windows-详细操作】

需求:项目上线需要将前端的前台和后台部署在服务器上提供用户进行使用&#xff0c;部署在不同的服务器直接在服务器安装nginx即可。但是在内网安装还是有点麻烦&#xff0c;因为需要联网&#xff0c;如果是内网可以参考Linux安装Nginx并部署前端项目【内/外网-保姆级教程】_MXi…

将数组s中的每个元素的内容在原来的位置上重复n次numpy.char.multiply(s,n)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将数组s中的每个元素的内容 在原来的位置上重复n次 numpy.char.multiply(s,n) 下列代码最后输出的结果是&#xff1f; import numpy as np x np.array([I, have, 2, cats]) print(&qu…

如何看待ICML2023的录用结果?

链接&#xff1a;https://www.zhihu.com/question/597314456 编辑&#xff1a;深度学习与计算机视觉 声明&#xff1a;仅做学术分享&#xff0c;侵删 作者&#xff1a;知乎用户 https://www.zhihu.com/question/597314456/answer/3000946712 不是因为文章被拒&#xff0c;而是因…

一文读懂 Mysql MVCC

&#x1f495;&#x1f495; 推荐&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; 文章目录 1、什么是 MVCC2、什么是当前读、快照读3、MVCC 具体解决什么问题4、MVCC 的实现原理4.1、4个隐式字段4.2、undo 日志4.3、Read View 5、使用 MVCC 时&#xff0c;需…

CSS灯光效果,背景黑金效果

先看效果 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>灯光效果</title><link href"https://fonts.googleapis.com/css2?familyCinzel:wght700&amp;dis…

MyBatis 动态sql移除最后的逗号 mybatis trim标签用法 Mybatis 去掉最后的逗号符号

MyBatis 动态sql移除最后的逗号 mybatis trim标签用法 Mybatis 去掉最后的逗号符号 一、概述 在使用MyBatis 写动态sql时&#xff0c;经常会遇到要移除最后多余的 符号 &#xff0c;and &#xff0c; or之类的关键字 &#xff1b; 还有可能需要移除的前缀 where &#xff0c; s…

续-初识JAVaScript---(2)

初识JavaScript ———&#xff08;2&#xff09;&#xff01;&#xff01;&#xff01; 一、关于JavaScript中的数据类型 虽然在JS中的变量在声明的时候不需要指定数据类型&#xff0c;但是在赋值的时候&#xff0c;每一个数据还是有类型的&#xff0c;所以还是需要学习JS中…

c语言第一课---------它来了,它来了,带着薪资走来了

作者前言: 这是我的gitee仓库:https://gitee.com/qin-laoda/python-exercises 有兴趣的小可爱们可以点进去看看,里面有我写的代码我们一起来借鉴 由于本人的自我介绍已经自我介绍过了,在我的的第一篇博客里,有兴趣的小可爱可以去看看, 作者的建议 下面我们简单介绍学好C语言…

【Python】Python进阶系列教程-- Python3 JSON 数据解析(九)

文章目录 前言Python 编码为 JSON 类型转换对应表&#xff1a;JSON 解码为 Python 类型转换对应表&#xff1a;json.dumps 与 json.loads 实例 前言 往期回顾&#xff1a; Python进阶系列教程-- Python3 正则表达式&#xff08;一&#xff09;Python进阶系列教程-- Python3 C…