笔记:网络基础TCP、HTTP、HTTPS(HTTP+SSL)

[TOC]html

@(iOS总结)ios

一切从简,用本身的方式记录。若是你以为啰嗦,那多是我怕说的不明白;若是你以为太笼统,那多是我以为太基础没写出来,或者我还没认知到;若是你以为和别的文章过重复,那多是我没有找到更好的表达方式;git

系统学习最好看一下 UNIX网络编程卷1:套接字联网API(第3版).pdfgithub

1、TCP(详情参考:必须懂的计算机网络知识—(TCP)

1.一、网络模型数据处理过程

1.二、TCP和UDP的区别

TCP位于传输层,传输层协议还包括UDPHTTP(超文本传输协议)、FTP(文件传输协议)、SNMP(简单网络管理协议)、Telnet(远程登陆协议)等。下面的表格列出了TCPUDP的区别。算法

传输层协议 TCP(Transmission Control Protocol传输控制协议) UDP(User Datagram Protocol用户数据报协议)
链接方式 面向链接(一对一) 无链接(一对1、一对多、多对1、多对多)
占用系统资源 多(首部开销20字节) 少(首部开销8字节)
可靠性 可靠,保证数据正确(全双工) 不可靠,可能会丢包
数据顺序 保证数据顺序 不保证数据顺序
拥塞控制 有拥塞控制,面向数据流 无拥塞控制,面向报文
流量控制 有(滑动窗口)

注意:ping”命令是使用 IP 和网络控制信息协议 (ICMP),于是没有涉及到任何传输协议(UDP/TCP) 和应用程序编程


TCP由于是面向链接的,因此比UDP要更复杂,创建链接须要三次握手,断开链接须要四次挥手。TCP充分实现了数据传输时各类控制功能,能够进行丢包的重发控制,还能够对次序乱掉的分包进行顺序控制。而这些在UDP中都没有。此外,TCP做为一种面向有链接的协议,只有在确认通讯对端存在时才会发送数据,从而能够控制通讯流量的浪费。TCP经过检验和序列号确认应答重发控制链接管理以及窗口控制等机制实现可靠性传输浏览器

1.三、创建链接为何要三次握手?

假如让我和你来实现一次完整可靠的链接,会怎么作呢?安全

  • 第一次握手告诉我要和你创建链接
  • 第二次握手告诉你能收到我发送的消息
  • 第三次握手告诉我能收到你发送的消息 而后,你能收到我发送的,我能收到你发送的,咱俩下面就能够畅聊了

1.四、断开链接为何要四次挥手?

  • 第一次握手告诉我要和你断开链接
  • 第二次握手告诉你收到我发送的断开链接消息了,可是可能还有数据没有发送完毕,等一会再告诉我
  • 第三次握手告诉你没有正在发送的数据了,你能够和我断开链接了
  • 第四次挥手告诉我收到你发送的能够和我断开链接的消息了 而后,本次会话完美结束了,没有漏掉任何消息

1.五、TCP流量控制

所谓的流量控制就是接收方让发送方的发送速率不要太快,让接收方来得及接收。利用滑动窗口机制能够很方便的在TCP链接上实现对发送方的流量控制。TCP窗口的单位是字节,不是报文段,发送方的发送窗口不能大于接收方给出的接收窗口(rwnd)的大小。bash

1.六、TCP拥塞控制

为了方式网络的拥塞现象,TCP提出了一系列的拥塞控制机制。拥塞控制的原理主要依赖于一个拥塞窗口(cwnd),发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就增大一写,以便把更多的分组发送出去。可是只要出现网络拥塞,拥塞窗口就减小一些,以便减小注入到网络中的分组。主要有四种算法:慢启动(Slow-start)拥塞避免(Congestion Avoidance)快重传(Fast Restrangsmit)、快恢复(Fast Recovery)。服务器

拥塞控制和流量控制的区别

区别 拥塞控制 流量控制
做用范围 全局性的(设计全部主机、路由器、以及与下降网络传输性能有关的全部因素) 点对点的通讯量控制,是个端到端的问题
控制方 发送方控制 接收方控制
控制结果 控制发送方注入到网络中的数据量 控制发送端的发送数据速率,以便接收端来得及接收

2、HTTP、HTTPS

2.一、HTTP(详情参考:HTTP 教程| 菜鸟教程关于HTTP协议,一篇就够了

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。规范把 HTTP 请求分为三个部分:状态行请求头消息主体

2.1.一、HTTP基础知识:URL

统一资源定位符(Uniform Resource Locator)是网络资源的位置和访问方法的简洁表示。常见的url包括4个部分,结构以下图:

组件 含义
方案 使用的协议,如http或https
主机 服务器的域名或IP地址
路径 服务器上资源的本地名,用(/)与前面的scheme分隔开来
查询字符串 经过查询字符串来减少请求资源类型的范围,如参数

2.1.二、HTTP之状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别: 1xx:指示信息--表示请求已接收,继续处理 2xx:成功--表示请求已被成功接收、理解、接受 3xx:重定向--要完成请求必须进行更进一步的操做 4xx:客户端错误--请求有语法错误或请求没法实现 5xx:服务器端错误--服务器未能实现合法的请求

200 OK                        //客户端请求成功
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经受权,这个状态代码必须和WWW-Authenticate报头域一块儿使用 
403 Forbidden                 //服务器收到请求,可是拒绝提供服务
404 Not Found                 //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
复制代码

2.1.三、HTTP请求方法

根据HTTP标准,HTTP请求可使用多种请求方法。 HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。 HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

GET  请求指定的页面信息,并返回实体主体。
HEAD     相似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST     向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会致使新的资源的创建和/或已有资源的修改。
PUT  从客户端向服务器传送的数据取代指定的文档的内容。
DELETE   请求服务器删除指定的页面。
CONNECT  HTTP/1.1协议中预留给可以将链接改成管道方式的代理服务器。
OPTIONS  容许客户端查看服务器的性能。
TRACE    回显服务器收到的请求,主要用于测试或诊断。
复制代码

2.1.四、HTTP与TCP的区别?

TCP协议对应于传输层,HTTP协议对应于应用层,从本质上来讲两者没有可比性。 不少人喜欢把IP比做告诉公路,TCP是告诉公路上的卡车,他们携带的货物就是HTTP协议。 我以为这是很不严谨的,若是非要举个形象的例子,我以为能够把IP比做电话号码TCP就像电话,传输去的声音就像数据包,若是是开会就会遵循电话会议规则(好比HTTP),若是是销售就会遵循推销规则(好比FTP),若是是闲聊就按照双方想要的规则(自定义数据传输协议)。 TCP传输的数据包能够任何格式的,能够自定义规则,能够遵循HTTP协议,也能够遵循FTP协议。

2.1.五、如何解决HTTP的无状态协议?

使用Cookie来解决无状态的问题,Cookie就至关于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。

2.二、HTTPS(详情参考:详细解析 HTTP 与 HTTPS 的区别

https, 全称Hyper Text Transfer Protocol Secure,相比http,多了一个secure。一句话:HTTPS=HTTP+加密+认证+完整性保护

理清几个概念很重要

  • 一、CA(数字证书颁发机构)
  • 二、非对称秘钥:CA的一对非对称秘钥、服务器的一对非对称秘钥、客户端的一对非对称秘钥
  • 三、对称秘钥:客户端随机生成的,用于认证完成以后的数据加解密(客户端经过服务器返回的数字证书中的公钥加密对称秘钥后,发送给服务器)
  • 四、数字证书:CA颁发给服务器的数字证书(证书中的公钥是服务器的公钥,可是签名使用的是CA的私钥)、CA根证书(证书中的公钥是CA本身的公钥,签名使用的是CA本身的私钥<用来保证该证书没有被中间篡改过>)
  • 五、单双向认证:单向认证,客户端验证服务器;双向认证,客户端先验证服务器证书,服务器在验证客户端的证书。双向认证的时候,客户端须要向服务器请求颁发给本身数字证书 = 用服务器的公钥(另一对中的)加密摘要获得的签名+客户端信息 + 客户端公钥。Https单向认证和双向认证

浏览器操做系统、或者应用本身内置了信任的根证书,浏览器或者客户端接收到服务器返回的的CA颁发的数字证书,从内置信任的根证书中获取CA的公钥,而后对服务器返回的数字证书中的签名进行解密获得摘要1,而后对服务器返回的数字证书中的内容进行取摘要运算获得摘要2,最后对比摘要1与摘要2是否相等,继而判断服务方是不是被CA认证的服务方。

2.2.一、SSL解决了通讯中哪些问题?

  • 一、认证(Authentication):没法确认与我正在通讯的人,就是我真正想通讯的人

  • 二、泄露(privacy):与我通讯的内容,被别人偷听

  • 三、篡改(data integrity):我接受到的的内容,并非对方原始发送的数据

SSL不解决如下问题: 不可抵赖性(消息的发送者没办法不认可消息是本身发出的)。由于SSL并不对传输的数据作签名。可是SSL加上数字签名证书能够解决该问题。

2.2.二、检验双方的真实性

HTTPS使用了数字证书(身份认证机构盖在数字身份证上的一个章或印,或者说加在数字身份证上的一个签名),这一行为表示身份认证机构已认定这我的,证书的合法性能够向CA验证。客户端收到服务器的响应后,先向CA验证证书的合法性,若是校验不经过浏览器就会终止链接,并提示用户证书不安全。 数字证书的组成:

  • 证书颁发机构
  • 证书颁发机构签名(数字签名是什么?
  • 证书绑定的服务器域名
  • 证书版本、有效期
  • 签名使用的算法(非对称加密算法,RSA)
  • 公钥
2.2.三、数据的保密性

就是对数据进行加密,一般使用两种加密算法:对称加密非对称加密

对称加密: 加密和解密使用相同的密钥,有点是加解密速度快,缺点是密钥丢失后没法作到保密,经常使用的有AES、DES。 非对称加密: 有一对密钥,公钥(向全部人开放)和私钥(不对外开放)。公钥加密的数据只能私钥解密,私钥加密的数据只能公钥解密,利用这种特性能够用来校验数字签名。

HTTPS的解决方案是这样的:用非对称算法随机加密出一个对称密钥,而后双方用对称密钥进行通讯。具体来讲,就是客户端生成一个随机密钥,用服务器的公钥对这个密钥进行非对称加密,服务器用私钥进行解密,而后双方就用这个对称密钥来进行数据加密了。

2.2.四、数据的完整性

哈希算法能够将任意长度的数据转化成固定大小的字符串,而且该过程不可逆,利用这个特性作数据完整性的校验。

2.2.五、HTTPS完整过程大体以下两图

要点: 使用公钥对摘要加密获得签名,使用私钥解密签名获得公钥

为何须要数字证书? 由于网络通讯的双方均可能不认识,那么就须要第三方介绍,这就是数字证书。数字证书是由Certificate Athority(CA认证中心)颁发的。

2.2.六、为何Charles可以抓取HTTPS报文?

经过上面的分析,咱们知道HTTPS能够有效防止中间人攻击,可是CharlesFiddler是能够抓取HTTPS请求并解密的,它们是如何作到的呢?

Charles做为一个中间人代理,当浏览器和服务器通讯时,Charles接收服务器的证书,但本身动态生成一张证书发送给浏览器,也就是说Charles做为中间代理在浏览器和服务器之间通讯,因此通讯的数据能够被Charles拦截并解密。因为Charles更改了证书,浏览器校验不经过会给出安全警告,必须安装Charles的证书后才能进行正常访问。

  • 一、客户端向服务器发起HTTPS请求

  • 二、Charles拦截客户端的请求,假装成客户端向服务器进行请求

  • 三、服务器向“客户端”(其实是Charles)返回服务器的CA证书

  • 四、Charles拦截服务器的响应,获取服务器证书公钥,而后本身制做一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)

  • 五、客户端接收到“服务器”(其实是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)

  • 六、Charles拦截客户端的响应,用本身的私钥解密对称密钥,而后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)

  • 七、服务器用本身的私钥解密对称密钥,向“客户端”(Charles)发送响应

  • 八、Charles拦截服务器的响应,替换成本身的证书后发送给客户端

至此,链接创建,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称密钥,以后就能够解密或者修改加密的报文了。

HTTPS抓包的原理仍是挺简单的,简单来讲,就是Charles做为“中间人代理”,拿到了 服务器证书公钥 和 HTTPS链接的对称密钥,前提是客户端选择信任并安装Charles的CA证书,不然客户端就会“报警”并停止链接。这样看来,HTTPS仍是很安全的。

2.2.七、如何阻止Charles读取HTTPS数据?

  • 方案一:对HTTPS传输的数据进行二次对称加密(对称秘钥不能泄露)
  • 方案二:使用双向认证,不只客户端验证服务器证书的合法性,服务器也要验证客户端证书的合法性

参考资料

TCP和UDP的最完整的区别

SSL解决了通讯中的哪些问题 ?

浅谈HTTPS通讯机制和Charles抓包原理

HTTP TCP UDP Socket 关系的几个经典图

相关文章
相关标签/搜索