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

这篇具有很好参考价值的文章主要介绍了面试专栏: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握手过程完成,客户端和服务器都拥有了相同的预主秘密,这将用于生成会话密钥,以后的通信都会使用这个密钥进行加密和解密。握手过程的目标是确保通信双方的身份验证、协商加密参数,并建立安全的通信通道。文章来源地址https://www.toymoban.com/news/detail-773974.html

到了这里,关于面试专栏:TCP和TLS连接专栏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络编程】(TCP流套接字编程 ServerSocket API Socket API 手写TCP版本的回显服务器 TCP中的长短连接)

    TCP提供的API主要是两个类:ServerSocket 和 Socket . TCP不需要一个类来表示\\\"TCP数据报\\\"因为TCP不是以数据报为单位进行传输的.是以字节的方式,流式传输 ServerSocket API ServerSocket 是专门给服务器使用的Socket对象. ServerSocket 构造方法: ServerSocket(int port) 创建一个服务端流套接字Socket,并绑

    2024年02月12日
    浏览(62)
  • TCP/IP 网络编程 第七章:优雅地断开套接字连接

    在前面的章节中,我们都是通过close或者closesocket来断开套接字连接的,但是调用这两个函数导致我们套接字完全断开,套接字将无法接受数据,并且也只能传输完最后余留在缓冲区的数据内容。此时\\\"只关闭一部分数据交换中使用的流\\\"的方法应运而生。 针对优雅断开的shutd

    2024年02月17日
    浏览(56)
  • QT TLS initialization failed问题(已解决) QT基础入门【网络编程】openssl

    qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed 这个问题的出现主要是使用了https请求:HTTPS ≈ HTTP + SSL,即有了加密层的HTTP 所以 Qt  组件库 需要 OpenSSL dll  文件支持HTTPS 1.加入以下两行代码获取QT是否支持opensll以及支持的版本   2. OpenSSL支持情况: false,那说明当

    2024年02月12日
    浏览(31)
  • Socket实例,实现多个客户端连接同一个服务端代码&TCP网络编程 ServerSocket和Socket实现多客户端聊天

    Java socket(套接字)通常也称作\\\"套接字\\\",用于描述ip地址和端口,是一个通信链的句柄。应用程序通常通过\\\"套接字\\\"向网络发出请求或者应答网络请求。 使用socket实现多个客户端和同一客户端通讯;首先客户端连接服务端发送一条消息,服务端接收到消息后进行处理,完成后再

    2024年02月12日
    浏览(76)
  • 网络编程 -- 简易TCP网络程序

      字符串回响程序类似于 echo 指令,客户端向服务器发送消息,服务器在收到消息后会将消息发送给客户端,该程序实现起来比较简单,同时能很好的体现 socket 套接字编程的流程。      这个程序我们已经基于 UDP 协议实现过了,换成 TCP 协议实现时,程序的结构是没有变化

    2024年04月25日
    浏览(44)
  • 网络编程『简易TCP网络程序』

    🔭个人主页: 北 海 🛜所属专栏: Linux学习之旅、神奇的网络世界 💻操作环境: CentOS 7.6 阿里云远程服务器 随着数字时代的来临,TCP网络程序已成为程序员不可或缺的技术领域。本博客将带领读者深入研究,从最基础的字符串回响开始,逐步探索至多进程、多线程服务器

    2024年02月04日
    浏览(49)
  • 网络编程 TCP电子网络词库

     电子词典: 要求: 登录注册功能,不能重复登录,重复注册。用户信息也存储在数据库中。 单词查询功能 历史记录功能,存储单词,意思,以及查询时间,存储在数据库 基于TCP,支持多客户端连接 采用数据库保存用户信息与历史记录 将dict.txt的数据导入到数据库中保存。

    2024年02月17日
    浏览(47)
  • 网络编程——TCP编程

    在C语言中进行TCP编程的一般步骤如下: (1) 包含头文件: 在代码中包含必要的头文件,以便使用TCP编程所需的函数和数据类型。通常情况下,你需要包含 sys/socket.h、netinet/in.h 和 arpa/inet.h。 (2) 创建套接字: 使用 socket() 函数创建一个套接字,该套接字将用于网络通信。

    2024年02月05日
    浏览(43)
  • TCP网络编程

    上期分享了UDP下的网络编程,相信大家对网络通信已经有了自己的一些认知,那么我们本期就进一步来看一下TCP下的网络编程,感受一下TCP和UDP的相同点和不同点,实践证明一切,让我们来看看吧! (1)发送端发送hello world给接收端 (2)接收端进行接收并打印收到的消息

    2024年02月07日
    浏览(30)
  • 【网络编程】TCP

    ✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 ServerSocket API ServerSocket 是创建TCP服务端Socket的API。 ServerSocket:是服务器端使用的 Socket ServerSocket 构造方法: 方法签名 方法说明 ServerSocket(int port) 创建一个服务端流套接字Socket,并绑定到指定端口 ServerSocket 方法: 方法签名 方

    2023年04月17日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包