iOS 面试第八节 网络

1.网络七层协议

  • 应用层:
    1.用户接口、应用程序;
    2.Application典型设备:网关;
    3.典型协议、标准和应用:TELNET、FTP、HTTP

  • 表示层:
    1.数据表示、压缩和加密presentation
    2.典型设备:网关
    3.典型协议、标准和应用:ASCLL、PICT、TIFF、JPEG|MPEG
    4.表示层相当于一个东西的表示,表示的一些协议,比如图片、声音和视频MPEG。

  • 会话层:
    1.会话的建立和结束;
    2.典型设备:网关;
    3.典型协议、标准和应用:RPC、SQL、NFS、X WINDOWS、ASP

  • 传输层:
    1.主要功能:端到端控制Transport;
    2.典型设备:网关;
    3.典型协议、标准和应用:TCP、UDP、SPX

  • 网络层:
    1.主要功能:路由、寻址Network;
    2.典型设备:路由器;
    3.典型协议、标准和应用:IP、IPX、APPLETALK、ICMP;

  • 数据链路层:
    1.主要功能:保证无差错的疏忽链路的data link;
    2.典型设备:交换机、网桥、网卡;
    3.典型协议、标准和应用:802.2、802.3ATM、HDLC、FRAME RELAY;

  • 物理层:
    1.主要功能:传输比特流Physical;
    2.典型设备:集线器、中继器
    3.典型协议、标准和应用:V.35、EIA/TIA-232.

2.Http 和 Https 的区别?Https为什么更加安全?

  • 区别:
    1.HTTPS 需要向机构申请 CA 证书,极少免费。
    2.HTTP 属于明文传输,HTTPS基于 SSL 进行加密传输。
    3.HTTP 端口号为 80,HTTPS 端口号为 443 。
    4.HTTPS 是加密传输,有身份验证的环节,更加安全。

  • 安全:
    SSL(安全套接层) TLS(传输层安全)
    以上两者在传输层之上,对网络连接进行加密处理,保障数据的完整性,更加的安全。

3.HTTPS的连接建立流程

HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。在传输的过程中会涉及到三个密钥:

  • 服务器端的公钥和私钥,用来进行非对称加密
  • 客户端生成的随机密钥,用来进行对称加密

在这里插入图片描述
如上图,HTTPS连接过程大致可分为八步:

  1. 客户端访问HTTPS连接。发自己支持协议、加密算法给C端。
    客户端会把安全协议版本号、客户端支持的加密算法列表、随机数C发给服务端。

  2. 服务端返回证书、公钥给客户端
    服务端接收密钥算法配件后,会和自己支持的加密算法列表进行比对,如果不符合,则断开连接。否则,服务端会在该算法列表中,选择一种对称算法(如AES)、一种公钥算法(如具有特定秘钥长度的RSA)和一种MAC算法发给客户端。
    服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
    在发送加密算法的同时还会把数字证书和随机数S发送给客户端

  3. 客户端验证server证书
    客户端会对server证书进行检查,验证其合法性。

  4. 客户端组装会话秘钥
    如果证书合格,那么客户端会用服务器公钥来生成一个前主秘钥(Pre-Master Secret,PMS),并通过该前主秘钥和随机数C、S来组装成会话秘钥

  5. 客户端将前主秘钥加密发送给服务端
    是通过服务端的公钥来对前主秘钥进行非对称加密,发送给服务端

  6. 服务端通过私钥解密得到前主秘钥
    服务端接收到加密信息后,用私钥解密得到主秘钥。

  7. 服务端组装会话秘钥
    服务端通过前主秘钥和随机数C、S来组装会话秘钥。
    至此,服务端和客户端都已经知道了用于此次会话的主秘钥。

  8. 数据传输
    客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。

同理,服务端收到客户端发送来的密文,用服务端密钥对其进行对称解密,得到客户端发送的数据。

4.charles如何抓到数据的

在这里插入图片描述

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

5.HTTP TCP区别

两者没有什么可比性。
HTTP是应用层的协议,以TCP协议为基础。
TCP是传输层协议,以IP协议为基础。
IP是网络层协议。
可以这样理解: IP协议作为网络中的“公路”,TCP协议是“公路”上面的“货车”,而HTTP协议是用于打包“货车”中的“货物”的。

6.解释一下 TCP 的三次握手 和 四次挥手

在这里插入图片描述

  • 三次握手
    1.由客户端向服务端发送 SYN 同步报文。
    2.当服务端收到 SYN 同步报文之后,会返回给客户端 SYN 同步报文和 ACK 确认报文。
    3.客户端会向服务端发送 ACK 确认报文,此时客户端和服务端的连接正式建立。

  • 建立连接
    1.这个时候客户端就可以通过 Http 请求报文,向服务端发送请求
    2.服务端接收到客户端的请求之后,向客户端回复 Http 响应报文。

  • 四次挥手
    1.先由客户端向服务端发送 FIN 结束报文。
    2.服务端会返回给客户端 ACK 确认报文 。此时,由客户端发起的断开连接已经完成。
    3.服务端关闭客户端的连接,给客户端发 FIN 结束报文。
    4.客户端会发 ACK 确认报文到服务端,至此,由服务端方向的断开连接已经完成。

为什么挥手需要四次呢?
确保数据能够完整传输。

当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。
但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,
再发送FIN报文给主动方,告诉主动方同意关闭连接,所以这里的ACK报文和FIN报文多数情况下都是分开发送的。

7.TCP 和 UDP的区别

  • TCP:面向连接(三次握手,四次挥手)、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。

  • UDP:面向非连接(没有三次握手、也无四次挥手)、传输不可靠、用于传输少量数据(数据包模式)、速度快。
    怎么理解TCP的面向连接和UDP的无连接

8.Http协议和Socket

创建 Socket 连接的时候,可以指定传输层协议,可以是 TCP 或者 UDP,当用 TCP 连接,该Socket就是个TCP连接,反之。

Socket 连接,至少需要一对套接字,分为 clientSocket,serverSocket 连接分为3个步骤:
(1) 服务器监听:服务器并不定位具体客户端的套接字,而是时刻处于监听状态;

(2) 客户端请求:客户端的套接字要描述它要连接的服务器的套接字,提供地址和端口号,然后向服务器套接字提出连接请求;

(3) 连接确认:当服务器套接字收到客户端套接字发来的请求后,就响应客户端套接字的请求,并建立一个新的线程,把服务器端的套接字的描述发给客户端。一旦客户端确认了此描述,就正式建立连接。而服务器套接字继续处于监听状态,继续接收其他客户端套接字的连接请求.

很多情况下,都是需要服务器端向客户端主动推送数据,保持客户端与服务端的实时同步。

若双方是 Socket 连接,可以由服务器直接向客户端发送数据。

若双方是 HTTP 连接,则服务器需要等客户端发送请求后,才能将数据回传给客户端。
因此,客户端定时向服务器端发送请求,不仅可以保持在线,同时也询问服务器是否有新数据,如果有就将数据传给客户端。

9.Cookie和Session

cookie

  • 1.用户与服务器的交互
    cookie主要是用来记录用户状态,区分用户,状态保存在客户端。cookie功能需要浏览器的支持。如果浏览器不支持cookie(如大部分手机中的浏览器)或者把cookie禁用了,cookie功能就会失效。
    在这里插入图片描述
    a).首次访问amazon时,客户端发送一个HTTP请求到服务器端 。服务器端发送一个HTTP响应到客户端,其中包含Set-Cookie头部

b).客户端发送一个HTTP请求到服务器端,其中包含Cookie头部。服务器端发送一个HTTP响应到客户端

c).隔段时间再去访问时,客户端会直接发包含Cookie头部的HTTP请求。服务器端发送一个HTTP响应到客户端

  • 2.cookie的修改和删除

在修改cookie的时候,只需要新cookie覆盖旧cookie即可,在覆盖的时候,由于Cookie具有不可跨域名性,注意name、path、domain需与原cookie一致

删除cookie也一样,设置cookie的过期时间expires为过去的一个时间点,或者maxAge = 0(Cookie的有效期,单位为秒)即可

  • 3、cookie的安全

事实上,cookie的使用存在争议,因为它被认为是对用户隐私的一种侵害,而且cookie并不安全

HTTP协议不仅是无状态的,而且是不安全的。使用HTTP协议的数据不经过任何加密就直接在网络上传播,有被截获的可能。使用HTTP协议传输很机密的内容是一种隐患。

a).如果不希望Cookie在HTTP等非安全协议中传输,可以设置Cookie的secure属性为true。浏览器只会在HTTPS和SSL等安全协议中传输此类Cookie。

b).此外,secure属性并不能对Cookie内容加密,因而不能保证绝对的安全性。如果需要高安全性,需要在程序中对Cookie内容加密、解密,以防泄密。

c).也可以设置cookie为HttpOnly,如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS(跨站脚本攻击)攻击

Session

  • Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。

  • Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。 客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
    在这里插入图片描述

  • 如图:

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为SessionId)

如果已包含则说明以前已经为此客户端创建过session,服务器就按照SessionId把这个session检索出来,使用(检索不到,会新建一个)

如果客户端请求不包含SessionId,则为此客户端创建一个session并且生成一个与此session相关联的SessionId,SessionId的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个SessionId将被在本次响应中返回给客户端保存。

保存这个SessionId的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把SessionId传递回服务器。

Cookie 和Session 的区别:

  • 1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
  • 2、cookie相比session不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
  • 3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
  • 4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。而session存储在服务端,可以无限量存储
  • 5、所以:将登录信息等重要信息存放为session;其他信息如果需要保留,可以放在cookie中

10.DNS是什么

因特网上的主机,可以使用多种方式标识,比如主机名或IP地址。一种标识方法就是用它的主机名(hostname),比如·www.baidu.com、www.google.com、gaia.cs.umass.edu等。这方式方便人们记忆和接受,但是这种长度不一、没有规律的字符串路由器并不方便处理。还有一种方式,就是直接使用定长的、有着清晰层次结构的IP地址,路由器比较热衷于这种方式。为了折衷这两种方式,我们需要一种能进行主机名到IP地址转换的目录服务。这就是域名系统(Domain Name System,DNS)的主要任务。

  • DNS是:
    1、一个由分层的DNS服务器实现的分布式数据库
    2、一个使得主机能够查询分布式数据库的应用层协议

  • DNS服务器通常是运行BIND软件的UNIX机器,DNS协议运行在UDP上,使用53号端口

  • DNS通常是由其他应用层协议所使用的,包括HTTP、SMTP等。其作用则是:将用户提供的主机名解析为IP地址

  • DNS的一种简单设计就是在因特网上只使用一个DNS服务器,该 服务器包含所有的映射。很明显这种设计是有很大的问题的:
    单点故障:如果该DNS服务器崩溃,全世界的网络随之瘫痪
    通信容量:单个DNS服务器必须处理所有DNS查询
    远距离的集中式数据库:单个DNS服务器必须面对所有用户,距离过远会有严重的时延。
    维护:该数据库过于庞大,还需要对新添加的主机频繁更新。

所以,DNS被设计成了一个分布式、层次数据库

11.DNS解析过程

以www.163.com为例:

  1. 客户端打开浏览器,输入一个域名。比如输入www.163.com,这时,客户端会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。
  2. 查询www.163.com的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
  3. 根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。
  4. 本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。
  5. 最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值