网络基础与 HTTP 协议
一、网络基础
(一)TCP/IP 协议族
TCP/IP 协议族是互联网通信的核心协议,它包含了多个层次的协议,共同协作实现网络通信。
1. IP 协议
IP(Internet Protocol)协议位于网络层,主要负责将数据包从源主机传输到目标主机。IP 协议有两种版本:
- IPv4 :地址长度为 32 位,通常以点分十进制表示,如
192.168.1.1。由于地址资源有限,IPv4 地址近乎枯竭。 - IPv6 :地址长度为 128 位,以冒号分隔的十六进制表示,如
2001:0db8:85a3:0000:0000:8a2e:0370:7334。IPv6 解决了 IPv4 地址不足的问题,并且在安全性、性能等方面也有显著提升。
2. TCP 协议
TCP(Transmission Control Protocol)协议位于传输层,是一种面向连接的、可靠的字节流服务传输协议。其主要特点包括:
- 面向连接 :在数据传输之前,需要在客户端和服务器之间建立可靠的连接(通过三次握手实现),传输完成后还需要释放连接(通过四次挥手实现)。
- 可靠传输 :TCP 通过校验和、确认应答、重发机制、排序机制等确保数据的完整性和准确性。例如,当发送方发送数据后,接收方需要返回确认应答(ACK),如果发送方在一定时间内未收到 ACK,就会重发数据;同时,TCP 还会对收到的数据包进行排序,保证数据按顺序交付给应用程序。
3. DNS 服务
DNS(Domain Name System)是域名系统,它充当着 “电话簿” 的角色,将易于记忆的域名(如 www.example.com)映射到对应的 IP 地址(如 192.168.1.100)。当我们访问一个网站时,浏览器会先向 DNS 服务器查询该域名对应的 IP 地址,然后根据 IP 地址访问目标服务器。DNS 服务的正常运行对于互联网的访问至关重要,它提高了网络的可访问性和用户体验。
4. URI 和 URL
- URI(Uniform Resource Identifier) :统一资源标识符,用于唯一标识互联网上的一个资源。它包括 URL 和 URN 两种类型。URI 的一般格式为:
scheme:[//authority]path?[query]#fragment,其中 scheme 表示访问资源所使用的协议(如 http、https、ftp 等),authority 表示资源所在服务器的域名或 IP 地址及端口号,path 表示资源的路径,query 表示查询参数,fragment 表示资源中的某个部分或锚点。 - URL(Uniform Resource Locator) :统一资源定位符,是 URI 的一种,更侧重于资源的位置和访问方式。URL 包含了访问资源所需的协议、服务器地址、端口、路径等详细信息,使我们能够在浏览器中准确定位和访问网络上的各种资源。
(二)Socket 编程基础
Socket(套接字)是网络通信中的重要概念,它是网络通信过程中的端点,提供了应用程序之间进行双向通信的接口。在 Go 语言中,通过 Socket 编程可以实现服务器与客户端之间的消息传递。
- 服务器端 :服务器需要先创建一个 Socket,然后绑定到特定的 IP 地址和端口号上,并监听该端口的连接请求。当有客户端连接时,服务器接受连接并创建一个新的 Socket 用于与该客户端进行通信,从而实现数据的接收和发送。例如,使用 Go 语言中的
net.Listen函数可以创建一个监听的 Socket,然后通过循环接受客户端的连接请求,并在单独的 goroutine 中处理每个客户端的通信。 - 客户端 :客户端需要知道目标服务器的 IP 地址和端口号,然后创建一个 Socket 并向服务器发起连接请求。连接建立后,客户端就可以通过该 Socket 向服务器发送数据,并接收服务器返回的数据。在 Go 中,可以使用
net.Dial函数创建一个客户端 Socket 并连接到服务器。
二、HTTP 协议
HTTP(Hypertext Transfer Protocol)是超文本传输协议,用于客户端(如浏览器)与服务器之间传输网页等超文本数据。
(一)HTTP 的基本概念
- 无状态性 :HTTP 是一种无状态协议,这意味着服务器在处理客户端的请求时,不会保存任何与该客户端的会话状态信息。每一次请求都是独立的,服务器不会根据之前的请求来对待当前的请求。这种无状态性使得 HTTP 协议简单高效,但也带来了一些问题,比如无法方便地实现用户身份验证、会话跟踪等功能。为了解决这些问题,通常会使用 Cookie 和 Session 等机制来模拟状态。
- HTTP 方法 :HTTP 定义了一些请求方法,用于指示客户端对服务器上的资源执行何种操作。常见的 HTTP 方法包括:
- GET :用于从服务器获取资源,它是默认的 HTTP 方法。GET 请求的参数通常附加在 URL 后面,以查询字符串的形式传递。由于 URL 的长度有限制,并且 GET 请求的参数会暴露在浏览器地址栏、服务器日志等地方,因此不适合传递敏感信息或大量数据。
- POST :用于向服务器提交数据,例如表单数据、文件上传等。POST 请求的数据通常放在请求体中,不会像 GET 请求那样显示在 URL 中,相对更加安全。服务器接收到 POST 请求后,会根据请求体中的数据进行相应的处理,并返回处理结果。
- PUT :类似于 POST 方法,也用于向服务器提交数据,但 PUT 方法通常用于更新已存在的资源,而 POST 方法更侧重于创建新的资源。不过,在实际应用中,PUT 和 POST 的具体使用方式可能会因服务器的实现而有所不同。
- DELETE :用于请求服务器删除指定的资源。在 RESTful API 设计中,DELETE 方法经常被用来实现资源的删除操作。
(二)HTTP 报文
HTTP 报文是客户端与服务器之间传递的数据单元,包括请求报文和响应报文。
-
请求报文 :由客户端发送给服务器,包含以下部分:
- 请求行 :包括请求方法、请求的资源路径以及 HTTP 协议版本。例如:
GET /index.html HTTP/1.1,表示使用 GET 方法请求/index.html路径下的资源,遵循 HTTP/1.1 协议。 - 请求头 :包含客户端向服务器传递的一些附加信息,如客户端支持的媒体类型(
Accept)、客户端的主机名(Host)、请求的内容类型(Content-Type,对于 POST 或 PUT 等有请求体的请求)、Cookie 等。这些信息帮助服务器更好地理解和处理客户端的请求。 - 空行 :表示请求头部分的结束,它是一个包含回车换行符(CRLF)的空行,用于分隔请求头和请求体。
- 请求体 :在 POST 或 PUT 等请求中,包含客户端要向服务器提交的数据,如表单数据、JSON 数据等。对于 GET 请求来说,通常没有请求体。
- 请求行 :包括请求方法、请求的资源路径以及 HTTP 协议版本。例如:
-
响应报文 :由服务器返回给客户端,包含以下内容:
- 状态行 :由 HTTP 协议版本、状态码和状态消息组成。例如:
HTTP/1.1 200 OK,表示服务器成功处理了客户端的请求,状态码 200 表示请求已成功。 - 响应头 :包含服务器向客户端传递的一些信息,如服务器的软件名称和版本(
Server)、响应的内容类型(Content-Type)、响应体的长度(Content-Length)、设置 Cookie 的信息(Set-Cookie)等。这些信息帮助客户端正确地解析和处理服务器的响应。 - 空行 :同样用于分隔响应头和响应体,表示响应头部分的结束。
- 响应体 :包含服务器返回给客户端的资源内容,如 HTML 页面、图片、JSON 数据等。
- 状态行 :由 HTTP 协议版本、状态码和状态消息组成。例如:
(三)HTTP 的持久连接
在早期的 HTTP/1.0 协议中,每次请求和响应都需要单独建立和关闭连接,这种方式会增加网络的开销和延迟。为了解决这个问题,HTTP/1.1 引入了持久连接(HTTP Persistent Connections),也称为 HTTP 保持连接。
- 持久连接的工作原理 :在持久连接模式下,客户端与服务器之间建立的 TCP 连接可以在多个 HTTP 请求和响应中重复使用。也就是说,在一个连接上可以连续发送多个请求并接收多个响应,而不需要每次请求都重新建立和关闭连接。这样可以减少连接建立和关闭的次数,提高网络通信的效率,尤其对于包含多个资源(如图片、样式表、脚本等)的网页,持久连接可以显著减少加载时间。
以上内容仅供参考,欢迎评论区指点。
相关文章:
网络基础与 HTTP 协议
一、网络基础 (一)TCP/IP 协议族 TCP/IP 协议族是互联网通信的核心协议,它包含了多个层次的协议,共同协作实现网络通信。 1. IP 协议 IP(Internet Protocol)协议位于网络层,主要负责将数据包…...
SRS transcode支持 h264_nvenc 硬件解码方案
文章目录 SRS transcode支持 h264_nvenc 硬件解码方案1、修改文件2、重新编译3、使用 SRS transcode支持 h264_nvenc 硬件解码方案 SRS 是开源的流媒体服务,但在使用 GPU 服务器时,想要通过硬件加速,目前官方是不支持的,所以简单…...
阿里云服务器搭建开源版禅道
一,下载地址:禅道11.5版本发布,主要完善细节,修复bug,新增动态过滤机制 - 禅道下载 - 禅道项目管理软件 下载地址二: 禅道21.6.stable 实现旧编辑器撰写的文档无感升级至新版编辑器 - 禅道下载 - 禅道项目…...
【刷题Day21】TCP(浅)
说说 TCP 的四次挥手? TCP的四次挥手事用于安全关闭一个已建立的连接的过程,它确保双方都能完成数据传输并安全地释放连接资源。 简述步骤: 第一次挥手(FIN --> ACK):客户端主动关闭连接,…...
怎么用面向对象和状态机架构,设计一个通用的按键检测功能?
说起按键检测,在座的各位,哪个没被它折磨过? 我刚入门时,为了实现一个简单的按键功能,硬生生写了几十行代码,各种 if...else 嵌套,逻辑绕得我自己都头晕。 更可气的是,辛辛苦苦写完…...
Java基础系列-LinkedList源码解析
文章目录 简介LinkedList 插入和删除元素的时间复杂度?LinkedList 为什么不能实现 RandomAccess 接口? LinkedList 源码分析Node 定义初始化获取元素插入元素删除元素遍历链表 简介 LinkedList 是一个基于双向链表实现的集合类,经常被拿来和…...
day47—双指针-平方数之和(LeetCode-633)
题目描述 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 b^2 c 。 示例 1: 输入:c 5 输出:true 解释:1 * 1 2 * 2 5示例 2: 输入:c 3 输出:f…...
qwen 14B模型配置文件,层名称weight_map. 28GB
qwen 14B模型配置文件,层名称weight_map. 28GB 目录 qwen 14B模型配置文件,层名称weight_map. 28GBmetadata(元数据)weight_map(权重映射)lm_head.weightmodel.layersmlp.{proj_type}.weightpost_attention_layernormself_attn.{proj_type}.{bias_or_weight}model.norm.w…...
LVDS系列8:Xilinx 7系可编程输入延迟(一)
在解析LVDS信号时,十分重要的一环就是LVDS输入信号线在经过PCB输入到FPGA中后,本来该严格对齐的信号线会出现时延,所以需要在FPGA内部对其进行延时对齐后再进行解析。 Xilinx 7系器件中用于输入信号延时的组件为IDELAYE2可编程原语࿰…...
【Oracle专栏】函数中SQL拼接参数 报错处理
Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 最近同事反馈了一个很奇怪的问题,即有一个函数,入参是当前年月,主要作用是通过SQL语句将不合规的数据插入到指定表中,插入数据时带上入参的年月参数。当前问题:单独测试SQL没有问题可以执行成功,…...
自然语言处理(NLP)领域大图
以下是一份自然语言处理(NLP)与大模型领域的领域大图,涵盖技术框架、发展脉络、交叉融合点和应用场景的完整解析: 1. 核心技术体系 基础分析层级 词法分析:分词、词性标注、命名实体识别句法分析:依存句法…...
【Linux我做主】GDB调试工具完全指南
Linux下GDB调试工具完全指南:25个核心命令详解与实战示例 github地址 有梦想的电信狗 前言 GDB(GNU Debugger)是Linux开发中不可或缺的调试工具,尤其在定位代码逻辑错误和内存问题时表现卓越。本文基于实际开发经验࿰…...
Pycharm 如何删除某个 Python Interpreter
在PyCharm中,点击右下角的“Interpreter Settings”按钮,或者通过菜单栏选择“File” > “Settings”(macOS用户选择“PyCharm” > “Preferences”)。在设置窗口中,导航到“Project: [Your Project Name]” >…...
在 Debian 12 中恢复被删除的 smb.conf 配置文件
https://forum.ubuntu.com.cn/viewtopic.php?t494763 本文结合ai输出,内容中可能有些错误,但确实解决了我的问题,我采取保留完整输出的方式摘录。 在 Debian 12 中恢复被删除的 smb.conf 配置文件,需结合 dpkg 和 ucf(…...
Day3:个人中心页面布局前端项目uniapp壁纸实战
接下来我们来弄一下个人中心页面布局user.vue <template><view class"userLayout"><view class"userInfo"><view class"avatar"><image src"../../static/Kx.jpg" mode"aspectFill"></im…...
访问”和“初始化本质区别以及C++静态成员变量定义位置详解
💡 1.访问”和“初始化本质区别: ✅ 访问 protectedNum:Derived 作为 Base 的子类,是可以在自己的函数中访问 protectedNum 的。❌ 初始化 protectedNum:只能通过 Base 的构造函数来初始化,因为它是 Base …...
正则表达式反向引用的综合应用魔法:从重复文本到简洁表达的蜕变
“我....我要....学学学学....编程 java!” —— 这类“重复唠叨”的文本是否让你在清洗数据时头疼不已? 本文将带你一步步掌握正则表达式中的反向引用技术,并结合 Java 实现一个中文文本去重与清洗的实用工具。 结合经典的结巴实例。如何高效地将这样的…...
C实现md5功能
md5在线验证: 在线MD5计算_ip33.com 代码如下: #include "md5.h" #include <string.h> #include "stdio.h"/** 32-bit integer manipulation macros (little endian)*/ #ifndef GET_ULONG_LE #define GET_ULONG_LE(n,b,i) …...
FFmpeg+Nginx+VLC打造M3U8直播
一、视频直播的技术原理和架构方案 直播模型一般包括三个模块:主播方、服务器端和播放端 主播放创造视频,加美颜、水印、特效、采集后推送给直播服务器 播放端: 直播服务器端:收集主播端的视频推流,将其放大后推送给…...
在 Debian 10.x 安装和配置 Samba
1. 更新系统 sudo apt update sudo apt upgrade -y2. 安装 Samba sudo apt install samba -y3. 配置 Samba 备份默认配置文件 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak编辑配置文件 sudo nano /etc/samba/smb.conf示例配置(共享目录) …...
基础(测试用例:介绍,测试用例格式,案例)
目录 测试用例介绍 测试用例编写格式 案例 测试用例介绍 用例:用户使用软件的案例场景 测试用例:是为测试项目而设计的测试执行文档 测试用例的作用: 防止漏测是实施测试的标准可以作为测试工作量的评估 测试用例编写格式 用例编号 用例…...
C++学习:六个月从基础到就业——内存管理:RAII原则
C学习:六个月从基础到就业——内存管理:RAII原则 本文是我C学习之旅系列的第十九篇技术文章,也是第二阶段"C进阶特性"的第四篇,主要介绍C中的RAII原则及其在资源管理中的应用。查看完整系列目录了解更多内容。 引言 在…...
Windows串口通信
Windows串口通信相比较Android串口通信,在开发上面相对方便一些。原理都是一样,需要仔细阅读厂商设备的串口通信协议。结合串口调试助手进行测试,测试通过后,编写代码实现。 比如近期就接触到了一款天平,其最大测量值为100g,测量精度0.001g。 拿到手之后我就先阅读串口通…...
bert项目解析
数据预处理 读取csv数据集 def read_file(file_path):data []label []with open(file_path, "r", encoding"utf-8") as file:reader csv.reader(file)next(reader) # 跳过标题行# row每一行用英文逗号分割成列表[标签,文本] 所以标签和文本用英文逗…...
Linux `init` 相关命令的完整使用指南
Linux init 相关命令的完整使用指南—目录 一、init 系统简介二、运行级别(Runlevel)详解三、常用 init 命令及使用方法1. 切换运行级别2. 查看当前运行级别3. 服务管理4. 紧急模式(Rescue Mode) 四、不同 Init 系统的兼容性1. Sy…...
【开源项目】Excel手撕AI算法深入理解(三):时序(RNN、mamba、Long Short Term Memory (LSTM)、xLSTM)
项目源码地址:https://github.com/ImagineAILab/ai-by-hand-excel.git 一、RNN 1. RNN 的核心思想 RNN 的设计初衷是处理序列数据(如时间序列、文本、语音),其核心特点是: 隐藏状态(Hidden Stateÿ…...
嵌入式音视频开发指南:从MPP框架到QT实战全解析
嵌入式音视频开发指南:从MPP框架到QT实战全解析 一、音视频技术全景概述 1.1 技术演进里程碑 2003-2010年:标清时代(H.264/AVC + RTMP)2011-2018年:高清时代(H.265/HEVC + WebRTC)2019-至今:智能时代(AV1 + AI编解码 + 低延迟传输)1.2 现代音视频技术栈 #mermaid-s…...
构建专业金融图表系统的高效路径——QtitanChart在金融行业的应用价值
QtitanChart是一个C 库,它代表一组控件,这些控件使您可以快速轻松地为应用程序提供漂亮而丰富的图表。QtitanChart在Qt.C 上实现,并且支持所有主要的桌面操作系统 - Windows、Linux和Mac OSX。要将QtitanChart添加到您的程序中,只…...
如何通过window端来ssh连接本地虚拟机的ubuntu
首先在 Ubuntu 虚拟机上安装和配置 SSH 服务: # 安装 SSH 服务器 sudo apt update sudo apt install openssh-server# 检查 SSH 服务状态 sudo systemctl status ssh# 如果没有启动,则启动 SSH 服务 sudo systemctl start ssh# 设置开机自启动 sudo sys…...
问题:el-tree点击某节点的复选框由半选状态更改为全选状态以后,点击该节点展开,懒加载出来子节点数据以后,该节点又变为半选状态
具体问题场景: 用户点击父节点复选框将其从半选变为全选(此时子节点尚未加载)。 点击节点展开触发懒加载,加载子节点。 子节点加载后,组件重新计算父节点状态,发现并非所有子节点被选中,因此父节…...
