【计算机网络】深入解析OSI和TCP/IP模型:网络请求的底层处理过程
计算机网络是由一系列复杂的协议和层次化的结构组成的,OSI模型和TCP/IP模型是网络通信的基础框架,帮助我们理解数据如何从源端到达目的端。在这篇文章中,我将通过深入分析每一层的功能和具体处理流程,帮助你更加详细地理解网络请求在实际传输过程中,如何通过不同的协议层进行分组、帧封装、差错控制等操作。
文章目录
- 一、OSI模型:七层结构的细致解析
- 1. **物理层(Physical Layer)**
- 2. **数据链路层(Data Link Layer)**
- 3. **网络层(Network Layer)**
- 4. **传输层(Transport Layer)**
- 5. **会话层(Session Layer)**
- 6. **表示层(Presentation Layer)**
- 7. **应用层(Application Layer)**
- 二、TCP/IP模型:四层架构和数据传输
- 1. **网络接口层(Network Interface Layer)**
- 2. **互联网层(Internet Layer,又称网络层)**
- 3. **传输层(Transport Layer)**
- 4. **应用层(Application Layer)**
- 三、网络请求的处理过程:从发起到接收
- 四、总结
一、OSI模型:七层结构的细致解析
OSI(Open Systems Interconnection)模型将网络通信分为七个层次,每个层次负责不同的功能。从上到下,这些层次依次为:
1. 物理层(Physical Layer)
物理层是OSI模型的最底层,它负责将数据比特流通过物理媒介传输。该层涉及到电气信号、光信号、无线信号等的传输。物理层定义了硬件接口(如电缆、网卡、光纤等)以及信号传输的方式。
- 功能:传输比特流,定义硬件接口。
- 协议/技术:以太网、Wi-Fi、光纤、USB等。
举个例子,当我们连接电脑与路由器时,物理层通过网线或无线信号把数据比特流传输到网络中。
2. 数据链路层(Data Link Layer)
数据链路层负责在物理介质上实现可靠的通信。它通过帧(frame)来传输数据,并提供错误检测和纠正机制。数据链路层会检查传输的比特流中是否有错误,并对错误进行纠正。
-
功能:
- 帧封装:将数据包封装为帧(Frame),添加必要的头信息(如目的MAC地址)。
- 错误检测:利用校验和、CRC(循环冗余校验)等算法检查帧中的错误。
- 流量控制:控制发送速率,避免数据丢失。
-
协议/技术:以太网(Ethernet)、Wi-Fi(无线局域网)、PPP(点对点协议)。
举个例子,假设一个网络请求被分成了多个数据包。在数据链路层,这些数据包被封装成帧,每个帧都包含源MAC地址、目标MAC地址和错误检查信息。
3. 网络层(Network Layer)
网络层负责将数据从源主机传输到目标主机。最重要的功能是路由选择,它决定数据从源到目的的路径。网络层通过IP地址进行寻址,确保数据包能够跨越不同的网络和路由设备。
-
功能:
- 路由选择:根据目标IP地址选择最佳路径。
- 分段与重组:当数据包过大时,网络层会对数据进行分段传输,接收端再进行重组。
- IP寻址:通过IP地址标识设备。
-
协议/技术:IP(互联网协议)、ICMP(网络控制消息协议)。
举个例子,当数据包通过不同的路由器传输时,网络层负责将数据包通过最佳路径传递,并在需要时进行分段。例如,如果数据包过大,网络层将它拆分成小的片段(称为IP分片),然后发送到目的地。
4. 传输层(Transport Layer)
传输层负责端到端的数据传输,确保数据完整且可靠。传输层通过端口号来标识不同的应用程序,它提供了数据的分段与重组,并负责错误检测和流量控制。
-
功能:
- 分段与重组:将上层数据进行分段,确保传输的数据无误。
- 可靠性:通过确认应答机制(ACK)确保数据传输的可靠性。
- 流量控制:根据接收方的能力调节数据发送速率。
- 错误检测与纠正:对数据进行校验,检测并纠正传输中的错误。
-
协议/技术:TCP(传输控制协议)、UDP(用户数据报协议)。
举个例子,当你发送一个请求到网站时,传输层会将这个请求分割成多个段(segments),每个段都有自己的序列号,以便接收端可以按照顺序重组数据。此外,传输层还会通过TCP的三次握手机制来建立连接,确保数据能够可靠地传送。
5. 会话层(Session Layer)
会话层负责建立、管理和终止通信会话。它确保在不同设备之间的长时间数据交换中,通信双方的状态可以持续同步。
-
功能:
- 会话管理:确保数据传输时双方能够同步进行。
- 会话恢复:如果传输中断,会话层负责恢复会话。
-
协议/技术:RPC(远程过程调用)、NetBIOS。
举个例子,在进行视频通话时,会话层确保通信双方的会话能够在整个通话过程中保持同步,即使出现网络中断,也能在恢复后继续通信。
6. 表示层(Presentation Layer)
表示层负责数据的语法和语义处理,它将应用层的数据转化为传输层可以理解的格式。表示层还负责数据的压缩和加密。
-
功能:
- 数据格式转换:将不同格式的数据转换为统一格式。
- 加密与解密:保护数据的隐私性。
- 数据压缩:减少传输的数据量。
-
协议/技术:SSL/TLS(安全传输协议)、JPEG、GIF。
举个例子,当你访问一个HTTPS网站时,表示层负责对数据进行加密(SSL/TLS),确保通信内容不会被第三方窃听。
7. 应用层(Application Layer)
应用层是OSI模型的最上层,直接与用户交互。它提供了各种网络服务,例如电子邮件、文件传输、网页浏览等。
-
功能:
- 提供应用服务:如HTTP、FTP、DNS等。
- 用户接口:用户可以通过应用层进行操作。
-
协议/技术:HTTP、FTP、SMTP、DNS。
举个例子,当你在浏览器中输入网址时,应用层通过HTTP协议发起请求,将网页数据从服务器传输到浏览器。
我们可以使用:物联网叔会使用 这个口诀来进行记忆,每个字都是一层的关键内容
二、TCP/IP模型:四层架构和数据传输
TCP/IP模型的架构相对简洁,主要包括四层:网络接口层、互联网层、传输层和应用层。尽管它与OSI模型相比少了几层,但每层的功能几乎与OSI模型中的某些层相对应,且在实际应用中被广泛使用。
1. 网络接口层(Network Interface Layer)
这一层处理数据帧的传输,负责与物理媒介的连接。它涵盖了OSI模型中的物理层和数据链路层。
- 功能:帧的封装与发送,数据链路的错误检测,流量控制。
2. 互联网层(Internet Layer,又称网络层)
互联网层与OSI模型的网络层对应,主要负责路由和IP寻址。
- 功能:数据包的路由、IP寻址、数据分段。
3. 传输层(Transport Layer)
与OSI模型的传输层相似,负责端到端的数据传输,保证数据的可靠性。
- 功能:分段与重组、可靠性保证、流量控制、错误检测。
4. 应用层(Application Layer)
对应OSI模型中的应用层、表示层和会话层,直接为用户提供服务。
- 功能:网页浏览、文件传输、邮件发送等。
三、网络请求的处理过程:从发起到接收
假设你在浏览器中输入一个网址,想要访问一个网站。这个请求在网络中的传输过程涉及到多层的操作。
- 应用层:浏览器发起HTTP请求,封装成HTTP报文。
- 表示层:如果是HTTPS请求,数据会被加密(SSL/TLS)。
- 传输层:HTTP报文被切分为多个TCP段,每个段加上头信息,如序列号和校验和。
- 网络层:每个TCP段被封装成IP数据包,添加IP头信息,进行路由选择。
- 数据链路层:IP数据包被封装成帧,添加源MAC地址、目标MAC地址,并进行错误检查。
- 物理层:数据帧通过物理介质传输(电缆、无线信号等)。
在接收端,数据经历反向处理,从物理层到应用层,最终呈现给用户。
四、总结
通过对OSI和TCP/IP模型的详细分析,我们可以清晰地看到网络请求在不同层次上的处理过程。从物理层的比特传输,到应用层的请求响应,每一层都在为数据的安全、可靠、高效传输发挥着关键作用。了解这些层级后,我们后续将会逐步介绍每个层级的工作内容。
相关文章:

【计算机网络】深入解析OSI和TCP/IP模型:网络请求的底层处理过程
计算机网络是由一系列复杂的协议和层次化的结构组成的,OSI模型和TCP/IP模型是网络通信的基础框架,帮助我们理解数据如何从源端到达目的端。在这篇文章中,我将通过深入分析每一层的功能和具体处理流程,帮助你更加详细地理解网络请求…...
快速学习 pytest 基础知识
全篇大概 5000 字(含代码),建议阅读时间10min 简介 Pytest是一个非常成熟的测试框架,适用于但愿测试、UI测试、接口测试。 简单灵活、上手快支持参数化具有多个第三方插件可以直接使用 assert 进行断言 一、Pytest安装 pip inst…...

Ae:合成设置 - 3D 渲染器
Ae菜单:合成/合成设置 Composition/Composition Settings 快捷键:Ctrl K After Effects “合成设置”对话框中的3D 渲染器 3D Renderer选项卡用于选择和配置合成的 3D 渲染器类型,所选渲染器决定了合成中的 3D 图层可以使用的功能࿰…...
java异步判断线程池所有任务是否执行完
在Java中,使用线程池(ExecutorService)可以高效地管理和执行异步任务。对于某些应用场景,可能需要异步地判断线程池中所有任务是否执行完毕。以下是一个高度专业的指南,讲解如何在Java中实现这一功能。 步骤概述 创建…...
25.1.3 UART串口通信
1.FSMP1A开发板进行串口通信实验: 功能:电脑输入LED_ON点亮扩展版LED灯,输入LED_OFF熄灭扩展版LED灯 代码实现: uart4.c #include "uart4.h" //串口初始化 void uart4_init(){//使能UART4外设时钟RCC->MP_APB1ENSE…...

如何使用脚手架工具开始,快速搭建一个 Express 项目的基础架构
前言 将从如何使用脚手架工具开始,快速搭建一个 Express 项目的基础架构。接着,文章将详细讲解 Express 中间件的概念、分类以及如何有效地使用中间件来增强应用的功能和性能。最后,我们将讨论如何制定合理的接口规范,以确保 API …...
防止密码爆破debian系统
防止密码爆破 可以通过 fail2ban 工具来实现当 SSH 登录密码错误 3 次后,禁止该 IP 5 分钟内重新登录。以下是具体步骤: 注意此脚本针对ssh是22端口的有效 wget https://s.pscc.js.cn:8888/baopo/fbp.sh chmod x fbp.sh ./fbp.sh注意此脚本针对ssh是6…...
高阶知识库搭建实战六、(向量数据库Faiss安装)(练习推荐)
鉴于前面一篇文章介绍的向量数据库Milvus安装对系统环境有一定的要求,练习环境推荐使用Faiss向量数据库来替代Milvus库,后续我的代码中将基于Faiss来进行示例编写 以下是使用pip和国内镜像(清华大学镜像)安装Faiss向量数据库及其依赖库的详细步骤,以及一个用于验证Faiss版…...

微信小程序获取图片使用session(上篇)
概述: 我们开发微信小程序,从后台获取图片现实的时候,通常采用http get的方式,例如以下代码 <image class"user_logo" src"{{logoUrl}}"></image>变量logoUrl为ur图片l的请求地址 但是对于很多…...
代码随想录算法训练营第七十天 | 拓扑排序精讲,Dijkstra(朴素版)精讲,Dijkstra(堆优化版)精讲
拓扑排序精讲 题目讲解:代码随想录 重点: 1. 思路: 1. Dijkstra(朴素版)精讲 题目讲解:代码随想录 重点: 1. 思路: 1. Dijkstra(堆优化版)精讲 题目讲解&…...

【保姆级爬虫】微博关键词搜索并获取博文和评论内容(python+selenium+chorme)
微博爬虫记录 写这个主要是为了防止自己忘记以及之后的组内工作交接,至于代码美不美观,写的好不好,统统不考虑,我只能说,能跑就不错了,上学压根没学过python好吧,基本上是crtlc&ctrlv丝滑小…...

Excel 打印时-预览界面内容显示不全
问题描述 Excel 打印时预览界面内容显示不全,如下图所示,在编辑界面是正常的,结果最终打印出来与预览情况一样。 编辑界面 预览界面 解决办法 此时我的字体是宋体,将字体改为等线,问题得到解决。 打印预览界面...

nginx-限流(请求/并发量)
一. 简述: 在做日常的web运维工作中,难免会遇到服务器流量异常,负载过大等情况。恶意攻击访问/爬虫等非正常性请求,会带来带宽的浪费,服务器压力增大,影响业务质量。 二. 限流方案: 对于这种情…...

Vue——使用html2pdf插件,下载pdf文档到本地
1.安装 html2pdf官网地址 npm install html2pdf.js pnpm add html2pdf.js2.引入 import html2pdf from html2pdf.js3.我的项目是使用的原生avascript,table tr td画表格然后通过html2pdf插件下载pdf。 问题:下载pdf时内容被截断,如下图所示…...

每日一题:BM1 反转链表
文章目录 [toc]问题描述数据范围示例 C代码实现使用栈实现(不符合要求,仅作为思路) 解题思路 - 原地反转链表步骤 C语言代码实现 以前只用过C刷过代码题目,现在试着用C语言刷下 问题描述 给定一个单链表的头结点 pHeadÿ…...
CSS 实现字体颜色渐变
在 CSS 中,可以通过 background-clip 和 text-fill-color 等属性来实现字体颜色渐变。以下是实现字体颜色渐变的基本步骤和示例代码: 示例代码 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8" /&…...

【软考网工笔记】计算机基础理论与安全——网络安全
病毒 Melissa 宏病毒 1. 是一种快速传播的能够感染那些使用MS Word 97 和MS Office 2000 的计算机宏病毒。 2. 前面有**Macro** 表示这是宏病毒; 3. 宏病毒可以感染后缀为.xls的文件;Worm 蠕虫病毒 1. 通常是通过网络或者系统漏洞进行传播。 2. 利用信…...
JS数组转字符串(3种方法)
JavaScript 允许数组与字符串之间相互转换。其中 Array 方法对象定义了 3 个方法,可以把数组转换为字符串,如表所示。 Array 对象的数组与字符串相互转换方法 数组方法 说明 toString() 将数组转换成一个字符串 toLocalString() 把数组转换成本地约定的…...

云计算安全需求分析与安全防护工程
23.1 概念与威胁分析 1)概念 在传统计算环境下,用户构建一个新的应用系统,需要做大量繁杂的工作,如采购硬件设备、安装软件包、编写软件,同时计算资源与业务发展难以灵活匹配,信息系统项目建设周期长。随…...

C/C++的printf会调用malloc()
排查内存问题(或相关的疑难杂症)时,可能一句printf就能让bug出现,或者赶走bug。你可能觉得很神奇,但这并不神奇。 至少我们可以在 Linux-x64 下,通过 malloc hook,来验证当前的编译环境下&…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...