iOS晋级知识汇总(十二)网络

网络

  • http协议
  • http与网络安全
  • TCP/UDP
  • DNS解析
  • Session/Cookie

HTTP

  • 请求/响应报文
  • 连接建立的流程
  • HTTP的特点

请求报文

  • 请求行
    • 方法、URL、协议版本、
    • CRLF (Carriage-Return Line-Feed)回车换行符
  • 请求头部
    • 首部字段名:值 CRLF
    • 首部字段名:值 CRLF
    • CRLF
  • 实体
    • get不带
    • post带
请求报文.png

响应报文

  • 响应行
    • 版本、状态码、短语(状态码的描述)、CRLF
  • 响应头部
    • 首部字段名:值 CRLF
    • 首部字段名:值 CRLF
    • CRLF
  • 响应实体
响应报文.png

HTTP的请求方式都有哪些?

get、post、head、put、 delete、options

get和post方式有何区别?

  • get请求参数以?分割拼接到URL后面,post请求参数在Body里面

  • get参数长度限制2048个字符,post一般没有该限制

  • get请求不安全,post请求比较安全

  • get用来获取资源?

    • 安全的
    • 幂等的
    • 可缓存的
  • post处理资源

    • 非安全的
    • 非幂等的
    • 不可缓存的

这些数据都是从RFC(Request For Comments)获取的。

安全性

  • 不引起server端的任何状态变化
  • get、head、options

幂等性

  • 同一个请求方法执行多次和执行一次的效果完全相同。
  • get、put、delete

可缓存性

  • 请求是否可以被缓存
  • get 、head
  • 官方文档定义的一个规范,代理服务器可以缓存,

状态码

2XX(成功)、3XX(发生网络的重定向)、4XX(客户端发出的请求有异常)、5XX(server有异常)

HTTP的连接过程

HTTP中的TCP连接的三次握手,和四次挥手

三次握手

  • 1、client -> syn -> server
  • 2、server -> syn,ack -> client
  • 3、client -> ack -> server

传输数据

  • 4、Client -> http请求报文 ->server
  • 5、Server -> http响应报文 ->Client

四次挥手

  • 6、client -> FIN -> server
  • 7、server -> ACK -> client
  • 8、server -> FIN、ACK -> Client
  • 9、Client -> ACK -> server
HTTP的连接过程.png

HTTP的特点

  • 无连接

    • HTTP的持久连接方案
    • 如何理解HTTP的持久连接方案
  • 无状态 (多次发送http请求,如果是同一个用户,server端是不知道的)

    • http如何规避无状态?
      • Cookie、session

HTTP的持久连接

非持久连接

每次发送网络请求都是需要重新创建TCP的连接的。

持久连接

打开一条TCP通道,之后在一定时间,多个HTTP请求可能都是这条TCP链路上面进行的请求的。在经历一定时间之后,会关闭这条TCP通道。提升的HTTP请求响应的效率。

持久连接.png

请求头部字段

  • Connection :keep-alive
  • time:20 持续多久有效
  • max: 这条连接最多发生多少次请求报文和响应报文对的次数。

如何判断一个请求是否结束的?

  • content-length : 1024
    • 响应报文有一个content-length,当我们响应完成以后,根据这个字段的内容,来判断我们接收到的数据字节数有没有达到content-length,如果达到就代表已经完成了请求。
  • Chunked
    • 在响应报文中的头部字段有一个chunked,该请求的最后一次请求中的响应报文头部字段有一个Chunked为空的字段,那么久整个这个请求已经完成了。

Charles抓包的原理是怎么样的?

  • 利用了中间人攻击漏洞来实现的。

HTTPS与网络安全

HTTPS是安全的HTTP,它的安全是由应用层之下,传输层之上的TLS/SSL协议决定的

HTTPS和HTTP什么区别?

HTTPS = HTTP + SSL/TLS

HTTPS的协议栈

HTTPS协议栈.png

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

  • client -> (报文)client支持TLS版本号,支持的加密算法,Random numberC -> server
  • server -> 选择的加密算法,random number S, server证书 -> client
  • client -> 验证server证书,也就是验证公钥、私钥是否正确,server是否合法
  • client -> 组装会话密钥,通过Random numberC、S和预主密钥。
  • Client -> 通过server的公钥对预主密钥进行加密传输 -> server
  • server -> 通过私钥来解密的到预主密钥
  • server -> 组装会话密钥,通过Random numberC、S和预主密钥组装会话密钥
  • client -> 加密的握手消息 -> server 验证安全通道是否完成
  • server -> 返回一个加密的握手消息 -> client 安全通道创建完成
HTTPS加密的过程.png

会话密钥

会话密钥 代表的是对称加密的一个结果。

会话密钥 = 一定的算法(random S + random C + 预主密钥)

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

  • 对称加密
  • 非对称加密
    • 耗时

因为加密和解密非对称加密的算法是不一样的,所以在连接建立过程中,使用非对称加密来保证安全。

如果连接建立以后,数据传输的时候用对称加密,来解决这种耗时操作带来的性能损耗。

TCP/UDP

传输层协议

TCP

传输控制协议

TCP的特点

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

面向连接

  • 数据连接之前,需要建立连接
    • 三次握手
  • 数据传输完成以后,需要释放连接
    • 四次挥手

可靠传输

  • 无差错

  • 不丢失

  • 不重复

  • 按序到达

  • 可靠传输在TCP层面是通过停止等待协议来实现的。

    • 无差错情况
    • 超时重传
    • 确认丢失
    • 确认迟到

无差错情况:

无差错情况.png

超时重传:

通过重传策略能保证:1、差错校验2、不丢失

超时重传.png

确认丢失:

client -> 分组报文 -> server
server -> 确认报文 -> 丢失没有传给client

这个时候,client可以冲过超时重传,来解决没有响应的问题,client超时重传,同时server在收到这个分组报文以后,要做两个步骤:1、丢弃掉重传的M1报文,发送给client确认报文


确认丢失.png

确认迟到:

确认报文,在网络当中被堵死,等client超时重传已经完成以后才拿到server的确认报文时,这个超时的确认报文,client接收以后不做任何操作。

确认迟到.png

面向字节流

  • 当发送方发送数据,有一个发送缓冲,而接收方也有一个接收缓冲
  • 发送方每次发送给接收方的字节数,TCP会根据自己的情况进行划分,发送方发送了10个字节,并不是一次性把10个字节全部发送给接收者,一次性发送多少字节的数据时TCP根据情况自己决定的。
面向字节流.png

流量控制

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

发送窗口时根据接收窗口的大小来控制的。是根据报文的头字段进行控制的。

当我们现在要继续发送数据的时候,可能由于接收方的接收窗口没有那么大,如果说发送方的窗口非常大的话,实际上就是需要确认报文的时候,在头部添加一个字段来控制发送窗口的大小。

滑动窗口协议的过程.png

拥塞控制

  • 慢开始、拥塞避免
  • 快恢复、快重传

慢开始、拥塞避免:

一开始发送1个报文,如果没有产生拥塞就继续发送2个,如果还是没有拥塞就继续按照指数增长发送报文,直到发送到门限初始值的时候,发送的报文指数增量变成了线性增量,直到出现网络拥塞(网络拥堵判断比较复杂,比如可以这么理解连续三个报文的确认ACK都没有收到那么就可以判定时网络拥塞),然后按乘法减小,来减少发送报文的数量直到发送一个报文,再重新开始开始,并调整它的门限值。

快恢复、快重传:

在拥塞以后,直接从新的门限值开始使用拥塞避免加法增大策略进行发送报文

拥塞控制.png

TCP的问题

为什么要做三次握手?

假如是2次握手。

假设发送一个syn同步报文,在网络环境中超时,发生超时以后,客户端会发生一个超时重传的策略,重新发送一个syn同步报文,当server端收到syn的报文以后,会向client发送一个syn、ack确认报文,如果是2次握手那么就相当于建立了tcp连接,

假如说,上述2次握手已经完成了,那么重试之前的超时syn报文,发送到了server端,那么server端肯定会认为又有一个TCP建立连接的请求。实际上client建立的连接只有一次。

那么我们用三次握手?

当我们超时的报文被server接收以后,会发送一个确认报文给client,,如果说client已经建立起了TCP连接,那么就不会向Server发送最终确认报文,那么server短也就不会建立起来第二个TCP连接。

TCP为什么要三次握手.png

为什么要四次挥手

client跟server是全双工的概念

  • Client -> FIN -> server
  • Server -> ACK -> client 此时client就已经关闭了。而server端并没有关闭
  • 如果这时候server端还有数据没有传完,那么继续传数据。
  • 当server数据发送完成以后 Server -> FIN\ACK -> client
  • client -> ACK -> server
为什么TCP需要四次挥手.png

UDP

用户数据报协议

UDP特点

  • 无连接, 不需要建立连接
  • 尽最大努力交付 ,不可靠传输
  • 面向报文,既不合并,也不拆分
UDP面向报文的特点.png

UDP的功能

  • 复用
  • 分用
  • 差错检测

复用

socket使用的时候需要ip和端口号,同一个IP地址的电脑上面不同的端口代表不同的应用。同一个应用也可能使用不同的应用层的协议,它们对应的端口号不一样,不管哪一个端口即将要传输数据出去都可以传输层UDP数据报,在经由IP。这就是多端口复用的概念。

分用

从Ip层接收了一个IP数据报数据(每一个数据报都有源端口和目标端口的概念),把它拆分成UDP,根据目标端口进行分发,这就是分用的概念

UDP的复用和分用.png

差错检测

UDP进行差错检测的时候需要拼接的内容。

UDP的差错检测.png

上述表红色位校验位,当接收方接收到UDP数据的时候采用同样的办法的到检验和,是否和传过来的检验和一样,如果一样就没问题,如果不一样就会出现问题

NDS解析

了解NDS解析吗?

域名到IP地址的映射,DNS解析请求采用UDP数据包,且名文

client通过DNS协议向DNS服务器请求对相应域名的解析,得到Ip地址,再由client向对应的IPserver发送相应的网络请求。

DNS解析过程.png

NDS解析查询方式?

  • 递归查询 (我去帮你问一下)
    • client去本地DNS请求获取IP,本地DNS不知道,它会去找根域,根域没有找顶级DNS,顶级没有就找权限DNS,找到以后在按照原路返回给Client
DNS递归查询.png
  • 迭代查询 (我告诉你谁可能知道)
    • client去本地DNS请求获取IP,本地DNS不知道,它会去找根域DNS,根域会告诉你顶级DNS有可能知道,我告诉你谁可能知道,你自己去问
DNS迭代查询.png

NDS解析存在哪些常见的问题?

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

DNS劫持

DNS解析是UDP数据报,且是名文的,钓鱼服务器会劫持到你的请求,并返回给你错误的IP地址,最终客户端拿到一个错误的serverIP。

DNS劫持.png

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

  • DNS劫持根HTTP完全没有关系的。
  • DNS解析发生在HTTP建立之前
  • DNS解析请求使用UDP数据报,端口号是53

DNS解析转发

DNS解析转发.png

如何解决DNS劫持?

  • httpDNS
  • 长连接

httpDNS

使用DNS协议向DNS服务器的53端口进行请求换成使用HTTP协议向DNS服务器的80端口进行请求
,119.29.29.29 时中国最大的DNS中介服务器,名字叫DNSport

http://119.29.29.29/d?dn=域名&ip=自己的ip地址

HTTPDNS.png

长连接

DNS长连接解决DNS劫持.png

Session/Cookie

HTTP协议无状态特点的补偿

Cookie

Client多次发送请求,server是无法记住到用户是不是之前的某个用户

Cookie主要用来记录用户状态,区分用户:状态保存在客户端。响应报文头部有一个setCookie这个字段。后续的请求报文头部添加Cookie字段值为响应的Set-Cookie

怎么样修改Cookie?

  • 新Cookie覆盖旧Cookie
  • 覆盖规则:name、path、domain等需要与原Cookie一致。

怎么样删除一个Cookie?

  • 新Cookie覆盖旧Cookie
  • 覆盖规则:name、path、domain等需要与原Cookie一致。
  • 设置Cookie的expires=过去的一个时间点,或者maxAge=0

怎么保证Cookie的安全?

  • 对Cookie进行加密处理 脚本可以破解
  • 只在https上携带Cookie 不容易破解
  • 设置Cookie为httpOnly,防止跨站脚本攻击

Session

Session也是用来记录用户状态,区分用户的。状态存放在服务器

Session和Cookie的区别

  • Session把状态存放到服务器端
  • Cookie把状态存放在客户端

Session和Cookie关系是怎么样?

Session需要依赖与Cookie机制来实现

Session的工作流程

Session的工作流程.png

面试题

HTTP的GET和POST方式有什么区别?

GET

  • 安全是的get请求不会改变server的状态
  • 幂等的,请求一次或者多次的到的结果是一样的
  • 可缓存的

POST

  • 不安全的,post可以修改server的状态
  • 不幂等的,请求一次或者多次的到的结果是不一样的
  • 不可缓存

HTTPS连接建立流程是怎么样?

TCP和UDP有什么区别?

TCP

  • TCP是面向连接的,支持可靠传输、面向字节流,
  • 包括TCP提供了流量的控制跟拥塞的控制

UDP

  • 只是简单的提供了复用、分用、差错检测的基本传输层的功能
  • 无连接的

简述TCP的慢开始过程?

客户端怎么样避免DNS劫持?

  • httpDNS
  • 长链接DNS

TCP连接的时候为什么是三次,而不是二次?

假如是2次握手。

假设发送一个syn同步报文,在网络环境中超时,发生超时以后,客户端会发生一个超时重传的策略,重新发送一个syn同步报文,当server端收到syn的报文以后,会向client发送一个syn、ack确认报文,如果是2次握手那么就相当于建立了tcp连接,

假如说,上述2次握手已经完成了,那么重试之前的超时syn报文,发送到了server端,那么server端肯定会认为又有一个TCP建立连接的请求。实际上client建立的连接只有一次。

那么我们用三次握手?

当我们超时的报文被server接收以后,会发送一个确认报文给client,,如果说client已经建立起了TCP连接,那么就不会向Server发送最终确认报文,那么server短也就不会建立起来第二个TCP连接。

四次的挥手,为什么要两方面的断开

Client和server是全双工的概念

  • Client -> FIN -> server
  • Server -> ACK -> client 此时client就已经关闭了。而server端并没有关闭
  • 如果这时候server端还有数据没有传完,那么继续传数据。
  • 当server数据发送完成以后 Server -> FIN\ACK -> client
  • client -> ACK -> server

在client关闭完成以后,server如果还有数据没有发送完成,server端还是可以单独向client发送数据,直到完成在发送 FIN\ACK结束报文,client在响应ACK报文,这样就相当于整个HTTP请求结束

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 1:描述tcp/udp的区别及优劣,及其发展前景 TCP 建立连接 完整性强 速度慢—当数据传输的性能必须让位于数...
    Triplesc阅读 1,641评论 0 1
  • iOS 网络知识 一、http协议 1、描述是一种详细规定了浏览器和万维网服务器之间互相通信的规则,是传送万维网文...
    如今0生活成了心术阅读 228评论 0 2
  • 1、开放系统互连参考模型 2、通信协议详解 TCP/IP协议TCP/IP 是一个协议族,也是按照层次划分。共四层:...
    大猿媛阅读 666评论 0 1
  • 1.网络 1.网络七层协议有哪些? 物理层:主要功能:传输比特流;典型设备:集线器、中继器;典型协议标准和应用:V...
    _我和你一样阅读 3,388评论 1 38
  • 无论做前端开发还是后端开发,网络知识是必备的知识。这部分知识是基础中的基础,是我们必须掌握的内容。网络相关的问题也...
    SunnyZhang的IT世界阅读 1,628评论 0 1