TCP和TLS

822 阅读9分钟

TCP(传输控制协议)和TLS(传输层安全协议)通常会同时使用。=>https请求

一、TCP的作用和特点

  1. 作用

    1. TCP主要负责在网络中可靠地传输数据。它通过建立连接、分割数据成适当大小的数据包、编号、确认、重传等机制,确保数据能够从源端完整无误地传送到目的端。例如,当你通过浏览器访问一个网页时,TCP会将网页数据分割成一个个数据包,然后依次发送到你的设备上。
    2. TCP提供了面向连接的、可靠的字节流服务。面向连接意味着在数据传输之前,通信双方需要先建立一个连接,就像打电话前要先拨通号码建立通话线路一样。可靠的字节流服务保证了数据传输的顺序和完整性。
  2. 工作原理示例

    1. 假设主机A要向主机B发送一个文件。首先,TCP在主机A和主机B之间建立一个连接,这个连接通过三次握手完成
    2. 然后,主机A将文件数据分割成多个数据包发送,每个数据包都带有序列号。主机B收到数据包后会发送确认信息。如果主机A在规定时间内没有收到确认信息,就会重新发送数据包。当所有数据发送完毕后,通过四次挥手来关闭连接。

三次握手

  1. 主机A发送一个带有同步序列号(SYN) 的数据包给主机B
  2. 主机B收到后回复一个带有确认号(ACK)自己的同步序列号(SYN) 的数据包给主机A
  3. 主机A再发送一个带有确认号(ACK) 的数据包给主机B,此时连接建立。

四次挥手

  1. 主动方(client)会发送一个 FIN 报文 到被动方(server)请求关闭链接(报文中会指定一个序列号)。此时主动方(client)处于 FIN_WAIT1 状态

  2. 被动方(server)收到 FIN 之后,会发送 ACK 报文,且把主动方(client)的序列号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时被动方(server)处于 CLOSE_WAIT 状态。

    server告诉client请求已经收到了,但是还没准备好,请继续等待停止的消息,client 收到 server的确认后,进入 FIN_WAIT2(终止等待 2) 状态,等待被动方(server)发出的连接释放报文段。

  3. 当被动方(Server) 确定数据已发送完成,发出连接释放报文段(FIN=1,ACK=1,序号 seq=w,确认号 ack=u+1),告诉主动方(Client):服务器这边数据发完了,准备好关闭连接了。被动方(server)进入 LAST_ACK(最后确认)状态,等待主动方(client)的确认。

  4. 第四次挥手:Client端收到FIN报文后,就知道可以关闭连接。发送ACK后进入TIME_WAIT状态, Server端收到ACK后,就知道可以断开连接了。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,最后,Client端也可以关闭连接了至此,TCP连接就已经完全关闭了

  • 第一次挥手(FIN-WAIT-1状态) :假设客户端想要关闭连接,客户端会向服务器发送一个带有FIN(结束)标志位的TCP报文段。这个报文段的序列号等于客户端发送字节流的最后一个字节的序号加1。发送这个FIN报文段后,客户端进入FIN-WAIT-1状态,表示等待服务器的确认。例如,在网页浏览结束后,客户端发送FIN报文段来告诉服务器它不再发送数据了。

Client 发 FIN -> Server 后,client 进入 FIN-WAIT-1状态

  • 第二次挥手(CLOSE-WAIT状态) :服务器收到客户端的FIN报文段后,会发送一个ACK(确认)报文段给客户端。这个ACK报文段的确认号等于客户端发送的FIN报文段的序列号加1。服务器收到客户端的FIN报文段,意味着客户端不再发送数据,但服务器可能还有数据要发送给客户端,所以此时服务器进入CLOSE-WAIT状态,继续发送剩余的数据。

Server收到FIN后返回ACK确认包,进入 CLOSE-WAIT,Client 收到 ACK后 进入FIN-WAIT-2

  • 第三次挥手(LAST-ACK状态) :当服务器发送完所有剩余的数据后,服务器会向客户端发送一个带有FIN标志位的报文段,告诉客户端自己也不再发送数据了。发送完这个FIN报文段后,服务器进入LAST - ACK状态,等待客户端的确认。

Server发完所有数据,发送 FIN 到 Client 后进入 LAST-ACK

  • 第四次挥手(TIME-WAIT状态) :客户端收到服务器的FIN报文段后,会发送一个ACK报文段给服务器进行确认。这个ACK报文段的确认号等于服务器发送的FIN报文段的序列号加1。发送完这个ACK报文段后,客户端进入TIME - WAIT状态。TIME - WAIT状态会持续2MSL(最长报文段寿命)的时间,这是为了确保服务器能收到客户端的最后一个ACK报文段。如果服务器没有收到这个ACK报文段,在超时后会重新发送FIN报文段。经过2MSL时间后,客户端关闭连接,整个TCP连接终止过程完成。

Client 收到 FIN 后 发送 ACK,进入 TIME-WAIT持续2MSL后无信息传输则关闭client。

Server 收到 ACK 后 关闭 Server, 2MSL后 Client 关闭,接收TCP连接

二、TLS的作用和特点

  1. 作用

    1. TLS的主要目的是为网络通信提供安全保障。它通过加密和认证机制,保护数据的机密性、完整性和真实性。在互联网通信中,数据可能会经过多个中间节点,如果不进行加密,数据很容易被窃取或篡改。TLS可以防止这种情况的发生。
    2. 例如,当你在网上进行银行转账时,TLS会对传输的数据(如账户信息、转账金额等)进行加密,使得只有接收方(银行服务器)能够解密并读取这些数据。同时,TLS还可以验证通信双方的身份,防止中间人攻击。
  2. 工作原理示例

    1. TLS协议的工作过程一般包括握手阶段和数据传输阶段。在握手阶段,客户端和服务器首先交换一些信息,以协商加密算法、密钥等。例如,客户端会发送一个“ClientHello”消息,包含它支持的加密算法列表等信息。服务器收到后,选择一个合适的加密算法,并发送一个“ServerHello”消息给客户端。

    2. 然后,双方会通过证书交换等方式进行身份验证。服务器会将自己的数字证书发送给客户端,客户端可以通过验证证书来确认服务器的身份。之后,双方会生成共享密钥,用于后续数据传输阶段的加密和解密。在数据传输阶段,数据会使用协商好的加密算法和共享密钥进行加密,然后通过TCP连接进行传输。

三、为什么TCP和TLS会同时使用

  1. 功能互补
  • TCP提供了可靠的数据传输机制,但它不提供安全功能。TLS提供了安全保障,但它本身并不负责数据的传输。因此,将两者结合可以在保证数据可靠传输的基础上,对传输的数据进行安全保护。例如,在HTTPS(基于TLS的HTTP)通信中,TCP负责将加密后的HTTP数据(在TLS的保护下)从客户端传输到服务器或反之。
  1. 实际应用场景需求
  • 在大多数网络应用场景中,如网页浏览(HTTPS)、电子邮件(使用TLS的SMTP、POP3、IMAP等)、文件传输(FTPS)等,都需要同时满足数据可靠传输和安全的要求。以网页浏览为例,用户希望能够完整无误地接收网页内容(TCP的功能),同时又希望自己的隐私信息(如登录密码、浏览历史等)不被泄露(TLS的功能)。所以,在这些应用中,TCP和TLS是同时使用的。

四、TCP和TLS哪个先开始建立

在网络通信中,一般是TCP先开始建立 ,其具体过程如下:

  1. 客户端发送SYN包:客户端向服务器发送一个带有SYN(同步)标志位的TCP报文,以及客户端的初始序列号,请求建立连接。

  2. 服务器响应SYN+ACK包:服务器接收到客户端的SYN报文后,发送一个带有SYN和ACK(确认)标志位的报文,其中ACK用于确认客户端的请求,并同时向客户端发起自己的序列号,表示接受连接请求。

  3. 客户端发送ACK包:客户端接收到服务器的确认报文后,发送一个带有ACK标志位的报文,用于确认服务器的接受,至此,TCP连接建立完成。

完成TCP连接建立后,才会开始TLS握手过程,具体如下:

  1. 客户端发送Client Hello报文:客户端向服务器发送Client Hello消息,包含支持的TLS版本列表、随机数、支持的加密算法列表及可选的扩展信息等。
  2. 服务器响应Server Hello等报文:服务器从客户端提供的信息中选择合适的TLS版本、加密算法和随机数,并向客户端发送Server Hello消息,还会将其数字证书发送给客户端,可选地发送Server Key Exchange消息,最后发送Server Hello Done消息指示握手消息结束。
  3. 客户端发送Client Key Exchange报文:如果服务器要求客户端提供预主秘密的公钥,客户端会发送Key Exchange消息,其中包含预主秘密的公钥,并使用服务器的公钥加密预主秘密,发送Finished消息。
  4. 服务器发送Server Finished报文:服务器接收到客户端的Finished消息后,用协商的密钥加密一条Finished消息,并发送给客户端,至此,TLS握手过程完成。