建立连接三次握手
主动发起连接方
CLOSED---发送SYN数据包--->SYNSENT---接收ACK-SYN数据包&发送ACK数据包--->ESTABLISHED
被动接收连接方
LISTEN---接收SYN数据包&发送ACK-SYN数据包--->SYN_RCVD---接收ACK数据包--->ESTABLISHED
断开连接四次挥手
主动断开连接方
Established---发送FIN--->FIN_WAIT1---接受ACK--->FIN_WAIT2---接受FIN&发送ACK--->TIME_WAIT---等待2MSL(max segment lifetime)--->CLOSE
被动断开连接方
Established--->接受FIN&发送ACK--->CLOSE_WAIT---发送FIN--->LAST_ACK---接受ACK--->CLOSE
- TIME_WAIT等待2MSL的原因:1. 保证主动断开连接方最后一个ACK被对方收到,如果未收到也给对方机会重发FIN。
- 为什么有TIME_WAIT状态:1.避免新的相同四元组连接收到旧的数据包 2.保证被动关闭连接的一方能够正确关闭,即确保被动方能够收到最后一个ACK。
断开连接的时机
- 主动断开:调用close方法
- 被动断开:对方发送FIN;资源耗尽、应用关闭、人为关闭
- 超时和心跳失败
- 发送RST报文
可靠性保证
- 校验和:发送端计算tcp报文段的校验和,接收段验证校验和是否相等
- 序列号和确认机制:回复下一个应收到数据包的序号,ACK标志置1
- 重传机制: a超时重传-超时重传的时间间隔(RTO应略大于往返时延(RT T);b快速重传-接收方收到比期望值大的报文时,会回复期望报文序列号的ACK,当发送方收到三个重复的确认时重传该报文。
- 流量控制:接收方在回复ACK报文时会将当前可用窗口大小返回。窗口大小为零时,发送方停止发送,并定期发送窗口探测报文。
- 拥塞控制 :慢开始,拥塞避免,快重传和快恢复
TLS四次握手
客户端A,服务端B
- A->B tls协议版本号,支持的加密算法,随机数
- B->A 确认的tls版本,采用的加密算法,随机数,证书,公钥
- A->B. 验证证书,生成第三个随机数,根据三个随机数生成最终的密钥
- B->A. 服务端收到第三个随机数后,用相同的方式生成最终的密钥