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桶