​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie

 

9.网络

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie

  • HTTP协议(什么是HTTP,HTTP当中的get和post有什么区别)
  • HTTPS与网络安全(HTTPS连接建立流程是什么,它与安全又有怎么的关系呢)
  • TCP/UDP(TCP连接建立的三次握手,四次挥手以及UDP和长链接之间都有怎样的关系和含义呢)
  • DNS解析
  • Session/Cookie

传输层中的TCP和UDP

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

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

  1. 无连接: 发送UDP数据报时,不需要事先建立好连接,也不需要释放连接
  2. 尽最大努力交付: 不保证可靠传输
  3. 面向报文: 既不合并,也不拆分,它会将应用层报直接拼接UDP首部,组成UDP数报,然后再在IP层拼接上IP首部,直接向外传送
    ​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie

      应用层会产生应用层报文,无论大小,直接作为传输层UDP用户数据报的数据部分,之后将UDP数据报作为IP数据报的数据部分。然后通过数据链路层/物理层向外传送。

UDP功能:复用分用,差错检测

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie

复用

计算机数据传输是通过网络套接字(socket)
网络套接字(socket)IP地址与端口的组合。
一台电脑(同一个IP地址)有不用应用(不同端口号)
但是不同的应用进行数据传输时,可以通过同一个UDP数据报,再经过IP

分用     
IP层接收了IP数据报数据,将数据拆分成UDP数据报
每个UDP数据报都包含有原端口目的端口,根据目的端口进行分发数据。

 

差错检测

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie

IM等通信软件,都设计到了一些聊天的模块,都是利用的是UDP用户数据报协议。

发送端UDP会对数据报文进行以下处理:

  • 以16位字为一个单元。
  • 按照二进制反码计算出这些16位字的和。
  • 和的二进制反码写入检验和位

接收方接收到数据报,再按照上述流程走一遍,如果和UDP首部的检验和位一致,则数据没有错误;反之,代表有错误。

UDP只能检测是否有错误,对恢复错误无能为力。

TCP(传输控制协议)

特点

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

面向连接:
为什么是三次握手?

三次握手能解决请求的超时场景

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie

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

为什么是四次挥手?

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie

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

可靠传输
TCP是怎样保证可靠传输的?

  通过停止等待协议实现的;有以下特点:

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

无差错情况(正常情况)
​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie
客户端➡服务端报文,服务端客户端确认报文
一直循环下去。

超时重传(服务端收不到报文)

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie

解释:(差错校验,不丢失)
1、由于网络环境比较差,客户端丢失/滞留了报文;或者报文被篡改了等等。会被服务端判定为有差错的报文。此时,服务端不会发送确认报文。
2、客户端收不到确认报文,一定时间后,会重新发送报文。  

确认丢失(客户端收不到确认报文) 

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie
解释:
1、服务端发送的确认报文,客户端没有收到。
2、客户端启动超时重传,重新发送。
3、服务端丢弃重传的报文,重新发送确认报文
4、客户端收到确认报文,一切正常进行。

确认迟到(服务端的确认报文迟到了)

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie

解释:
1、前面过程和确认丢失过程类似。
2、客户端收到迟到的确认报文什么也不做。

面向字节流

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie

解释:
发送方发送给TCP的字节,会被拆分成不同的字节进行发送,而不是有多少发送多少,由TCP决定。

流量控制
基于来滑动窗口协议完成的。

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie

解释:
由于接收方的接收窗口/接收缓存,没有那么大;此时,通过由接收方向TCP报文首部字段中更改窗口值,发送方解析出来后,调整发送窗口大小,从而达到流量控制

简单理解就是:接收方通过告知发送方,自己当前缓存区的大小情况,让发送方减少或增大发送量。

5、拥塞控制

两个策略:慢开始、拥塞避免(请简单描述TCP慢启动的特点?)
                    快恢复、快重传

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie

慢开始、拥塞避免(请简单描述TCP慢启动的特点?)解释:
1、横轴代表交互次数、纵轴代表窗口值大小。
2、开始,先发送一个报文,如果没有发生网络拥塞;接着,发送两个报文,如果还没有发生网络拥塞,就以
指数规律成倍发送报文。
3、增长到窗口
门限值后,会采用拥塞避免的策略,采用线性增长
4、当增长到一定值时,发生了
网络拥塞(发送的报文连续三个ack都没收到),采用拥塞避免乘法减小的策略,来恢复到只发送一个报文。 同时,把拥塞窗口门限值降为原来的一半
5、此时,从
新的门限值位置开启拥塞避免的策略,采用线性增长;而不会重新慢开始(
 快恢复、快重传

 

DNS解析
​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie
域名到IP地址的映射,DNS解析请求采取UDP数据报,且明文

  • 客户端通过DNS协议DNS服务器进行域名解析
  • DNS服务器返回解析出来的IP地址
  • 客户端根据IP地址发送网络请求。

DNS解析查询方式:

递归查询

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie
含义:层层帮客户端询问其他人,我去给你问一下

迭代查询

​​ iOS面试题(二十九)网络---TCP/UDP&DNS解析&Session/Cookie
含义:告诉客户端谁可能知道
 

因为DNS请求采用UDP数据报文,且是明文。很容易被劫持的。
DNS劫持与HTTP没有关系,DNS解析是发生在http请求之前的。

避免劫持:1.HTTPDNS,不产生正常的DNS解析了,就不会产生DNS解析的问题了。
                    2.建立一个长连Server(代理服务器)。

Session / Cookie

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

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

Cookie是用来区分用户的,他会记录用户状态,保存在客户端
Session也是用来区分用户的,他会记录用户状态,保存在Server端
联系:Session需要依赖Cookie机制。

HTTPS的连接建立流程(有安全保证)是怎样的?

  • 客户端向Server端发报文,客户端支持的加密算法,包含客户端支持的TLS版本,还有一个随机C
  • Server返回给客户端一个握手消息,也包括最终决定的加密算法(客户端提供N中,Server选择一个),随机数S和Server的证书
  • 后续首先通过非对称加密进行对称加密秘钥的传输。
  • 之后呢HTTP之间的网络请求就通过被非对称加密所保护的对称秘钥进行后续的网络访问。

TCP和UDP有什么区别?

TCP是面向连接的,并且支持可靠传输,面向字节流,包括TCP提供了流量控制拥塞控制。
UDP是无连接的,只简单的提供了复用/分用差错检测基本功能。

请简单描述TCP慢启动的特点?
慢开始、拥塞避免

1、横轴代表交互次数、纵轴代表窗口值大小。
2、开始,先发送一个报文,如果没有发生网络拥塞;接着,发送两个报文,如果还没有发生网络拥塞,就以
指数规律成倍发送报文。
3、增长到窗口
门限值后,会采用拥塞避免的策略,采用线性增长
4、当增长到一定值时,发生了
网络拥塞(发送的报文连续三个ack都没收到),采用拥塞避免乘法减小的策略,来恢复到只发送一个报文。 同时,把拥塞窗口门限值降为原来的一半

客户端怎样避免DNS劫持?

HTTPDNS  、长连接的方案
避免劫持:1.HTTPDNS,不产生正常的DNS解析了,就不会产生DNS解析的问题了。
                    2.建立一个长连Server(代理服务器)。