网络模型分为7层,应用层,表现层,会话层,传输层,网络层,链路层,物理层,每一层有很多不同的协议。

http:属于应用层的协议,负责的是数据以什么结构传输也可以说成是打包成什么样子

SSL/TLS:属于应用程协议,同样是负责数据打包成什么样子(主要侧重于数据加密,TLS 算是SSL的后续版本所以通常放在一起说)

tcp:属于传输层,负责的是传输的通道建立

ip:并没有这么一个协议,通常说的ip说的是IPv4,IPv6,属于网络层,负责寻址

https:并不是某个单独的协议,(全称Http on TLS)其实是2个协议的组合应用

这里说到每一层其实都还有其他协议,例如传输层还有udp,应用层还有ssh等

这里有一个概念需要了解,数据在网络上传输并不是直接到达接收方的。而是经过了很多次的跳转以后才能达到。这个过程叫做路由。

这里由于这里经过了很多中间过程。就存在数据在某个中间过程点上被劫持。

为了保证中间过程没有被劫持数据没有被篡改,就引入了互相验证的过程,通常采用双向不对称加密的方式来验证,算法通常为RSA。

基于RSA这种加密算法发展出了,SSH,SSL/TLS这两种协议,SSH和SSL/TLS的协议验证的方式,个人认为的主要区别就是SSL/TLS更通用。因为他引入了CA这么个机构。

具体的验证方式也就是比SSH多了最开始先验证“证书是否是CA颁发的合法证书”的这个流程。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

发送方任何一个请求从发出到接收方接收到,都是经历了网络的7层的流程。每一层都按照对应协议包装,当然最后都是通过物理层(网线,电缆,光纤)到达服务器。

发送方打包:

具体数据>应用层>表现层>会话层>传输层>网络层>链路层>物理层

接收方解包:

物理层>链路层>网络层>传输层>会话层>表现层>应用层>具体数据

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

TCP负责建立通道:

这里所谓的建立通道指的是客户端和服务器已经做好了接受对方数据的准备,所以这里是一个所谓的概念上的通道(这里要明确,建立通道的数据传输依然是要经过上述的的7层包装传递的)。

这段是从百度百科上的说明:

应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元( 1MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我们通常说的http的3次握手,其实指的是tcp的3次握手。也就是这个过程基于tcp协议实现的。

我们的http数据传送是基于通道建立已经成功的基础上。所以必须先通过一个握手的过程来建立通道。

握手的过程(传输层按tcp协议打包):

1.客户端发syn包:应用层向传输层发送数据流,这个数据流里面包含内容为:一个SYN标识和一个数字,

2.接收方确认:接收方收到这个包解析以后看到SYN标识就知道了客户端是要建立连接。这时就会把客户端发过来的这个数字加1,然后带上一个自己的数字,发送返回包给客户端。

3.客户端确认接收方并准备以及接收方确认客户端已准备:客户端收到返回的包以后看到自己发过去的数字已经被加了1,说明服务器以接到自己请求,这个时候把服务器发过来的数字也加1,发包给服务器并且自己做好准备。

4.服务器看到自己返回的数字也加了1,说明客户端也已经准备好了,此时自己也做好准备。

握手完成(这个过程发了3次包所以被称为3次握手)。

这里服务器为什么不实在第2步就做好准备的原因是因为服务器资源有限。必须要客户端做好准备以后再准备,不然很有可能自己做好了准备,客户端那边没接到自己的响应导致没有做好准备

挥手的过程(传输层按tcp协议打包):

与握手过程相似只不过包内的标识为fin,并且服务器向客户端发送的时候ack和fin是分为开为2步发送(上面的百科说明tcp协议是支持数据打成多个包的)。至于为什么要分两步发,因为通道时双向通信的,很有可呢客户端提出关闭的时候服务器这边还有数据没发送完,所以先返回一个ack告诉客户端已经收到,数据发送完以后再告诉客户端已经发完了可以关闭了。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

通道建立以后。

接下来传输数据。传数据的时候我们根据输入的url来分辨是用http还是用https。如果用的是https。 这个时候就牵涉到SSH,SSL/TLS了。

在使用http协议组织数据之前。要先保证刚才建立的通道是否是安全的,一旦确定了通道安全,就可以开始传递加密的数据了,这时候再来劫持就已经晚了。劫持到也解密不出来。

所以只要保证协商加密的这个步骤安全就行。所以这里就在传输数据之前协商加密的时候,加入了证书认证的这个过程。

证书认证的底层逻辑就是双向不对称加密,公钥可以很多,私钥只有一个。私钥可以解密所有公钥加密的内容,所有公钥都可以解密私钥加密的内容。但是公钥之间不能互相解密。

这里认证的这个行为就是公钥解密私钥的过程并比较解密以后是否正确的过程。正确则说明内容是由私钥加密的。

这里具体的说一下:证书的内容包含如发布者名称之类的一些信息,加上一个用摘要算法(例如MD5)对这些内容算出来的摘要,然后用私钥对这个摘要加密生成的结果,这个结果就是签名。

完整的证书验证行为就是先用公钥对这个签名解密,然后对证书上公开的其余信息同样用摘要算法(MD5)算摘要。如果算出来的摘要和公钥解密之后的摘要相同则说明是正确的。

这也就是SSH的过程,然后中间再加上了CA签名的话就是SSL/TLS了。

这里CA又牵涉到一个分级的问题。这里就要牵涉到一个证书链。因为CA是分级的。CA机构有很多,但是最顶层的CA只有固定的几个。通常证书都是由下级的CA颁发的。而下级CA颁发的证书里面其实是包含上一级CA的信息的。最低级的CA颁发的证书解开以后会包含上一级CA的信息,这里又可以继续解析上一层CA的信息。解析过程相同(公钥解密,确认摘要),然后一直解析到最顶层。也就是说客户端这边要保存每一级的CA的公钥以及最终的顶级CA的公钥。否则任何一级验证失败了就解析不下去了。只有当解析到最后才能确定这个证书确实是顶顶级CA颁发的。当这些步骤完成了以后,才轮到解析服务器的签名。

(顶级CA的证书被称为Root Certificate,下级CA的证书被称为InterMediate Certificate,最终用户的被称为End User Certificate)

所以SSL/TLS是先解析CA的证书(通过证书链),CA的验证通过。 在进行服务器本身的验证。所以SSH,SSL/TLS其实原理是一样的。

这里除了验证的过程。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在证书传递的过程里面其实还有协商加密方式,协商压缩方式,以及协商密钥,这个密钥是真正数据发送时使用对称加密的密钥。

这个完整的过程叫做TLS握手,具体流程是

客户端发送请求包里面含有支持的 SessionId(如果有),SSL/TLS版本,压缩方式,加密组件。以及一个随机数字A。

服务器挑选一种压缩方式,加密套件,附带上证书并且也产生一个随机数字以后发送返回包给客户端,这里产生的这个随机数为B。

客户端验证证书,验证通过以后,根据前面传输的所有内容,产生第三个数字PreMaster,然后用A,B,PreMaster三个参数算出数据传输对称加密的密钥trasnKey。然后发包给服务器告诉服务器这边验证好了,我们的通道是安全的,可以开始数据传输了。服务器这个时候根据之前传输的内容也可以算出同样的trasnKey,然后双方就可以开始以trasnKey互相传输数据。

TLS握手完成。

在然后就是http 的传输了。

一篇解释https很好的文章

https://blog.csdn.net/ly131420/article/details/38400583

Https,Http,TCP,IP的一些理解的更多相关文章

  1. C# HTTP1.0 1.1 2.0与HTTPS 、TCP/IP协议的UDP与TCP、 Socket介绍与WebSocket

    一.HTTP1.0 1.1 2.0和HTTPS 1.HTTP协议是什么? HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol.它是从WEB服务器传输超文 ...

  2. TCP/IP Socket 的理解

         网络由下往上分为:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.      TCP 协议对应于传输层,HTTP 协议对应应用层,Socket 则是对 TCP/IP 协议的封装. ...

  3. 浏览器解析,HTTP/HTTPS、TCP/IP、WebSocket协议

    浏览器相关 浏览器对同一个域名有连接数限制,大部分是 6. 浏览器指的是 Chrome.Firefox,而浏览器内核则是 Blink.Gecko,浏览器内核只负责渲染,GUI 及网络连接等跨平台工作则 ...

  4. socket,TCP/IP的理解

    TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间 ...

  5. socket,TCP/IP的理解(转)

    TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间 ...

  6. TCP/IP详解(包含ack,seq)

    前言 个人认为在web开发中,对于TCP/IP协议的理解是首当其冲的,在大多数框架的冲击下,使我们淡化了对于TCP/IP协议的理解. 理解好TCP/IP对于每个web开发者都是很有必要的. TCP/I ...

  7. 什么是TCP/IP协议和举例

    一张图+说明,彻底理解TCP/IP协议是个什么玩意儿! 相关图片:https://www.cnblogs.com/andy9468/p/10096606.html 说明:1.应用层常见协议或命令:HT ...

  8. TCP/IP、Http、Socket的区别

    1.标准网络层次 网络由下往上分为:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置: 7 应用层 例如HTTP. ...

  9. TCP/IP协议栈概述

    TCP/IP协议栈概述 这篇文章虽然只是很粗浅的介绍了ISO/OSI 网络模型,但确实把握住了关键点,某种意义上,简单回顾一下就可以加深对TCP/IP协议栈的理解. 原作者:阮一峰 链接: http: ...

随机推荐

  1. Mongodb数据库学习

    数据库 MongoDB (芒果数据库) 数据存储阶段 文件管理阶段 (.txt .doc .xls)优点 : 数据可以长期保存 可以存储大量的数据 使用简单 缺点 : 数据一致性差 数据查找修改不方便 ...

  2. base64位代码转图片文件并保存到文件夹的解决方案

    #region Base64 转图片方法 protected string Base64StringToImage(string strbase64) { try { string imgurl = ...

  3. Appium 学习三:Appium-Desktop 填坑

    之前使用appium执行自动化脚本,现使用appium-desktop  遇到了一些问题 1.使用name定位的报错   Locator Strategy 'name' is not supporte ...

  4. springboot+dubbo提示超时

    在消费方工程的application.properties里面加上dubbo.consumer.timeout=30000.

  5. Makefile 命令解析

    1.$(patsubst %.c,%.o, a.c b.c) 把字串“a.c b.c”符合模式[%.c]的单词替换成[%.o],返回结果是“a.o b.o” 2.$(VAR:A=B) 对于一个已经定义 ...

  6. 了解计算机与操作系统发展阶段--Windows

    Windows发展的30多年,其实就是整个计算机应用,从小众化向大众化消费领域,快速前行的30多年. 让我们来一起温故下Windows这么多年的发展历程,看看Windows,是如何在市场和技术这两种力 ...

  7. 关于键盘事件对象code值

    e.keyCode || e.which || e.charCode; //IE只有keyCode属性,FireFox中有which和charCode属性,Opera中有keyCode和which属性 ...

  8. .NET、JAVA和PHP在Web开发的优缺点

    现在做Web开发,用哪个平台哪种语言其实本质上没有太大的区别,因为Web开发框架已经非常成熟,只要符合需求,能按时交付产品就ok了. 要选择哪个平台,是个商业问题,不是技术问题. 选择任何的语言最好深 ...

  9. 《C++实践之路.pdf》源码

    > 源码下载方法 < >> 打开微信 >> 扫描下方二维码 >> 关注林哥私房菜 >> 输入对应编号获取百度网盘提取密码 全书源码[已更新完 ...

  10. optional install error: Package require os(darwin) not compatible with your platform(win32)

    解决方法: cnpm rebuild node-sass cnpm install