TCP和UDP有什么区别?
TCP:一种面向连接的协议。意味着数据传输之前。通信双方需要先建立连接。
- 三次握手过程如下:
- 第一次握手:客户端向服务器发送一个带有 SYN(同步序列号)标志的 TCP 数据包,请求建立连接,此时客户端进入 SYN - SENT 状态。
- 第二次握手:服务器收到客户端的 SYN 包后,会返回一个带有 SYN + ACK(确认)标志的数据包,表示同意建立连接,此时服务器进入 SYN - RECV 状态。
- 第三次握手:客户端收到服务器的 SYN + ACK 包后,再向服务器发送一个带有 ACK 标志的数据包,确认连接建立,此时客户端和服务器都进入 ESTABLISHED
UDP(User Datagram Protocol):是一种无连接的协议。数据的发送方和接收方不需要事先建立连接就可以直接发送数据。这就好比寄信,发送方不需要和接收方提前沟通连接,直接把信(数据)发送出去就行。例如,在一些实时性要求较高的游戏场景中,玩家操作产生的数据可以通过 UDP 协议直接发送给服务器。
TCP为什么是三次握手,而不是两次?
两次握手可能导致的问题
- 建立连接时的资源浪费:
无法确认客户端的接收能力:
- TCP 采用三次握手是为了在不可靠的网络环境中建立可靠的连接,确保双方的接收和发送能力都得到确认,并且避免资源浪费和历史连接的干扰。这是一种经过实践验证的、能够有效保障通信可靠性的机制。
JAVA有哪几种I0模型?有什么区别?
阻塞方式:BIO 阻塞式。每个IO线程都会阻塞。NIO非阻塞式。IO操作不会阻塞线程。但是需要主动轮询通道状态。AIO异步。IO操作完全不阻塞。操作完成后通过回调或者其他方式通知线程。
资源消耗:BIO阻塞 不适合高并发场景。因为会消耗大量的线程资源。
NIO 通过一个线程管理多个通道。减少线程资源消耗
AIO 能够更好的处理大量并发IO请求。
- 性能和应用场景:BIO 适用于连接数少、对性能要求不高的场景;NIO 适用于高并发的网络通信场景;AIO 适用于对性能要求极高、需要处理大量并发 I/O 且希望将 I/O 操作和业务逻辑完全分离的复杂场景。