网络基础与 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 请求和响应中重复使用。也就是说,在一个连接上可以连续发送多个请求并接收多个响应,而不需要每次请求都重新建立和关闭连接。这样可以减少连接建立和关闭的次数,提高网络通信的效率,尤其对于包含多个资源(如图片、样式表、脚本等)的网页,持久连接可以显著减少加载时间。

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

相关推荐
两个人的幸福2 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo4 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack4 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982075 天前
PHP 扩展——从入门到理解
php
霜落长河5 天前
抛弃TCP改用UDP,HTTP3怎么了?
http
鹏仔先生6 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
网络研究院6 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智6 天前
ARP代理--工作原理
运维·网络·arp·arp代理
云水一下6 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
treesforest6 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全