三次握手与四次挥手
三次握手: 客户端与服务端建立TCP连接时总共需要发送三个包
三次握手过程中容易引发SYN(DDOS)攻击,所谓SYN攻击是指: 攻击客户端,在短时间内伪造大量不存在的IP地址,向服务端不断发送syn包,服务端收到包后向客户端发送确认包,但由于客户端IP不存在,导致服务端需要不断重发包直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN被丢弃,目标系统运行缓慢直至崩溃.
检测SYN攻击: 当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.在Linux下可以如下命令检测是否被Syn攻击: netstat -n -p TCP | grep SYN_RECV
预防SYN攻击: SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等. 使用较新的TCP/IP协议栈
四次挥手: TCP的连接的拆除需要发送四个包
为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
因为客户端发送FIN报文只是表示当前发送数据结束,并不能说明后面就不发送了,服务端先返回ACK报文表示接收到关闭连接的请求了,然后再次发送FIN报文给客户端,让客户端再次确认关闭连接.
TCP协议和UDP协议的区别是什么?
- TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。而UDP是无连接的
- TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
- TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
- TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率
- TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。
- TCP面向的是字节流的服务,UDP面向的是报文的服务。
--------------------------------------------------------------------------------------------
常见性能调优
服务器选型: 同步非阻塞(NIO)框架,如 netty、tomcat9
应用层: 线程池、异步、尽量少使用反射、内存缓存、多节点部署、应用拆分微服务、堆栈大小调优等
数据库层: 建索引
缓存: 查询增加缓存、大数据量且查询条件复杂多样时采用ES
------------------------------------------------------------------------------------------------
受检异常与非受检异常
一, 异常类情况
非受检异常指的是java.lang.RuntimeException和java.lang.Error类及其子类,所有其他的异常类都称为受检异常。两种类型的异常在作用上并没有差别。
两者的区别主要在:受检的异常是由编译器强制执行的,必须捕获,用于指示不受程序控制的异常情况(例如,I/O 错误),而非受检的异常在运行时发生,用于指示编程错误(例如,空指针。正因为如此,受检异常在使用的时候需要比非受检异常更多的代码来避免编译错误。