- TCP协议
- HTTP协议
- OSI七层模型
- 红黑树,平衡树
- hash冲突
TCP协议
TCP 分层架构:
物理层(建立,断开连接),
链路层(定义数据帧,源及目的地址,数据校验位等),
网络层(寻址,路径选择),
传输层(管理连接端口号,流程控制,校验等),
会话层(管理会话) ,表示层(加密,编码等),TCP分层中并入应用层
应用层 最终用户的
TCP建立连接三次握手
A->B A发送SYN seq=x ,A进入SYN_SENT状态
B->A B发送SYN_ACK seq=y,ack=x+1 B进入SYN_RCVD状态
A->B A发送SYN_ACK ack=y+1 A进入ESTABLEISHED状态,B收到后进入连接状态
三次握手的原因是要同时确保A和B具有收发能力
服务器配置方面,TCP建立连接依靠系统的文件描述符,因此需要注意系统相关的配置
TCP断开连接的4次握手
A->B 发送FIN=1 seq=a A进入FIN_WAIT_1
B->A 发送ACK=1 ack=a+1 ,seq=b,B进入CLOSE_WAIT状态,A收到ACK后进入FIN_WAIT_2
B->A B的应用进程完成后发送ACK ack=a+1 seq=b 自身进入LAST_ACK状态
A->B 发送ACK ack=b+1,seq=a+1 自身进入TIME_WAIT状态,时长为2MSL(2min),超过则关闭,B收到后关闭
A进入TIME_WAIT状态原因:1 确保最后一次ACK收到,避免B重发 2 避免未关闭的连接产生脏数据
服务器调优: 处于TIME_WAIT状态和CLOSE_WAIT状态的连接不会释放资源,因此可以适当调小TIME_WAIT的时长(建议小于30s),CLOSE_WAIT可能是应用自身原因,需要排查资源释放问题。
TCP支持Keep Alive 功能,定期发送心跳检查健康状态,如出现异常则会主动关闭连接并释放资源
HTTP/HTTPS协议
OSI七层模型
红黑树,平衡树
hash冲突
多个对象进行hash运算,可能产生相同的值,导致hashmap不够分散,进而影响读写性能
解决方法: 线性探测,再hash,随机hash,hash桶