当前位置: 首页 > news >正文

网络基础与 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/1.1 200 OK,表示服务器成功处理了客户端的请求,状态码 200 表示请求已成功。
    • 响应头 :包含服务器向客户端传递的一些信息,如服务器的软件名称和版本(Server)、响应的内容类型(Content-Type)、响应体的长度(Content-Length)、设置 Cookie 的信息(Set-Cookie)等。这些信息帮助客户端正确地解析和处理服务器的响应。
    • 空行 :同样用于分隔响应头和响应体,表示响应头部分的结束。
    • 响应体 :包含服务器返回给客户端的资源内容,如 HTML 页面、图片、JSON 数据等。

(三)HTTP 的持久连接

在早期的 HTTP/1.0 协议中,每次请求和响应都需要单独建立和关闭连接,这种方式会增加网络的开销和延迟。为了解决这个问题,HTTP/1.1 引入了持久连接(HTTP Persistent Connections),也称为 HTTP 保持连接。

  • 持久连接的工作原理 :在持久连接模式下,客户端与服务器之间建立的 TCP 连接可以在多个 HTTP 请求和响应中重复使用。也就是说,在一个连接上可以连续发送多个请求并接收多个响应,而不需要每次请求都重新建立和关闭连接。这样可以减少连接建立和关闭的次数,提高网络通信的效率,尤其对于包含多个资源(如图片、样式表、脚本等)的网页,持久连接可以显著减少加载时间。

以上内容仅供参考,欢迎评论区指点。

相关文章:

  • LeetCode第159题_至多包含两个不同字符的最长子串
  • Ubuntu下安装和卸载MySQL
  • 基于SpringBoot的社区家庭医生在线问诊系统
  • 使用DeepSeek的AIGC的内容创作者,如何看待陈望道先生所著的《修辞学发凡》?
  • Matlab 汽车行驶速度PID控制系统仿真
  • 控制反转(IOC)和依赖注入(DI)
  • DQN在Gym的MountainCar环境的实现
  • 缓存 --- 缓存击穿, 缓存雪崩, 缓存穿透
  • 《AI大模型应知应会100篇》第28篇:大模型在文本创作中的应用技巧
  • Android Gradle多渠道打包
  • 基于 Vue3 + ECharts + GeoJson 实现区域地图钻取功能详解
  • WEMOS LOLIN32 开发板引脚布局和技术规格
  • 25.4.20学习总结
  • PyTorch基础学习系列一
  • git学习日志
  • 从跌倒到领跑:北京亦庄机器人马拉松如何改写人机协作未来?
  • 深度解析微前端架构设计:从monorepo工程化设计到最佳实践
  • 云效部署实现Java项目自动化部署图解
  • 飞帆平台 cdn 资源集锦
  • 详解trl中的GRPOTrainer和GRPOConfig
  • 解放日报:订单不撤,中国工程师有能力
  • 李强签署国务院令,公布《国务院关于修改〈快递暂行条例〉的决定》
  • 行拘!如此引流诱导违法犯罪不该被纵容
  • 广西京族人的“高跷捞虾”:以前老辈个个都会,现在展演收入赶得上真捕鱼
  • 秘鲁前总统乌马拉因洗钱罪被判15年监禁
  • 来论|桑切斯访华彰显中西合作的定力和活力