zoukankan      html  css  js  c++  java
  • 网络通信

    各种协议之间关系

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

    返回顶部

  • 相关阅读:
    ubuntu18.04更新源
    机器学习网址
    ubuntu18.04下安装Anaconda及numpy、matplotlib
    google云使用记录
    tensorflow省钱方案-ml-engine
    Angular 创建项目
    Angular 环境搭建
    android APP国际化一键切换实现
    android 上下滑动标题栏和状态栏改变颜色实现
    android滑动标题栏渐变实现
  • 原文地址:https://www.cnblogs.com/yanhui007/p/13972848.html
Copyright © 2011-2022 走看看