面试总结——网络

导读:本篇文章讲解 面试总结——网络,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1. 传输控制协议TCP 和 用户数据报协议UDP的区别?

  1. TCP是面向字节流的,基本传输单位是TCP报文段UDP是面向报文的,基本传输单位是是用户数据报
  2. TCP 注重安全可靠性,连接双方在进行通信前,需进行三次握手建立连接UDP无连接的,使用最大努力交付,即不保证可靠交付
  3. UDP 不需要连接等待,所以数据传输,而 TCP 传输效率相对较低
  4. TCP 首部开销是20个字节UDP的首部开销是8个字节,这也是减少网络传输开销的一方面
  5. TCP有拥塞控制流量控制
  6. TCP支持点对点通信,提供全双工通信
  7. 当对网络通讯质量要求不高时,并且要求网络通讯速度能尽量的快,这时就可以使用UDP
  8. 当对网络通讯质量有要求时,要求整个数据准确无误可靠的传递给对方,这时就适用使用 TCP

2. TCP的三次握手

  1. 客户端向服务端发送一个 SYN 报文,指明客户端初始化序列号 ISN
  2. 服务端收到数据包后,由 SYN = 1 知道客户端请求建立连接,那么就会对这个TCP 连接分配缓存和变量(缓存指的是一个字节流队列),接着返回一个确认报文
  3. 客户端收到确认后,检查ACK,如果正确,则给服务端发送一个 ACK 报文,完成三次握手

3. 为什么不能用两次握手进行建立连接?

  1. 三次握手目的是确认双方的接收与发送能力是否正常,同步连接双方的初始化序列号 ISN,为后面的可靠性传输做准备
  2. 两次握手,只有服务端对客户端的起始序列号做了确认
  3. 三次握手,可以防止已失效的连接请求报文段突然又传送到了服务端,导致服务器错误地建立连接,浪费服务端的连接资源。

4. TCP的四次挥手

  1. 客户端发送一个 FIN 报文,主动关闭 TCP 连接
  2. 服务端收到 FIN 报文后,知道客户端请求关闭连接,则返回确认报文
  3. 服务端没有要向客户端发送的数据时,就向客户端发送一个 FIN 报文,用于关闭服务端到客户端的数据传送
  4. 客户端收到 FIN 报文后,发送给服务端一个 ACK 报文作为应答,如果服务端接收到这个数据包,完成四次挥手

5. 为什么需要四次挥手

  1. TCP 是全双工模式,并且支持半关闭特性,提供了连接的一端在结束发送后还能接收来自另一端数据的能力。
  2. 任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态
  3. 另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。
  4. 通俗的来说,两次挥手就可以释放一端到另一端的 TCP 连接完全释放连接一共需要四次挥手

6. 三次握手过程中是否可以携带数据?

  1. 第三次握手时是可以携带数据的
  2. 假如第一次握手可以携带数据的话,那么会放大 SYN 洪泛。如果有人要恶意攻击服务器,每次都在第一次握手中的 SYN 报文中放入大量的数据,然后疯狂重复发送 SYN 报文的话,就会让服务器开辟大量的缓存来接收这些报文,内存会很容易耗尽,从而拒绝服务。

7. TCP 如何保证可靠性传输

  1. 三次握手
  2. 应答机制与超时重传:TCP接收端收到发送端的数据时,它将发送一个确认。如果不能及时收到一个确认,将重发这个报文段。
    (3)数据包校验与丢弃重复数据:TCP会检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP会超时重发数据;对于重复数据,则进行丢弃
    (4)对失序数据包进行重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;
    (5)流量控制:TCP 连接的每一方都有固定大小的缓冲空间。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据,防止较快主机致使较慢主机的缓冲区溢出。TCP使用的流量控制协议是可变大小的滑动窗口协议。
    (6)拥塞控制:网络拥塞时,减少数据的发送。

8. http协议

  1. http协议即超文本传输协议,基于TCP协议
  2. 用于从Web服务器传输超文本到本地浏览器的传送协议。
  3. http协议是无状态协议,自身不对请求和响应直接的通信状态进行保存,但有些场景下我们需要保存用户的登陆信息,所以引入了cookie 和 session 来管理状态。

9. cookie 和 session 的区别:

  1. cookie保存在客户端session保存在服务端
  2. cookie存在安全隐患,可以通过拦截或本地文件找到cookie后进行攻击,而session相对更加安全
  3. 登陆信息等重要信息存放为session中
  4. 单个cookie最大只允许4KBsession没有大小限制,个数只跟服务器的内存大小有关
  5. cookie可长期有效存在;session依赖于cookie,过期时间默认为-1,只需关闭窗口该 session 就会失效

10. session与cookie的关系

  1. 客户端请求服务器时,都会带上cookie,cookie里面一般都会有一个JSESSIONID,服务器就按照 JSESSIONID 来找到对应的 session
  2. 如果客户端请求不包含 JSESSIONID,则为此客户端创建session并生成相关联的JSESSIONID,并将这个JSESSIONID在本次响应中返回给客户端保存
  3. 客户端保存这个 JSESSIONID 的方式可以使用cookie机制。若浏览器禁用Cookie的话,可以通过 URL重写机制 将JSESSIONID传回服务器

11. 一个完整的http请求是怎么样?

  1. 解析url,获取 url 中包含的域名
  2. 通过DNS系统查询域名对应的IP
  3. 浏览器得到域名对应的IP地址之后,向服务器发起三次握手请求建立TCP链接
  4. TCP链接链接建立起来后,浏览器向服务器发送http请求,如果 html文件在缓存里,浏览器则直接返回, 如果没有,则去后台拿
  5. 服务器接收到请求后,根据路径参数映射到特定的处理器进行处理,并将处理结果以及相应的视图返回给浏览器
  6. 浏览器解析视图,并根据请求到的资源、数据进行渲染页面,最终向用户呈现一个完整的页面

12. https

  1. https 是基于tcp协议,在http的基础上加入了SSL/TLS
  2. 可看成是添加了加密和认证机制的http

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/65608.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!