计算机网络-各层协议
大家在搞嵌入式开发的时候基本都了解过七层网络协议、五层网络协议、四层网络协议,那么今天让我们更加的深入了解一下:
历史发展介绍
- OSI七层模型由ISO国际标准化组织提出的通信标准。TCP/IP四层模型是OSI七层模型的简化版,OSI在它被官方完善之前,民间TCP/IP早已实际使用,所以只存在于理论五层协议的体系结构是专门为介绍网络原理而设计的,与TCP/IP四层模型唯一不同的就是将网络接口层分为了数据链路层和物理层,在实际的应用中还是使用TCP/IP四层模型的。
这里我们着重讲解网络协议,因此在这里我们对照七层协议进行讲解。
应用层
-
HTTP协议(HyperText Transfer Protocol,超文本传输协议):是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件、图片文件、查询结果等)。它是一个简单的请求-响应协议,用于从服务器请求和发送网页内容。在HTTP协议中,客户端(通常是浏览器)向服务器发送请求,请求内容包括要获取的资源、请求方法(GET、POST等)以及请求头信息;服务器接收请求后,根据请求方法和路径找到相应的资源,并返回响应,包括状态码、响应头信息和响应体信息。HTTP协议的特点包括:
1. 无状态:HTTP协议是无状态的,这意味着服务器不会为每个请求保持状态。因此,同一个客户端的连续请求之间没有关联。
2. 请求-响应模型:HTTP协议采用请求-响应模型,客户端向服务器发送请求,服务器返回响应。
3.面向对象:HTTP协议是面向对象的,客户端和服务器之间传输的对象是消息头和消息体。
4.简单快速:HTTP协议简单、快速,客户端和服务器可以在任何时刻关闭连接,释放系统资源。
5.无须长时间连接:HTTP协议不需要长时间连接,可以快速完成数据传输后断开连接,节省网络资源。
6. 灵活:HTTP协议灵活,可以传输任意类型的数据对象,正在传输的类型由Content-Type加以标记。 -
HTTPS(全称:Hypertext Transfer Protocol Secure),是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。简单讲,HTTPS是HTTP的安全版。
-
HTTPS经由HTTP进行通信,利用SSL/TLS来加密数据包。其主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。
-
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
-
FTP(File Transfer Protocol,文件传输协议)是一种用于在网络上进行文件传输的标准协议,FTP协议使用TCP传输而不是UDP,客户在和服务器建立连接前要经过一个“三次握手”的过程,保证客户与服务器之间的连接是可靠的,而且是面向连接,为数据传输提供可靠保证。
-
FTP协议包括两个组成部分,一是FTP服务器,用于存储文件;二是FTP客户端,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
-
FTP协议的特点包括:
1. 基于客户-服务器(C/S)模型而设计。在客户端与FTP服务器之间建立两个连接,一个控制连接和一个数据连接。控制连接用于传输FTP控制命令和命令执行信息;数据连接用于传输数据,包括数据上传、下载、文件列表发送等。
2. 屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。
3. FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。
4. FTP只提供文件传送的一些基本的服务,它使用TCP可靠的运输服务。
5. FTP的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
6. FTP使用客户服务器方式,一个FTP服务器进程可同时为多个客户进程提供服务。
7. FTP协议默认采用TCP端口中的20和21两个端口。其中20用于传输数据,21用于传输控制信息。
8. FTP协议的默认传输模式是ASCII模式,主要用于传输文本文件和程序文件。
9. FTP协议可以建立主动模式和被动模式的数据连接。主动模式下,由服务器主动发起连接;被动模式下,由客户端主动与服务器的临时端口号建立数据传输通道。
- SSH(Secure Shell)协议是一种在网络上实现安全远程登录和其他安全网络服务的协议。它建立在应用层和传输层基础之上,利用非对称加密方法实现通信过程中的安全性,可以防止信息泄露、网络攻击和数据篡改等问题。SSH协议最初是在UNIX系统上实现的,但现在已经广泛应用于各种操作系统。 SSH协议的工作原理如下:
1. 客户端和服务器建立连接,服务器会生成一对公钥和私钥。
2. 客户端请求连接,发送请求到服务器。服务器将公钥传给客户端使用。
3. 客户端收到服务器的公钥后,会生成一对公钥和私钥,并将公钥发送给服务器。
4. 服务器验证客户端的公钥是否有效,如果有效,则建立连接。
5. 在连接过程中,客户端和服务器会使用非对称加密算法对数据进行加密和解密,保证数据传输的安全性。
- SSH协议的优势包括:
1. 安全性高:SSH协议基于非对称加密方法,采用加密算法对数据进行加密和解密,保证了数据的机密性和完整性。同时,SSH协议还支持数字签名和身份验证等功能,防止网络攻击和非法访问。
2. 兼容性强:SSH协议可以在多种操作系统上运行,如UNIX、Linux、Windows等。这使得在不同系统之间进行安全远程登录和数据传输变得非常方便。
3. 易于使用:SSH协议的安装和配置相对简单,可以通过命令行或图形界面进行操作。同时,SSH协议还支持隧道技术等扩展功能,可以满足各种复杂网络环境的需求。
4. 高度灵活:SSH协议支持多种服务,如远程登录、文件传输、端口转发等。这使得SSH协议在远程管理、软件开发、网络安全等领域具有广泛的应用价值。
- Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,可以连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。Telnet协议的基本内容包括:
1. Telnet位于OSI模型的第7层——应用层上,是一个通过创建虚拟终端提供连接到远程主机终端仿真的TCP/IP协议。这一协议需要通过用户名和口令进行认证,是Internet远程登录服务的标准协议。应用Telnet协议能够把本地用户所使用的计算机变成远程主机系统的一个终端。
2. Telnet定义一个网络虚拟终端为远程系统提供一个标准接口。客户机程序不必详细了解远程系统,他们只需构造使用标准接口的程序。
3. Telnet包括一个允许客户机和服务器协商选项的机制,而且它还提供一组标准选项。
4. Telnet对称处理连接的两端,即Telnet不强迫客户机从键盘输入,也不强迫客户机在屏幕上显示输出。
5. Telnet适应异构。为了使多个操作系统间的Telnet交互操作成为可能,就必须详细了解异构计算机和操作系统。
- 此外,Telnet协议还具有以下特点:
1. Telnet协议是一种面向连接的协议,它提供了一种可靠的数据传输方式,能够保证数据在网络中的可靠传输。
2. Telnet协议使用了一种基于文本的通信方式,使得不同操作系统和设备之间的通信更加方便。
3. Telnet协议还支持多种网络服务,例如文件传输、电子邮件等,使得它成为了一种通用的网络工具。
4. Telnet协议的安全性相对较低,因为它传输的数据是明文的,容易被截获和窃取。因此,对于需要高度安全性的应用场景,应该考虑使用更安全的通信协议,例如SSH或SSL。
表示层
- GIF(Graphics Interchange Format)是一种图像文件格式,被广泛用于网络传输。GIF采用LZW压缩算法,有效地减少了图像文件中的冗余信息,从而实现了无损压缩。此外,GIF还支持透明背景和动画图像,使得它在网页设计中具有广泛的应用。
- JPEG(Joint Photographic Experts Group)是一种常用的图像压缩标准,它采用离散余弦变换(Discrete Cosine Transform,DCT)和量化技术对图像数据进行压缩。JPEG标准定义了多种工作模式,包括基线模式和渐进模式等。在基线模式中,图像被分为多个8x8的块,每个块进行DCT变换和量化,以生成压缩数据。而在渐进模式中,图像被逐步传输和显示,使得用户可以逐步看到图像的细节,但压缩率相对较低。JPEG标准具有广泛的应用,包括数码相机、扫描仪、网络传输、医学图像处理等。由于其高效的压缩算法和良好的图像质量,JPEG已经成为数字图像处理领域中最常用的图像压缩标准之一。然而,JPEG压缩算法也存在一些缺陷,如容易受到攻击和破解,因此需要采取相应的安全措施来保护图像数据的安全性。
- ASCII协议是一种基于文本的通信协议,它规定了128个字符的编码,包括控制字符和可打印字符。ASCII协议常用于串行通信和网络传输,它可以传输文本数据和控制命令等。在串行通信中,ASCII协议使用8个二进制位表示一个字符,即一个字节,通过时钟信号同步发送和接收。在网络传输中,ASCII协议可以通过TCP/IP协议进行数据传输,并通常与其他协议(如HTTP)一起使用。ASCII协议的优点包括易于实现和解析、兼容性好等。它可以被广泛应用于各种通信场景,包括串行通信、网络通信和文件传输等。然而,ASCII协议也存在一些缺点,如传输效率较低、容易受到字符编码问题的困扰等。因此,在一些需要高效和安全通信的场景中,可能会选择使用其他的通信协议,如FTP、HTTP或SSH等。
- TIFF(Tagged Image File Format)是一种图像文件格式,它是由Aldus公司为Macintosh机开发的一种图形文件格式,最早流行于Macintosh,现在Windows上主流的图像应用程序都支持该格式。TIFF协议格式的设计目标是提供一个通用的图像文件格式,以便不同的应用程序和平台可以互相兼容。TIFF文件由多个数据块组成,每个数据块包含一个标签和相应的数据。数据块的顺序可以是任意的,但通常按照特定的规则进行排序。TIFF文件支持有损压缩和未压缩的图像数据,也允许使用矢量图形。由于其高度的灵活性、支持多种颜色深度和压缩方式,以及广泛兼容性等特点,TIFF文件格式在图像处理、印刷和出版等领域得到了广泛的应用。然而,TIFF文件也存在一些不足之处,例如文件体积较大,处理速度相对较慢等。因此,在某些应用场景下,可能会选择使用其他更加高效和便捷的图像文件格式,如JPEG或PNG等。
会话层
- SSL(Secure Sockets Layer)协议是一种安全协议,用于在网络通信中提供数据加密、身份认证和消息完整性保护。它位于传输层和应用层之间,为应用程序提供了一个安全的通信通道。SSL协议广泛用于互联网上的安全通信,如Web浏览器和Web服务器之间的通信。SSL协议的工作原理如下:
1. 客户端和服务器建立连接后,服务器会将数字证书和公钥发送给客户端。
2. 客户端会对数字证书进行验证,包括证书的颁发机构、证书的所有者以及证书的有效期等信息。如果证书验证通过,客户端会生成一个随机数,并用服务器的公钥进行加密,然后发送给服务器。
3. 服务器接收到加密的随机数后,会用自己的私钥进行解密,得到客户端发送的随机数。
4. 服务器和客户端会使用这个随机数作为密钥,对后续的数据传输进行加密和解密。
- SSL协议提供了以下几项安全保障:
1. 数据加密:SSL协议使用加密算法对传输的数据进行加密,保证了数据在传输过程中的保密性。
2. 身份认证:SSL协议允许客户端对服务器进行身份认证,确保只有正确的服务器才能接收客户端的请求。
3. 消息完整性:SSL协议使用消息摘要算法对传输的数据进行完整性校验,保证了数据在传输过程中没有被篡改。
4. 值得注意的是,SSL协议存在多个版本,其中SSL 2.0和SSL 3.0是最常用的版本。然而,由于安全漏洞和其他问题,SSL 2.0已被废弃,SSL 3.0也被视为不安全,不再建议使用。现在常用的版本是TLS(Transport Layer Security)协议,它与SSL 3.0兼容,并改进了安全性。TLS协议已经发布了多个版本,其中TLS 1.2和TLS 1.3是最常用的版本。
-
TLS(Transport Layer Security)协议,也被称为安全传输层协议,是一种提供在两个应用程序之间进行保密性和数据完整性保护的协议。它是在两个通信应用程序之间提供加密通信的协议,与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合。
-
TLS协议由两层组成:TLS记录协议(TLS Record)和TLS握手协议(TLS Handshake)。在建立连接时,客户端和服务器会使用握手协议协商出一个有状态的连接,并使用一个公钥/私钥对进行身份验证。一旦连接建立,客户端和服务器就可以使用记录协议来传输加密的数据。
-
TLS协议的优势在于其与高层的应用层协议的无耦合性,使得应用层协议可以透明地运行在TLS协议之上,由TLS协议进行创建加密通道需要的协商和认证。同时,TLS协议还提供了数据加密和完整性校验功能,保证了数据在传输过程中的安全。
-
TLS协议广泛应用于各种需要安全通信的场景,如Web浏览器和Web服务器之间的通信、电子邮件、即时通讯等。此外,TLS协议还提供了对数字证书的支持,使得客户端和服务器可以互相验证对方的身份。
-
值得注意的是,TLS协议的最新版本是TLS 1.3,它在TLS 1.2的基础上进行了改进,提高了安全性并减少了实现复杂度。
传输层
-
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP旨在适应支持多网络应用的分层协议层次结构,为不可靠的互联网络上提供可靠的端到端字节流。
-
TCP协议的主要特点包括:
1. 面向连接:在数据传输之前,需要先建立一个可靠的连接。数据传输结束后,通过协定的方式断开连接,由通信的双方释放资源。
2. 可靠传输:TCP通过确认机制、重传机制和流量控制机制确保数据的可靠传输。如果发送方在一定的时间内没有收到接收方的确认,则会进行重传。此外,TCP还会对接收方缓存区中可能存在的数据进行管理,确保数据的完整性。
3. 基于字节流:TCP将数据看作字节流,不区分消息边界。发送方发送的字节流按照发送顺序被接收方接收,接收方可以按照发送顺序重组消息。
4. 拥塞控制:当网络拥塞严重时,TCP会降低数据发送速度,以减少网络拥塞。TCP通过拥塞控制算法来管理网络拥塞。
-
TCP协议的应用非常广泛,包括Web浏览、电子邮件、文件传输、远程登录等都需要用到TCP协议。此外,TCP也是许多其他协议的基础,如HTTP协议和FTP协议等都基于TCP进行数据传输。
-
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,与TCP协议相比,UDP协议不提供可靠的数据传输服务。在OSI(Open System Interconnection)参考模型中,UDP位于第四层——传输层,处于IP协议的上一层。
-
UDP协议的特点包括:
1. 无连接:UDP协议在数据传输之前不需要建立连接,可以直接发送数据。与TCP相比,UDP协议的开销较小,传输数据时延较短。
2. 不可靠:UDP协议不保证数据的可靠传输,可能会出现数据丢失或乱序的情况。因此,使用UDP协议的应用程序需要自己实现可靠传输的机制。
3. 面向数据报:UDP将数据封装在一个数据报中,然后发送该数据报。接收方需要按照顺序接收数据报,并重新组合成完整的数据。
4. 速度快:由于UDP协议简单且无连接,因此其传输速度通常比TCP协议快。
- UDP协议的应用场景主要包括:
1. 需要快速传输数据的场景:如流媒体、在线游戏等,使用UDP协议可以提供更好的实时性。
2. 可靠性要求不高的场景:如VoIP(语音通话)等,使用UDP协议可以降低网络延迟。
3. 需要进行广播或组播的场景:如视频会议系统等,使用UDP协议可以更好地利用网络带宽。
- 需要注意的是,由于UDP协议不可靠,因此使用UDP协议的应用程序需要自己实现可靠传输的机制,如确认机制、重传机制等。
网络层
- IP协议,也称为Internet Protocol,是TCP/IP协议族中的核心组成部分,是目前应用最广的网络互联协议。IP协议规定了将数据报从一个网络传输到另一个网络所应遵循的规则。IP协议的作用主要有:
1. 无连接数据报传送:IP协议是一种无连接协议,这就意味着在通信的终点之间没有连续的线路连接。
2. 数据报路由选择:IP协议通过路由选择实现从一个网络到另一个网络的通信,即通过选择最佳路径来传递数据包。
3. 差错控制:IP协议通过校验和的方式来检测数据在传输过程中是否发生了错误,并且能够实现一定的纠正功能。
- IP协议位于ISO/OSI七层参考模型中的网络层,其目的是屏蔽掉不同物理网络(如以太网、令牌环网等)的帧格式、地址格式等各种底层物理网络细节,使得各种物理网络的差异性对上层协议不复存在,从而使网络互联成为可能。
- 总之,IP协议是计算机网络之间进行通信的重要协议之一,其设计目标是提高网络的可扩展性、解决互联网问题以及分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。
- ICMP(Internet Control Message Protocol,互联网控制报文协议)是TCP/IP协议簇中的一个子协议,用于在IP主机和路由器之间传递控制消息。这些控制消息包括网络通不通、主机是否可达、路由是否可用等网络本身的消息。虽然这些控制消息并不直接传输用户数据,但它们对于用户数据的传输起着重要的作用。ICMP协议的主要功能包括:
1. 报告错误:当IP数据无法访问目标或IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
2. 查询和响应:ICMP还可以用于查询主机或路由器的信息,并接收相应的响应。
-
总的来说,ICMP是用于在IP主机和路由器之间传递控制消息的重要协议,主要用于解决网络中的各种问题,并对用户数据的传输起着重要作用。
-
ARP(Address Resolution Protocol),中文是地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
-
ARP协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
数据链路层
- 点对点协议(Point-to-Point Protocol,PPP):这是一种用于点对点通信的协议,常用于串行通信。PPP协议支持数据链路层的多种功能,如差错控制、流量控制等。
- 以太网协议(Ethernet):以太网是一种局域网通信协议,广泛应用于商业和家庭网络中。以太网协议规定了如何在网络中传输数据,包括数据包的格式、大小、传输方式等。
- 高级数据链路控制协议(High-Level Data Link Control Protocol,HDLC):HDLC是一种面向比特的链路层协议,常用于串行通信。它支持全双工通信、流量控制和错误检测等功能。
- 帧中继协议(Frame Relay):帧中继是一种用于广域网的通信协议,主要用于数据传输。它简化了数据链路层的处理过程,只保留了必要的控制功能,提高了数据传输的效率。
异步传输模式(Asynchronous Transfer Mode,ATM):ATM是一种面向单元的、面向连接的通信协议,主要用于宽带数据传输。它使用固定长度的数据包,支持高速数据传输和多媒体应用。
物理层
- EIA/TIA-232接口标准:这是一种串行通信接口标准,常用于计算机和调制解调器之间的数据传输。
- RS-232接口标准:RS-232是一种标准的串行通信接口,常用于计算机和其他设备之间的连接。
- EIA/TIA-499接口标准:这是一种用于宽带数据传输的接口标准,支持更高的数据传输速率。
- IEEE 802.3协议:这是以太网的标准协议,规定了以太网的物理层和数据链路层的规范。
- IEEE 802.11协议:这是无线局域网的标准协议,规定了无线局域网的物理层和数据链路层的规范。
- 其他物理层协议:还有一些其他的物理层协议,如光纤通道、SAS(Serial Attached SCSI)等,适用于特定的应用场景。
拓展
TCP协议三次握手
- TCP(Transmission Control Protocol,传输控制协议)的三次握手过程是建立TCP连接的过程,包括以下三个步骤:
1.第一次握手:客户端发送一个SYN(synchronize)包到服务器,并进入SYN_SEND状态,等待服务器的确认。SYN包中包含一个随机生成的seq number(序列号)。
2.第二次握手:服务器收到SYN包后,会确认客户端的SYN(ACK=1),同时自己也发送一个SYN包(SYN=1)给客户端,即SYN+ACK包,此时服务器进入SYN_RECV状态。这个过程中,服务器会将自己的seq number添加到SYN包中一起发送给客户端。
3.第三次握手:客户端收到服务器的SYN+ACK包后,向服务器发送确认包ACK(ACK=1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。这个过程中,客户端会将服务器的seq number加1后作为ack number发送给服务器,表示已经收到服务器的SYN+ACK包。
在三次握手过程中,传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。
注* ACK和ack的大小写不同,意义也略有不同。
ACK:这是一个确认字符,也是TCP协议中的一个标志位。在TCP连接中,当一方收到另一方发送的数据包时,会向对方发送一个ACK消息,告诉对方已经收到了数据包。ACK消息通常会携带一个序列号,表示确认的数据包的序列号。ACK是TCP协议中的一个特定标志位。
ack:这是TCP连接中的确认消息的通用术语,表示确认消息的意思。在TCP连接中,当一方收到另一方发送的数据包时,会向对方发送一个ack消息,告诉对方已经收到了数据包。ack消息通常会携带一个序列号,表示确认的数据包的序列号。
总的来说,ACK是TCP协议中的一个特定标志位,而ack是TCP连接中的确认消息的通用术语。
TCP协议四次挥手
- TCP的四次挥手过程是TCP连接关闭的过程,包括四个步骤:
1.第一次挥手:客户端发送一个FIN报文,表示客户端不再发送数据,并进入FIN-WAIT-1状态。
2.第二次挥手:服务器收到客户端的FIN报文后,会发送一个ACK报文给客户端,确认收到客户端的FIN报文,服务器进入CLOSE-WAIT状态。
3.第三次挥手:服务器发送一个FIN报文给客户端,表示服务器不再发送数据,并进入LAST-ACK状态。
4.第四次挥手:客户端收到服务器的FIN报文后,发送一个ACK报文给服务器,确认收到服务器的FIN报文,客户端进入TIME-WAIT状态。服务器收到客户端的ACK报文后,进入CLOSED状态,完成四次挥手过程。
- 在四次挥手过程中,两次握手用来关闭连接,两次握手用来确认关闭连接。这是因为TCP协议是一个可靠协议,需要保证数据包的正确传输和接收,因此在关闭连接时需要进行确认和重传等操作。同时,TCP协议还提供了一种机制,即TIME-WAIT状态,用于保证最后一次发送的数据包能够被接收方正确地接收和确认。
ICMP差错控制过程
- TCP的四次挥手过程是TCP连接关闭的过程,包括四个步骤:
1.第一次挥手:客户端发送一个FIN报文,表示客户端不再发送数据,并进入FIN-WAIT-1状态。
2.第二次挥手:服务器收到客户端的FIN报文后,会发送一个ACK报文给客户端,确认收到客户端的FIN报文,服务器进入CLOSE-WAIT状态。
3.第三次挥手:服务器发送一个FIN报文给客户端,表示服务器不再发送数据,并进入LAST-ACK状态。
4.第四次挥手:客户端收到服务器的FIN报文后,发送一个ACK报文给服务器,确认收到服务器的FIN报文,客户端进入TIME-WAIT状态。服务器收到客户端的ACK报文后,进入CLOSED状态,完成四次挥手过程。
- 在四次挥手过程中,两次握手用来关闭连接,两次握手用来确认关闭连接。这是因为TCP协议是一个可靠协议,需要保证数据包的正确传输和接收,因此在关闭连接时需要进行确认和重传等操作。同时,TCP协议还提供了一种机制,即TIME-WAIT状态,用于保证最后一次发送的数据包能够被接收方正确地接收和确认。
问:为什么要三次握手两次不行吗?
答:三次握手可以解决了历史连接初始化带来的数据混乱问题。如果只进行两次握手,那么就存在以下问题:
- 无法保证发起方和接收方具有发送和接收数据的能力。
- 无法解决历史连接初始化带来的数据混乱问题。
下面引用知乎大佬的一篇文章:
要搞懂这个问题,首先要知道三次握手的目的是什么?两次握手可以达到这个目的吗?
第一次握手:客户端发送网络包,服务器端接收,此时服务器知道:客户端的发送能力、服务器端的接收能力正常。
第二次握手:服务器发包,客户端接收,此时客户端知道:服务器端的发送、接收能力正常,客户端的发送接收能力也正常。但是服务器端还不知道客户端的接收能力是否正常。
第三次握手:客户端发包,服务器端接收,此时服务器端知道客户端的发送、接收能力正常。
因此,需要三次握手才能确认双方的发送、接收能力是否正常。
试想一下,如果只进行两次握手,假如客户端发送连接请求,但因为连接请求报文丢失而未收到确认,就再重新发送连接请求。后来收到确认,建立了连接。数据传输完毕后,就释放了连接。其中第一个连接丢失,第二个到达服务器端,但是第一个丢失的报文段只是在某个网络节点长时间滞留了,等到第二次连接释放后的某个时间段,到达了服务器端,服务器以为客户端又请求连接,于是也发送确认,建立连接。所以不采用三次握手,只要服务器端发送确认,就能建立新的连接了。此时客户端忽略服务器端发来的确认报文段,也不传输数据,服务器端一直等待客户端传输数据,造成资源浪费。
问:为什么要等待2MSL?
答:数据包等待2MSL的原因是为了确保最后一个ACK报文能够到达对方,并保证连接可靠地关闭。在TCP的TIME_WAIT状态中,数据包需要等待2MSL时间,以防止最后一个ACK报文丢失。如果数据包在等待时间内没有收到重传的FIN+ACK报文段,那么它会认为连接已经关闭,并释放连接资源。这样可以保证连接的可靠关闭,避免出现连接未正常关闭的情况。同时,等待2MSL时间还可以防止旧的连接请求报文段在网络中滞留,避免出现重复连接的情况。
来自知乎大佬的讲解
相关文章:
计算机网络-各层协议
大家在搞嵌入式开发的时候基本都了解过七层网络协议、五层网络协议、四层网络协议,那么今天让我们更加的深入了解一下: 历史发展介绍 OSI七层模型由ISO国际标准化组织提出的通信标准。TCP/IP四层模型是OSI七层模型的简化版,OSI在它被官方完…...
LeetCode 84:柱状图中的最大矩形
一、题目描述 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights [2,1,5,6,2,3] 输出:10 解释:…...
老生重谈:大模型的「幻觉」问题
一、什么是大模型「幻觉」 大模型的幻觉问题通常指的是模型在处理输入时可能会产生一些看似合理但实际上是错误的输出,这可能是因为模型在训练时过度拟合了训练数据,导致对噪声或特定样本的过度敏感。 "大数据幻觉"指的是在处理大规模数据时…...
golang实现skiplist 跳表
跳表 package mainimport ("errors""math""math/rand" )func main() {// 双向链表///**先理解查找过程Level 3: 1 6Level 2: 1 3 6Level 1: 1 2 3 4 6比如 查找2 ; 从高层往下找;如果查找的值比当前值小 说明没有可查找的值2比1大 往当前…...
尝试OmniverseFarm的最基础操作
目标 尝试OmniverseFarm的最基础操作。本地机器作为Queue和Agent,同时在本地提交任务。 主要参考了官方文档: Farm Queue — Omniverse Farm latest documentation Farm Agent — Omniverse Farm latest documentation Farm Examples — Omniverse Far…...
第28关 k8s监控实战之Prometheus(二)
------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维。 这节课我们用prometheus-operator来安装整套prometheus服务 https://github.com/prometheus-operator/kube-prometheus/releases 开始安装 1. 解压下载的代码包 wget https://github.com/…...
基于 SpringBoot + magic-api + Vue3 + Element Plus + amis3.0 快速开发管理系统
Tansci-Boot 基于 SpringBoot2 magic-api Vue3 Element Plus amis3.0 快速开发管理系统 Tansci-Boot 是一个前后端分离后台管理系统, 前端集成 amis 低代码前端框架,后端集成 magic-api 的接口快速开发框架。包含基础权限、安全认证、以及常用的一…...
Kafka(四)Broker
目录 1 配置Broker1.1 Broker的配置broker.id0listererszookeeper.connectlog.dirslog.dir/tmp/kafka-logsnum.recovery.threads.per.data.dir1auto.create.topics.enabletrueauto.leader.rebalance.enabletrue, leader.imbalance.check.interval.seconds300, leader.imbalance…...
代码随想录第五十二天——最长递增子序列,最长连续递增序列,最长重复子数组
leetcode 300. 最长递增子序列 题目链接:最长递增子序列 dp数组及下标的含义 dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度递推公式 位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 1 的最大值 所以if (nums[i] > nums[j]) dp[i]…...
【大数据架构】OLAP实时分析引擎选型
OLAP引擎面临的挑战 常见OLAP引擎对比 OLAP分析场景中,一般认为QPS达到1000就算高并发,而不是像电商、抢红包等业务场景中,10W以上才算高并发,毕竟数据分析场景,数据海量,计算复杂,QPS能够达到1…...
代码随想录刷题题Day29
刷题的第二十九天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀 刷题语言:C Day29 任务 ● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 …...
CVE-2023-51385 OpenSSH ProxyCommand命令注入漏洞
一、背景介绍 ProxyCommand 是 OpenSSH ssh_config 文件中的一个配置选项,它允许通过代理服务器建立 SSH 连接,从而在没有直接网络访问权限的情况下访问目标服务器。这对于需要经过跳板机、堡垒机或代理服务器才能访问的目标主机非常有用。 二、漏洞简…...
如何寻找到相对完整的真正的游戏的源码 用来学习?
在游戏开发的学习之路上,理论与实践是并重的两个方面。对于许多热衷于游戏开发的学习者来说,能够接触到真实的、完整的游戏源码无疑是一个极好的学习机会。但问题来了:我们该如何寻找到这些珍贵的资源呢? 开源游戏项目 GitHub:地…...
数模学习day11-系统聚类法
本文参考辽宁石油化工大学于晶贤教授的演示文档聚类分析之系统聚类法及其SPSS实现。 目录 1.样品与样品间的距离 2.指标和指标间的“距离” 相关系数 夹角余弦 3.类与类间的距离 (1)类间距离 (2)类间距离定义方式 1.最短…...
SpringBoot+Redis实现接口防刷功能
场景描述: 在实际开发中,当前端请求后台时,如果后端处理比较慢,但是用户是不知情的,此时后端仍在处理,但是前端用户以为没点到,那么再次点击又发起请求,就会导致在短时间内有很多请求…...
TensorRT加速推理入门-1:Pytorch转ONNX
这篇文章,用于记录将TransReID的pytorch模型转换为onnx的学习过程,期间参考和学习了许多大佬编写的博客,在参考文章这一章节中都已列出,非常感谢。 1. 在pytorch下使用ONNX主要步骤 1.1. 环境准备 安装onnxruntime包 安装教程可…...
springboot常用扩展点
当涉及到Spring Boot的扩展和自定义时,Spring Boot提供了一些扩展点,使开发人员可以根据自己的需求轻松地扩展和定制Spring Boot的行为。本篇博客将介绍几个常用的Spring Boot扩展点,并提供相应的代码示例。 1. 自定义Starter(面试常问) Sp…...
19道ElasticSearch面试题(很全)
点击下载《19道ElasticSearch面试题(很全)》 1. elasticsearch的一些调优手段 1、设计阶段调优 (1)根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索引; (…...
向爬虫而生---Redis 拓宽篇3 <GEO模块>
前言: 继上一章: 向爬虫而生---Redis 拓宽篇2 <Pub/Sub发布订阅>-CSDN博客 这一章的用处其实不是特别大,主要是针对一些地图和距离业务的;就是Redis的GEO模块。 GEO模块是Redis提供的一种高效的地理位置数据管理方案,它允许我们存储和查询…...
Vue项目里实现json对象转formData数据
平常调用后端接口传参都是json对象,当提交表单遇到有附件需要传递时,通常是把附件上传单独做个接口,也有遇到后端让提交接口一并把附件传递到后端,这种情况需要把参数转成formData的数据,需要用到new FormData()。json…...
leetcode刷题记录
栈 2696. 删除子串后的字符串最小长度 哈希表 1. 两数之和 用map来保存每个数和他的索引 383. 赎金信 用map来存储字符的个数 链表 2. 两数相加 指针的移动 动态规划 53. 最大子数组和 2707. 字符串中的额外字符 递归 101. 对称二叉树 数学 1276. 不浪费原料的汉堡…...
SpringMVC通用后台管理系统源码
整体的SSM后台管理框架功能已经初具雏形,前端界面风格采用了结构简单、 性能优良、页面美观大的Layui页面展示框架 数据库支持了SQLserver,只需修改配置文件即可实现数据库之间的转换。 系统工具中加入了定时任务管理和cron生成器,轻松实现系统调度问…...
深度解析Dubbo的基本应用与高级应用:负载均衡、服务超时、集群容错、服务降级、本地存根、本地伪装、参数回调等关键技术详解
负载均衡 官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/loadbalance/ 如果在消费端和服务端都配置了负载均衡策略, 以消费端为准。 这其中比较难理解的就是最少活跃调用数是如何进行统计的? 讲道理, 最少活跃数…...
备战2024美赛数学建模,文末获取历史优秀论文
总说(历年美赛优秀论文可获取) 数模的题型千变万化,我今天想讲的主要是一些「画图」、「建模」、「写作」和「论文结构」的思路,这些往往是美赛阅卷官最看重的点,突破了这些点,才能真正让你的美赛论文更上…...
Java加密解密大全(MD5、RSA)
目录 一、MD5加密二、RSA加解密(公加私解,私加公解)三、RSA私钥加密四、RSA私钥加密PKCS1Padding模式 一、MD5加密 密文形式:5eb63bbbe01eeed093cb22bb8f5acdc3 import java.math.BigInteger; import java.security.MessageDigest; import java.security…...
C语言程序设计考试掌握这些题妥妥拿绩点(写给即将C语言考试的小猿猴们)
目录 开篇说两句1. 水仙花数题目描述分析代码示例 2. 斐波那契数列题目描述分析代码示例 3. 猴子吃桃问题题目描述分析代码示例 4. 物体自由落地题目描述分析代码示例 5. 矩阵对角线元素之和题目描述分析代码示例 6. 求素数题目描述分析代码示例 7. 最大公约数和最小公倍数题目…...
编译ZLMediaKit(win10+msvc2019_x64)
前言 因工作需要,需要ZLMediaKit,为方便抓包分析,最好在windows系统上测试,但使用自己编译的第三方库一直出问题,无法编译通过。本文档记录下win10上的编译过程,供有需要的小伙伴使用 一、需要安装的软件…...
JS-基础语法(一)
JavaScript简单介绍 变量 常量 数据类型 类型转换 案例 1.JavaScript简单介绍 JavaScript 是什么? 是一种运行在客户端(浏览器)的编程语言,可以实现人机交互效果。 JS的作用 JavaScript的组成 JSECMAScript( 基础语法 )…...
18款Visual Studio实用插件(更新)
前言 俗话说的好工欲善其事必先利其器,安装一些Visual Studio实用插件对自己日常的开发和工作效率能够大大的提升,避免996从选一款好的IDE实用插件开始。以下是我认为比较实用的Visual Studio插件希望对大家有用,大家有更好的插件推荐可在文…...
三、java线性表(顺序表、链表、栈、队列)
java线性表 三、线性表1.1 顺序表1.2 链表1.2.1 单向链表(Singly Linked List)1.2.2 双向链表(Doubly Linked List) 1.3 LinkedList VS ArrayList1.3.7 使用 LinkedList 的场景 1.4 栈1.5 队列 三、线性表 线性表是一种经典的数据…...
找人做网站做的很烂/com天堂网
纯 CSS3 实现 loading... 动画加载效果,需要一张透明的 png 图片,代码如下:HTML:CSS:/*动画效果*/#loading-img {display: block;margin: 20px auto;width: 30%;/*animation (动画) :绑定选择器, 4s完成动画 linear(匀…...
东莞做商城网站建设哪家好/百度高级搜索页面
2019独角兽企业重金招聘Python工程师标准>>> Android面试题目及其答案 1、 Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实…...
sea wordpress/手机端怎么刷排名
项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的疫情核酸检查预约系统,整个网站项目使用了B/S架构,基于java的springboot框架下开发;;通过后台设置医院信息、录入医院科室信息、录入医生信息、设…...
dw网站引导页怎么做/网站是否含有seo收录功能
先说结论:在feign接口调用时使用表单形式(RequestParam)传date类型会发生时间精度错乱,在8时区会多14个小时。使用json格式(RequestBody)传date类型不会发生这种情况。表单形式我的解决办法是:在对外暴露的feign接口中…...
如何注册网站免费的/google下载安卓版下载
Android电话系统之概述篇 首先抛开Android的一切概念来研究一下电话系统的最基本的描述。我们的手机首先用来打电话的,随后是需要一个电话本,随后是PIM,随后是网络应用,随后是云计算,随后是想我们的手机无所不能&#…...
如何做公众号小说网站赚钱/俄罗斯引擎搜索
CNC加工中心的高精高效,安全是前提。安全生产离不开优秀的车间管理,设备的精良保养以及丰富的加工经验。 1.预先开机 正式加工前可以进行开机空转,让CNC加工中心主轴空转几分钟,可以让主轴的轴承充分润滑,减少加工误…...