计算机网络学习

OSI 七层模型

物理层(Physical Layer)

  • 功能:处理与电气或物理规范的接口有关的细节,如电缆类型、电信号传输和接收、网络设备的物理特性等。
  • 设备:包括网线、光纤、集线器等。

数据链路层(Data Link 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 模型的物理层相同,负责在物理媒介上传输原始比特流。它涉及的是网络的物理连接部分,如电缆、光纤、无线电频率等。
  • 设备:包括网线、光纤、集线器等。

2. 链路层(Link Layer)

  • 功能:在物理层提供的原始传输基础上建立有效的链路。它负责帧的处理和物理地址寻址,以及错误检测和纠正。
  • 设备和协议:交换机、网桥以及以太网(Ethernet)协议。

3. 网络层(Internet Layer)

  • 功能:负责数据包的寻址和路由,确保数据可以跨越多个网络从源点传输到目的地。
  • 核心协议:IP(Internet Protocol),以及支持路由的协议如 ICMP(Internet Control Message Protocol)和 IGMP(Internet Group Management Protocol)。
  • 设备:路由器。

4. 传输层(Transport Layer)

  • 功能:为两个主机之间的数据传输提供服务。它关注数据的分段、传输、错误检测和恢复。
  • 核心协议:TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)。

5. 应用层(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)过程。

2. 可靠性

  • TCP 提供可靠的数据传输服务,确保数据准确无误地从源传到目的地。

3. 基于字节流

  • 数据以字节流的形式发送,TCP 负责数据的分割和重组。

4. 全双工通信

  • TCP 允许双方在连接中同时发送和接收数据。

5. 流量控制

  • TCP 使用窗口机制来控制发送方的发送速率,防止接收方被过量的数据淹没。

6. 拥塞控制

  • TCP 实现了拥塞控制算法,如慢启动、拥塞避免、快重传和快恢复,以避免网络拥塞。

工作机制

1. 连接建立(三次握手)

  • SYN:客户端发送一个 SYN(同步序列编号)报文到服务器。
  • SYN-ACK:服务器接收到 SYN 后,回送一个 SYN-ACK(同步-确认)报文。
  • ACK:客户端再发送一个 ACK(确认)报文。

2. 数据传输

  • 数据以字节流的形式进行传输,每个 TCP 段都包含序列号,用于确保数据的有序性和完整性。

3. 流量控制

  • TCP 使用窗口机制(滑动窗口)来控制每次可以发送的数据量,从而匹配接收方的接收能力。

4. 拥塞控制

  • TCP 根据网络的拥塞程度调整数据传输的速率,以避免过度拥塞。

5. 连接终止

  • 连接的终止通常涉及一个“四次挥手”(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)。这标志着连接请求的开始。

2. SYN-ACK(同步-确认)

  • 服务器到客户端:服务器接收到SYN包后,会发送一个SYN-ACK包作为回应。这个包中包含服务器的初始序列号,并将客户端的序列号加一作为确认号。

3. 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)到服务器,表示没有数据要发送了。

2. ACK(确认)

  • 服务器到客户端:服务器接收到FIN包后,发送一个ACK包作为回应。此时,从客户端到服务器的连接被关闭,但服务器仍可以发送数据到客户端。

3. FIN(结束)

  • 服务器到客户端:服务器完成数据发送后,也发送一个FIN包到客户端。

4. 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. 数据到达网卡

  • 物理层接收:数据最初以电子信号的形式到达网卡,网卡负责将这些电子信号转换成对计算机有意义的数据包。

2. 操作系统处理

  • 中断和DMA:数据到达网卡后,网卡通常会通过直接内存访问(DMA)将数据放入预定的内存区域,并产生中断信号通知CPU有新数据到达。
  • 协议栈处理:操作系统的网络协议栈接管处理过程。数据包首先被操作系统的网络层(例如IP层)处理,进行地址解析和路由决策。
  • 缓冲区:数据包随后被传送到传输层(例如TCP/UDP),操作系统为每个数据包在内核空间中分配缓冲区。

3. Socket操作

  • 套接字队列:在应用程序创建Socket时,操作系统为该Socket维护两个队列:接收队列和发送队列。接收队列存放从网络中收到的、准备由应用程序读取的数据。发送队列存放应用程序希望发送到网络中的数据。
  • 数据包分类:操作系统根据数据包的目标端口号将数据包定向到对应的Socket接收队列中。

4. 数据传送到Java服务

  • 系统调用:Java服务使用Socket API(如ServerSocket和Socket类)执行系统调用,请求操作系统提供网络服务。当Java服务对Socket执行读操作时(如InputStream.read()),它实际上是在请求操作系统从对应Socket的接收队列中提取数据。
  • 用户空间复制:操作系统将数据从内核空间复制到用户空间,Java服务所运行的空间。
  • Java对象表示:Java网络库将这些数据转换成Java可理解的对象或字节,供Java服务进一步处理。

5. 应用层处理

  • 数据解析: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:

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 协议规定的格式进行的。

2. 无状态协议

  • 无状态:HTTP 是无状态的,这意味着服务器不保留任何关于客户端请求的数据。每个请求都是独立的,这使得协议简单,但也限制了其直接支持复杂交易的能力。

3. 请求和响应

  • 请求:客户端发送一个请求给服务器,通常包括请求行(如 GET /index.html HTTP/1.1)、请求头(包含关于请求的元信息)和可选的消息主体。
  • 响应:服务器对每个请求返回一个响应,包括状态行(如 HTTP/1.1 200 OK)、响应头(包含关于响应的元信息)和可选的消息主体。

4. 方法

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

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

5. 状态码

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

  • 2xx:成功(如 200 OK)。
  • 3xx:重定向(如 301 Moved Permanently)。
  • 4xx:客户端错误(如 404 Not Found)。
  • 5xx:服务器错误(如 500 Internal Server Error)。

6. 版本

  • HTTP/1.0 和 HTTP/1.1:这两个版本在互联网上广泛使用。HTTP/1.1 引入了持久连接、分块传输等改进。
  • HTTP/2:更高效的新版本,支持多路复用、服务器推送等功能。
  • HTTP/3:基于 QUIC 协议,旨在进一步提高性能和安全性。

7. 安全性

  • HTTPS:安全版本的 HTTP(HTTP over SSL/TLS),对传输的数据进行加密,更加安全。

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

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

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

相关文章

AcWing---公约数---最大公约数

4199. 公约数 - AcWing题库 思路: 最大整数x一定是最大公约数的因数,所以先用__gcd(a,b)求出a和b的最大公因数,再用O(log(n))的算法求出最大公因数的因数,放到vector中,并将vector排序。利用STL中的upper_bound(res.…

Star GAN论文解析

论文地址:https://arxiv.org/pdf/1912.01865v1.pdf https://openaccess.thecvf.com/content_cvpr_2018/papers/Choi_StarGAN_Unified_Generative_CVPR_2018_paper.pdf 源码:stargan项目实战及源码解读-CSDN博客 1. 概述 在传统方法中&#x…

游戏引擎之高级动画技术

一、动画混合 当我们拥有各类动画素材(clips)时,要将它们融合起来成为一套完整的动画。 最经典的例子就是从走的动画自然的过渡到跑的动画。 1.1 线性插值 不同于上节课的LERP(同一个clip内不同pose之间)&#xff…

JVM 内存溢出排查

说明:记录一次JVM内存溢出的排查过程; 场景 项目开发完成后,首次提交到测试环境。测试、产品同事反馈页面先是操作响应慢,抛出超时异常,最后直接无法使用。查看日志后得知是内存溢出。 重启服务后,我对前…

SV学习笔记(五)

线程的使用 程序和模块 module(模块)作为SV从verilog继承过来的概念,自然地保持了它的特点,除了作为RTL模型的外壳包装和实现硬件行为,在更高层的集成层面,模块之间也需要通信和同步。 对于硬件的过程块&…

记录一下前端定时器清除失效的问题

目录 一、问题引入 二、错误代码: 三、错误原因 四、修正的代码 附 vue提供的线上运行代码网址以便证实可用性 一、问题引入 按理说,打开定时器 xxx setInterval(()>{ },100),之后只要 clearInterval(xxx) 就可以顺利关闭定时器…

【漏洞复现】用友NC Cloud前台命令执行漏洞

0x01 阅读须知 “如棠安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供…

Visual Studio安装下载进度为零已解决

因为在安装pytorch3d0.3.0时遇到问题,提示没有cl.exe,VS的C编译组件,可以添加组件也可以重装VS。查了下2019版比2022问题少,选择了安装2019版,下面是下载安装时遇到的问题记录,关于下载进度为零网上有三类解…

[Spring Cloud] gateway全局异常捕捉统一返回值

文章目录 处理转发失败的情况全局参数同一返回格式操作消息对象AjaxResult返回值状态描述对象AjaxStatus返回值枚举接口层StatusCode 全局异常处理器自定义通用异常定一个自定义异常覆盖默认的异常处理自定义异常处理工具 在上一篇章时我们有了一个简单的gateway网关 [Spring C…

蓝桥杯杯赛之深度优先搜索优化《1.分成互质组》 《 2.小猫爬山》【dfs】【深度搜索剪枝优化】【搜索顺序】

文章目录 思想例题1. 分成互质组题目链接题目描述【解法一】【解法二】 2. 小猫爬山题目链接题目描述输入样例:输出样例:【思路】【WA代码】【AC代码】 思想 本质为两种搜索顺序: 枚举当前元素可以放入哪一组枚举每一组可以放入哪些元素 操…

腾讯云服务器优惠活动价格表_CPU内存带宽报价明细

2024年最新腾讯云服务器租用优惠价格表:轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三年、2核4G5M带宽218元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器646元15个月;轻量4核16G12M带宽32元1个月、96元3个…

【OpenCV-颜色空间】

OpenCV-颜色空间 ■ RGB■ BGR■ HSV■ HSL■ HUE■ YUV ■ RGB ■ BGR BGR 就是RGB R和B调换位置。 OpenCV 默认使用BGR ■ HSV ■ HSL ■ HUE ■ YUV

C#将Console写至文件,且文件固定最大长度

参考文章 将C#的Console.Write同步到控制台和log文件输出 业务需求 在生产环境中,控制台窗口不便展示出来。 为了在生产环境中,完整记录控制台应用的输出,选择将其输出到文件中。 但是,一次性存储所有输出的话,文件会…

环形链表--极致的简便

一、要求 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

故障诊断 | 一文解决,PLS偏最小二乘法的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,PLS偏最小二乘法的故障诊断(Matlab) 模型描述 偏最小二乘法(Partial Least Squares, PLS)是一种统计建模方法,用于建立变量之间的线性关系模型。它是对多元线性回归方法的扩展,特别适用于处理高维数据和具有多重共线性的数据集。…

卫星遥感影像统计农业产量、作物分类及面积

卫星遥感技术的广泛应用为农业领域带来了巨大的变革,其中,卫星遥感影像在农业产量估算方面的应用正成为一项关键技术。通过高分辨率的遥感数据,农业生产者可以更准确、及时地了解农田状况,实现精准农业管理,提高产量和…

真--个人收款系统方案

此文主要说明方案,无代码部分 前言: 有个个人项目需要接入vip系统,我们发现微信、支付宝的官方API主要服务商户,而市面上的“个人收款系统”也往往不符合我们的需求。不过,每次支付时通知栏的信息给了我灵感。走投无路&#xff0…

蓝桥杯 第2155题质因数个数 C++ Java Python

题目 思路和解题方法 目标是计算给定数 n 的质因数个数。可以使用了试除法来找到 n 的所有质因数 读取输入的数 n。从 2 开始遍历到 sqrt(n),对于每个数 i: 如果 n 能被 i 整除,则进行以下操作: 将 n 除以 i,直到 n 不…

Hyper-v平台搭建pve系统之网络配置(双网卡、内外网分离)

现在我需要在我本地配置的PVE系统上配置双网卡,然后一个连接外部网络(访问互联网),一个连接内部网络(只能和宿主机之间互相访问) 最终效果: 登录PVE平台,我可以正常访问外网&#…

[机器学习]人工智能为小米智架保驾护航

前言 小米汽车作为小米集团进军汽车行业的新尝试,吸引了广泛的关注。其结合了小米在科技和创新方面的优势,以及对智能出行的愿景,为汽车行业注入了新的活力。虽然小米汽车工厂还处于初期阶段,但其积极采用人工智能和机器学习等前沿…