有关TCP大厂面试题总结

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地址和端口号,而不进行域名解析。
     

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值