面试专栏:TCP和TLS连接专栏

一,TCP连接

三次握手(Three-Way Handshake)建立连接:

  1. 第一次握手(SYN): 客户端向服务器发送一个TCP报文,其中包含SYN(同步)标志位,以及客户端的初始序列号。这表示客户端请求建立连接,并希望开始通信。

  2. 第二次握手(SYN + ACK): 服务器接收到客户端的SYN报文后,会发送一个带有SYN和ACK(确认)标志位的报文,其中ACK用于确认客户端的请求,并同时向客户端发起自己的序列号。这表示服务器接受了连接请求,并同意建立连接。

  3. 第三次握手(ACK): 客户端接收到服务器的确认报文后,会发送一个带有ACK标志位的报文,用于确认服务器的接受。至此,连接建立完成,双方可以开始进行数据传输。

这种三次握手过程的目的是确保双方都愿意建立连接,并且双方都知道对方已经同意建立连接。这样可以防止不必要的连接建立,同时确保双方的状态同步

四次挥手(Four-Way Handshake)断开连接:

  1. 第一次挥手(FIN): 当某一方决定要断开连接时,它会发送一个带有FIN(结束)标志位的报文,表示它不再发送数据,但仍然愿意接收数据。

  2. 第二次挥手(ACK): 接收到FIN的一方会发送一个带有ACK标志位的报文,用于确认接收到FIN报文。

  3. 第三次挥手(FIN): 当另一方也准备断开连接时,它会发送一个带有FIN标志位的报文,表示它不再发送数据。

  4. 第四次挥手(ACK): 接收到第三次挥手的一方会发送一个带有ACK标志位的报文,表示确认接收到第三次挥手的报文。此时连接完全关闭。

四次挥手的原因在于,TCP连接是全双工的,双方都可以发送和接收数据。因此,每一方在断开连接时需要单独发送FIN和接收ACK,以确保双方都知道连接已经关闭,同时允许双方在断开连接前完成尚未发送的数据传输

总之,三次握手和四次挥手是为了确保连接的可靠建立和可靠关闭,以保障数据的可靠传输。握手和挥手过程中的标志位和确认消息是为了确保双方都能够理解连接状态的变化。

二,TLS连接

TLS(Transport Layer Security)握手过程是建立安全通信连接的关键步骤,用于保护数据在网络上的传输。TLS握手过程包括以下步骤:

  1. 客户端Hello(ClientHello): 客户端首先向服务器发送一个ClientHello消息,其中包含以下信息:

    • 支持的TLS版本列表,按照首选顺序排列。
    • 随机数,用于生成后续的密钥。
    • 支持的加密算法列表,包括加密算法、哈希算法等。
    • 可选的扩展信息,如SNI(Server Name Indication)用于指定服务器的域名。
  2. 服务器Hello(ServerHello): 服务器从客户端提供的信息中选择一个TLS版本、一个加密算法和一个随机数,并向客户端发送一个ServerHello消息,其中包含以下信息:

    • 选择的TLS版本。
    • 服务器生成的随机数。
    • 选择的加密算法。
    • 可选的扩展信息,例如SNI。
  3. 服务器证书(Server Certificate): 服务器会将其数字证书发送给客户端,证书包含了服务器的公钥。客户端使用服务器的公钥来验证服务器的身份,并为后续的通信建立加密连接。

  4. 可选的服务器Key Exchange(可选项): 如果服务器要求客户端提供一个预主秘密(premaster secret)的公钥,它会要求客户端发送一个Key Exchange消息。

  5. 服务器Hello Done(ServerHelloDone): 服务器发送ServerHelloDone消息来指示握手消息的结束。

  6. 客户端Key Exchange(可选项): 如果服务器要求客户端提供一个预主秘密的公钥,客户端会发送Key Exchange消息,其中包含预主秘密的公钥。

  7. 客户端Finished(ClientFinished): 客户端使用服务器的公钥来加密预主秘密,并发送Finished消息,证明它已经完成密钥交换,并且后续通信将使用协商的加密算法进行保护。

  8. 服务器Finished(ServerFinished): 服务器接收到客户端的Finished消息后,也会用协商的密钥加密一条Finished消息,并发送给客户端,证明它也已经完成密钥交换。

至此,TLS握手过程完成,客户端和服务器都拥有了相同的预主秘密,这将用于生成会话密钥,以后的通信都会使用这个密钥进行加密和解密。握手过程的目标是确保通信双方的身份验证、协商加密参数,并建立安全的通信通道。

  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
TLS(Transport Layer Security)是一种用于保护网络通信的安全协议。它可以在应用层和传输层之间提供加密和认证功能。下面是TLS建立TCP连接的过程: 1. 客户端发起握手:客户端向服务器发送一个ClientHello消息,其中包含支持的TLS版本、支持的加密算法和其他握手参数。 2. 服务器回应握手:服务器收到ClientHello消息后,会向客户端发送一个ServerHello消息作为回应。该消息中包含服务器选择的TLS版本、加密算法以及其他握手参数。 3. 服务器发送证书:服务器在发送ServerHello消息后,会将自己的数字证书发送给客户端。该证书包含服务器的公钥和相关信息,用于客户端验证服务器的身份。 4. 客户端验证证书:客户端接收到服务器发送的证书后,会对证书进行验证。这个过程包括检查证书的有效性、检查证书链是否可信以及验证服务器的身份等。 5. 客户端生成密钥:如果服务器的证书验证成功,客户端会生成一个用于加密通信的随机数,称为"Pre-master secret",并使用服务器的公钥进行加密后发送给服务器。 6. 服务器解密密钥:服务器接收到客户端发送的加密的"Pre-master secret"后,使用自己的私钥进行解密,得到相同的"Pre-master secret"。 7. 双方生成会话密钥:客户端和服务器使用客户端随机数、服务器随机数以及"Pre-master secret"生成一个会话密钥,用于后续的加密和解密通信数据。 8. 完成握手:双方在生成会话密钥后,会相互通知对方握手过程已完成。这个通知是加密的,用来确保握手过程中的安全性。 9. 安全通信:握手完成后,双方使用会话密钥对通信数据进行加密和解密,确保数据的保密性和完整性。 以上是TLS建立TCP连接的过程,通过这个过程,客户端和服务器可以建立一个安全的通信通道,保护数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nathaniel333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值