【阿里前端面试题】客户端和服务器交互,为什么选用tcp协议建立链接?超详细,建议关注收藏

大家好,我是“寻找DX3906”。每天进步一点。日积月累,有朝一日定会厚积薄发

前言       

        在上一篇文章中《【阿里前端面试题】浏览器的加载渲染过程,超详细》中描述:浏览器使用IP地址与服务器建立连接,通常是通过TCP(传输控制协议)。

那为什么要使用TCP协议建立链接呢?

      HTTP是一个基于请求与响应模式的、无状态的、应用层的协议,所以HTTP/1.0和HTTP/1.1都把TCP作为底层的传输协议。(具体细节请详细阅读文中内容)。

面试题主要考察角度:

什么是TCP协议

      TCP是传输控制协议(Transmission Control Protocol)的缩写,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP在因特网协议族(TCP/IP协议族)中担任主要的传输协议,为许多应用程序(如Web浏览器和电子邮件客户端)提供可靠的数据传输服务。

TCP协议有什么特点

      以下是TCP协议的一些主要特点:

  1. 面向连接:TCP在数据传输前需要建立一个连接,通过三次握手过程来建立连接。

  2. 可靠性:TCP提供了数据传输的可靠性保证。它通过序列号、确认应答、超时重传等机制确保数据能够可靠地到达目的地。

  3. 有序传输:TCP通过序列号对数据包进行排序,确保接收方能够按照发送顺序接收数据。

  4. 拥塞控制:TCP具有拥塞控制机制,能够根据网络状况调整数据传输速率,以避免网络拥塞。

  5. 流量控制:TCP通过滑动窗口机制进行流量控制,确保发送方不会因为发送数据过快而导致接收方处理不过来。

  6. 错误检测:TCP使用校验和来检测数据在传输过程中是否出现错误,如果检测到错误,会触发重传机制。

  7. 全双工通信:TCP支持全双工通信,即发送和接收可以同时进行。

  8. 字节流:TCP提供的是字节流服务,它不保留消息边界,应用层需要自己处理消息的边界问题。

  9. 无边界:TCP不保证数据包的边界,即数据包的大小可以是任意的,应用层需要自己定义消息的边界。

  10. IP协议的补充:TCP通常运行在IP协议之上,它依赖IP协议来处理数据包的路由和传输。

  11. 端口号:TCP通过端口号来区分不同的服务或进程,每个TCP连接由一个四元组(源IP地址、源端口号、目的IP地址、目的端口号)唯一标识。

  12. 状态机:TCP内部维护一个状态机,用于管理连接的不同状态,如LISTEN、SYN-SENT、SYN-RECEIVED、ESTABLISHED、FIN-WAIT-1等。

      这些特点使得TCP协议非常适合需要可靠传输的应用,如网页浏览、文件传输、电子邮件等。然而,TCP的这些特性也使得它在某些场景下(如实时通信)不如UDP(用户数据报协议)高效,因为UDP提供了一种更简单、更快速的无连接服务。

TCP协议的建立链接的三次握手

      对于TCP协议的三次握手,你可以想象在一个餐厅里,想要点一份餐。

      

  1. 第一次握手(SYN):发起请求

    • 你(客户端)对服务员(服务器)说:“你好,我要点餐。” 这就像是你发送一个消息告诉服务器你想要开始通信。这个消息被称为SYN(同步序列编号)。
  2. 第二次握手(SYN-ACK):确认请求

    • 服务员听到你的话后,回答说:“好的,我准备好了,你可以点餐了。” 服务员的这个回答相当于服务器发送一个确认消息,告诉客户端它已经准备好接收请求了。这个消息是SYN-ACK(同步确认)。
  3. 第三次握手(ACK):确认连接

    • 你听到服务员的回答后,对服务员说:“好的,我要一份汉堡和可乐。” 这个回答是告诉服务员你已经准备好开始点餐了,并且你已经确认了服务员准备好接收你的点餐。这个消息是ACK(确认)。

        通过这个三次握手的过程,你和服务员之间建立了一个连接,确保了双方都可以发送和接收信息。这就像是TCP协议在网络通信中建立一个可靠的连接,确保数据可以安全、有序地传输。

        在实际的TCP协议中,这个过程涉及到发送和接收特定的数据包,每个数据包都包含一些特定的信息,比如序列号和确认号,来确保数据的同步和确认。这个过程确保了网络连接的可靠性,使得数据传输更加稳定。

TCP协议的释放链接的四次握手

        TCP协议释放连接的四次挥手过程,可以想象成两个人在电话中结束通话的场景,我们用通俗易懂的方式来描述这个过程:

    

  1. 第一次挥手(FIN):发起结束请求

    • 你(客户端)对对方(服务器)说:“我这边说完了,我们可以挂电话了。” 这就像是你发送一个结束通话的请求。这个消息被称为FIN(结束)。
  2. 第二次挥手(ACK):确认结束请求

    • 对方听到你的请求后,回应说:“好的,我知道了,你那边说完了。” 这相当于对方发送一个确认消息,表示他们已经知道你想结束通话了。这个消息是ACK(确认)。
  3. 第三次挥手(FIN):对方也结束通话

    • 然后对方说:“我这边也说完了,我们可以挂电话了。” 这表示对方也发送了一个结束通话的请求,同样是一个FIN消息。
  4. 第四次挥手(ACK):确认对方结束请求

    • 你听到对方的话后,回答说:“好的,我也知道了,那我们就挂电话吧。” 这是你发送的最后一个确认消息,表示你已经确认对方也结束了通话。

        在TCP协议中,这个过程涉及到发送和接收特定的数据包,每个数据包都包含一些特定的信息,比如序列号和确认号,来确保数据的同步和确认。这个过程确保了网络连接的可靠释放,使得双方都能够安全地结束通信。

        在实际的TCP协议中,四次挥手过程允许双方独立地关闭连接,这意味着双方都可以发送和接收数据,直到它们都准备好关闭连接。这个过程确保了数据传输的完整性和通信的可靠性。

对HTTP协议和TCP协议的理解

        HTTP是一个属于应用层的面向对象的超文本传输协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。TCP协议对应于传输层,而HTTP协议对应用层,从本质上来说,二者没有可比性。

       HTTP协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。HTTP是一个基于请求与响应模式的、无状态的、应用层的协议,所以HTTP/1.0和HTTP/1.1都把TCP作为底层的传输协议。HTTP客户首先发起建立与服务器TCP连接。一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字来访问TCP协议。以为TCP协议的可靠性,全双工等特性,TCP给HTTP提供一个可靠的数据传输服务,这意味着由客户发出的每个HTTP请求消息最终将无损地到达服务器,由服务器发出的每个HTTP响应消息最终也将无损地到达客户。

结语

🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~ 

  • 30
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寻找DX3906

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

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

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

打赏作者

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

抵扣说明:

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

余额充值