网络通信
tcp协议
三次握手。
第一次握手:服务端知道自己有接收能力,服务端知道客户端有发送能力。
第二次握手:客户端知道自己有发送和接受能力,客户端知道服务端有发送能力和接收能力。
第三次握手:服务端知道自己有发送能力,服务端知道客户端有能力接收。
三次握手就是我要建立连接、我知道了、我知道你知道了。
从另一方面说,如果只握手两次则会存在下面这个问题。
1、客户端发起第一次请求。
2、因为网络慢,上面的请求一直卡在路上,这时客户端已经超时了,则发起第二个连接请求
3、然后两个请求都到达了服务端,服务端将两个请求都返回给客户端,如果客户端不需要第三次握手,那么这两个连接都建立成功了。浪费资源。
SYN:表示请求创建连接
FIN:请求关闭连接
ACK:确认接收。请求的时候ACK=0表示发送请求,响应的时候ACK=1表示接受请求。
seq:序列号,发送数据的时候,一条消息可能拆分多次发送,到客户端后在拼接成一条消息。这个序列号是用来拼接消息用的。
ack:这个代表下一个数据包的编号,这也就是为什么第二请求时,ack是seq+1
1、创建连接,客户端发送消息SYN=1(创建连接的请求),ACK=0(请求)
2、服务端收到消息返回给客户端SYN=1(创建连接的请求),ACK=1同意了
3、ACK=1,第三次确认
四次挥手
1、因为连接是双向的,首先客户端发起关闭客户端--》服务端的连接请求,FIN=1
2、服务端收到确认回复,ACK=1,此时客户端--》服务端的连接就关闭了
3、接下来另一个方向连接关闭相同。
http与https
https可以看成是http的安全版,在http协议(应用层)+tcp协议(传输层) 的基础上又增加了ssl协议来实现数据传输安全。
https协议需要在ca申请证书。
http端口是80,https端口是443.
http请求流程
1、客户端发起建立链接请求(通过tcp三次握手)
2、客户端发送请求信息到服务器(最后发送一行空白,标识请求信息完毕)
3、服务器处理请求生产相应信息发送客户端(最后发送一行空白,表示相应信息完毕)
4、服务端关闭tcp链接(如果又keep-alive则保持不关闭)
https工作流程
1、客户端发起https请求,传送ssl版本号、支持的加密方式列表
2、服务器收到请求后将自己的信息ca证书(包含非对称加密的公钥)发送给客户端
3、客户端验证证书是否合法
4、客户端随机生成加密字符串,然后通过公钥对加密字符串进行加密生成“预主密码”发送到服务端(如果服务器要求验证客户端身份,这一步可以做个签名验证)
5、服务端通过私钥解密“预主密码”生成客户端生成的那个随机加密字符串,然后通过一系列步骤生成“主通讯密钥”
6、到此ssl握手完毕,ssl通道建立完成,后续通讯使用“主通讯密钥”进行数据传输
原文:https://www.cnblogs.com/yanhui007/p/13972848.html