概述

如何让数据具有自我描述性?

为什么网络有层级的划分?

交换机、路由器要不要阅读一个信息的头部?要不要阅读数据部分? 

网卡:网卡可以完成帧的封装和解封装,工作在数据链路层。
中继器:中继器以比特方式将网络信号进行再生和重定时,使其能够传输更长的距离。
放大器
集线器:
集线器实际上就是一个多端口的中继器。
网桥/桥接器:连接两个局域网的一种存储转发设备,可以将一个大的LAN分割为多个网段,或者将两个以上的LAN互联为一个逻辑LAN。
交换机:交换机有一张交换表,可以记录MAC帧和对应端口。(相当于网桥+集线器) 路由器:路由选择、存储转发、连接外部网络。
协议名协议功能占用端口 号
HTTP 超文本传输协议应用层传输Web网站网页和其他资源80
FTP文件传输协议应用层文件上传和下载20/21
Telnet 远程连接协议应用层远程登录(无加密)23
SSH安全外壳协议应用层远程登陆(加密)22
SMTP 简单邮件传输协 议应用层电子邮件(邮件在服务器之间提交和传 送)25
POP3 邮局协议版本3应用层电子邮件(邮件最终交付协议)110
TCP传输层可靠的面向连接的传输层协议
UDP传输层不可靠的基于数据报的传输层协议
IP网络层网际互联协议
ICMP网络层网络控制消息协议
IGMP网络层网络组管理协议
ARP数据链路 层地址转换协议
RARP数据链路 层反向地址转换协议

万维网

万维网(World Wide Web,简称 WWW)的诞生和发展依赖于以下三个核心要素,它们共同构成了现代互联网信息交互的基础:

1. URL(统一资源定位符)

作用:为网络中的资源(如网页、图片、API)提供唯一标识和访问地址

https://www.example.com:443/path/to/resource?query=value#fragment
↑      ↑              ↑   ↑               ↑          ↑
协议    主机名         端口  路径            查询参数    片段 

以下是URL各组成部分的表格化总结:

组成部分作用示例注意事项
协议(Scheme)指定访问资源使用的应用层协议https://ftp://后跟://,现代浏览器默认隐藏http://https://
主机名(Host)标识资源所在的服务器地址(域名或IP)www.example.com192.168.1.1可包含子域(如blog.example.com
端口(Port)指定服务器服务的网络端口:443(HTTPS)、:8080(自定义端口)默认端口可省略(HTTP=80,HTTPS=443)
路径(Path)标识服务器上资源的具体位置(类似文件路径)/articles/2023//index.html区分大小写(取决于服务器配置)
查询参数(Query)向服务器传递额外参数(以?开头,&分隔)?id=123&lang=zh常用于搜索(?q=keyword)、分页(?page=2
片段(Fragment)指向资源内的锚点(以#开头),仅客户端使用#section-2/#/home(SPA路由)不发送到服务器,用于页面内跳转或前端路由

2. HTTP(超文本传输协议)

HTTP 的中文全称是 超文本传输协议(HyperText Transfer Protocol)。

 超文本(HyperText)含义:超越普通文本的交互式文本,支持嵌入链接、图片、视频等多媒体资源。

  • GET:通过 URL 的查询字符串(?key=value)传递数据,可见且长度受限(约 2048 字符)。

  • POST:通过请求体(body)传输数据,不可见且支持大量数据(如文件上传)。

 发送

发送的HTTP请求一般称之为HTTP请求报文,分为请求行请求头/消息头空行请求体/请求正文四部分.其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开. 

GET /stm32/index.html?toc=0&ws=off&reset=true HTTP/1.1  # 请求行:使用GET方法获取/stm32/index.html资源,附带3个查询参数,使用HTTP/1.1协议
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7  # 可接受的响应内容类型及优先级(q值)
Accept-Encoding: gzip, deflate  # 支持的压缩编码格式
Accept-Language: zh-CN,zh;q=0.9  # 优先接收中文内容
Cache-Control: max-age=0  # 禁用缓存,强制向服务器验证
Connection: keep-alive  # 要求保持TCP连接
Cookie: __itrace_wid=f3d24dcd-1c13-4bec-8cc9-11d91bc0475e; __itrace_wid=6d823e9c-84aa-43bd-1109-18aee93b70cd  # 发送的Cookie信息(包含两个相同的键,可能是错误)
Host: 47.97.82.68:8080  # 目标服务器地址和端口
If-Modified-Since: Tue, 06 May 2025 12:41:12 GMT  # 条件请求:如果资源在此时间后未修改则返回304
If-None-Match: W/"681a0368-b41d8"  # 条件请求:如果ETag匹配则返回304
Upgrade-Insecure-Requests: 1  # 表示客户端优先选择HTTPS
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 QuarkPC/4.2.5.446  # 客户端浏览器信息(Windows系统,Chrome内核,Quark浏览器)请求正文

 请求行(Request Line):第一行 

请求头(Request Headers):从第二行开始到空行前的所有内容均为请求头,用于传递附加信息

 响应

  

服务器发送的HTTP响应一般称之为HTTP响应报文,分为响应行响应头/消息头空行响应体四部分.其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开.

HTTP/1.1 304 Not Modified  # 响应行:HTTP/1.1协议,状态码304表示资源未修改
Server: nginx/1.18.0 (Ubuntu)  # 服务器类型及版本(Ubuntu系统下的Nginx 1.18.0)
Date: Fri, 25 Jul 2025 13:47:28 GMT  # 服务器响应时间(2025年7月25日13:47:28 GMT)
Last-Modified: Tue, 06 May 2025 12:41:12 GMT  # 资源最后修改时间(与请求中的If-Modified-Since一致)
Connection: keep-alive  # 保持TCP连接不关闭
ETag: "681a0368-b41d8"  # 资源标识符(与请求中的If-None-Match一致)响应正文
状态码范围类别说明常见例子
1XX信息性状态码请求已被接收,继续处理101 Switching Protocols(协议切换)
2XX成功状态码请求已成功处理200 OK(成功)
3XX重定向状态码需进一步操作以完成请求301 Moved Permanently(永久重定向)
4XX客户端错误请求包含语法错误或无法完成404 Not Found(资源不存在)
5XX服务器错误服务器处理请求失败500 Internal Server Error(服务器内部错误)

 3. HTML(超文本标记语言)

  • 作用:定义网页的结构和内容,并支持超链接(Hyperlink)实现资源互联。

  • 关键点

    • 超文本特性:通过 <a> 标签链接其他资源,形成网状信息结构。

    • 跨平台兼容:纯文本格式,可在不同设备和浏览器中渲染。

    • 多媒体整合:支持嵌入图片、脚本(JavaScript)、样式(CSS)等。

  • 意义:解决了“如何呈现和关联资源”的问题,是万维网的“内容载体”。

三者的协作关系

1.浏览器输入URL → 2. DNS解析获取IP → 3. 建立TCP连接 → 4. 发送HTTP请求报文 → 5. 服务器返回响应 HTML→ 6. 浏览器渲染页面

  DNS解析(Domain Name System Resolution)是将人类易读的域名(如 www.example.com)转换为机器可识别的IP地址(如 192.0.2.1)的过程。

不同的域名可以用同一个服务器?

 答案是肯定的! 多个域名可以指向同一台服务器,通过监视程序统一管理。

 TCP

 

长连接 和 短连接的区别

类型定义典型应用场景
短连接每次通信后立即断开连接,下次通信需重新建立TCP连接。HTTP/1.0、简单的请求-响应模型(如早期Web)
长连接建立连接后保持连接不关闭,允许多次数据传输(通过心跳保活)。HTTP/1.1、数据库连接、实时通信(如WebSocket)

TCP头部结构(共20字节基础长度 + 可选选项)

字段名位数作用说明示例/备注
源端口(Source Port)16 bit发送方的端口号。如 80(HTTP服务端口)
目的端口(Destination Port)16 bit接收方的端口号。如 54321(客户端临时端口)
序列号(Sequence Number)32 bit当前数据段的第一个字节的序列号,用于数据排序和重组。初始值随机生成(ISN),后续累加数据长度。
确认号(Acknowledgment Number)32 bit期望收到的下一个字节的序列号(仅当ACK=1时有效)。如收到seq=1000,则回复ack=1001
数据偏移(Data Offset)4 bitTCP头部的长度(以4字节为单位),用于定位数据开始位置。最小值为5(20字节头部)。
保留(Reserved)6 bit保留字段,必须置0。未来扩展使用。
控制标志(Flags)6 bit控制连接状态的关键标志位:
URG Urgent1 bit紧急指针有效(高优先级数据)。如Telnet中断命令。
ACK Acknowledgment1 bit确认号有效(建立连接后通常为1)。三次握手中第二次开始ACK=1。
PSH Push1 bit接收方应立即将数据推送给应用层(避免缓冲区延迟)。如实时聊天消息。
RST1 bit重置连接(异常终止)。收到无效报文时强制断开。
SYN  :Synchronize1 bit同步序列号(用于建立连接)。三次握手中前两次SYN=1。
FIN1 bit终止连接(正常关闭)。四次挥手中FIN=1。
窗口大小(Window Size)16 bit接收方的可用缓冲区大小(流量控制),表示当前能接收的字节数。动态调整(滑动窗口机制)。
校验和(Checksum)16 bit校验头部和数据部分的完整性(包括伪头部)。防止传输错误。
紧急指针(Urgent Pointer)16 bit当URG=1时有效,指向紧急数据的末尾偏移量。需配合URG标志使用。
选项(Options)可变可选字段(长度由数据偏移决定),用于扩展功能:
MSS(Maximum Segment Size)可变协商最大报文段大小(通常1460字节,以太网MTU=1500)。三次握手时协商。
SACK(Selective ACK)可变选择性确认,支持部分重传。提高重传效率。
时间戳(Timestamp)可变计算RTT(往返时间)和防止序列号回绕。高带宽网络必备。
填充(Padding)可变确保TCP头部长度是4字节的整数倍。选项字段不足时补0。

 三次握手的作用

  1. 第一次握手(SYN)

    • 客户端发送SYN,携带自己的初始序列号ISN(Sequence Number:857960100)。

    • 目的:告知服务端“我想建立连接,我的序列号是X=857960100”。

  2. 第二次握手(SYN-ACK)

    • 服务端返回SYN-ACK,携带自己的初始序列号ISN(Sequence Number:304853757),并确认客户端的ISN ( ACK=X+1),也就是ACK=857960100+1。

    • 目的:回应客户端“我收到你的SYN了,我的序列号是Y=304853757,下次请发X+1”。

  3. 第三次握手(ACK)

    • 客户端发送ACK,确认服务端的ISN(ACK=Y+1)也就是304853757+1。

    • 目的:告知服务端“我收到你的SYN-ACK了,下次请发Y+1”。

关键点:第三次握手是客户端对服务端序列号的显式确认,确保双方序列号同步,且服务端知道客户端是活跃的。

TCP三次握手流程详解

步骤发送方报文内容目的
第一次握手客户端SYN=1, seq=X告知服务端:“我想建立连接,我的初始序列号是X”。
第二次握手服务端SYN=1, ACK=1, seq=Y, ack=X+1回应客户端:“我收到你的SYN了,我的序列号是Y,下次请从X+1开始发数据”。
第三次握手客户端ACK=1, seq=X+1, ack=Y+1确认服务端:“我收到你的SYN-ACK了,下次请从Y+1开始发数据”。

为什么TCP需要三次握手?两次握手为什么不行?

两次握手:类似“你约朋友吃饭,朋友说‘好’,但你不确认他是否听到你的约定”。

风险:朋友可能没听清,但你默认他已同意。

三次握手:你约朋友 → 朋友说“好” → 你回复“收到”。

双方明确约定已达成。

TCP两次握手的问题 vs 三次握手的解决方案

问题分类两次握手的缺陷三次握手的解决方案
历史连接干扰服务端收到旧SYN会直接建立连接,客户端因序列号不匹配拒绝,导致服务端资源浪费。客户端通过第三次ACK确认有效性,服务端仅对有效ACK分配资源。
初始序列号(ISN)同步服务端无法确认客户端是否收到自己的SYN-ACK(ISN可能丢失),后续数据传输不可靠。客户端的第三次ACK显式确认服务端的ISN(ACK=Y+1),确保双方序列号同步。
重复SYN导致的资源浪费服务端无法区分重复SYN(如网络重传),会为每个SYN创建连接,耗尽资源。服务端仅在收到客户端的ACK后分配资源,避免无效连接。

 TCP协议如何保证数据的可靠传输?

机制解决的问题实现方式
三次握手可靠连接建立SYN、ACK同步序列号
序列号与确认号数据顺序、丢包检测每个字节标记序列号,ACK确认接收范围
超时重传丢包恢复RTO超时未收到ACK则重传
滑动窗口流量控制动态调整发送窗口大小(RWND)
拥塞控制网络拥塞避免慢启动、拥塞避免、快重传、快恢复

 下面表格通过举例说明了超时重传、滑动窗口动态调整大小和快重传机制

步骤发送方(Client)接收方(Server)机制触发
1发送seq=1~1000未收到(丢包)超时重传(RTO触发)
2超时后重传seq=1~1000收到并回复ACK=1001, RWND=4096滑动窗口更新
3发送seq=1001~5000收到但缓冲区满,回复ACK=5001, RWND=2048流量控制(窗口调小)
4发送seq=5001~7048(2KB)收到seq=5001~7048,回复ACK=7049正常传输
5发送seq=8001~9000(丢包)收到seq=9001~10000,回复3次ACK=8001快重传 + 快恢复

发送方可能一次发送很多TCP报文, 目的方着急回复确认吗?  不着急,偶尔回复 

为什么发送数据时要携带源端口? 

超时重传和快重传的区别是什么?

完整处理流程示例

假设发送 20KB 数据(MSS=1460B,初始 CWND=2 MSS):

  1. 分片:分成 14 个段(14×1460B)。

  2. 慢启动

    • 发送 2 段 → 收到 ACK → CWND=4 → 发送 4 段 → …

  3. 流量控制:若接收方 RWND=0,暂停发送。

  4. 拥塞控制:丢包后触发快重传,CWND 减半。

  5. 重组数据:接收方按序列号排序,提交给应用层。

 补充:TCP协议核心术语对照表

英文缩写英文全称中文解释
TCPTransmission Control Protocol传输控制协议,提供可靠的、面向连接的字节流服务。
IPInternet Protocol网际协议,负责数据包的路由和寻址。
MTUMaximum Transmission Unit最大传输单元,单次数据传输的最大长度(如以太网MTU=1500字节)。
MSSMaximum Segment Size最大报文段长度,TCP数据段的最大负载(MSS = MTU - IP头 - TCP头)。
SYNSynchronize Sequence Numbers同步序列号,用于建立连接(三次握手的第一步)。
ACKAcknowledgment确认号,表示已成功接收数据(ACK=1时有效)。
FINFinish终止连接标志,用于正常关闭连接(四次挥手)。
RSTReset重置连接标志,强制终止异常连接。
URGUrgent紧急指针标志,表示数据需优先处理(如中断命令)。
PSHPush推送标志,要求接收方立即将数据提交给应用层。
ISNInitial Sequence Number初始序列号,TCP连接开始时随机生成的序列号。
RTTRound-Trip Time往返时间,数据从发送到确认接收的时间。
RTORetransmission Timeout重传超时时间,超时未收到ACK则触发重传。
RWNDReceive Window接收窗口,接收方当前可用的缓冲区大小(流量控制)。
CWNDCongestion Window拥塞窗口,发送方根据网络拥塞程度动态调整的发送窗口。
SACKSelective Acknowledgment选择性确认,允许接收方告知发送方哪些数据已收到(优化重传)。
MSSMaximum Segment Size最大报文段长度,TCP单次传输的数据段最大值。
NATNetwork Address Translation网络地址转换,将私有IP映射为公有IP(解决IPv4地址不足)。
LANLocal Area Network局域网,小范围内的私有网络(如家庭、办公室)。
WANWide Area Network广域网,跨越长距离的网络(如互联网)。

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

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

相关文章

Linux选择题

第12题&#xff08;多选题&#xff09;原题: 能够为逻辑卷增加容量的命令有( )。A. lvresize: 此命令可以用来调整逻辑卷的大小&#xff0c;既可以增大也可以缩小。例如&#xff0c;lvresize -L 1G /dev/vgname/lvname 会增加1GB&#xff0c;lvresize -L 10G /dev/vgname/lvnam…

使用钉钉开源api发送钉钉工作消息

在工作管理系统场景中&#xff0c;上下级和不同部门之间常常有请假&#xff0c;餐补等流程操作&#xff0c;而这些操作通常需要人员手动进行&#xff0c;这里我们引入一个钉钉的api&#xff0c;可以基于钉钉来发送工作消息通知1、导入钉钉sdk<dependency><groupId>…

拒绝SQL恐惧:用Python+pyqt打造任意Excel数据库查询系统

一、引言 在数字化转型浪潮中&#xff0c;超过76%的基层业务人员仍被困在"SQL恐惧症"的泥潭里——他们精通业务逻辑却受限于技术门槛&#xff0c;面对海量数据时只能反复请求IT部门协助。本项目通过PythonPyQt来构建基于Excel风格的查询系统&#xff0c;从而打破这种…

KubeKey安装KubeSphere、部署应用实践问题总结

使用KubeSphere的KubeKey 安装K8s 集群过程中&#xff0c;碰到了一些问题&#xff0c;现在都一一解决了&#xff0c;以此记录一下。 kubekey 安装k8s 集群报错 execute task timeout, Timeout1m error: Pipeline[CreateClusterPipeline] execute failed: Module[GreetingsModul…

基于粒子群优化的PID控制在药液流量控制系统中的应用

基于粒子群优化的PID控制在药液流量控制系统中的应用 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,觉得好请收藏。点击跳转到网站。 1. 引言 在现代工业控制系统中,精确的流量控制是许多生产过程的关键环节。本文针对药液流量控制…

不用电脑要不要关机?

1. 短时间不用&#xff08;午休、临时外出&#xff09;&#xff1a;建议「睡眠」或「休眠」睡眠&#xff1a;电脑暂停工作&#xff0c;唤醒速度快&#xff0c;耗电较少适合需要快速恢复工作的场景休眠&#xff1a;整机断电&#xff0c;唤醒速度比睡眠慢&#xff0c;但完全不耗电…

【Spring AI】SiliconFlow-硅基流动

硅基流动 https://docs.siliconflow.cn/cn/userguide/introduction

swagger基本注解@Tag、@Operation、@Parameters、@Parameter、@ApiResponse、@Schema

swagger基本注解 Tag 介绍&#xff1a;用于给接口分组&#xff0c;用途类似于为接口文档添加标签。用于&#xff1a;方法、类、接口。常用属性&#xff1a; name&#xff1a;分组的名称 RestController RequestMapping("/sysUser") Tag(name "管理员接口&quo…

Unity 实现帧率(FPS)显示功能

一、功能介绍本教程实现一个 FPS 显示脚本&#xff0c;支持 TextMeshProUGUI 组件。脚本会每秒更新一次帧率&#xff0c;并显示在 UI 上&#xff0c;便于开发和调试时观察性能变化。二、完整代码将以下代码保存为 FPS.cs 脚本&#xff1a;using UnityEngine; using TMPro;[Requ…

【星野AI】minimax非活动时间充值优惠漏洞

点开发现有活动即将开启。把手机时间修改为20250729&#xff0c;或者其它活动内时间。发现活动的充值接口未进行时间校验。叠加新人首充优惠&#xff0c;充值六元&#xff0c;获得1800钻。在非活动时间获取了优惠。

Python 程序设计讲义(22):循环结构——for 循环

Python 程序设计讲义&#xff08;22&#xff09;&#xff1a;循环结构——for 循环 目录Python 程序设计讲义&#xff08;22&#xff09;&#xff1a;循环结构——for 循环一、for 循环的语法二、for 循环执行的流程三、for 循环应用举例while 循环的循环次数往往是不确定的&am…

自动驾驶---视觉语言模型(VLM)引导的模型预测控制器(MPC)

1 背景之前大家普遍认为的端到端就是传感器输入&#xff0c;控制输出&#xff0c;这也确实是真正的端到端&#xff0c;但目前车企走的更多的是轨迹生成。自动驾驶端到端控制瓶颈主要有以下两点&#xff1a;可解释性缺失&#xff1a;传统端到端模型&#xff08;如纯VLM控制器&am…

最优估计准则与方法(5)加权最小二乘估计(WLS)_学习笔记

前言 最优估计理论中研究的最小二乘估计&#xff08;LS&#xff09;为线性最小二乘估计&#xff08;LLS&#xff09;&#xff0c;包括古典最小二乘估计&#xff08;CLS&#xff09;[1]、加权最小二乘估计&#xff08;WLS&#xff09;和递推最小二乘估计&#xff08;RLS&#x…

Linux——线程互斥

文章目录一、有关概念原子性错误认知澄清加锁二、锁的相关函数全局锁局部锁初始化销毁加锁解锁三、锁相关如何看待锁一个线程在执行临界区的代码时&#xff0c;可以被切换吗&#xff1f;锁是本身也是临界资源&#xff0c;它如何做到保护自己&#xff1f;&#xff08;锁的实现&a…

扣子(Coze)宣布开源两大核心项目——Coze Studio(扣子开发平台)和Coze Loop(扣子罗盘),附安装步骤

2025年7月26日,字节跳动旗下AI开发平台“扣子(Coze)”宣布开源两大核心项目——Coze Studio(扣子开发平台)和Coze Loop(扣子罗盘),采用Apache 2.0协议,支持免费商用及本地化部署。 开源内容 Coze Studio:提供可视化AI智能体开发工具,支持零代码/低代码拖拽式工作流编…

InfluxDB Flux 查询协议实战应用(二)

四、实战案例解析4.1 服务器性能监控数据查询在服务器性能监控场景中&#xff0c;InfluxDB 和 Flux 查询协议能够发挥重要作用&#xff0c;帮助运维人员实时了解服务器的运行状态&#xff0c;及时发现性能问题。假设我们的服务器性能监控数据存储在名为server-monitoring的存储…

二层隧道协议(PPP、PPTP、L2TP)

PPP —— 点对点链路上的“链路层会话层”协议&#xff0c;解决拨号认证、IP 分配和多协议封装。PPTP —— 在 IP 网络里开一条“PPP-over-GRE”隧道&#xff0c;把 PPP 封装进公共网络&#xff0c;速度快但已不安全。L2TP —— 在 IP/UDP 里再开一条“PPP-over-UDP”隧道&…

openmv特征点检测

AGAST 角点检测器和 FAST 角点检测器&#xff1a; 两者都是计算机视觉中快速检测图像角点的算法&#xff0c;核心目的是高效找到图像中 "有辨识度的点"&#xff0c;但细节略有不同&#xff1a; &#xff08;1&#xff09;FAST 角点检测器 • 特点&#xff1a;速度极快…

基于深度学习的CT图像3D重建技术研究

基于深度学习的CT图像3D重建技术研究 摘要 本文详细探讨了使用深度学习技术进行CT(计算机断层扫描)图像3D重建的全过程。我们从CT成像基本原理出发,系统介绍了数据预处理、深度学习模型构建、训练优化以及三维可视化等关键技术环节。研究采用了先进的深度学习架构如3D U-Net…

JVM相关面试八股

什么是双亲委派模型&#xff1f; 如果一个类加载器在接到加载类的请求时&#xff0c;它首先不会自己尝试去加载这个类&#xff0c;而是把这个请求任务委托给父类加载器去完成&#xff0c;依次递归&#xff0c;如果父类加载器可以完成类加载任务&#xff0c;就返回成功&#xff…