http连接
连接需经过三次握手:
第一次:建立连接时,客户端发送syn(syn=j)包到服务器,并进入syn_sent状态,等待服务器确认。
第二次:服务器收到syn包,必须确认客户端的syn(ack=j+1),同时自己也发送一个syn(syn=k)包,即syn+ack包到客户端,此时服务器进入syn_recv状态
第三次:客户端收到服务器的syn+ack包,向服务端发送确认包ack(ack=k+1),此包发送完成,客户端和服务器进入tcp连接成功状态,完成三次握手。
为什么要采用三次握手,两次不行吗?:防止发出的请求由于网络拥堵导致互相等待问题
20160809153504099.png之所有有第三次握手的原因,有可能在客户端发送连接请求时,第一次发送,请求在网络的某个地方block了,这时候发送第二次网络请求,第二次网络请求服务器答复了,而第一个网络请求又来了,而这个请求应该是被弃用了的,所以就出现了这个请求异常。为了避免这个异常就建立了3次握手
断开连接需要四次挥手:
第一次:tcp客户端发送一个fin(fin=j),用来关闭客户端到服务器的数据传输
第二次:服务端收到fin,返回一个ack(ack=j+1),确认号为收到的序号+1
第三次:服务器关闭客户端的连接,发送一个fin(fin=m)给客户端
第四次:客户端返回ack(ack=m+1)报文确认,并将序列号设置为收到的序列号+1,完成断开
https连接:
1、客户端发送请求到服务端,建立连接(http三次握手)
2、客户端发送请求到服务端,建立连接(SSL/TSL握手)
1、客户端发起https请求,服务端返回给客户端一个公钥(证书)
2、客户端产生对称密钥
3、使用公钥对产生的对称密钥进行加密
4、发送加密后的对称密钥给服务器
5、客户端通过对称密钥加密的密文通信(ssl加密建立)
网友评论