计算机网络学习

OSI 七层模型

物理层(Physical Layer)

  • 功能:处理与电气或物理规范的接口有关的细节,如电缆类型、电信号传输和接收、网络设备的物理特性等。
  • 设备:包括网线、光纤、集线器等。
  • 功能:在物理网络之上建立一个有效的链路,确保数据在网络设备之间可靠地传输。它处理帧寻址、错误检测和纠正。
  • 设备:交换机、网桥。

网络层(Network Layer)

  • 功能:处理数据包从源到目的地的传输和路由,包括地址管理和路由选择。
  • 设备:路由器。

传输层(Transport Layer)

  • 功能:为两台主机之间的数据传输提供服务。主要任务包括分段和重组,以及错误检测和恢复。
  • 协议:TCP(传输控制协议)、UDP(用户数据报协议)。

会话层(Session Layer)

  • 功能:建立、管理和终止会话。这一层在数据传输过程中协调通信,并管理它们之间的交互。
  • 应用:网络会话管理,例如在Web服务器和客户端之间建立会话。

表示层(Presentation Layer)

  • 功能:确保从一个系统发送的数据能被另一个系统的应用层识别和理解。它涉及字符编码、数据转换和加密解密。
  • 示例:JPEG、MPEG、加密算法。

应用层(Application Layer)

  • 功能:为最终用户提供网络服务。应用层直接为用户提供服务,如电子邮件、文件传输。
  • 协议和服务:HTTP、FTP、电子邮件、DNS等。

OSI模型的重要性

  • 模块化:OSI模型1通过分层的方式简化了网络设计和故障排查。
  • 标准化:提供了标准 化的网络协议和服务框架,使不同厂商和技术能够互操作。
  • 参考工具:虽然在实际应用中很多网络通信不0完全遵循OSI模型,但它仍然是理解网络概念和协议的重要工具。

TCPIP 协议群

TCP/IP 五层模型是一个用于描述现代网络通信过程的框架。与 OSI 七层模型相比,TCP/IP 模型更贴近实际的网络协议实现。TCP/IP 模型由五层组成,每层都有其特定的职责和协议。下面是对每一层的详细介绍:

  1. 物理层(Physical Layer)
  • 功能:与 OSI 模型的物理层相同,负责在物理媒介上传输原始比特流。它涉及的是网络的物理连接部分,如电缆、光纤、无线电频率等。
  • 设备:包括网线、光纤、集线器等。
  1. 链路层(Link Layer)
  • 功能:在物理层提供的原始传输基础上建立有效的链路。它负责帧的处理和物理地址寻址,以及错误检测和纠正。
  • 设备和协议:交换机、网桥以及以太网(Ethernet)协议。
  1. 网络层(Internet Layer)
  • 功能:负责数据包的寻址和路由,确保数据可以跨越多个网络从源点传输到目的地。
  • 核心协议:IP(Internet Protocol),以及支持路由的协议如 ICMP(Internet Control Message Protocol)和 IGMP(Internet Group Management Protocol)。
  • 设备:路由器。
  1. 传输层(Transport Layer)
  • 功能:为两个主机之间的数据传输提供服务。它关注数据的分段、传输、错误检测和恢复。
  • 核心协议:TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)。
  1. 应用层(Application Layer)
  • 功能:为应用软件提供网络服务接口。这一层包含了大多数用户熟知的网络协议。
  • 协议和服务:HTTP(Hypertext Transfer Protocol)、FTP(File Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)、DNS(Domain Name System)等。

TCP/IP 模型的重要性

  • 实用性和普遍性:TCP/IP 模型更接近互联网的实际工作方式,是互联网通信的实际标准。
  • 简化模型:相对于 OSI 七层模型,TCP/IP 模型更加简洁,更容易理解和实现。
  • 灵活性:TCP/IP 协议栈允许在其上运行多种不同的协议,适应各种类型的网络通信需求。

TCP/IP 模型准确地反映了现代互联网技术的核心,并广泛应用于各种网络环境和应用中,是理解和实现网络通信的基石。

TCP协议

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它是互联网协议套件的核心协议之一,广泛用于互联网中的数据传输。TCP协议的主要特点和工作机制如下:

主要特点

  1. 面向连接
  • 在数据传输前,TCP 需要在两端建立一个连接,这个过程通常涉及一个"三次握手"(three-way handshake)过程。
  1. 可靠性
  • TCP 提供可靠的数据传输服务,确保数据准确无误地从源传到目的地。
  1. 基于字节流
  • 数据以字节流的形式发送,TCP 负责数据的分割和重组。
  1. 全双工通信
  • TCP 允许双方在连接中同时发送和接收数据。
  1. 流量控制
  • TCP 使用窗口机制来控制发送方的发送速率,防止接收方被过量的数据淹没。
  1. 拥塞控制
  • TCP 实现了拥塞控制算法,如慢启动、拥塞避免、快重传和快恢复,以避免网络拥塞。

工作机制

  1. 连接建立(三次握手)
  • SYN:客户端发送一个 SYN(同步序列编号)报文到服务器。
  • SYN-ACK:服务器接收到 SYN 后,回送一个 SYN-ACK(同步-确认)报文。
  • ACK:客户端再发送一个 ACK(确认)报文。
  1. 数据传输
  • 数据以字节流的形式进行传输,每个 TCP 段都包含序列号,用于确保数据的有序性和完整性。
  1. 流量控制
  • TCP 使用窗口机制(滑动窗口)来控制每次可以发送的数据量,从而匹配接收方的接收能力。
  1. 拥塞控制
  • TCP 根据网络的拥塞程度调整数据传输的速率,以避免过度拥塞。
  1. 连接终止
  • 连接的终止通常涉及一个"四次挥手"(four-way handshake)过程,用于双方确认数据传输完毕并关闭连接。

TCP与UDP的对比

  • TCP:面向连接、可靠、适用于对数据准确性要求高的应用,如网页浏览、文件传输、电子邮件。
  • UDP(User Datagram Protocol):无连接、不可靠、适用于对实时性要求高的应用,如视频流和在线游戏。

总的来说,TCP 协议是一个重要的网络通信协议,它为互联网上的数据交换提供了可靠的传输服务。虽然其可靠性和顺序控制特性使得它在数据传输方面表现出色,但这些特性也带来了一定的开销,这就是为什么在某些场景下(如实时通信)可能会选择使用 UDP 而非 TCP。

三次握手

四次挥手

TCP协议中的"三次握手"(Three-Way Handshake)和"四次挥手"(Four-Way Handshake)是建立和终止TCP连接的关键过程。它们确保了连接的可靠性和顺序性,是TCP协议中非常重要的机制。

三次握手(建立连接)

三次握手过程是建立TCP连接的过程,它涉及以下三个步骤:

  1. SYN(同步序列编号)
  • 客户端到服务器:客户端发送一个SYN包(SYN=1)到服务器,并指定一个客户端的初始序列号(ISN)。这标志着连接请求的开始。
  1. SYN-ACK(同步-确认)
  • 服务器到客户端:服务器接收到SYN包后,会发送一个SYN-ACK包作为回应。这个包中包含服务器的初始序列号,并将客户端的序列号加一作为确认号。
  1. ACK(确认)
  • 客户端到服务器:最后,客户端再发送一个ACK包(ACK=1)到服务器,其中确认号是服务器序列号加一。这标志着连接已经成功建立。

在三次握手过程中,客户端发送的第一个SYN报文不包含ACK(确认)信息,因为这时还没有要确认的数据。以下是三次握手过程的正确描述:

第一次握手:

  • 客户端 -> 服务器:客户端发送一个SYN报文给服务器,并指定一个初始序列号

seq: S(这是一个随机数)。这个报文不包含ACK确认信息,因为此时还没有开始数据传输,也就没有数据需要确认。

第二次握手:

  • 服务器 -> 客户端:服务器收到客户端的SYN报文后,会发送一个SYN-ACK报文。这个报文包含:
    • seq: A:服务器自己的初始序列号(另一个随机数)。
    • ack: S+1 :确认号,即客户端的初始序列号加1,表示服务器期待收到客户端下一个报文的序列号。

第三次握手:

  • 客户端 -> 服务器:客户端确认收到了服务器的SYN-ACK报文后,发送一个ACK报文给服务器,包含:
    • seq: S+1:序列号,表示客户端准备发送的下一个数据字节的序列号。
    • ack: A+1:确认号,即服务器的初始序列号加1,确认客户端已经准备好接收服务器从这个序列号开始的数据。

四次挥手(断开连接)

四次挥手过程是终止TCP连接的过程,它涉及以下四个步骤:

  1. FIN(结束)
  • 客户端到服务器:当客户端完成数据发送后,它会发送一个FIN包(FIN=1)到服务器,表示没有数据要发送了。
  1. ACK(确认)
  • 服务器到客户端:服务器接收到FIN包后,发送一个ACK包作为回应。此时,从客户端到服务器的连接被关闭,但服务器仍可以发送数据到客户端。
  1. FIN(结束)
  • 服务器到客户端:服务器完成数据发送后,也发送一个FIN包到客户端。
  1. ACK(确认)
  • 客户端到服务器:客户端接收到FIN后,发送一个ACK包作为回应。一段时间后(通常是等待2MSL,即最大报文段生存时间的两倍),连接完全关闭。

四次挥手之所以需要四步,是因为TCP连接是全双工的,即数据可以在两个方向上流动。因此,每个方向的关闭需要两个步骤:一个FIN和一个ACK。

第一次挥手:

  • 客户端 -> 服务器:客户端决定数据发送完毕,将向服务器发送一个FIN报文。这个FIN报文将包含一个序列号

seq: S+1,其中

S是客户端最初的序列号加上客户端发送的数据总字节数。

第二次挥手:

  • 服务器 -> 客户端:服务器收到客户端的FIN报文后,发送一个ACK报文作为回应。该ACK报文包含序列号

seq: A+1(这里的

A是服务器最初的序列号加上服务器发送的数据总字节数),以及确认号

ack: S+2(表示服务器已经接收到客户端的FIN报文,并期待下一个序列号)。

此时,客户端到服务器的连接被关闭,但是服务器到客户端的方向仍然可以传输数据。

第三次挥手:

  • 服务器 -> 客户端:一旦服务器也决定不再发送数据,并且所有的数据都已经确认被客户端接收,服务器将发送一个FIN报文给客户端。这个FIN报文将包含序列号

seq: A+1。

第四次挥手:

  • 客户端 -> 服务器:客户端收到服务器的FIN报文后,它必须发送一个ACK报文作为回应。客户端的ACK报文将包含序列号

seq: S+2和确认号

ack: A+2。此时,服务器到客户端的方向也被关闭。

重要性

  • 三次握手:确保双方准备好进行通信,防止过时的连接请求突然建立连接。
  • 四次挥手:确保数据能够完整传输完毕,然后双方都可以清楚地知道连接已经结束。

这两个过程是TCP协议可靠性的关键部分,它们确保了数据能夔安全、有序地在网络中传输。

报文拆分

详解三次握手 四次挥手 图

在TCP(Transmission Control Protocol,传输控制协议)的上下文中,SYN、SYN-ACK、PSH和PSH-ACK是与TCP段的控制标志有关的术语。它们指的是在TCP头部中设置的不同控制位,用于指示TCP连接的不同阶段和传输特性。下面详细介绍这些术语:

ACK(Acknowledgment)和 FIN(Finish)也是TCP头部中的控制位标志,它们在TCP连接的数据传输和终止阶段发挥关键作用。

ACK(Acknowledgment)

  • 用途:ACK标志用来确认接收到对方的数据。TCP是一种面向连接的协议,它使用序列号和确认号来保证数据的可靠传输。每当一个TCP段接收成功,接收方必须通过发送一个ACK标志的TCP段来确认这一事实。
  • 特点:
    • ACK标志几乎存在于TCP连接的所有报文中,除了初始化序列号的SYN报文。
    • ACK报文中包含一个确认号(Acknowledge Number),它是接收方期望收到的下一个字节的序列号。
    • 如果接收到的报文段中没有设置ACK标志,那么这通常意味着出现了错误或者是一个初始的SYN报文。

FIN(Finish)

  • 用途:FIN标志用于在通信的一方完成其数据发送任务后关闭TCP连接。它表明发送方没有更多的数据要发送了,准备关闭连接。
  • 特点:
    • 当一个连接的一方完成数据发送任务,它必须发送一个FIN标志的报文段来开始连接终止过程。
    • 发送FIN报文后,该方向的连接被关闭,但是另一方向上的连接仍然可以传输数据,直到该方向也发送了FIN报文。
    • 连接的终止需要双方各自发送FIN报文和相应的ACK确认报文,这通常称为"四次挥手"(Four-Way Handshake)。

使用场景

  • ACK:用于三次握手建立连接时的第二步(SYN-ACK)和第三步(ACK);在数据传输阶段,每次成功接收数据后发送ACK;在四次挥手时对FIN报文进行确认。
  • FIN:在TCP连接终止时使用,当一方想要关闭连接时,会发送一个FIN标志的报文段。

这两个标志是TCP协议保证可靠性的机制的一部分。ACK确保了数据被正确接收,而FIN确保了连接被有序地关闭。

SYN(Synchronize Sequence Numbers)

  • 用途:SYN标志用来在建立TCP连接时同步序列号。当一个TCP连接开始时,客户端和服务器交换SYN报文,用来传达各自的初始序列号,这是三次握手过程的第一部分。
  • 特点:一个设置了SYN标志的TCP段不携带应用层的数据,它的目的是为了初始化序列号和开始连接的建立过程。

SYN-ACK

  • 用途:SYN-ACK是两个标志的组合:SYN和ACK(Acknowledgment)。它是在三次握手过程中,服务器对客户端的SYN报文的响应。服务器在SYN-ACK报文中发送自己的初始序列号,并确认(ACK)客户端的初始序列号(即客户端的SYN报文中的序列号+1)。
  • 特点:SYN-ACK报文是连接建立过程中的第二步,它标志着服务器已准备好接受客户端发起的连接。

PSH(Push Function)

  • 用途:PSH标志告诉接收端应用程序应该立即从TCP缓冲区中读取数据。这是一个提示,用来减少延迟和提醒接收端,发送方有数据希望尽快被处理。
  • 特点:通常在TCP报文段中,数据会被缓存直到缓冲区满了或者达到某些条件后才被应用程序处理。PSH标志通知接收方应用程序无需等待,立即处理这些数据。

PSH-ACK

  • 用途:这同样是两个标志的组合:PSH和ACK。这通常在数据传输阶段使用,表示该段不仅包含需要立即处理的数据(PSH),同时也确认之前接收到的数据(ACK)。
  • 特点:PSH-ACK通常在对方发送数据时一起发送,表明发送方既传输了新的数据,同时也确认了之前接收到的数据。

总结来说,SYN和SYN-ACK用于TCP连接的建立过程,而PSH和PSH-ACK用于数据传输过程中提示对方立即处理数据,并确认已收到的数据。这些控制标志确保TCP可以提供可靠的、有序的、错误检测和纠正的、面向连接的服务。

IP协议,即互联网协议(Internet Protocol),是一种网络层通信协议,其主要作用是在互联网上进行数据报文的传输。IP协议是TCP/IP协议族中最为核心的协议之一,定义了数据如何封装、寻址、传输以及如何路由到达目的地。以下是IP协议的详细解释:

版本

IP协议有两个主要的版本:

  • IPv4:第四版互联网协议,最为广泛使用的版本。
  • IPv6:第六版互联网协议,解决了IPv4地址耗尽的问题,并带来了许多改进。

功能

IP协议的主要功能包括:

  • 寻址和路由:IP协议提供了一种系统,允许数据包从源主机路由到目的主机。每台设备都有一个唯一的IP地址,确保数据能够正确送达。
  • 分片和重组:因为网络中的每一段可能支持的最大传输单元(MTU)大小不同,IP协议允许将大的数据包分成较小的片段进行传输,并在目的地重新组装。
  • 无连接性:IP协议是无连接的,这意味着每个数据包都是独立发送的,IP层不维护任何关于后续数据包的状态信息。
  • 不可靠性:IP协议本身不保证数据包的可靠传输,数据包可能会丢失、延迟、重复或到达错误的顺序。TCP等更高层协议负责处理这些问题。

IP数据包结构

一个典型的IP数据包包含以下部分:

  • 版本:指明IP协议的版本,IPv4或IPv6。
  • 头部长度:仅在IPv4中,指明头部的长度,因为IPv4头部可能包含可变数量的选项。
  • 服务类型(ToS,IPv4)/ **流量类别**(IPv6):为数据包提供服务质量管理。
  • 总长度:整个数据包的长度,包括头部和数据。
  • 标识、标志和片偏移:用于数据包分片和重组的过程。
  • 生存时间(TTL):数据包在网络中可以通过的最大跳数,以防止无限循环。
  • 协议:指明载荷使用的更高层协议,例如TCP或UDP。
  • 头部校验和:用于检测数据在传输过程中的任何变化。
  • 源地址和目的地址:发送者和接收者的IP地址。
  • 选项(仅IPv4):可选字段,用于支持诸如路由记录、时间戳等功能。
  • 载荷:携带实际传输的数据,比如TCP或UDP段。

IP寻址

IP寻址是指定和识别每个网络接口的方法。IPv4地址由32位组成,通常表示为四个十进制数字(每个数字代表8位,即一个字节),由点分隔。IPv6地址由128位组成,表示为8组16位的十六进制数字,由冒号分隔。

IP路由

IP路由是确定数据包从源到目的地所经过路径的过程。路由器使用路由表来决定如何转发数据包。当一个IP数据包到达路由器,路由器检查目的IP地址,并根据路由表中的信息,决定数据包的下一跳地址。

总结

IP协议作为互联网的基础,提供了基本的数据传输机制。

UDP协议

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,由IETF定义在RFC 768中。它允许应用程序向其他应用程序发送消息,这些应用程序可能在同一台计算机上、局域网络中或通过互联网。与TCP不同,UDP不保证可靠传输,它不进行握手过程,也不确认数据包的到达,不按顺序处理数据包,也不管理数据包的重传,因此它通常比TCP有更低的延迟。

特点

UDP的主要特点包括:

无连接性

  • UDP发送数据前不需要建立连接,因此可以减少建立和拆除连接的开销。

轻量级

  • UDP头部仅有8字节,比TCP的20字节(不含选项)头部要小,减少了传输的数据量。

不可靠性

  • UDP不保证数据包的顺序、完整性或可靠性。发送方不跟踪状态,也不知道接收方是否收到了数据。

无拥塞控制

  • UDP不进行拥塞控制,因此网络拥塞不会影响发送方的发送速率。

结构

UDP数据报由以下几部分组成:

  • 源端口号:发送数据报的应用程序的端口号。
  • 目的端口号:接收数据报的应用程序的端口号。
  • 长度:整个数据报的长度,包括头部和数据。
  • 校验和:用于检测数据在传输过程中的任何变化。

用途

UDP的一些常见用途包括:

  • 域名系统(DNS):查询和响应DNS服务器时通常使用UDP。
  • 简单网络管理协议(SNMP):用于网络设备的管理信息交换。
  • 路由信息协议(RIP):用于路由器之间的路由信息交换。
  • 实时应用:如实时视频流、VoIP(Voice over IP)、在线游戏等,这些应用可以容忍一些数据包的丢失,但要求低延迟。

校验和

UDP提供了一个可选的校验和机制,用于验证数据在传输过程中的完整性。如果接收方发现校验和不匹配,表明数据在传输中可能已经被损坏,接收方可以决定如何处理这些损坏的数据包,通常是丢弃它们。

UDP vs TCP

选择使用UDP还是TCP通常取决于应用程序的需求。需要高可靠性和数据顺序保证的应用会选择TCP,而那些需要低延迟和高效传输的应用则可能会选择UDP。UDP允许开发者在应用层实现他们自己的错误处理和恢复机制,从而更好地控制通信过程的性能和行为。

Socket

当多笔数据通过网络传送到一台计算机时,操作系统和应用程序(如使用Java编写的服务)如何处理这些数据的过程相当复杂。以下是从数据到达网卡开始,一直到被Java服务接收处理的整个过程:

  1. 数据到达网卡
  • 物理层接收:数据最初以电子信号的形式到达网卡,网卡负责将这些电子信号转换成对计算机有意义的数据包。
  1. 操作系统处理
  • 中断和DMA:数据到达网卡后,网卡通常会通过直接内存访问(DMA)将数据放入预定的内存区域,并产生中断信号通知CPU有新数据到达。
  • 协议栈处理:操作系统的网络协议栈接管处理过程。数据包首先被操作系统的网络层(例如IP层)处理,进行地址解析和路由决策。
  • 缓冲区:数据包随后被传送到传输层(例如TCP/UDP),操作系统为每个数据包在内核空间中分配缓冲区。
  1. Socket操作
  • 套接字队列:在应用程序创建Socket时,操作系统为该Socket维护两个队列:接收队列和发送队列。接收队列存放从网络中收到的、准备由应用程序读取的数据。发送队列存放应用程序希望发送到网络中的数据。
  • 数据包分类:操作系统根据数据包的目标端口号将数据包定向到对应的Socket接收队列中。
  1. 数据传送到Java服务
  • 系统调用:Java服务使用Socket API(如ServerSocket和Socket类)执行系统调用,请求操作系统提供网络服务。当Java服务对Socket执行读操作时(如InputStream.read()),它实际上是在请求操作系统从对应Socket的接收队列中提取数据。
  • 用户空间复制:操作系统将数据从内核空间复制到用户空间,Java服务所运行的空间。
  • Java对象表示:Java网络库将这些数据转换成Java可理解的对象或字节,供Java服务进一步处理。
  1. 应用层处理
  • 数据解析:Java服务根据协议(如HTTP、FTP等)解析数据。这可能涉及将字节流转换为更高级别的数据结构,如HTTP请求对象。
  • 业务逻辑处理:一旦数据被解析,Java服务将执行业务逻辑,如更新数据库、处理业务请求等。

总结

整个过程如下:

  1. 数据通过物理网络到达网卡。
  2. 网卡使用DMA将数据放入内存,并通知CPU。
  3. 操作系统的网络协议栈处理数据,将其放入相应Socket的接收队列。
  4. Java服务通过Socket API从操作系统请求数据。
  5. 操作系统将数据从内核空间复制到Java服务的用户空间。
  6. Java服务解析和处理数据。

这个过程涉及多个层次的操作,从硬件到操作系统内核,再到用户空间的Java应用程序,每个步骤都由不同的系统组件负责,以确保数据的高效、有序传输。

Socket编程

手写一个基于Socket实现的Http server 的demo:

java 复制代码
public static void main(String[] args) throws IOException {
    ServerSocket serverSocket = new ServerSocket(8080);

    while (true) {
        Socket socket = serverSocket.accept();
        InputStreamReader reader = new InputStreamReader(socket.getInputStream());
        BufferedReader bufferedReader = new BufferedReader(reader);
        String line;
        StringBuilder sb = new StringBuilder();
        while (!(line = bufferedReader.readLine()).isEmpty()) {
            sb.append(line).append("\n");
            System.out.println(line);
        }
        System.out.println(sb);
        // 创建 HTTP 响应
        String httpResponse = "HTTP/1.1 200 OK\r\n\r\n" + "Hello from Simple HTTP Server";
        socket.getOutputStream().write(httpResponse.getBytes(StandardCharsets.UTF_8));
        socket.close();
    }
}

Http

HTTP(超文本传输协议,Hypertext Transfer Protocol)是用于传输超文本文档(如 HTML)的应用层协议,是互联网上应用最广的协议之一。HTTP 的设计目标是确保客户端和服务器之间的通信是快速、可靠和灵活的。以下是 HTTP 协议的一些主要特点和组成部分:

  1. 客户端-服务器模型
  • 客户端和服务器:HTTP 采用客户端-服务器模型。客户端(通常是浏览器)发起请求,服务器响应请求。这些请求和响应是通过 HTTP 协议规定的格式进行的。
  1. 无状态协议
  • 无状态:HTTP 是无状态的,这意味着服务器不保留任何关于客户端请求的数据。每个请求都是独立的,这使得协议简单,但也限制了其直接支持复杂交易的能力。
  1. 请求和响应
  • 请求:客户端发送一个请求给服务器,通常包括请求行(如 GET /index.html HTTP/1.1)、请求头(包含关于请求的元信息)和可选的消息主体。
  • 响应:服务器对每个请求返回一个响应,包括状态行(如 HTTP/1.1 200 OK)、响应头(包含关于响应的元信息)和可选的消息主体。
  1. 方法

HTTP 定义了一组请求方法,以表明请求的目的:

  • GET:请求获取指定的资源。
  • POST:提交数据给服务器(如表单数据)。
  • PUT:上传文件或内容到指定资源。
  • DELETE:删除指定的资源。
  • 其他方法包括 HEAD、PATCH、OPTIONS 等。
  1. 状态码

服务器响应包含状态码,告知客户端请求是否成功,或是否需要采取其他动作:

  • 2xx:成功(如 200 OK)。
  • 3xx:重定向(如 301 Moved Permanently)。
  • 4xx:客户端错误(如 404 Not Found)。
  • 5xx:服务器错误(如 500 Internal Server Error)。
  1. 版本
  • HTTP/1.0 和 HTTP/1.1:这两个版本在互联网上广泛使用。HTTP/1.1 引入了持久连接、分块传输等改进。
  • HTTP/2:更高效的新版本,支持多路复用、服务器推送等功能。
  • HTTP/3:基于 QUIC 协议,旨在进一步提高性能和安全性。
  1. 安全性
  • HTTPS:安全版本的 HTTP(HTTP over SSL/TLS),对传输的数据进行加密,更加安全。

总的来说,HTTP 是构建现代网络应用的基石,提供了一种灵活、可扩展的方式来交换信息和数据。虽然它的无状态性可能在某些情况下是限制,但也正因为这个特性,HTTP 成为了一个极其强大且普遍适用的协议。

相关推荐
潮汐退涨月冷风霜2 小时前
机器学习之非监督学习(四)K-means 聚类算法
学习·算法·机器学习
GoppViper2 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
羊小猪~~2 小时前
深度学习基础案例5--VGG16人脸识别(体验学习的痛苦与乐趣)
人工智能·python·深度学习·学习·算法·机器学习·cnn
Charles Ray3 小时前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
我要吐泡泡了哦4 小时前
GAMES104:15 游戏引擎的玩法系统基础-学习笔记
笔记·学习·游戏引擎
骑鱼过海的猫1234 小时前
【tomcat】tomcat学习笔记
笔记·学习·tomcat
贾saisai6 小时前
Xilinx系FPGA学习笔记(九)DDR3学习
笔记·学习·fpga开发
北岛寒沫6 小时前
JavaScript(JS)学习笔记 1(简单介绍 注释和输入输出语句 变量 数据类型 运算符 流程控制 数组)
javascript·笔记·学习
铁匠匠匠7 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
架构文摘JGWZ9 小时前
Java 23 的12 个新特性!!
java·开发语言·学习