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

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

时间:2024-05-24 22:25:22浏览次数:18  
标签:协议 面试题 HTTP 确认 TCP 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响应消息最终也将无损地到达客户。

结语

标签:协议,面试题,HTTP,确认,TCP,tcp,数据包,连接,客户端
From: https://blog.csdn.net/u011143504/article/details/139135087

相关文章

  • SQL语句面试题
    查询指定用户在过去12个月每个月的支付总额:SELECTDATE_FORMAT(payment_date,'%Y-%m')ASmonth,SUM(amount)AStotal_amountFROMpaymentsWHEREuser_id='指定用户ID'ANDpayment_date>=DATE_SUB(CURDATE(),INTERVAL12MONTH)GROUPBYDAT......
  • 网络安全相关面试题(hw)
    网络安全面试题报错注入有哪些函数updatexml注入载荷注入insert注入updata注入delete注入extractvalue()注入注入防御方法涵数过滤直接下载相关防范注入文件,通过incloud包含放在网站配置文件里面PDO预处理,从PHP5.1开始,php可以通过PDO的prepare预处理函......
  • 整理好了!2024年最常见 20 道 Redis面试题(四)
    上一篇地址:整理好了!2024年最常见20道Redis面试题(三)-CSDN博客七、Redis单线程模型是如何工作的?Redis是一个基于单线程模型的高性能键值存储数据库。尽管Redis操作大多数是单线程执行的,但它依然能够提供极高的性能,这主要得益于以下几个方面:单线程模型:Redis的所有操......
  • 程序分享--常见算法/编程面试题:分发糖果
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。或关注博主免费专栏【程序......
  • 前端js面试题
    01.你能解释一下JavaScript中let和var的区别吗?答:“let”和“var”之间的主要区别是用“let”声明的变量具有块作用域,而用“var”声明的变量具有函数作用域。02.你能解释一下JavaScript中的闭包吗?答:闭包是一个函数,即使在父函数返回之后,它也可以访问其父作用域中的变量。......
  • k8s运维面试题【转】
    常见的k8s运维面试题1、简述ETCD及其特点?etcd是一个用于配置共享和服务发现的键值存储系统,能够为整个分布式集群存储关键数据,协助集群正常运转服务端将配置信息存储在etcd中,客户端从etcd中得到配置信息,etcd监听配置信息的变化,发现配置变化通知到客户端特点-安装、使用简单......
  • 搜索引擎ElasticSearch18_ElasticSearch的客户端操作2
    实际开发中,主要有三种方式可以作为elasticsearch服务的客户端:第一种,elasticsearch-head插件第二种,使用elasticsearch提供的Restful接口直接访问第三种,使用elasticsearch提供的API进行访问一、安装Postman工具Postman中文版是postman这款强大网页调试工具的windows客户端,提......
  • JAVA面试题
    第一章-Java基础篇1、你是怎样理解OOP面向对象难度系数:⭐2、重载与重写区别难度系数:⭐3、接口与抽象类的区别难度系数:⭐4、深拷贝与浅拷贝的理解难度系数:⭐5、sleep和wait区别难度系数:⭐6、什么是自动拆装箱int和Integer有什么区别难度系数:⭐7、......
  • JQuery面试题
    *JQuery面试题*1.jQuery库中的$()是什么?(答案如下)$()函数是jQuery()函数的别称,乍一看这很怪异,还使jQuery代码晦涩难懂。一旦你适应了,你会爱上它的简洁。$()函数用于将任何对象包裹成jQuery对象,接着你就被允许调用定义在jQuery对象上的多个不同方法。你甚至可以将一......
  • 一台服务器​最大并发 tcp 连接数多少?65535?
    首先,问题中描述的65535个连接指的是客户端连接数的限制。在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三次握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少呢?如何标识一个TCP连接在确定最大连接数之前,先来看看系统如何标识一个tcp连接。系统用一个......