1.TCP与UDP的区别
-
TCP可靠、面向连接、效率较低(因为需要建立连接、确认和重传等额外开销)基于字节流
-
UDP不可靠、无连接、效率较高 基于数据报。
2.TCP的可靠与UDP不可靠怎么体现
-
TCP:可靠传输,通过确认机制、重传机制和流量控制确保数据不丢失、不重复、按序到达。
-
UDP:不可靠传输,不保证数据是否到达、是否按序到达。
3.TCP与HTTP的关系
TCP在里面,HTTP在外面。
HTTP(超文本传输协议)是应用层协议,而TCP是传输层协议。HTTP依赖于TCP来传输数据。具体来说:
-
当您在浏览器中输入一个网址时,HTTP会生成一个请求。
-
这个请求会被交给TCP,TCP负责将数据可靠地传输到服务器。
-
服务器收到请求后,通过TCP将HTTP响应返回给客户端。
4.为什么 tcp 要三次握手,两次握手不可以吗?
-
双向确认:通过三次握手,客户端和服务器都能够确认对方的通信能力。在第一次握手中,客户端请求建立连接:在第二次握手中,服务器确认请求并表明自己也能够接收数据:最后在第三次握手中,客户端确认服务器的接收能力。这种双向确认有助于确保双方都能够正常通信。
-
防止旧连接的影响:如果只使用两次握手,可能会导致之前的连接请求在网络中滞留(早已失效的来自客户端的请求报文),从而导致新的连接请求被误认为是旧的连接请求。通过三次握手,可以更好地确保连接的新鲜性。
5.TCP报文结构
-
源端口和目的端口:标识通信的应用程序。
-
序列号(seq 占32位)和确认号(ack 占32位 只有ACK标志位为1时确认序号字段才有效):用于数据排序和确认。
-
数据偏移:指示TCP头部的长度。
-
控制标志(如SYN:发起一个新连接、ACK:确认序号有效、FIN:释放一个连接):用于连接管理。
-
窗口大小:用于流量控制。
-
校验和:用于错误检测。
-
紧急指针:标识紧急数据的位置。
-
选项(可选):用于扩展功能。
-
TCP头部通常为20字节,加上选项后最多60(固定长度20字节+可变字节(最大40字节))。
6.tcp三次握手四次挥手
-
第一次握手:客户端发送SYN报文(SYN=1,序列号为x)到服务器,表示请求建立连接。
-
第二次握手:服务器收到SYN后,回复SYN+ACK报文(SYN=1,ACK=1,序列号为y,确认号为x+1),表示同意建立连接。
-
第三次握手:客户端收到SYN+ACK后,发送ACK报文(ACK=1,序列号为x+1,确认号为y+1),表示连接已建立。
目的:确保双方通信能力正常,防止历史连接干扰。
TCP四次挥手(断开连接)
-
第一次挥手:客户端发送FIN报文(FIN=1,序列号为u)到服务器,表示请求关闭连接。
-
第二次挥手:服务器收到FIN后,回复ACK报文(ACK=1,序列号为v,确认号为u+1),表示确认关闭请求。
-
第三次挥手:服务器发送FIN报文(FIN=1,序列号为w)到客户端,表示服务器也准备关闭连接。
-
第四次挥手:客户端收到FIN后,回复ACK报文(ACK=1,序列号为u+1,确认号为w+1),表示连接完全关闭。
目的:确保双方数据发送完毕,安全关闭连接。
7.为什么TCP连接的时候是三次,关闭的时候是四次?
过程:
-
客户端发送FIN,表示自己不再发送数据。
-
服务器回复ACK,确认收到FIN。
-
服务器发送FIN,表示自己也不再发送数据。
-
客户端回复ACK,确认收到FIN。
原因:
-
TCP连接是全双工的,数据可以双向传输。关闭连接时,每一方都需要独立地关闭自己的发送通道。
-
当客户端发送FIN后,服务器可能还有未发送完的数据,因此需要先回复ACK,等数据发送完毕后再发送自己的FIN。
-
由于FIN和ACK不能像建立连接时那样合并发送,因此需要四次交互。
8.为什么客户端发出第四次挥手要等待2MSL才释放连接 ?
-
确保最后一个ACK到达服务器:如果客户端的最后一个ACK丢失,服务器会重传FIN报文。客户端等待2MSL可以在此期间收到重传的FIN,并重新发送ACK,确保服务器能正常关闭连接。
-
防止旧连接的报文干扰新连接:MSL是报文在网络中的最大生存时间。在网络中,可能存在延迟的旧报文(来自之前的连接)。等待2MSL可以确保这些旧报文在网络中消失,避免它们干扰新的TCP连接。
9.TCP 的拥塞控制机制有哪些?
-
慢启动:初始时指数增长拥塞窗口。
-
拥塞避免:窗口达到阈值后线性增长。
-
快重传:收到 3 个重复 ACK 时立即重传丢失的报文。
-
快恢复:重传后直接进入拥塞避免阶段。
10.为什么tcp前两次握手不能携带数据?
-
连接尚未完全建立,无法保证数据传输的可靠性。
-
防止资源浪费和数据丢失:如果在前两次握手中携带数据,而连接未能成功建立(如 SYN 报文丢失或服务器拒绝连接),这些数据将无法送达,导致资源浪费。
-
避免安全风险(如 SYN 洪泛攻击):如果允许前两次握手中携带数据,攻击者可能利用这一点发送大量伪造的 SYN 报文(SYN 洪泛攻击),消耗服务器资源。
11.怎么用Linux命令查看tcp连接的状态?
SS命令
-
-t:显示TCP连接信息。
-
-u:显示UDP连接信息。
-
-1:仅显示监听状态的连接。
-
-W:显示RAW套接字连接信息。
-
-门:以数字形式显示P地址和端口号,而不进行域名解析。