大家好,我是“寻找DX3906”。每天进步一点。日积月累,有朝一日定会厚积薄发
前言
在上一篇文章中《【阿里前端面试题】浏览器的加载渲染过程,超详细》中描述:浏览器使用IP地址与服务器建立连接,通常是通过TCP(传输控制协议)。
那为什么要使用TCP协议建立链接呢?
HTTP是一个基于请求与响应模式的、无状态的、应用层的协议,所以HTTP/1.0和HTTP/1.1都把TCP作为底层的传输协议。(具体细节请详细阅读文中内容)。
面试题主要考察角度:
什么是TCP协议
TCP是传输控制协议(Transmission Control Protocol)的缩写,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP在因特网协议族(TCP/IP协议族)中担任主要的传输协议,为许多应用程序(如Web浏览器和电子邮件客户端)提供可靠的数据传输服务。
TCP协议有什么特点
以下是TCP协议的一些主要特点:
-
面向连接:TCP在数据传输前需要建立一个连接,通过三次握手过程来建立连接。
-
可靠性:TCP提供了数据传输的可靠性保证。它通过序列号、确认应答、超时重传等机制确保数据能够可靠地到达目的地。
-
有序传输:TCP通过序列号对数据包进行排序,确保接收方能够按照发送顺序接收数据。
-
拥塞控制:TCP具有拥塞控制机制,能够根据网络状况调整数据传输速率,以避免网络拥塞。
-
流量控制:TCP通过滑动窗口机制进行流量控制,确保发送方不会因为发送数据过快而导致接收方处理不过来。
-
错误检测:TCP使用校验和来检测数据在传输过程中是否出现错误,如果检测到错误,会触发重传机制。
-
全双工通信:TCP支持全双工通信,即发送和接收可以同时进行。
-
字节流:TCP提供的是字节流服务,它不保留消息边界,应用层需要自己处理消息的边界问题。
-
无边界:TCP不保证数据包的边界,即数据包的大小可以是任意的,应用层需要自己定义消息的边界。
-
IP协议的补充:TCP通常运行在IP协议之上,它依赖IP协议来处理数据包的路由和传输。
-
端口号:TCP通过端口号来区分不同的服务或进程,每个TCP连接由一个四元组(源IP地址、源端口号、目的IP地址、目的端口号)唯一标识。
-
状态机:TCP内部维护一个状态机,用于管理连接的不同状态,如LISTEN、SYN-SENT、SYN-RECEIVED、ESTABLISHED、FIN-WAIT-1等。
这些特点使得TCP协议非常适合需要可靠传输的应用,如网页浏览、文件传输、电子邮件等。然而,TCP的这些特性也使得它在某些场景下(如实时通信)不如UDP(用户数据报协议)高效,因为UDP提供了一种更简单、更快速的无连接服务。
TCP协议的建立链接的三次握手
对于TCP协议的三次握手,你可以想象在一个餐厅里,想要点一份餐。
-
第一次握手(SYN):发起请求
- 你(客户端)对服务员(服务器)说:“你好,我要点餐。” 这就像是你发送一个消息告诉服务器你想要开始通信。这个消息被称为SYN(同步序列编号)。
-
第二次握手(SYN-ACK):确认请求
- 服务员听到你的话后,回答说:“好的,我准备好了,你可以点餐了。” 服务员的这个回答相当于服务器发送一个确认消息,告诉客户端它已经准备好接收请求了。这个消息是SYN-ACK(同步确认)。
-
第三次握手(ACK):确认连接
- 你听到服务员的回答后,对服务员说:“好的,我要一份汉堡和可乐。” 这个回答是告诉服务员你已经准备好开始点餐了,并且你已经确认了服务员准备好接收你的点餐。这个消息是ACK(确认)。
通过这个三次握手的过程,你和服务员之间建立了一个连接,确保了双方都可以发送和接收信息。这就像是TCP协议在网络通信中建立一个可靠的连接,确保数据可以安全、有序地传输。
在实际的TCP协议中,这个过程涉及到发送和接收特定的数据包,每个数据包都包含一些特定的信息,比如序列号和确认号,来确保数据的同步和确认。这个过程确保了网络连接的可靠性,使得数据传输更加稳定。
TCP协议的释放链接的四次握手
TCP协议释放连接的四次挥手过程,可以想象成两个人在电话中结束通话的场景,我们用通俗易懂的方式来描述这个过程:
-
第一次挥手(FIN):发起结束请求
- 你(客户端)对对方(服务器)说:“我这边说完了,我们可以挂电话了。” 这就像是你发送一个结束通话的请求。这个消息被称为FIN(结束)。
-
第二次挥手(ACK):确认结束请求
- 对方听到你的请求后,回应说:“好的,我知道了,你那边说完了。” 这相当于对方发送一个确认消息,表示他们已经知道你想结束通话了。这个消息是ACK(确认)。
-
第三次挥手(FIN):对方也结束通话
- 然后对方说:“我这边也说完了,我们可以挂电话了。” 这表示对方也发送了一个结束通话的请求,同样是一个FIN消息。
-
第四次挥手(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响应消息最终也将无损地到达客户。