目录

计算机网络-网络协议知识梳理

在学习完计算机网络之后,对一些常用网络协议做的梳理总结。

基本常用的网络协议-简介

  1. 传输控制协议(TCP) :TCP是一种面向连接的协议,用于在网络中可靠地传输数据。它通过提供流控制、拥塞控制、差错恢复和可靠性保证等机制来确保数据的完整性和可靠性。TCP广泛用于传输网页、电子邮件、文件传输等应用。
  2. 网际协议(IP) :IP是一种网络层协议,负责在互联网中将数据包从源地址传输到目的地址。它定义了数据包的格式和路由选择算法。IP地址用于唯一标识网络中的设备。IP协议是互联网的核心协议,使得不同网络之间的通信成为可能。
  3. 超文本传输协议(HTTP) :HTTP是一种应用层协议,用于在客户端和服务器之间传输超文本(如网页)和其他资源。它是Web通信的基础,通过使用URL作为资源定位符来请求和传输数据。HTTP协议通常使用TCP作为传输协议。
  4. 域名系统(DNS) :DNS是一种用于将域名解析为IP地址的分布式数据库系统。当你在浏览器中输入一个域名时,DNS将负责将其解析为相应的IP地址,使得你可以访问该域名对应的服务器。
  5. 动态主机配置协议(DHCP) :DHCP是一种用于自动分配IP地址和其他网络配置信息的协议。它允许计算机在加入网络时自动获取所需的网络配置,而无需手动配置。DHCP协议使得网络的管理更加灵活和高效。
  6. 文件传输协议(FTP) :FTP是一种用于在网络中传输文件的协议。它允许用户通过FTP客户端连接到FTP服务器,并进行文件上传、下载、删除等操作。FTP可以通过TCP协议进行可靠的数据传输。
  7. 简单邮件传输协议(SMTP) :SMTP是一种用于在网络中发送和接收电子邮件的协议。它定义了电子邮件的传输规则和信封格式。SMTP客户端用于发送电子邮件,而SMTP服务器用于接收和转发电子邮件。
  8. 网际组管理协议(IGMP) :IGMP是一种用于在多播网络中管理组播组的协议。它允许主机加入和离开多播组,并通过路由器进行组播数据的传输。IGMP在视频流、音频流和在线游戏等应用中发挥重要作用。

基本的常用的网络协议-详细

  1. 传输控制协议(TCP)
  • 作用层次:传输层(第四层)
  • 单向/双向:TCP是一种双向协议,允许双方在连接中进行双向的数据传输。
  • 长连接/点对点:TCP使用长连接,即在通信双方建立连接后,可以持续地进行数据传输。
  • 区别:TCP提供可靠的、面向连接的通信。它通过序列号、确认应答、重传机制等保证数据的可靠性和完整性。TCP还提供流控制和拥塞控制机制,以确保网络中的可靠性和效率。
  1. 网际协议(IP)
  • 作用层次:网络层(第三层)
  • 单向/双向:IP是一种无连接协议,只负责将数据包从源地址传输到目的地址,是一种单向协议。
  • 长连接/点对点:IP本身并不保持连接状态,因此没有长连接或点对点的概念。
  • 区别:IP协议是互联网的核心协议,负责数据包的路由选择和传输。它使用IP地址唯一标识网络中的设备,并根据路由表将数据包从源地址传输到目的地址。IP协议提供了无连接、不可靠的传输服务。
  1. 超文本传输协议(HTTP)
  • 作用层次:应用层(第七层)
  • 单向/双向:HTTP是一种双向协议,客户端向服务器发送请求,服务器返回响应。
  • 长连接/点对点:HTTP既可以使用长连接也可以使用短连接。长连接允许在单个连接上发送多个请求和响应,而短连接在每个请求-响应周期后关闭连接。
  • 区别:HTTP用于在客户端和服务器之间传输超文本和其他资源。它使用URL作为资源定位符,通过请求方法(如GET、POST)向服务器发送请求,并接收服务器返回的响应。
  1. 域名系统(DNS)
  • 作用层次:应用层(第七层)
  • 单向/双向:DNS是一种双向协议,客户端向DNS服务器发送查询请求,服务器返回响应。
  • 长连接/点对点:DNS通常使用短连接,即每次查询都会建立一个新的连接。
  • 区别:DNS用于将域名解析为IP地址,以实现设备之间的通信。它使用分布式数据库系统,客户端向DNS服务器发送域名查询请求,并接收到对应的IP地址响应。
  1. 动态主机配置协议(DHCP)
  • 作用层次:应用层(第七层)
  • 单向/双向:DHCP是一种双向协议,客户端向DHCP服务器发送请求,服务器提供响应和配置信息。
  • 长连接/点对点:DHCP使用短连接,在完成IP地址分配后,连接将被释放。
  • 区别:DHCP允许设备在加入网络时自动获取IP地址和其他网络配置信息。客户端通过DHCP发现、请求、确认等阶段与服务器进行交互,最终获取网络配置。
  1. 用户数据报协议(UDP)
  • 作用层次:传输层(第四层)。
  • 单向/双向:UDP是一种无连接协议,可以进行单向或双向通信。但是,UDP本身不提供确认和重传机制,因此数据传输不可靠。
  • 长连接/点对点:UDP是无连接的,每个数据报都是一个独立的信息单元。每个数据报都具有自己的源地址和目的地址。
  • 区别:UDP是一种简单的传输协议,它提供了一种无需建立连接的快速数据传输方式。它将数据分割为数据报,并通过IP协议进行传输,但不提供可靠性保证。UDP通常用于实时应用,如音频、视频、实时游戏等,其中传输速度和即时性比数据完整性更重要。
  1. 文件传输协议(FTP)
  • 作用层次:应用层(第七层)。
  • 单向/双向:FTP是一种双向协议,客户端与服务器之间可以进行双向数据传输。
  • 长连接/点对点:FTP使用长连接,客户端在建立连接后可以持续进行多个文件传输操作。
  • 区别:FTP是一种专门用于文件传输的协议。它提供了一套命令和响应规范,允许客户端连接到FTP服务器并进行文件上传、下载、删除等操作。FTP可以使用TCP作为传输协议,以确保可靠的数据传输。
  1. 简单邮件传输协议(SMTP)
  • 作用层次:应用层(第七层)。
  • 单向/双向:SMTP是一种双向协议,用于在客户端和邮件服务器之间进行双向通信。
  • 长连接/点对点:SMTP使用短连接,在每次邮件发送后连接会关闭。
  • 区别:SMTP是用于发送和接收电子邮件的协议。它定义了电子邮件的传输规则和信封格式。SMTP客户端用于发送电子邮件,而SMTP服务器用于接收和转发电子邮件。SMTP协议通常使用TCP作为传输协议,以确保可靠的邮件传输。

TCP与UDP的区别

TCP(传输控制协议)

  • TCP是面向连接的协议,它在通信双方之间建立一个可靠的、有序的、全双工的连接。
  • TCP提供数据传输的可靠性,通过序号、确认和重传等机制来确保数据的可靠性和完整性。
  • TCP保证数据按顺序到达目标,如果有数据丢失或损坏,TCP会重新传输丢失的数据。
  • TCP连接的建立使用三次握手,连接的关闭使用四次挥手。
  • TCP适用于对数据可靠性要求高的应用场景,如文件传输、Web浏览、电子邮件等。

UDP(用户数据报协议)

  • UDP是无连接的协议,每个数据报都是独立的,不与之前或之后的数据报建立连接。
  • UDP不提供数据传输的可靠性,也不保证数据的按序到达目标。它将数据报发送到目标地址,但无法确保它是否到达或是否按顺序到达。
  • UDP是一种轻量级的协议,没有TCP的连接建立和维护的开销,以及重传和拥塞控制机制,因此传输效率较高。
  • UDP适用于实时性要求较高的应用场景,如音频和视频流媒体、实时游戏等,因为它对数据传输的实时性更敏感,可以更快地传递数据。

举例说明:

  • TCP:当你浏览网页时,你的浏览器使用TCP与Web服务器建立连接,然后请求和接收网页的数据。TCP确保数据可靠地传输,并按正确的顺序到达,以确保你能够正确地浏览网页的内容。
  • UDP:在实时游戏中,UDP常用于传输游戏数据。例如,在多人在线游戏中,玩家的位置和动作需要实时传输给服务器和其他玩家。UDP的低延迟和快速传输特性使得玩家能够快速响应游戏动作。

与TCP相比,UDP具有一些明显的区别:

  • 连接性:TCP是面向连接的协议,它在通信双方建立连接并维护连接状态。UDP则是无连接的,每个数据报都是独立的。
  • 可靠性:TCP提供可靠的数据传输,通过确认和重传机制来确保数据的完整性和可靠性。UDP不提供这些机制,因此数据传输不可靠。
  • 传输效率:由于TCP提供了可靠性和拥塞控制等机制,它在传输效率上会有一定的开销。相比之下,UDP不提供这些机制,因此传输效率更高。
  • 数据包边界:TCP是一个数据流协议,没有数据包边界的概念。UDP通过将数据分割为数据报,每个数据报都具有自己的边界。

FTP与SMTP

  • FTP用于文件传输,允许客户端与服务器进行双向数据传输。它使用长连接来支持多个文件传输操作。
  • SMTP用于电子邮件传输,支持发送和接收电子邮件。它也是一个双向协议,使用短连接来发送邮件。

如何理解长连接、短链接?单向以及双向通信?

  • 理解长连接和短连接、单向和双向通信的概念可以从以下角度入手:
  1. 连接的持续性
  • 长连接:长连接是指在通信双方之间建立连接后,保持连接的状态进行持续的数据传输。在长连接中,通信双方可以进行多次的数据交换而无需重新建立连接。
  • 短连接:短连接是指每次通信都需要建立一个新的连接,并在通信结束后关闭连接。每次通信都是独立的,不保持连接的状态。
  1. 通信的双向性
  • 单向通信:在单向通信中,数据的传输只发生在一个方向上,从发送方到接收方。接收方不会向发送方发送任何数据。
  • 双向通信:双向通信允许数据在通信双方之间进行双向传输。发送方和接收方都可以发送和接收数据。

举例来说,让我们以网络通信中的TCP协议为例来说明这些概念的应用:

  • 长连接(双向):当两台计算机通过TCP建立连接后,它们可以在连接的生命周期内进行双向的数据传输。数据可以在双方之间交换多次,而无需每次都重新建立连接。这种长连接常见于像网页浏览、实时通信应用等场景,例如通过Web浏览器访问网站时,浏览器与服务器之间可以建立一个长连接来传输多个资源。
  • 短连接(单向):在某些情况下,通信双方可能只需进行一次或少数几次数据交换,而无需保持连接的状态。例如,当客户端通过HTTP向服务器请求某个网页时,客户端会与服务器建立短连接,发送请求并接收响应后,连接会关闭。下次再请求时会再次建立新的连接。

什么是有状态和无状态?

  • 有状态和无状态是指网络通信协议或应用程序在交互过程中是否保持上下文或状态信息的特性。
  1. 有状态(Stateful)
  • 有状态是指在通信过程中保持一定的状态信息或上下文。
  • 当通信双方建立连接后,会在双方之间维护一些状态信息,这些信息可能包括会话标识、认证状态、会话数据等。
  • 在后续的通信中,这些状态信息会影响协议或应用程序的行为和处理过程。
  • 有状态的协议或应用程序能够跟踪和管理多个请求之间的关系,提供更高级的功能和服务。
  • 例如,HTTP协议本身是无状态的,但通过使用HTTP会话机制(如Cookie、Session),可以在多个请求之间保持状态信息。
  1. 无状态(Stateless)
  • 无状态是指在通信过程中不保持任何状态信息或上下文。
  • 每个请求都是独立的,服务器不会记住之前的请求或客户端的状态。
  • 每个请求都需要提供所有必要的信息来完成处理,不依赖之前的请求或状态。
  • 无状态的协议或应用程序更加简单和轻量,每个请求都是相互独立的。
  • 例如,DNS协议就是无状态的,每个DNS查询都是独立的,不依赖之前的查询结果或状态信息。

什么是TCP的三次握手?为什么是三次?

  • 当建立和终止TCP连接时,TCP协议使用三次握手(Three-Way Handshake)和四次挥手(Four-Way Handshake)的过程。

TCP三次握手(Three-Way Handshake)

  1. 第一次握手(SYN):客户端向服务器发送一个SYN(同步)报文,指示客户端请求建立连接。该报文包含一个初始序列号(ISN)作为数据的起始点。
  2. 第二次握手(SYN + ACK):服务器接收到客户端的SYN报文后,会发送一个带有SYN/ACK标志的报文作为响应。该报文表示服务器已经接收到请求,并同意建立连接。同时,服务器也会为连接分配自己的初始序列号。
  3. 第三次握手(ACK):客户端收到服务器的SYN/ACK报文后,会发送一个带有ACK标志的报文作为确认。这样,客户端和服务器的连接就建立起来了。连接建立后,双方可以开始传输数据。

三次握手的原理和原因:

  • 第一次握手确保客户端可以向服务器发送请求,并通知服务器客户端的初始序列号。
  • 第二次握手确保服务器能够接收到客户端的请求,并同意建立连接。服务器也通知客户端服务器的初始序列号。
  • 第三次握手是为了确认服务器收到了客户端的响应,确保连接的双向性。

为什么不是2次握手:

  • 两次握手无法解决以下情况:客户端向服务器发送连接请求,但该请求在网络中延迟,并最终在一段时间后到达服务器。如果只有两次握手,服务器会以为客户端要建立连接,但实际上客户端并没有发送连接请求。这样会导致服务器浪费资源和时间。
  • 通过引入第三次握手,服务器可以确认客户端确实有意向建立连接,从而避免错误的连接请求。

总结: TCP三次握手和四次挥手是为了确保可靠的连接建立和关闭。三次握手确保连接建立时的双向通信,而四次挥手保证连接的正确关闭。这些过程和步骤是为了解决网络延迟和确保数据完整性的问题,以提供可靠的数据传输。

什么是TCP的四次挥手?

TCP四次挥手(Four-Way Handshake)

  1. 第一次挥手(FIN):当一个端点(通常是客户端)希望关闭连接时,它发送一个带有FIN(结束)标志的报文给另一个端点(通常是服务器)。这表示该端点已经完成了数据的发送,并且准备关闭发送端的连接。
  2. 第二次挥手(ACK):接收到带有FIN标志的报文后,另一个端点(通常是服务器)发送一个带有ACK(确认)标志的报文给发送端。这个报文表示它已经收到了关闭请求,并确认发送端可以开始关闭连接。
  3. 第三次挥手(FIN):在接收到关闭请求并发送确认后,另一个端点(通常是服务器)也会开始关闭连接。它发送一个带有FIN标志的报文给发送端,表示该端点也完成了数据的发送。
  4. 第四次挥手(ACK):接收到带有FIN标志的报文后,发送端(通常是客户端)发送一个带有ACK标志的报文给另一个端点。这个报文确认接收到了关闭请求,并表示双方的连接已经成功关闭。

四次挥手的原理和原因:

  • 第一次挥手:发送端发送FIN报文给接收端,表示发送端已经完成了数据的发送,并希望关闭连接。
  • 第二次挥手:接收端收到FIN报文后,发送一个ACK报文给发送端,表示已经收到关闭请求,并确认发送端可以开始关闭连接。
  • 第三次挥手:接收端发送FIN报文给发送端,表示接收端也完成了数据的发送,并准备关闭连接。
  • 第四次挥手:发送端收到FIN报文后,发送一个ACK报文给接收端,表示接收到关闭请求,并确认双方的连接已经成功关闭。

为什么需要四次挥手:

  • 因为TCP是全双工的协议,允许数据在两个方向上同时传输。因此,关闭连接需要双方都完成数据的传输和关闭操作。
  • 第三次挥手是为了确保接收端可以完成数据的传输并准备关闭连接,同时发送一个FIN报文。
  • 第四次挥手是为了发送端确认接收到关闭请求并进行最后的确认,同时发送一个ACK报文。

为什么不是三次挥手:

  • TCP连接的终止需要一个额外的步骤来保证数据完整性和可靠性。因此,四次挥手是为了正确关闭连接而设计的。
  • 第三次挥手(FIN)是为了客户端通知服务器已经准备好关闭连接,并停止发送数据。
  • 第四次挥手(ACK)是为了服务器确认客户端的关闭请求,并通知客户端自己也准备关闭连接。
  • 这样,双方都能确认彼此的关闭意图,并进行必要的数据传输和状态清理。

通过四次挥手,双方可以彼此确认关闭连接的意图,并完成最后的数据传输和状态清理,确保连接的正确关闭。

总结: TCP四次挥手是为了可靠地关闭连接而设计的。它确保双方在关闭连接时能够完成数据的传输和状态的清理,以提供可靠的连接关闭过程。

什么是SYN、ACK、FIN?

SYN报文(同步报文)

  • SYN报文是由发起连接的一方(通常是客户端)发送的。
  • 它用于建立连接,表示客户端请求建立连接,并在报文的TCP头部中携带一个初始序列号(ISN)。
  • SYN报文的主要作用是告知对方自己希望建立连接,并通过ISN提供一个起始点,以便在数据传输中对字节进行编号。

ACK报文(确认报文)

  • ACK报文可以单独存在,也可以与其他标志(如SYN、FIN)组合使用。
  • 它用于确认接收到的数据,表明对方已经正确接收到了之前的数据,并可以继续发送下一段数据。
  • 在三次握手过程中的第二次握手中,ACK报文用于确认接收到了对方发送的SYN报文,并表示同意建立连接。
  • ACK报文在建立连接后的数据传输中也起着重要的作用,用于确认接收到的数据,并保持双方的数据传输同步。

FIN报文(结束报文)

  • FIN报文是由一方(通常是发起关闭的一方)发送的。
  • 它用于关闭连接,表示发送方不再发送数据,并请求关闭连接。
  • FIN报文的发送方通常已经完成了数据的发送,并且希望关闭连接。

总结: SYN报文用于请求建立连接,并携带初始序列号(ISN),而ACK报文用于确认接收到的数据,保持数据传输的同步和可靠性。它们在TCP连接的建立过程中起着关键的作用,确保双方能够正确建立连接并进行数据传输。FIN报文用于关闭TCP连接,发送方发送FIN报文表示完成了数据的发送并请求关闭连接,接收方发送FIN报文表示自己也完成了数据的发送。通过FIN报文的交换,双方能够协调关闭连接的过程,并确保连接的正确关闭。

HTTP与HTTPS

HTTP(Hypertext Transfer Protocol)和HTTPS(Hypertext Transfer Protocol Secure)是两种常用的协议。它们在安全性和数据传输方面有以下区别:

HTTP(Hypertext Transfer Protocol)

  • HTTP是一种无状态的协议,它用于在Web服务器和客户端之间传输超文本内容。
  • HTTP在传输数据时使用明文(未加密),因此数据可以被窃听和篡改。
  • HTTP使用TCP作为传输协议,使用默认端口号80。
  • HTTP请求和响应的内容通常是明文的,包括URL、请求头、响应头和消息体等。
  • HTTP不提供数据的加密和身份验证,因此对于涉及敏感信息的网站,如登录、支付等,存在安全风险。

HTTPS(Hypertext Transfer Protocol Secure)

  • HTTPS是基于HTTP的安全协议,通过使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议进行加密和身份验证来保护数据传输的安全性。
  • HTTPS使用TCP作为传输协议,使用默认端口号443。
  • HTTPS通过使用公钥加密和私钥解密的方式来加密通信内容,确保数据在传输过程中的机密性。
  • HTTPS使用数字证书来验证服务器的身份,并确保与服务器建立的连接是可信的。
  • HTTPS可以有效地防止数据被窃听和篡改,提供了更高的安全性。

区别总结:

  • HTTP是无状态的协议,数据传输不加密,容易被窃听和篡改。HTTPS是基于HTTP的安全协议,通过加密和身份验证保护数据传输的安全性。
  • HTTP使用默认端口号80,HTTPS使用默认端口号443。
  • HTTP传输的数据是明文的,而HTTPS传输的数据经过加密。
  • HTTP不提供身份验证机制,HTTPS使用数字证书来验证服务器的身份。
  • HTTPS在安全性方面比HTTP更可靠,适用于对数据传输安全性要求较高的场景,如登录、支付等涉及敏感信息的网站。