zoukankan      html  css  js  c++  java
  • 协议

    以下内容摘录自肥朝大大https://www.jianshu.com/p/2cb959529c96以及https://hit-alibaba.github.io/interview/basic/network/TCP.html,侵删。


    IP(Internet Protocol网际协议):网络层协议,主要是向传输层提供统一的ip分组
    TCP(Transmission Control Protocol传输控制协议):传输层,面向连接的协议,主要解决数据如何在网络中传输
    UDP(User Data Protocol用户数据报协议):传输层,非连接协议。ping命令就是向对方主机发送UDP数据包
    HTTP(超文本传输协议):应用层协议,主要解决如何包装数据,默认端口号是80。请求-响应的模式。请求要先建立在TCP基础上。
    SOCKET:本身不是协议,而是一个调用接口。只是使得程序员更方便使用TCP/IP协议栈。

    TCP三次握手
      what:三次握手是指建立一个TCP连接时,需要客户端和服务端之间一共发送三个包。
      why:为了连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。在socket编程时,客户端执行connect()时,将触发三次握手。
      how:
      第一次握手(SYN=1,seq=x):
        客户端发送一个TCP的SYN标志位置1的包,指明客户端打算连接的服务端的端口,以及初始序号x,保存在包头的序列号(Sequence Number)字段里。
        发送完毕后,客户端进入SYN_SEND状态。
      第二次握手(SYN=1,ACK=1,seq=y,ACKnum=x+1):
        服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1。服务器端选择自己的ISN序列号,放到Seq域里,同时将确认序号(Acknowledge Number)设置为客户的ISN加1,即x+1.
        发送完毕后服务端处于SYN_RCVD状态。
      第三次握手(ACK=1,ACKnum=y+1):
        客户端再次发送确认包(ACK),SYN标志位为0,ACK标志位为1,并且把服务器发来的ACK的序列号字段加1,放在确定字段中发给服务端。
        发送完毕后,客户端进入ESTABLISHED状态,当服务器端接收到这个包时,也进入ESTABLISHED状态,此时TCP握手结束。

    TCP四次挥手
      what:四次挥手是指拆除连接。客户端或服务端均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可触发挥手动作。
      how:
      第一次挥手(FIN=1,seq=x):
        假设客户端想要关闭连接,客户端发送一个FIN标志位为1的包,表示自己已经没有数据可以发送了,但是仍然可以接收数据。
        发送完毕后,客户端进入FIN_WAIT_1状态。
      第二次挥手(ACK=1,ACKnum=x+1):
        服务端确认客户端的FIN包,发送一个确认包,表明自己接收到了客户端关闭连接的请求,但还没有准备好关闭连接。
        发送完毕后,服务端进入CLOSE_WAIT状态,客户端接到这个确认包后进入FIN_WAIT_2状态,等待服务器关闭连接。
      第三次挥手(FIN=1,seq=y):
        服务端准备好关闭连接时,向客户端发送结束连接请求,FIN置为1。
        发送完毕后,服务器进入LAST_ACK状态,等待来自客户端最后一个ACK。
      第四次挥手(ACK=1,ACKnum=y+1):
        客户端收到来自服务端的关闭请求,发送一个确认包,并进入TIME_WAIT状态,等待可能出现的要求重传的ACK包。
        服务器端接收到这个确认包后,关闭连接,进入CLOSED状态。
        客户端等待了某个固定时间(两个最大段生命周期)之后,没有收到服务器的ACK,任务服务器端已经正常关闭连接,于是自己也关闭连接,并且进入CLOSED状态。

     

    HTTPS是介于HTTP和TCP/IP 协议之间的一种协议
    SSL:secure sockets layer
    TLS:transport layer security

    作用:
    1、能够让浏览器明确访问的网站是安全网站
    2、一旦HTTPS连接成功,浏览器和服务器之前的数据传输都是加密传输(对称加密)

    HTTPS工作原理:
    1、客户端将自己支持的一套加密规则(SSL版本号,加密算法版本,哈希算法版本)发送给网站,网站接到客户端支持的加密规则,选择一组对应的算法版本
    2、网站把 网站地址、加密公钥、证书颁发结构等信息以SSL证书的形式发送给客户端
      1、客户端接收网站发送的证书之后,需要验证证书的合法性。从底层的SSL证书向上层证书进行验证。只要证书链中任意一级是可信的,那么这个证书是可信的
      2、得到SSL证书中的域名,与当前访问网站域名做比对,比对通过,浏览器信任该站点
      3、浏览器生成一个随机数random,并使用证书中的公钥进行加密(非对称加密),伪代码如:RSA(SSL证书中的公钥,random)->密文A
      4、浏览器生成一个握手信息,如:"BJ",并使用确定HASH算法生成一个hash值,伪代码:HASH("BJ")->hash码
      5、使用random对BJ握手信息进行对称加密,伪代码:encode(random,"BJ")->密文B
      6、把密文A、hash码、密文B全都传给网站
    3、服务端接到密文A、hash码、密文B后,使用服务器端SSL证书里的密钥对密文A进行解密,伪代码如:RSA(SSL证书中的密钥,密文A)->random
      1、使用加密算法对密文B解密 decode(random,密文B)->握手信息
      2、使用HASH算法算出握手信息的hash码,伪代码如:HASH(握手信息)->hash码
      3、比对两个hash码是否一致。如果一致,服务器再生成一个握手信息进行加密,例:encode(random,"hello")->密文
      4、对握手信息进行HASH算法,伪代码:hash("hello")->hash码
      5、将密文和hash码传给客户端
    4、客户端接收到密文和hash码
      1、decode(random,密文)->握手信息
      2、对握手信息进行HASH算法,HASH(握手信息)->hash码
      3、比对hash码,如果一致,随机码已经验证过了,并且都各自存好了,此时两边都完成了HTTP交互, 现在的结果就是客户端和网站都持有个相同的random

    接下来的请求就都使用encode(random,明文)进行加密传输了,服务端则使用decode(random,密文)->明文,此时这个加密算法就是对称加密了,所以我们拿到的应该是明文。

  • 相关阅读:
    静态化之优化
    SEO小技巧
    apache 工具和简单优化
    apache rewrite机制
    nginx php win平台配置
    mvc 简单模型
    php无限分类三种方式
    【转】sqlserver查询数据库中有多少个表
    【转】sqlserver数据库之间的表的复制
    SET ANSI_NULLS (TransactSQL)
  • 原文地址:https://www.cnblogs.com/rayallenbj/p/10758882.html
Copyright © 2011-2022 走看看