五层协议介绍

层次核心功能典型协议/设备
应用层为用户应用程序提供网络服务接口(如文件传输、电子邮件、网页浏览)HTTP、FTP、SMTP、DNS、SSH
传输层提供端到端的可靠或不可靠数据传输,处理流量控制和差错恢复TCP(可靠)、UDP(不可靠)
网络层负责数据包的路由选择和跨网络传输,处理逻辑寻址(如IP地址)IP、ICMP、ARP、路由器
数据链路层将比特流封装为帧,提供物理寻址(如MAC地址)和错误检测,管理链路访问控制Ethernet、Wi-Fi(802.11)、PPP、交换机
物理层定义物理介质的电气、机械特性,传输原始比特流(0/1信号)双绞线、光纤、无线信号、中继器

一、应用层

1.作用:直接为用户应用程序提供网络服务,定义数据格式和交互规则

2.主要协议:HTTP协议,HTTPS协议

3.储备知识

1)日常我们在浏览器上见到的url(统一资源定位符)中包括协议,域名,资源路径

2)表现形式:协议://域名/资源路径

3)域名会被解析成IP地址

4)使用域名的原因:域名具有更强的表义性,便于用户了解自己访问的是哪个服务器

5)DNS(域名系统):存储IP地址和域名的映射关系

4.HTTP协议的介绍

4.1HTTP请求

1)HTTP以空行为分隔符做到了报头与有效载荷的分离

2)client和server如何保证自己读到的报文是完整的?

答:step1:读取字节流,分析读到的字节流是否存在空行

step2:提取content-length,获得正文长度,然后再读取或截取指定长度的内容

注:如果接收方的应答内携带数据,他的response中的响应报头中携带content-length:xx

4.2HTTP响应

1)content-type:数据类型

2)一张网页内可能有多种资源(如:网页自己+图片),这就导致了如果想获得网页,除识别网页外,还要识别其他类型,故而浏览器会发送第二次请求

3)临时重定向和永久重定向

临时重定向:不改变任何信息,多用于登录,跳转,状态码多为302/307

永久重定向:多用于网站更换域名或更换网址,状态码多为301/308

4)方法:Get和Post

Get:获取资源,如果进行参数提交通过uri进行提交

Post:上传资源,如果进行参数提交通过httprequest正文提交

GetPost(相较于Get比较安全)
提交的参数不宜过长可以传送长数据
会回显参数不会回显参数

注:Get和Post都不安全,二者皆为明文传送

5)为了在一定程度上解决安全问题,引入session和cookie

3.协议数据单元(PDU):数据

二、传输层

1.作用:确保数据从源进程可靠传输到目标进程(通过端口号标识)

2.主要协议:TCP和UDP

特性TCPUDP
设计目标提供可靠、有序、无差错的数据传输提供高效、低延迟的简单数据传输
连接管理面向连接(需建立和释放连接)无连接(直接发送数据,无需握手)
传输方式字节流(无边界,需应用层自行分帧)数据报(保留消息边界,每个UDP包独立)

3.TCP协议

1)报头和有效载荷如何分离?

答:读取报文段的前20个字节,提取前4位首部长度,计算有效载荷长度

2)可靠性的原因:对于每一次请求都会有对应的应答,保证了历史消息的可靠性(即保证可靠的核心机制是确认应答机制)

3)面试题:为什么报文段里需要包含两个序号(确认序号和序号)

答:服务器不一定只作应答,他可能是捎带应答(应答+数据),这就要求接收方既要对报文进行确认,又要包含自己的序号

4)标志位

标志位全称作用取值含义典型场景核心特点
URGUrgent Pointer标识紧急指针字段是否有效,用于高优先级数据传输1=紧急数据有效;0=无效服务端响应慢时,客户端发送紧急状态查询(如“立即终止”指令)紧急数据优先处理,应用层称为“带外数据”
ACKAcknowledgment确认号字段是否有效,表示报文为确认包1=确认号有效;0=无效(仅握手首包)所有正常通信报文(除首次SYN)均需ACK=1累积确认机制,确认号为期望接收的下一个字节序号
PSHPush Function强制接收方立即将数据交付应用层,避免缓冲区堆积1=立即推送;0=正常缓存交互式应用(如Telnet、SSH)需实时显示用户输入减少延迟,优化实时性
RSTReset Connection强制释放连接并重建,通常因严重错误(如主机崩溃、非法数据包)触发1=重置连接;0=正常连接异常、拒绝SYN Flood攻击、端口未监听时返回RST可单独发送或与ACK组合,快速终止连接
SYNSynchronize Sequence初始化序列号,用于连接请求或接受报文1=发起/接受连接;0=正常数据TCP三次握手(客户端SYN→服务端SYN+ACK→客户端ACK)不携带数据但消耗序列号,建立连接唯一方式
FINFinish Transmission发送方数据已发送完毕,请求释放连接(可能仍有接收能力)1=终止连接;0=正常TCP四次挥手(客户端FIN→服务端ACK→服务端FIN→客户端ACK)即使无数据也消耗序列号,支持半关闭状态(如服务端继续发送数据)

5)3次握手建立连接

阶段客户端动作服务端动作报文标志位关键作用
1. SYN_SENT发送SYN包(请求连接)监听端口,等待客户端请求SYN=1, seq=x客户端初始化序列号x,表示“我想建立连接”。
2. SYN_RCVD等待服务端响应收到SYN后回复SYN+ACK包SYN=1, ACK=1, seq=y, ack=x+1服务端确认客户端请求(ack=x+1),并初始化自身序列号y
3. ESTABLISHED发送ACK包(确认连接)收到ACK后连接建立ACK=1, seq=x+1, ack=y+1客户端确认服务端响应,双方进入ESTABLISHED状态,可开始数据传输。

Q:为什么要进行3次握手?

A:1.以最短的方式验证全双工2.以最小的成本100%确认双方的通信意愿

6)4次回收释放连接

阶段主动关闭方(客户端)被动关闭方(服务端)报文标志位关键作用
1. FIN_WAIT_1发送FIN包(请求关闭)收到FIN后进入CLOSE_WAIT状态FIN=1, seq=u客户端表示“我数据已发送完毕,但可能继续接收数据”。
2. CLOSE_WAIT等待服务端确认回复ACK包ACK=1, seq=v, ack=u+1服务端确认客户端关闭请求,但可能仍有数据未发送完。
3. LAST_ACK(可选)继续接收数据发送FIN包(服务端数据发送完毕)FIN=1, ACK=1, seq=w, ack=u+1服务端表示“我数据也发送完毕,可以关闭连接”。
4. TIME_WAIT回复ACK包(确认服务端关闭)收到ACK后进入CLOSED状态ACK=1, seq=u+1, ack=w+1客户端确认服务端关闭,等待2MSL(最大报文段生存时间)后释放资源(防止延迟报文干扰)。

Q1:为什么主动断开连接的一方要进入TIME_WAIT?

A1:保证在传输方向上尚未达到的报文已经在网络中消散,不会引起下一次连接的错误

Q2:如果client已经退出或者关闭,服务器端不关闭会怎样?

A2:服务器会一直处于TIME_WAIT状态,依旧占用fd,连接没有释放

7)滑动窗口

发送方一次可以发送多少数据有自己的滑动窗口的大小决定

滑动窗口的大小=min(对方的接收能力,拥塞窗口的大小)

滑动窗口不可以向左滑动

8)快重传和超时重传

快重传的条件:连续收到3个重复确认

超时重传的条件:超时并且没有应答

9)拥塞控制

9.1)目标:避免网络过载

9.2)四大算法

算法名称触发条件核心行为逻辑关键特点典型应用场景
慢启动(Slow Start)连接建立、超时重传后,或从快速恢复退出后(部分实现)。1. 初始cwnd=1 MSS(或更小)。
2. 每收到一个ACK,cwnd += 1 MSS(指数增长)。
3. 达到ssthresh后切换到拥塞避免。
快速探测带宽:指数增长迅速扩大发送窗口。
风险控制:避免一开始就发送大量数据导致网络过载。
连接初期、网络空闲后的数据传输启动阶段。
拥塞避免(Congestion Avoidance)cwnd ≥ ssthresh,或从快速恢复退出后。1. 每收到一个ACK,cwnd += 1 MSS / cwnd(线性增长,每轮RTT增加1 MSS)。
2. 发生丢包时,进入快速重传/恢复。
保守增长:缓慢增加发送速率,防止触发拥塞。
稳定性优先:适合网络负载接近阈值时。
网络带宽接近饱和时的持续数据传输阶段。
快速重传(Fast Retransmit)收到3个重复ACK(表明中间有数据包丢失,但后续数据已到达接收方)。1. 立即重传丢失的段(无需等待超时)。
2. 触发快速恢复,调整ssthreshcwnd
快速响应丢包:比超时重传减少数秒等待时间。
依赖重复ACK:适用于部分丢包场景。
网络轻微拥塞或随机丢包时的快速恢复。
快速恢复(Fast Recovery)快速重传后(即收到3个重复ACK后)。1. ssthresh = cwnd / 2(减半拥塞阈值)。
2. cwnd = ssthresh + 3*MSS(补偿已离开网络的3个重复ACK对应的段)。
3. 每收到一个重复ACK,cwnd += 1 MSS;收到新ACK后退出,进入拥塞避免。
避免慢启动:维持较高发送速率,减少性能波动。
补偿机制:通过重复ACK推断网络状态。
快速重传后的拥塞窗口调整,平衡效率与稳定性。

3.协议数据单元(PDU):TCP的报文段,UDP的用户数据报

三、网络层

1.作用:通过路由算法(如Dijkstra)确定数据包从源到目标的最佳路径

2.主要协议:IP协议

1)TCP/IP协议的核心功能是将数据100%可靠从主机A传输到主机B

2)IP地址=网络号+主机号

3)子网划分

Q:问什么要进行子网划分?

A:未来查找目标主机时从目标网络中查找,从而提高效率

4)在网络通信中,私有IP不能出现在公网中,因为私有IP可以重复,这将导致从此发出的报文无法回来

5)每经过一个内网路由器进行src:ip替换,替换成当前路由器的wan口IP

6)将内网IP转换为公网IP需要借助NAT技术

3.协议数据单元(PDU):IP数据报

四、数据链路层

1.作用:将网络层数据包封装为帧(Frame),添加帧头和帧尾。

2.主要协议:PPP协议

3.协议数据单元(PDU):数据帧

4.数据链路层的三个基本问题:封装成帧,透明传输,差错检测

五、物理层

1.作用:通过物理介质(如电缆、无线信号)传输比特流

2.协议数据单元(PDU):比特

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

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

相关文章

gin框架 中间件 是在判断路由存在前执行还是存在后执行的研究

最近有个需求,就是发现我们的验签路由中间件会在判断路由是否存在前执行。我们期望是gin框架先自己判断路由中间件是否存在,存在了再走后面的中间件,不存在直接返回404.这样能节省一定的资源。 研究了一下gin框架的源码, 先说一下…

AGV 无人叉车关键技术问题解析:精准定位算法 / 安全避障逻辑 / 系统对接协议全方案

AGV无人叉车作为智能物流的核心装备,在落地时常面临定位漂移、系统兼容性差、避障失灵等痛点。本文深度解析5大高频问题成因与解决方案,助企业规避运营风险,提升效率。 一、定位导航问题:行驶路径偏移怎么办? 1.典型…

AI Agent意图识别

意图识别:多维度拆解 意图识别是人机对话系统(Conversational AI)的“大脑皮层”,负责理解用户言语背后的真实目的。它将用户的自然语言输入映射到一个预定义的意图类别上。可以说,意图识别的准确性,直接决…

.net 8 项目 一天快速入门

这里有一个解决方案 这里有一个接口类的项目 这会呢如果还想在建一个项目 我们在解决方案这里右键,添加,新建项目 点击 我现在要建立一个类库,所以就搜一下类库,这里的第一个就是我们需要创建的类库 起个名字,计算类 进来了 可以看到这里有多了一个项目,但是他们…

语音大模型速览(一)F5-TTS

F5-TTS: A Fairytaler that Fakes Fluent and Faithful Speech with Flow Matching 论文链接:https://arxiv.org/pdf/2410.06885代码链接:https://SWivid.github.io/F5-TTS/ 一段话总结 本文提出了 F5-TTS,一种基于流匹配和扩散 Transform…

Codeforces 2021 C Those Who Are With Us

[Problem Discription]\color{blue}{\texttt{[Problem Discription]}}[Problem Discription] 给定一个 nmn \times mnm 的表格 ai,ja_{i,j}ai,j​,你可以恰好进行一次如下操作: 选择一个格点 (r,c)(r,c)(r,c)。对于所有满足 iririr 或者 jcjcjc 的格点 (…

chrome插件合集

最近一段时间呢(不到一年),实现了大概二十几个chrome插件。很多人不知道的是,其实开发插件很解压,就好像是我喜欢沿着公园的小路散步一样,每开发一个插件带给我的成就感和快乐都是独特的。我依然记得自己开发出第1个插件时的快乐&…

【机器学习深度学习】模型微调的基本概念与流程

目录 前言 一、什么是模型微调(Fine-tuning)? 二、预训练 vs 微调:什么关系? 三、微调的基本流程(以BERT为例) 1️⃣ 准备数据 2️⃣ 加载预训练模型和分词器 3️⃣ 数据编码与加载 4️…

大语言模型预训练数据——数据采样方法介绍以GPT3为例

大语言模型预训练数据——数据采样方法介绍以GPT3为例一、数据采样核心逻辑二、各列数据含义一、数据采样核心逻辑 这是 GPT - 3 训练时的数据集配置,核心是非等比例采样——不按数据集原始大小分配训练占比,而是人工设定不同数据集在训练中被抽取的概率…

针对同一台电脑,为使用不同 SSH Key 的不同用户分别设置 Git 远程仓库凭据的操作指南

一、准备工作 生成多对 SSH Key 为每个用户(如“个人”、“公司”)生成一对独立的 SSH Key。 示例(在 Git Bash 或 Linux 终端中执行): # 个人 ssh-keygen -t rsa -b 4096 -C "personalexample.com" -f ~/.…

【V5.0 - 视觉篇】AI的“火眼金睛”:用OpenCV量化“第一眼缘”,并用SHAP验证它的“审美”

系列回顾: 在上一篇 《给AI装上“写轮眼”:用SHAP看穿模型决策的每一个细节》 中,我们成功地为AI装上了“透视眼镜”,看穿了它基于数字决策的内心世界。 但一个巨大的问题暴露了:它的世界里,还只有数字。 它…

Open3D 基于最大团(MAC)的点云粗配准

MAC 一、算法原理1、原理概述2、实现流程3、总结二、代码实现三、结果展示博客长期更新,本文最新更新时间为:2025年7月1日。 一、算法原理 1、原理概述 最大团(Maximal Cliques, MAC)法在点云配准中的应用,是近年来解决高离群值(outlier)和低重叠场景下配准问题的重要…

Science Robotics发表 | 20m/s自主飞行+避开2.5mm电线的微型无人机!

从山火搜救到灾后勘察,时间常常意味着生命。分秒必争的任务要求无人机在陌生狭窄环境中既要飞得快、又要飞得稳。香港大学机械工程系张富教授团队在Science Robotics(2025)发表论文“Safety-assured High-speed Navigation for MAVs”提出了微型无人机的安全高速导航…

【数据分析】如何在PyCharm中高效配置和使用SQL

PyCharm 作为 Python 开发者的首选 IDE,其 Professional 版本提供了强大的数据库集成功能,让开发者无需切换工具即可完成数据库操作。本文将手把手教你配置和使用 PyCharm 的 SQL 功能。 一、安装和配置 PyCharm 老生常谈,第一步自然是安装并…

OpenShift AI - 使用 NVIDIA Triton Runtime 运行模型

《OpenShift / RHEL / DevSecOps 汇总目录》 说明:本文已经在 OpenShift 4.18 OpenShift AI 2.19 的环境中验证 文章目录 准备 Triton Runtime 环境添加 Triton Serving Runtime运行基于 Triton Runtime 的 Model Server 在 Triton Runtime 中运行模型准备模型运行…

物联网数据安全区块链服务

物联网数据安全区块链服务 下面是一个专为物联网数据安全设计的区块链服务实现,使用Python编写并封装为RESTful API。该服务确保物联网设备数据的不可篡改性、可追溯性和安全性。 import hashlib import json import time from datetime import datetime from uui…

数据集-目标检测系列- 卡车 数据集 truck >> DataBall

数据集-目标检测系列- 卡车 数据集 truck >> DataBall贵在坚持!* 相关项目1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview2)数据集训练、推理相关项目&…

vue/微信小程序/h5 实现react的boundary

ErrorBoundary react的boundary实现核心逻辑无法处理的情况包含函数详细介绍getDerivedStateFromError和componentDidCatch作用为什么分开调用 代码实现(补充其他异常捕捉)函数组件与useErrorBoundary(需自定义Hook) vue的boundar…

Day113 切换Node.js版本、多数据源配置

切换Node.js版本 1.nvm简介nvm(Node Version Manager),在Windows上管理Node.js版本,可以在同一台电脑上轻松管理和切换多个Node.js版本 nvm下载地址:https://github.com/coreybutler/nvm-windows/2.配置nvm安装之后检查nvm是否已经安装好了&a…

应急响应靶机-linux2-知攻善防实验室

题目: 1.提交攻击者IP2.提交攻击者修改的管理员密码(明文)3.提交第一次Webshell的连接URL(http://xxx.xxx.xxx.xx/abcdefg?abcdefg只需要提交abcdefg?abcdefg)4.提交Webshell连接密码5.提交数据包的flag16.提交攻击者使用的后续上传的木马文件名称7.提交攻击者隐藏…