iOS 面试题(二)

357 阅读6分钟

网络相关面试题

HTTP 为什么不安全

  • 因为HTTP协议使用的是明文传输,通信过程是完全开放的,所以一旦被第三者盯上,对方就可以轻易的监听和修改途经的数据包,导致信息泄露甚至是信息被恶意篡改
  • HTTP协议没有用户和网站的身份验证机制,用户在使用浏览器浏览网站时,有可能被DNS劫持,从而导致用户浏览器被导向了伪造的网站,在输入账号密码等重要信息时会被非法窃取。

TCP/IP四层模型每一层有哪些常见协议

  • 应用层 HTTP FTP DNS WebSocket
  • 传输层 TCP UDP
  • 网络层 IP ICMP(Internet Control Message Protocol,因特网控制报文协议)是IP协议的补充,用于检测网络的连接状态,如ping应用程序就是ICMP协议的使用。
  • 数据链路层 ARP(作用就是把 IP地址解析成 MAC 地址) RARP(Reverse Address Resolve Protocol)即逆地址解析协议

GET 和 POST 的区别

  • get请求参数以?分隔拼接到URL后面,post请求参数在Body内部
  • get参数长度显示2048个字符,post一般没有该限制
  • get请求不安全,post请求比较安全
  • get不会影响服务端的变化,有安全性,post
  • get请求多次结果一样,幂等性,post不一定
  • get的请求默认会缓存在服务器上,post不设置默认不缓存

TCP为什么需要 3 次握手

  • 若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。

TCP的拥塞控制

  • 慢开始 指数增长
  • 拥塞避免 线性增长 到顶把值变为一 重新慢开始
  • 快重传 收到 3个重复确认报文 立即重传
  • 快恢复 不从慢开始重头再来,而是立即开始走拥塞避免线性阶段

TCP的滑动窗口

  • TCP滑动窗口技术通过动态改变窗口大小来调节两台主机间数据传输。每个TCP/IP主机支持全双工数据传输,因此TCP有两个滑动窗口:一个用于接收数据,另一个用于发送数据。TCP使用肯定确认技术,其确认号指的是下一个所期待数据包的序列号。 假定发送方设备以每一次三个数据包的方式发送数据,也就是说,窗口大小为3。发送方发送序列号为123的三个数据包,接收方设备成功接收数据包,用序列号4确认。发送方设备收到确认,继续以窗口大小3发送数据。当接收方设备要求降低或者增大网络流量时,可以对窗口大小进行减小或者增加,本例降低窗口大小为2,每一次发送两个数据包。当接收方设备要求窗口大小为0,表明接收方已经接收了全部数据,或者接收方应用程序没有时间读取数据,要求暂停发送。发送方接收到携带窗口号为0的确认,停止这一方向的数据传输。

  • 滑动窗口协议优势:

    • 允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发送每确认,因此该协议可以加速数据的传输。
    • 在接收窗口向前滑动时(与此同时也发送了确认),发送窗口也会同步向前滑动,收发两端的窗口按照以上规律不断地向前滑动 ,可以动态调整窗口大小

UDP 为什么不可靠

  • 不保证消息交付:不确认,不重传,无超时
  • 不保证交付顺序:不设置包序号,不重排,不会发生队首阻塞
  • 不跟踪连接状态: 不必建立连接或重启状态机
  • 不需要拥塞控制: 不内置客户端或网络反馈机制

有哪些基于UDP的应用层协议

  • DNSTFTP(简单文件传输协议)、RIP(路由选择协议)、DHCPBOOTP(是DHCP的前身)、IGMPInternet组管理协议)

DNS一定是基于 UDP 的嘛

  • 不一定
  • DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议,

从输入url到页面展示到底发生了什么

  • 1、输入地址
  • 2、浏览器查找域名的 IP 地址  
  • 3、浏览器向 web 服务器发送一个 HTTP 请求
  • 4、服务器的永久重定向响应
  • 5、浏览器跟踪重定向地址
  • 6、服务器处理请求
  • 7、服务器返回一个 HTTP 响应 
  • 8、浏览器显示 HTML
  • 9、浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSSJS等等)

Socket 和 WebSocket

  • Socket其实并不是一个协议,而是为了方便使用TCPUDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。WebSocket则是一个典型的应用层协议。Socket是传输控制层协议,WebSocket是应用层协议。