TCP/IP五层模型、封装和分用
- 1.网络通信基础
- 2.协议分层
- OSI七层协议模型
- TCP/IP五层/四层协议模型【重点】
- 3. 封装&分用
1.网络通信基础
IP地址:表示计算机的位置,分源IP和目标IP;举个例子:买快递,商家从上海发货,上海就是源IP,收货地址是湖北,湖北就是目标IP。
端口号:表示一个具体的应用程序,分源端口和目标端口,如:某个进程或服务的端口号是8080;还是买快递的例子,发货的商家,商家就是源端口号,收货的买家,买家就是目标端口号。
同学们都看过西游记⑧~唐僧每次介绍自己的时候,是这么说的:“贫僧自东土大唐而来,去西天拜佛求经”,这里的贫僧=源端口(我是谁)、东土大唐=源IP(从哪来)、佛祖=目标端口(要找谁)、西天=目标IP(到哪去)
协议:规定数据之间传输的方法/规则,就好比加密通话,说暗号,我不要碟盘了(我没事了),我对别人说:“我不要碟盘了”,对方收到后,通过之前约定的协议,对这句话进行解读,意思就是”我没事了“
2.协议分层
最原始的协议是一大类,复杂难懂,于是进行了分化,分成多种短小的协议,也就是分层,每层有各自代表的意义和作用,上层协议调用下层协议,下层协议服务上层协议,这样学习起来就有迹可循,变得简单易懂。
OSI七层协议模型
七层协议模型是指OSI(Open Systems Interconnection)七层协议模型,它是一种网络协议的分类方法,用于描述计算机网络中不同层次之间的通信协议。**OSI七层协议模型包括:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。**每一层都有其特定的功能和职责,它们之间通过接口进行通信 。七层协议模型过于复杂,实际中并不会有用到,俺就不过多赘述了~
TCP/IP五层/四层协议模型【重点】
计算机网络中的五层协议模型是指TCP/IP五层模型,它是一种网络协议的分类方法,用于描述计算机网络中不同层次之间的通信协议。 TCP/IP五层模型包括:物理层、数据链路层、网络层、传输层、应用层,而四层协议模型只是少了一个物理层。 每一层都有其特定的功能和职责,它们之间通过接口进行通信 。
同学们先看个故事,有助于理解五层协议的功能。
一天,我在tb买了一袋子的抹布,付款后,上海商家准备发货,把快递交给了sf快递公司,该公司准备把这个快递进行运输,运输的路线有:上海=》南京=》湖北 / 上海=》广州=》湖北,具体走哪条路线就是快递公司的事情了,这工作就好比是网络层;而我和商家只管下单接单,发货收货,不在乎这个快递是通过什么路径最终送我手上的,这个就好比是传输层;而在上海发往南京的途中,具体使用的工具是通过卡车还是飞机,这个工作就好比是数据链路层,负责两个相邻的节点进行传输。物理层就好比运输路上的基础设施,比如高速公路、铁路等。
物理层:规定了网络通信中所用到的硬件设备的规格 ,如:网线、LAN口、WAN口…
数据链路层:负责相邻两台设备之间的传输; 这里的相邻指的是:A和B设备都连接C路由,就属于相邻的两台设备。当然也不一定非要连接的是路由,也可以是网线或是其他的设备
网络层:负责规划数据传输的路径,比如:商家把快递发给买家,快递到底怎么到买家手上,这件事就归快递公司自己规划,网络层就类似于快递公司。
传输层:端口与端口之间的传输,不在乎传输过程;比如:商家把快递发给买家,买卖双方不关心快递在路上的过程,只在乎发快递和收快递。
应用层:与应用程序相关,表示 传输的数据,用户拿到这个数据怎么使用,比如:商家把快递(抹布)发给买家,买家收到货后,可以拿来擦地也可以擦桌子,也就是说数据的使用,属于应用层负责。
3. 封装&分用
数据封装:从上层协议往下层协议,层层封装
咱们假设使用QQ双方通信,比如俺发了一条消息为:hello。QQ这个应用程序就会把hello这个字符串构造成一个应用层数据报。
此处假设应用层协议的格式为:发送方QQ号+发送时间+接收方QQ号+发送的消息内容。
构造的应用层数据报:
构造完成后,交给传输层(在系统内核里),传输层进行处理,构造成传输层的数据报, 传输层常用的协议有“UDP和TCP”,假设这里使用的是UDP,则会构造一个UDP数据报,里面包含的有源端口和目标端口等其他的数据,并拼接在应用层数据报的头部,构造完成后是这样的:
之所以拼接报头,一是为了安全,二是为了表明消息要去哪,怎么传输,就好比发快递,要包一层快递盒,在盒子上贴上标签,标签上有收货人的信息,报头就好似一个标签。
传输层构造完成后,再交给网络层,网络层常用的协议有“IP协议”,于是网络层再打包一个IP协议报头,拼接到传输层报头前,IP报头里包含的有源IP和目的IP,构造完成后是这样的:
网络层完成后,再交给数据链路层,此处使用的协议是“以太网协议”,根据已有的数据打包成一个“以太网数据帧”,在已有的数据报前后加上以太网帧头、帧尾。数据链路层构造完成后是这样的:
最后数据链路层把数据交给物理层,物理层把上述的二进制数据转换给光信号/电信号,发送给另一台设备。经过上面的准备,此时才把数据真正的发送出去了。以上过程则称为“封装”。
数据分用:从下层协议往上层协议,层层解析
接收方,接收到我发送的数据后,进行对数据的解析~~~
物理层接收到发送来的光信号/电信号后,进行转换成以太网数据帧,于是又成了这个样子:
再把这个数据交给数据链路层,链路层则会去掉帧头和帧尾,取出中间的载荷,以太网帧头里会记录这个载荷是不是一个IP协议。
数据链路层的解析:
数据链路层把载荷交给网络层,再根据IP协议,解析IP报头,取出载荷(传输层的数据),根据IP报头解析出是TCP还是UDP协议。
网络层的解析:
网络层把解析后的数据交给传输层进行解析,由于网络层根据IP报头里的内容解析出UDP协议,所以传输层根据UDP协议进行解析,取出报头,取出载荷(应用层数据),再把这个载荷交给应用层的程序。UDP报头里包含的有目的端口,根据这个目的端口就可以找到具体的一个应用程序,于是把最后的数据交给对应的应用程序。
传输层的解析:
数据到达了应用层,QQ则会根据规定的应用层协议进行解析数据,最后构造,显示到界面上。
)]
数据到达了应用层,QQ则会根据规定的应用层协议进行解析数据,最后构造,显示到界面上。
上述这些解析则叫做“分用”。
相关文章:

TCP/IP五层模型、封装和分用
1.网络通信基础2.协议分层OSI七层协议模型TCP/IP五层/四层协议模型【重点】 3. 封装&分用 1.网络通信基础 IP地址:表示计算机的位置,分源IP和目标IP;举个例子:买快递,商家从上海发货,上海就是源IP&…...
LeetCode 面试题 01.08. 零矩阵
文章目录 一、题目二、C# 题解 一、题目 编写一种算法,若M N矩阵中某个元素为0,则将其所在的行与列清零。 点击此处跳转题目。 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 示…...

Qt应用开发(基础篇)——进度条 QProgressBar
一、前言 QProgressBar类继承于QWidget,是一个提供了横向或者纵向进度条的小部件。 QProgressBar进度条一般用来显示用户某操作的进度,比如烧录、导入、导出、下发、上传、加载等这些需要耗时和分包的概念,让用户知道程序还在正常的执行中。 …...

108页石油石化5G智慧炼化厂整体方案PPT
导读:原文《108页石油石化5G智慧炼化厂整体方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。以下是部分内容,...
Codeforces 1625E2 括号树 + BIT
题意 传送门 Codeforces 1625E2 Cats on the Upgrade (hard version) 题解 首先利用栈将原始字符串转换为合法的 RBS,不能匹配的括号设为 ‘.’。根据匹配的括号序列构造树,具体而言,遇到左括号,则新建节点向下递归,…...
PHP命令行CLI的使用
PHP命令行界面 PHP命令行界面(CLI)是一种使用命令行(终端)来运行PHP脚本的方式,与在Web服务器环境下运行PHP不同。CLI提供了一种与操作系统交互的方式,能够在命令行中直接执行PHP代码。 以下是一些与PHP命…...
近期嵌软线下笔试题记录
1、以下代码的输出结果是? #include <stdio.h> #include <string.h>int main() {int a,b,c,d;a 10;b a; //a先赋值给b,然后自增1c a; //a自增1后赋值给cd 10*a; //先进行运算然后a自增1printf("b,c,d:%d…...

基于MYSQL的主从同步和读写分离
目录 一.完成MySQL主从同步(一主两从) 1.主库配置 2.建立同步账号 3.锁表设置只读 4.备份数据库数据 5.主库备份数据上传到从库 6.从库上还原备份 7.解锁 8.从库上设定主从同步 9.启动从库同步开关 10.检查状态 二.基于MySQL一主两从配置&…...

java八股文面试[多线程]——合适的线程数是多少
知识来源: 【并发与线程】 合适的线程数量是多少?CPU 核心数和线程数的关系?_哔哩哔哩_bilibili 【2023年面试】程序开多少线程合适_哔哩哔哩_bilibili...

Linux系统下vim常用命令
一、基础命令: v:可视模式 i:插入模式 esc:命令模式下 :q :退出 :wq :保存并退出 ZZ:保存并退出 :q! :不保存并强制退出二、在Esc下: dd : 删除当前行 yy:复制当前行 p:复制已粘贴的文本 u:撤销上一步 U:…...
【2023】LeetCode HOT 100——链表
目录 1. 相交链表1.1 C++实现1.2 Python实现1.3 时空分析2. 反转链表2.1 C++实现2.2 Python实现2.3 时空分析3. 回文链表3.1 C++实现3.2 Python实现3.3 时空分析4. 环形链表4.1 C++实现4.2 Python实现4.3 时空分析5. 环形链表 II5.1 C++实现5.2 Python实现...

智能井盖传感器,物联网智能井盖系统
随着城市人口的不断增加和城市化进程的不断推进,城市基础设施的安全和可靠性变得愈发重要,城市窨井盖作为城市基础设施重要组成部分之一,其安全性事关城市安全有序运行和居民生产生活安全保障。 近年来,各地都在加强城市窨井盖治理…...
C语言三子棋解析
目录(标2的是我自己写的一堆问题不知道怎么改) 开始菜单1打印棋盘1玩家下棋1电脑下棋1判断输赢1开始菜单2打印棋盘2选择先后2玩家下棋2电脑下棋2判断输赢2完整代码文件else.h文件else.c文件test.c 开始菜单1 void menu()//打印菜单 {printf("*****…...

【Jenkins打包服务,Dockerfile报错:manifest for java : 8 not fourd】
1、问题描述 Jenkins打包服务运行dockerfile里的FROM java:8报错manifest for java : 8 not fourd Caused by: com.spotify. docker.client.exceptions.DockerException: manifest for java:8 not found2、解决方法 在网上查找许多方法后得出这是由于Docker官方已经弃用java…...

读SQL学习指南(第3版)笔记06_连接和集合
1. 连接 1.1. 笛卡儿积 1.1.1. 交叉连接(cross join) 1.1.2. 查询并没有指定两个数据表应该如何连接,数据库服务器就生成了笛卡儿积 1.1.2.1. 两个数据表的所有排列组合 1.1.3. 很少会用到(至少不会特意用到) 1.…...
C#学习,结构,面向对象,类
结构和类 结构是从过程化程序设计中保留下来的一种数据类型,类则是面向对象程序设计中最基本的、也是最重要的概念。 结构 结构是一种值类型,通常用来封装一组相关的变量,结构中可以包含构造函数、变量、字段、方法、属性、运算符、事件和…...

【PHP】文件操作
文章目录 文件编程的必要性目录操作其它目录操作递归遍历目录PHP5常见文件操作函数PHP4常见文件操作函数其他文件操作函数 文件编程的必要性 文件编程指利用PHP代码针对文件(文件夹)进行增删改查操作。 在实际开发项目中,会有很多内容&…...

科创板50ETF期权交易:详细规则、费用、保证金和开户攻略
科创板50ETF期权是指以科创板50ETF为标的资产的期权合约。科创板50ETF是由交易所推出的一种交易型开放式指数基金(ETF),旨在跟踪科创板50指数的表现,下文介绍科创板50ETF期权交易:详细规则、费用、保证金和开户攻略&am…...

怎么把图片放大并且清晰?有详细的方法步骤
怎么把图片放大并且清晰?数字图像处理中的图片放大是许多行业和领域中广泛应用的一项技术。常规的放大方法通过插值或复制像素的方式增加像素数,但这会导致失真和模糊。无损放大是一种特殊的放大方法,它可以通过数学算法来增加图片的尺寸&…...
C++ 构造函数、析构函数调用虚函数
C虚函数是通过虚表实现的,虚函数的地址记录在需表中,只对象完成构造完成后,虚函数的地址才最终确定。 构造函数中调用虚函数 基类先于派生类构造,所以构造时没法调用到派生类的虚函数,也就是说只能调用到自己&#x…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...