网络通信

各种协议之间关系

tcp协议与udp协议

先看tcp协议
客户端与服务端建立一个tcp链接需要三次握手,第一次是由客户端主动发起请求,第二次服务端响应,第三次客户端再次确认。
为什么三次握手?如果两次会有什么问题?

  1. 客户端发起链接请求A
  2. 网络慢,A超时了,客户端再次发起一个链接请求B。最终A和B可能都会到达服务端。然后都返回到A
  3. 如果是两次握手,那么客户端相当于建立了两个链接,他只使用一个,所以还需要主动断开一个链接。
  4. 如果是三次握手,只需要抛弃一个链接即可
    总结:防止资源浪费

那么三次握手的过程中都传输了哪些信息?

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、接下来另一个方向连接关闭相同。

在看udp协议
tcp协议需要建立链接,所以可以保证安全行、消息的顺序性,所以性能上就差一些。
udp正好相反,不需要建立链接,所以性能好些,但是不安全可靠。

返回顶部

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通道建立完成,后续通讯使用“主通讯密钥”进行数据传输

返回顶部

posted @ 2020-11-14 12:17  平淡454  阅读(50)  评论(0编辑  收藏  举报