三次握手
图中ack为ackbit,也就是ack标志位
(1)客户端发送连接请求,synbit为1,并且初始化一个随机***(客户端为SYN_SENT状态)
(2)服务端收到请求,同意请求,分配空间,返回synack段给客户端,其中synbit为1,ackbit为1,acknum为客户端初始***+1,同时产生一个自己的初始***(服务端为SYN_RCVD状态)
(3)客户端收到后发送ack段到服务端,此时synbit为0,ackbit为1,acknum为服务端初始***+1,***为客户端初始***+1,此时可能包含数据,前2次不会携带数据(同为ESTABLISHED状态)
dos攻击
可以利用syn泛洪,只发送第一次请求,因为服务端收到后就会分配空间,借此来消耗服务器资源
可以通过以下方法来解决
服务端第一次接收到连接并不分配资源,在第三次握手后,判断acknum是否合法来分配空间
四次挥手
(1)客户端处于FIN_WAIT_1状态
(2)服务端收到fin,回复ack后为CLOSE_WAIT状态,发送fin后为LAST_ACK状态
(3)客户端收到fin后为FIN_WAIT_2状态,发送ack后为TIME_WAIT状态
(4)若客户端在一定时间内没有继续收到服务端的fin,则说明正确关闭连接了,否则继续发送ack,若连接关闭,则都为CLOSED状态。
ssl握手协议
(1)客户端发送其支持的算法列表和客户端随机数
(2)服务端返回选择的算法,服务端证书(包含服务端的公钥),服务端随机数
(3)客户端验证证书,提取公钥,生成预主**,用服务端公钥加密,发送给问服务端
(4)客户端和服务端用预主**和2个随机数计算出加***和mac**和初始向量
(5)客户端发送一个针对所有握手信息的mac
(6)服务端发送一个针对所有握手信息的mac
使用随机数是为了预防重放攻击,防止中间人记录一次握手记录,下次通过这个记录模拟和服务端握手
最后2步发送mac是为了查看握手过程是否收到篡改
本文图片来自慕课网,计算机网络精品课程