【网络原理】TCP/IP协议五层模型
🥊作者:一只爱打拳的程序猿,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五层协议,应掌握应用层和熟悉传输层,特别是以下两层对应协议:
- 应用层:HTTP协议、FTP协议、SMTP协议和POP3协议等。这些协议是应用程序与网络的接口,程序猿需要了解其通信过程和数据格式,从而编写适合的程序进行数据交互。
- 传输层: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)有多长,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理。
关于封装和分用在程序上,实际各层就是把数据用字符串拼接的方式进行传输。在现实传输中更为复杂,涉及到模电以及物理相关知识。在我们程序猿的眼中,知道知道传输的过程大致是什么样即可。
本编博文到这里就结束了,感谢点赞、评论、收藏、关注~
相关文章:

【网络原理】TCP/IP协议五层模型
🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼专栏收录于:计算机网络原理 本期讲解协议、OSI七层模型、TCP/IP五层模型、网络设备所在的分层、数据的封装和分佣。 目录 …...
【备战秋招】每日一题:2023.05.10-华为OD机试(第二题)-解密
为了更好的阅读体检,可以查看我的算法学习博客 在线评测链接:P1307 题目内容 在全球恐怖主义危机下,一组间谍团队接收到了来自地下工作者的一串神秘代码。这组代码可以帮助他们访问恐怖分子的服务器,但是他们需要先解密代码才能使用它。代…...
【华为OD机试】矩阵最大值(python, java, c++, js)
矩阵最大值 前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于OD机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:nansun0903@163.com;备注:CSDN。 题目描述 给定…...

通过USB和wifi连接真机编写第一个脚本
目录 一、连接手机 1、通过usb数据线连接手机 2、无线连接手机 二、编写第一个脚本 一、连接手机 1、通过usb数据线连接手机 数据线连接手机并允许调试 cmd命令行执行: adb devices 如果没有显示device信息,请检查: 手机是否开启usb调…...
【javascript】 javascript对象函数 总结
Object.entries( ) 作用:返回一个数组,获取对象所有可枚举属性的名称 和 可枚举属性的值 const obj { a: 1, b: 2 }; const entries Object.entries(obj); console.log(entries); // [[a, 1], [b, 2]] Object.keys( ) 作用:返回一个数组…...
LVS+Keepalived 高可用群集实战部署
LVSKeepalived 高可用群集实战部署 一、Keepalived的概念1、LVS2、Keepalived及其工作原理3、Keepalived体系主要模块及其作用4、VRRP协议(虚拟路由冗余协议) 二、LVSKeepalived 高可用群集部署LVS 部署1.配置负载调度器(主、备相同ÿ…...
MCU启动过程
启动文件 启动文件到底什么作用,其实启动文件主要是进行堆栈之类的初始化, 中断向量表以及中断函数定义。启动文件要引导进入main 函数。 开发STM32F103用的启动文件是startup_stm32f10x_hd.s S32K146使用的启动文件是startup_S32K146.S 芯片架构 STM…...

Mysql 5.6使用配置文件my.ini来设置长时间连接数据库
对于已经安装了mysql和未安装都是同样的步骤。在C:\Program Files (x86)\MySQL\MySQL Server 5.6下生成一个my.ini文件。然后删除或者修改my-default.ini的名字。 一、my.ini配置文件如下 [mysqld] basedirC:\Program Files (x86)\MySQL\MySQL Server 5.6 datadirC:\Program F…...

改进YOLOv5/YOLOv8:复现结合即插即用 | 高效多尺度注意力(EMA),模块成为YOLOv5改进的小帮手
高效多尺度注意力(EMA) 论文介绍简介EMA模块图像分类实验目标检测实验yolov5加入方法yolo注册yaml文件yolov8加入方法EMA代码及加入方式yaml文件1EMA注意力论文 https://arxiv.org/ftp/arxiv/papers/2305/2305.13563.pdf 论文介绍 通道或空间的显著有效性 注意机制对产生更多…...
图像色彩增强论文调研
阅读论文 Deep Symmetric Network for Underexposed Image Enhancement with Recurrent Attentional Learning(ICCV2021) 使用对称编码器和解码器学习图像从低曝光转化到正常图片的映射方式,通过IFT(Invertible Feature Transformer)网络和提…...

ORACLE透明网关ODBC连接MYSQL
客户需求oracle访问mysql数据,客户是linux7.3 11.2.0.4单实例,字符集GBK,mysql是5.7.31,字符集UTF8,下面结合网上的文档和自己的实践,配置过程如下 1.安装oracle透明网关 首先在oracle服务器上面安装ora…...
Flutter网络请求框架Dio源码分析以及封装(二)--Cookie管理分析
Flutter网络请求框架Dio源码分析以及封装--Cookie管理分析 前言问题如何使用CookieJarCookieManagerPersistCookieJar总结 前言 上一篇文章我们简单分析了一下Dio发出请求时的大致工作流程,这个只是Dio最基本的功能,而且我们还没有分析走到httpClientA…...
Unity如何设计一个技能系统
一、技能系统的设计思路 技能系统是游戏中非常重要的一部分,因此在设计技能系统时需要考虑以下几个方面: 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬࿰…...

测试流程体系
目录: 软件测试基本概念软件测试模型软件测试工作流程测试左移和测试右移 1.软件测试基本概念 通过手工或者工具对"被测对象"进行测试验证实际结果与预期结果之间是否存在差异 软件测试作用 通过测试工作可以发现并修复软件当中存在的缺陷ÿ…...
Linux下CentOS KVM 虚拟化
介绍: KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它是基于Linux内核的虚拟化解决方案。KVM可以将一台物理服务器分割成多个虚拟机,每个虚拟机都可以运行不同的操作系统和应用程序,从而实现…...

< vue + ElementUi 组件封装:实现弹窗展示富文本数据,允许全文搜索高亮显示搜索内容 >
实现弹窗展示富文本数据,允许全文搜索高亮显示搜索内容 👉 前言👉 一、效果演示👉 二、实现思路👉 三、实现案例👍 卷王必胜!往期内容 💨 👉 前言 在 Vue elementUi 开…...

MATLAB 之 低层绘图操作和光照及材质处理
这里写目录标题 一、低层绘图操作1. 曲线对象2. 曲面对象3. 文本对象4. 其他核心对象4.1 区域块对象4.2 方框对象 二、光照和材质处理1. 光照处理2. 材质处理2.1 图形对象的反射特性2.2 material 函数 一、低层绘图操作 MATLAB 将曲线、曲面、文本等图形均视为对象,…...

LLM-Client一个轻量级的LLM集成工具
大型语言模型(llm)已经彻底改变了我们与文本交互的方式,OpenAI、Google、AI21、HuggingfaceHub、Anthropic和众多开源模型提供了不同的功能和优势。但是每个模型都有其独特的体系结构、api和兼容性需求,集成这些模型是一项耗时且具有挑战性的任务。 所以…...
leetcode动态数组vector实现杨辉三角
链接: leetcode动态数组vector实现杨辉三角 由题意可易得,从第三行开始,除了开始和末尾的位置上的元素,其余位置上的元素都是由上方的元素以及上方左侧的元素相加得到的,此时就很容易的到从第三行开始状态转移方程为vv[i][j] vv[…...

第二十三章_Redis高性能设计之epoll和IO多路复用深度解析
before 多路复用要解决的问题 并发多客户端连接,在多路复用之前最简单和典型的方案:同步阻塞网络IO模型 这种模式的特点就是用一个进程来处理一个网络连接(一个用户请求),比如一段典型的示例代码如下。 直接调用 recv 函数从一个 socket 上读…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...