Java面试(8)

三次握手与四次挥手

三次握手: 客户端与服务端建立TCP连接时总共需要发送三个包

e00076402f3c4726acc7d0a80415ce31.png

三次握手过程中容易引发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的连接的拆除需要发送四个包

8dce8ffacbb4491aa120d626047d4883.png

为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

因为客户端发送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

------------------------------------------------------------------------------------------------

受检异常与非受检异常

一, 异常类情况

ffbc5d56147641a8970e753e1b3055bd.png

非受检异常指的是java.lang.RuntimeException和java.lang.Error类及其子类,所有其他的异常类都称为受检异常。两种类型的异常在作用上并没有差别。

两者的区别主要在:受检的异常是由编译器强制执行的,必须捕获,用于指示不受程序控制的异常情况(例如,I/O 错误),而非受检的异常在运行时发生,用于指示编程错误(例如,空指针。正因为如此,受检异常在使用的时候需要比非受检异常更多的代码来避免编译错误。

 

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Loren_云淡风轻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值