iOS课程观看笔记(八)---网络

在这里插入图片描述

HTTP通信过程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

HTTP协议

HTTP即:超文本传输协议
有关HTTP,主要介绍以下三点:

  1. 请求/响应报文
  2. 连接建立流程
  3. HTTP的特点

请求/响应报文

在这里插入图片描述在这里插入图片描述

问:HTTP的请求方式都有哪些?(被问过)

GET:请求指定的页面信息,并返回实体主体。请求会显示请求指定的资源。

POST:POST请求会 向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据会被包含在请求体中。POST方法可能会创建新的资源或/和修改现有资源。

HEAD:HEAD方法与GET方法一样,都是向服务器发出指定资源的请求。但是,服务器在响应HEAD请求时不会回传资源的内容部分,即:响应主体。这样,我们可以不传输全部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看服务器的性能。

PUT:PUT将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。

DELETE:请求服务器删除指定的页面

OPTIONS:OPTIONS请求与HEAD类似,一般也是用于客户端查看服务器的性能。

TRACE:请求服务器回显其收到的请求信息,该方法主要用于HTTP请求的测试或诊断。

OPTIONS 和 TRACE 一般用于调试,多数线上服务都不支持。

参考HTTP请求方法详解

问:POST和PUT的区别?
  1. 语义不同:PUT 请求通常用于更新或替换服务器上的资源,而 POST 请求通常用于创建新的资源或提交数据到服务器进行处理。
  2. 客户端发送的数据不同:PUT 请求需要客户端发送完整的资源内容,而 POST 请求可以只发送部分资源内容。
  3. 响应不同:PUT 请求成功后通常返回 200 OK 状态码,而 POST 请求成功后通常返回 201 Created 状态码,并返回表示新资源的 URI。
  4. 幂等性不同:PUT 请求具有幂等性,即执行多次 PUT 请求的结果应该相同,而 POST 请求不具有幂等性
问:GET和POST请求方式的区别?

初级:
GET请求参数是以?分割,拼接到URL后面,POST请求参数在Body里面
GET参数长度限制在2048个字符(2K),POST一般没有该限制
GET请求不安全,POST请求比较安全

中高级:
从语义的角度来回答

语义:协议的定义规范
语法:具体实现的手法或者路径

在这里插入图片描述

安全性

不应该引起Server端的任何状态变化
常见的安全性请求方式有:GET HEAD OPTIONS

幂等性

同一个请求方法执行多次和执行一次的效果完全相同
常见的幂等性请求方式有:GET PUT DELETE

可缓存性

请求是否可以被缓存
常见的可缓存性请求方式有:GET HEAD

状态码
问:你都了解哪些状态码?他们的含义是什么?(被问过)

有1 2 3 4 5开头的不同状态

2开头的响应成功
4开头的一般与客户端有关
5开头的一般与服务端有关

简单列举几个常用的:

200 OK 请求成功。一般用于GET与POST请求

400 Bad Request 客户端请求的语法错误,服务器无法理解 或者 请求参数有误
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。

500 Internal Server Error 服务器内部错误,无法完成请求

参考
HTTP状态码
HTTP 响应代码

连接建立流程

在这里插入图片描述

SYN(synchronous建立连接)
ACK(acknowledgement 确认连接)
FIN(finish结束连接)

大致分为三大模块:
建立连接:三次握手
传输数据:请求、响应
断开连接:四次挥手

HTTP的特点

  1. 无连接:HTTP的持久连接方式
  2. 无状态:Cookie/Session
持久连接

在这里插入图片描述
左边是非持久连接,每次请求数据需要 建立连接-传输数据-断开连接

右边是持久连接,在建立连接后的某一个时间段内,可以持续传输数据

持久连接相比非持久连接,会提高数据传输的效率。因为它不需要每次去通过三次握手建立连接和四次挥手断开连接。

在这里插入图片描述

time:持久连接能持续多久有效
max:这条连接最多可以允许多少条数据重用

问:怎么判断一个请求是否结束的?

就是,如何在持久连接中区分,前一个请求结束了,后一个请求开始了。

通过Content-length字段判断
在客户端向服务端请求数据后,服务端向客户端响应的时候,会传输一个Content-length字段,假如Content-length = 1024,那么,客户端检测到接收的数据已经达到Content-length长度(比如1024),则说明此次HTTP响应接收完毕。

还有一种情况:
当客户端通过POST请求向服务端请求数据,可能服务端需要多次响应,给客户端传输数据。
可以在响应字段中,通过chunked(将……分成数份)字段做标识。在最后一个响应中,chunked = 0,代表此处响应结束。

Charles抓包原理是怎样的?

Charles 花瓶图标
Wireshark 鲨鱼

利用HTTP的中间人攻击

在这里插入图片描述
中间人攻击,可以将客户端的请求参数进行修改;
还可以将服务端响应的数据进行修改。

iOS如何防止被抓包?

方法一:
通过检查手机有没有开代理来判断用户有没有抓包,如果开了代理的话就禁止任何网络传输

但是这种方法的缺陷在于,如果用户手机不是在抓包,而是仅开了 VPN 的话,这个方法会认为开代理从而不能正常使用我们的 App,容易误伤,所以并不是太完美。

方法二:
将服务端的公钥证书放在客户端内,强制客户端验证与其通信的是否为服务端
具体有两种做法:
一种是证书锁定(Certificate Pinning)
缺点:公钥证书是会到期的,服务端需要差不多每年都更新自己的证书,客户端也需要记得更新证书这个事儿,因为公钥证书过期之后客户端就没有办法发起请求了。

还有一种是公钥锁定(Public Key Pinning)

证书的内容其实就是公钥、机构信息和签名。我们验证证书链的时候用到的就是公钥,本质上并不需要别的东西,所以我们只需要将公钥内置到我们的应用里,这样校验证书的时候我们用公钥去解密数据,然后和证书内置签名数据比较,结果一致我们就认为证书是有效的。

同时证书升级,本质上公钥是不变的,我们就可以不需要操心过期的问题。
但是注意有的公司服务端是申请全新证书的,所以公钥变了。这个需要注意📢


HTTPS与网络安全

问:HTTPS与HTTP有什么区别?(被问过)

1. 安全性差异

  • HTTP (HyperText Transfer Protocol) 是一个不安全的网络传输协议,它以明文方式发送数据,这意味着数据在传输过程中可以被中间人攻击者读取或修改。
  • HTTPS (HTTP Secure) 是HTTP的安全版本,它在HTTP的基础上通过SSL/TLS协议加密数据传输,提高了数据的安全性。这使得HTTPS在数据传输过程中能防止被窃听、篡改及伪造。

2. 端口

  • HTTP默认使用端口80,而HTTPS默认使用端口443。

3. 性能

  • 由于加密和解密数据需要计算资源,HTTPS在性能上通常比HTTP稍慢。但是随着现代计算能力的提升和优化,这种差距已经变得较小。

4. 使用场景

  • HTTP常用于不涉及敏感信息的网站浏览,例如阅读新闻或查看非个人化的信息。
  • HTTPS则广泛用于需要保护数据安全的场景,如在线购物、金融服务和任何形式的个人数据交换。

5. SSL/TLS证书

  • HTTPS需要使用SSL/TLS证书来建立安全连接。这些证书由证书颁发机构(CA)颁发,不仅加密数据,还可以验证网站的身份,增加用户信任。

综上:HTTP和HTTPS的主要区别在于安全性。HTTP不加密传输的数据,而HTTPS通过SSL/TLS加密传输,保证了数据的安全性。此外,HTTPS使用443端口,而HTTP使用80端口。虽然HTTPS在性能上可能略有下降,但随着技术进步,这种差异已经减少。今天,鉴于网络安全的重要性,许多网站都默认使用HTTPS来保护用户数据。

HTTPS = HTTP + SSL/TLS

在这里插入图片描述

七层网络模型
五层网络模型
TCP/UDP
Socket

问:HTTPS建立连接流程是怎样的?

注意,是HTTPS,需要回答出问安全性相关知识

在这里插入图片描述

在这里插入图片描述

问:HTTPS都使用了哪些加密手段?为什么?

建立连接过程使用非对称加密,非对称加密很耗时(保证安全)

后续的数据传输通信过程使用对称加密

什么是非对称加密?
在这里插入图片描述

一般在客户端使用公钥,服务端使用私钥
私钥不通过网络传输,从而保证信息的安全性

在这里插入图片描述

对称加密,使用的是同一把秘钥,有可能会在网络传输中,被中间人攻击,拿到秘钥,从而破解。
即使秘钥不通过网络传输,而写在客户端,也可能被逆向破解,拿到存储在客户端的秘钥。

所以,在安全性上,非对称加密比对称加密会好很多。


TCP/UDP(重点)

TCP/UDP是传输层的

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

UDP(用户数据报协议)

特点:
无连接、尽最大努力交付(不保证可靠传输)、面向报文

在这里插入图片描述

功能:
复用、分用、差错检查

复用、分用

在这里插入图片描述
每个应用有自己专门的端口号

复用是指:不同的端口号,可以通过同一个UDP到IP地址,再经过物流层传输,将数据传输出去。
分用是指:传输来的数据,可以通过IP地址,和UDP传输到不同的端口号

差错检测

在这里插入图片描述

TCP(传输控制协议)

特点
面向连接、可靠传输、面向字节流、流量控制、拥塞控制

面向连接

数据传输开始之前,需要建立连接:三次握手
数据传输结束之后,需要释放连接:四次挥手

三次握手
问:建立连接为何需要三次握手,两次可以吗?

在这里插入图片描述如果只有两次握手:
假如客户端向服务端第一次发送的1.SYN发生了超时

超时一段时间后,客户端启动超时重传策略,重新发送1.SYN

假如此次传输的1.SYN被服务端接收到,那么,服务端给客户端传输2.SYN和ACK,两次握手建立完成。

而此时,第一个发送的1.SYN终于被服务端接收到了,那么,服务端会将这次的1.SYN当做一个新的连接请求,相当于客户端向服务端发送了两次连接。

三次握手为何能解决这个问题?
还是假如客户端向服务端第一次发送的1.SYN发生了超时

超时一段时间后,客户端启动超时重传策略,重新发送1.SYN

假如此次传输的1.SYN被服务端接收到,那么,服务端给客户端传输2.SYN和ACK。

然后,客户端给服务端传输一个ACK,三次握手建立连接成功。

而此时,第一个发送的1.SYN终于被服务端接收到了,那么,服务端会将这次的1.SYN当做一个新的连接请求,发送给客户端。而客户端拿到服务端的ACK一看,这个我已经接收过了,不需要建立连接,就不再给服务端发送ACK。在一段时间后,服务端没有接收到客户端的ACK,那么,三次握手没有完成,也就是连接没有建立。

四次挥手

在这里插入图片描述

问:断开连接为何需要涉及到两方面的断开?

由于建立的连接是全双通的,也就是客户端可以向服务端发送数据;服务端也可以向客户端发送数据。因此,需要两边都将自己关闭。

为何是四次挥手?

第1次挥手由客户端向服务端发起,服务端收到信息后就能确定客户端已经停止发送数据。
第2次挥手由服务端向客户端发起,客户端收到消息后就能确定服务端已经知道客户端不会再发送数据。
第3次握手由服务端向客户端发起,客户端收到消息后就能确定服务端已经停止发送数据。
第4次挥手由客户端向服务端发起,服务端收到信息后就能确定客户端已经知道服务端不会再发送数据。

为什么不是3次挥手?
在客服端第1次挥手时,服务端可能还在发送数据。
所以第2次挥手和第3次挥手不能合并。

TCP为什么是四次挥手,而不是三次?

可靠传输
问:TCP怎样保证可靠传输的?

主要是从四方面:
无差错、不丢失、不重复、按序到达

可靠传输,在TCP层面,是通过停止等待协议来实现的
停止等待协议
无差错情况、超时重传、确认丢失、确认迟到

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

面向字节流

在这里插入图片描述
发送方发送数据,接收方接收数据

在发送方给TCP后,TCP有一个缓冲区
在TCP连接接收到数据后,TCP也有一个缓冲区

TCP的缓冲区,由TCP自己掌握

比如,发送方发了14 13两个数据,而TCP可能先缓冲进去,不进行发送。而是发送之前接收到的数据12 11 10
等到发送14 13的时候,虽然接收是一个一个接收的,但是有可能TCP将数据进行整合,以一个报文发送出去。
也有可能,发送数据量太大,TCP分两次才将数据发送出去。

也就是,不管发送方发送的数据量是多大,或者多小。TCP会根据实际情况,将数据重新进行整合,然后传输。

这,就是面向字节流

流量控制

基于滑动窗口协议来实现的

什么是滑动窗口协议?

在这里插入图片描述
发送窗口在发送缓存之中
接收窗口在接收缓存之中

接收窗口可以动态调整发送方的发送窗口大小

比如,接收方是服务端,现在服务端有点忙,接收不了太多数据,那么,接收窗口会调整,从而动态调整发送方的发送窗口,从而使得发送方的发送窗口变小,发送数据变小。

拥塞控制

有两个策略:
慢开始、拥塞避免

快恢复、快重传

问:请描述TCP的慢启动特点

在这里插入图片描述

慢开始、慢启动

一开始,发送1个,没事,再发送2个,再发送4个,8个指数级增长。
到达门限初始值16的时候,不再指数增长,改为线性增长。

线性增长一段时间后,发生了网络拥堵,则发送直接从1开始

再次指数增长,但,门限初始值设置为发送网络拥堵值的1/2

到达门限初始值后,再次进行线性增长。

这就是TCP的慢开始、慢启动特点。

DNS解析

问:你了解DNS解析吗?DNS解析的过程是怎样的?

在这里插入图片描述
简单来说,你搜索www.baidu.com,其实你不能够直接找到这个地址的。
你需要通过DNS服务器查询,找到www.baidu.com对应的IP地址,然后根据IP地址,查找到对应的真正地址。

问:DNS解析的查询方式有哪些?

递归查询
迭代查询

在这里插入图片描述
在这里插入图片描述

递归查询:
在递归查询中,当设备(例如电脑或者手机)向DNS服务器发起一个DNS查询请求时,如果该服务器无法直接返回查询结果,它会接着向其他的DNS服务器查询,直到获得结果再一并返回给您的设备。在这个过程中,您的设备只需要等待最终结果,而不需要关心具体的查询过程。
客户端——>本地DNS服务器——>根服务器——>顶级域服务器(.com服务器)——>权威服务器

迭代查询:
迭代查询的过程中,当设备向DNS服务器发起查询请求,如果该服务器无法直接返回查询结果,它就会返回一个能够继续查询的服务器地址给您的设备,然后设备会继续向这个地址发送新的查询请求,这样的过程重复进行直到找到结果为止。
客户端——>本地DNS服务器——>客户端——>根服务器——>客户端——>顶级域服务器——>客户端——>权威服务器

根本区别在于:递归查询把解决问题的任务全部委托给服务器;而迭代查询则是客户端自己在不同的服务器间跳转查询。

问:DNS解析存在哪些常见问题?(重中之重)

DNS劫持问题
DNS解析转发问题

DNS劫持

在这里插入图片描述

由于,查询DNS服务器是UDP,且明文传输
有可能被钓鱼DNS劫持,然后返回一个错误的IP地址,从而客户端访问了一个错误的网站。常见于各种。。。你懂得

问:怎么解决DNS劫持

两种:httpDNS长链接

httpDNS

在这里插入图片描述
正常情况下,使用DNS协议走53端口
现在,用HTTP协议,走80端口

在这里插入图片描述
图中,http://119.29.29.29/d?dn=www.imooc.com&ip=172.18.134.108所代表的含义:

119.29.29.29是全球最大的DNS服务器
www.imooc.com是我们要访问的网络地址
172.18.134.108是我们自身的IP地址

这样,就能通过HTTP的GET请求方式来获取www.imooc.com的IP地址

长链接

在这里插入图片描述

问:DNS劫持与HTTP的关系是怎样的?

没关系

DNS解析是发生在HTTP建立连接之前的

DNS解析请求使用UDP数据报,端口号53。
与HTTP无关

DNS解析转发

在这里插入图片描述

假如,我们客户端想解析一个地址,发送给了移动服务器的DNS。
而移动DNS懒省事,直接去电信DNS查找
电信DNS去权威DNS查找,而权威DNS根据访问服务器的不同,给了不同的IP地址。此时,给的是电信的3.3.3.3

然后返回给移动,返回给客户端

客户端本来用的移动网,最后却访问的是电信那边返回的IP地址,这就有可能造成网速慢的问题。

那么,这个是不是也是通常翻墙或者手机卡通用流量、定向流量的解决方法呢?


Session/Cookie

两者是对HTTP协议无状态特点的补偿

在这里插入图片描述
比如,你访问一个商城网站,没有登录,将某件衣服加入购物车。等下次打开的时候,由于HTTP协议是无状态的,它不知道你是谁,再次打开的时候,加入购物车的衣服没了。

为了解决这个问题,就有了Session和Cookie

Cookie

Cookie主要用来记录用户状态、区分用户。
其保存在客户端

在这里插入图片描述
其过程大致是:
客户端第一次向服务端请求数据,服务端生成一个Cookie,响应的时候传给客户端,客户端进行保存。

等下次再次打开网站,请求数据的时候,会将客户端原有的Cookie传给服务端,服务端拿到Cookie进行解析,发现,你原来购物车里加入了一件衣服,则现在把有衣服的数据返回给客户端。

当然,运营商可以通过用户手机里面的Cookie,分析用户的行为,喜好,购物习惯,从而推送相关信息,引导用户去消费。

客户端发送的Cookie在HTTP请求报文的Cookie首部字段中

服务端设置HTTP响应报文的Set-Cookie首部字段

问:怎样修改Cookie?
  1. 新Cookie覆盖旧Cookie
  2. 覆盖规则:name、path、domain等需要与原Cookie一致
问:怎样删除Cookie?
  1. 新Cookie覆盖旧Cookie
  2. 覆盖规则:name、path、domain等需要与原Cookie一致
  3. 设置Cookie的expires=过去的一个时间点 或者 maxAge = 0;
    这样,将Cookie设置为过期,则Cookie相等于失效,等同于删除。
问:怎样保证Cookie的安全?
  1. 对Cookie进行加密
  2. 只在HTTPS上携带Cookie
  3. 设置Cookie为httpOnly,防止跨站脚本攻击

Session

Session也是用来记录用户状态、区分用户的
其存储在服务端

问:Session和Cookie的关系是怎样的?

Session需要依赖于Cookie机制

在这里插入图片描述

在这里插入图片描述


问:一次完整的网络请求都经历什么?具体用到了哪些协议?

让我们通过一个具体的例子来详细解析网络请求的全过程:比如,你从浏览器发起一个请求以访问www.example.com的网页。我们将跟随这个请求穿越OSI模型的7层,看看每层都发生了什么,以及涉及到哪些协议。

0. 用户在浏览器输入www.example.com时的初始步骤:

1. 应用层 (Application Layer)

DNS解析
  • 活动:将域名www.example.com解析成IP地址。
  • 协议:DNS (域名系统)。
  • 说明:在应用层发出请求之前,需要知道目标服务器的IP地址。DNS解析是将人类可读的域名转换成机器可读的IP地址的过程。
HTTP请求
  • 活动: 浏览器构造一个HTTP请求,用于获取www.example.com的首页。
  • 协议: HTTP (超文本传输协议)。
  • 说明: 这一层处理与应用程序直接交互的部分,比如你通过Web浏览器发送的请求。

2. 表示层 (Presentation Layer)

  • 活动: 浏览器可能需要将请求的数据(如表单数据)转换成合适的格式,比如通过编码或加密处理。
  • 协议: SSL/TLS (安全套接层/传输层安全)加密HTTP请求,成为HTTPS。
  • 说明: 此层确保数据以可接受的形式传输,例如加密数据以保护信息在互联网上传输时的安全。

3. 会话层 (Session Layer)

  • 活动: 建立、维护、断开与www.example.com的网络连接会话。
  • 协议: 没有特定协议,但可以考虑如SSL/TLS在此层有作用,为HTTPS连接提供支持。
  • 说明: 控制端与端的对话,管理用户会话。

4. 传输层 (Transport Layer)

  • 活动: 将HTTP请求分割成多个段,准备传输。
  • 协议: TCP (传输控制协议)。
  • 说明: TCP提供可靠的、面向连接的数据传输服务。它将大的数据包分割成小的段,并确保每个段能可靠地达到目标。

5. 网络层 (Network Layer)

  • 活动: 决定数据包发送的路径。
  • 协议: IP (互联网协议)。
  • 说明: IP负责将每个数据包从源地址路由到目的地址。在这个过程中,可能涉及到多个网络和设备。

在数据从网络层下发到数据链路层之前,可能还需要进行以下步骤:

ARP查询(若需要)
  • 活动:若IP地址是局域网内的目标或下一跳路由器的IP地址,使用ARP(地址解析协议)获取对应的物理地址(MAC地址)。
  • 协议:ARP。
  • 说明:在数据可以在本地网络上传输之前,需要知道目的地的物理地址(即MAC地址)。如果ARP缓存中没有这个信息,就会发送一个ARP广播请求来查询它。

6. 数据链路层 (Data Link Layer)

  • 活动: 在直接连接的节点之间传输IP数据包,处理错误校验和重传。
  • 协议: Ethernet (以太网)。
  • 说明: 这一层确保数据能在相邻的网络设备间准确无误地传输,例如在你的电脑和路由器之间。

7. 物理层 (Physical Layer)

  • 活动: 通过物理媒介传输数据。
  • 协议: 转换为通过电缆或无线介质传输的电信号或光信号。
  • 说明: 这是数据传输的最底层,负责原始比特流的传送。

网络响应的回传

服务器接收到请求后,根据相同的层级结构处理响应。响应数据包同样经过物理层、数据链路层、网络层(可能还会涉及ARP),传输层,会话层,表示层,最后是应用层,再由浏览器渲染出www.example.com的内容。

在整个过程中,可能还涉及到更多的细节和其他协议(比如NAT转换、防火墙处理规则等),具体取决于网络环境和配置。但以上是一次典型网络请求和响应过程中的关键步骤和涉及的协议。

在这里插入图片描述

参考视频:一次请求涉及的网络协议

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值