美文网首页
OC总结篇 - 网络基础

OC总结篇 - 网络基础

作者: 亲爱的大倩倩 | 来源:发表于2019-12-17 15:52 被阅读0次

    相关文章: https://www.jianshu.com/p/dc5b91f826f0

    HTTP的发展

    HTTP诞生:1990年,www全球信息刚起步时就得到了应用
    HTTP0.9版本:1991年,只有一个命令GET
    HTTP1.0版本:1996年,不仅可以传输文字,还可以传输图像,视频,二进制文件
    HTTP1.1版本:1999年,进一步完善了HTTP协议,直到现在一直是很流行的版本
    HTTPS: 2000年,是以安全为目标的HTTP通道

    什么是HTTP,HTTP协议具体包含哪些内容,HTTP连接是怎么建立的

    超文本传输协议

    HTTP报文格式
    请求报文 响应报文
    HTTP的请求方式有

    GET
    POST
    HEAD
    PUT
    DELETE
    OPTIONS

    GET和POST的区别

    初级回答

    1. 请求参数位置: GET以问好拼接放在URL中,POST放在Body中
    2. 请求参数长度限制: GET限制2048个字符,POST无限制
    3. 安全性: GET不安全,POST相对安全

    高级回答

    1. GET: 用来获取资源的,需要遵从得是:安全性,幂等性,可缓存性
    2. POST: 是用来处理资源的,需要遵从的是非安全,非幂等,不可缓存

    安全性:
    指的是不应该引起Server端相关数据的任何状态变化
    GET HEAD OPTIONS遵从安全性

    幂等性:
    同一个请求方法执行多次和执行一次的效果完全相同
    PUT DELETE遵从

    可缓存性:
    请求是否可以被缓存
    GET HEAD遵从

    常见状态码及含义

    1xx
    2xx: 200响应成功
    3xx: 301和302可能是网络重定向
    4xx: 401和404可能是客户端发起的请求本身存在问题
    5xx: 501和502可能代表server端本身异常

    HTTP的连接建立流程,涉及到TCP的三次握手和四次挥手
    1. 第一步先发起一个HTTP请求前,需要通过TCP的三次握手来建立连接,其实是客户端和server端的三次交互
    2. 第二步是,在这条TCP通道上进行HTTP的请求与相应的数据传递
    3. 第三次是TCP的四次挥手,也就是客户端和Server的四次交互
    1.客户端发送SYN同步报文给服务端
    2.服务端收到后,会给客户端回复报文SYN,ACK
    3.客户端收到后会给服务端回复报文信息ACK报文
    三次握手成功后证明TCP的通道建立成功了,下面就可以发送数据了
    
    4.当我们点击登录按钮,客户端会发送HTTP的请求报文到服务端
    5.当服务端收到4时,处理后返回给客户端信息,就是相应报文
    
    结束后通道需要关闭,假设这次关闭是由客户端发起的
    6,客户端发送FIN报文,即终止报文
    7.  服务端收到终止报文后,会返回给客户端一个ACK确认终止
    此时客户端向服务端方向的连接已经断开了
    
    8。过一段时间,服务端又会发送给客户端第8条FIN  ACK终止报文
    9。当客户端收到终止报文之后,回复给服务端一条ACK确认报文
    此时由服务端向客户端方向的TCP连接通道已经断开了
    
    TCP连接通道是双向的一条通道,客户端可以通过这条通道向服务器端发送数据,服务器端也可以通过这个通道向客户端发送数据???
    

    疑问:
    🛬为什么TCP是三次握手,而不是两次?
    🛫四次挥手为什么要进行两方面的断开?

    HTTP的特点
    1. 无连接: 它的连接是有一个建立连接和释放连接的过程
      解决方案是:HTTP的持久连接

    2. 无状态: 在多次发送HTTP请求的时候,如果是同一个用户的话,对于server端,它是不知道这是同一个用户的
      当我们打开一个网页去购买商品的时候,会添加到购物车中,会发送多次请求,那么server端应该如何去规避这种无状态的弊端呢
      解决方案是HTTP的Cookie和Session相关技术

    持久连接

    非持久连接是指,当客户端和server端进行交互时,会打开一个TCP连接,然后关闭,再请求时,又打开一个TCP连接,再关闭,也就是每次网络请求,都要新创建TCP连接
    ,每次都要经历三次握手和四次挥手

    持久连接是指,当我们打开一条TCP通道,在一定时间内,多个HTTP请求,是在同一条TCP通道中进行数据传递,过一段时间后才会关闭这条通道

    HTTP为了提升请求响应的效率,所以才有了持久连接这个方案

    🇫🇯持久连接的头部字段有:

    1. Connection : keep-alive 客户端期许采用持久连接
    2. time: 20 持久连接需要持续多长时间,20S内如果再次发起同一个域名或者IP的请求,可以 复用TCP通道
    3. max: 10 最多可以支持多少个HTTP请求和响应对

    🐒同一条TCP通道上,产生了多次HTTP请求,那么怎样判断一个请求是否结束和后一个请求的开始呢?

    1. 请求和响应报文都有头部字段,在响应报文的头部字段中会涉及到
      Content-length: 1024
      在我们发送请求,server回复时,会携带响应数据的大小,就是Content-length,当客户端所接收的字节数到达这个值时,说明这个HTTP请求响应已经全部接收了,意味着结束

    2. POST请求时,Server端返回往往是多次响应返回给这些数据的,可以通过头部字段
      chuked: 最后一个块是空chuked
      来判断一个请求是否结束
      当有多个块通过HTTP的TCP连接传输给客户端时,每个报文都会带有一个chuked字段,而最后一个块,它是一个空的chuked,可以根据chuked是否为空来判断上一个请求是否结束

    HTTPS与网络安全

    2016年年底,苹果公司向开发者提出要求:全面适配https网络请求,此要求是为了提高iOS客户端的安全性

    HTTP和HTTPS的区别:HTTPS = HTTP + SSL/TLS,多出的 SSL/TLS,就是安全模块

    总结: HTTPS是安全的HTTP,他的安全,是由SSL/TLS协议来保障的
    IP层: 网络层
    TCP层:传输层
    HTTP:应用层
    SSL/TLS: 协议中间层


    HTTPS的连接建立流程(有安全保证)
    1. 客户端发报文,包含客户端支持的TLS版本,客户端支持的加密算法,还有一个随机C
    2. Server返回给客户端一个握手消息,也包括最终决定的加密算法(客户端提供N中,Server选择一个),随机数S和Server的证书
    3. 客户端进行证书的公钥验证,来判定当前server是否合法
    4. 客户端组装会话秘钥(用随机数C+S+客户端产生的预主秘钥三个组装合 )
    5. 客户端会发送报文,通过Server的公钥对预主秘钥进行加密传输
    6. server端通过私钥解密得到预主秘钥
    7. server端组装会话秘钥(用随机数C+S+私钥解密得到的预主秘钥三个组装合成)
    8. 客户端向Server端发送加密的握手消息
    9. Server端返回给客户端一个加密的握手消息,来验证安全通道是否已经验证完成
    HTTPS的连接建立流程

    备注:
    会话秘钥 = 随机数S + 随机数C + 预主秘钥
    会话秘钥是对称加密的秘钥

    公钥和私钥是非对称加密

    HTTPS中使用了哪些加密手段,为什么使用这些?

    主要使用了对称加密和非对称加密

    1. 连接建立过程使用非对称加密,保证安全
      非对称加密很耗时!!!,因为加密和解密使用的手段不一样
    2. 数据传输过程是使用的对称加密,减少耗时所带来的性能损耗

    非对称加密🌰
    假设发送方要发送hello出去,那么发送方会先用一个公钥对hello进行加密,之后经过TCP的连接,将加密之后的内容发给接收方
    当接收方拿到数据后,用私钥进行解密,然后拿到hello
    加密用公钥,解密就要用私钥,如果加密用私钥,那么解密就要用公钥
    🇫🇯加密和解密必须使用不同的钥
    好处是非常安全,只有公钥是在TCP中传输,私钥永远保留在Server端,不涉及被中间人盗取的情况


    对称加密🌰
    发送方使用一个对称秘钥进行加密,然后将结果通过TCP连接传过去
    接收方通过同一个对称秘钥进行解密,拿到结果
    加密和解密是同一把钥匙
    自身缺点是:秘钥需要通过TCP通道进行传递,这样server才能使用这个秘钥,一旦在传递过程中被中间人攻击,那么就不能保证安全了


    工具
    Charles查尔斯小瓶子(网络调试代理)

    当你开着charles去刷新某个网页时,charles会抓到你请求的数据

    🐒 查尔斯抓包原理是什么?
    利用了HTTP的中间人攻击漏洞来进行实现的

    🐒关于HTTP的中间人攻击是什么?
    当客户端发送请求时,中间人会拦截住,然后假冒客户端的身份,去向server请求, server会返回结果给中间人,然后中间人再把结果返回给客户端
    中间人可以篡改我们请求的参数,包括server返回的数据也可以篡改

    1. Wireshark(网络分析器)
      打开Wireshark的wifi连接,然后随便打开一个网页,就可以在Wireshark看到网络数据
      80是HTTP的端口号
      5985是客户端的临时端口号
      下面这条59854 - 80的数据,是客户端向服务器端方向发送的一个报文,还可以看到是TCP报文,并且是SYN,证明是第一次握手
    传输层中的TCP和UDP

    TCP: 传输控制协议
    UDP: 用户数据报协议

    UDP

    UDP协议是什么,特点和功能是什么?
    🇫🇯特点:

    1. 无连接: 发送UDP数据报时,不需要事先建立好连接,也不需要释放连接
    2. 尽最大努力交付: 不保证可靠传输
    3. 面向报文: 既不合并,也不拆分,它会将应用层报直接拼接UDP首部,组成UDP数报,然后再在IP层拼接上IP首部,直接向外传送
      !](https://img.haomeiwen.com/i1602974/fc3012d6f898f61f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
      备注:
      IP层: 网络层
      TCP层:传输层
      HTTP:应用层
      SSL/TLS: 协议中间层

    🇫🇯功能:复用分用,差错检测

    复用分用
    建立传输过程中需要IP地址和端口号的组成,也就是常说的套接字


    TCP

    特点

    1. 面向连接 : 数据传输开始前需要建立连接,结束后要释放连接
    2. 可靠传输: 保证报文无差错,不丢失,不重复,按序到达
    3. 面向字节流
    4. 流量控制
    5. 拥塞控制

    🛫为什么是三次握手?
    三次握手能解决请求的超时场景



    三次握手可以解决客户端第一次SYN报文的超时问题
    假如第一次SYN超时,客户端会在一定时间后发起SYN重连,当Server回复连接报文后,如果客户端的第一个超时SYN此时发出来了,如果是两次握手的话,那么Server端会认为客户端发来两次连接报文,如果是三次连接,当Server回复后,会等待客户端的ACK确认报文,客户端只会确认一次,那么Server就会认为客户端第二次发送的SYN报文是无效的

    🛫为什么是四次挥手?



    6和7之后,客户端向server端的通道就关闭了
    8和9之后,server端向客户端的通道就关闭了
    之所以关闭两次,是因为TCP通道是双向的,一条通道,两方都可以发送和接收,所以必须两次断开

    DNS解析

    域名到IP地址的映射

    Session / Cookie

    是为了解决HTTP的无状态特点的

    无状态: 在多次发送HTTP请求的时候,如果是同一个用户的话,对于server端,它是不知道这是同一个用户的
    当我们打开一个网页去购买商品的时候,会添加到购物车中,会发送多次请求,那么server端应该如何去规避这种无状态的弊端呢

    Cookie是用来区分用户的,他会记录用户状态,保存在客户端
    Session也是用来区分用户的,他会记录用户状态,保存在Server端

    相关文章

      网友评论

          本文标题:OC总结篇 - 网络基础

          本文链接:https://www.haomeiwen.com/subject/hwuowctx.html