计算机网络常见面试题

  1. TCP的三次握手和四次挥手? 为什么是3次,2次可以吗?4次呢?(从失效的数据报谈2次为什么不行,从响应时间说为什么不用4次)
    3次握手:
    a.客户端首先发送SYN请求报文
    b.服务端收到报文并返回客户端一个ACK确认报文,并分配资源
    c.客户端收到报文并返回服务端一个ACK确认报文,并分配资源建立连接
    (三次握手:
    客户端:“喂,你听得到吗?”SYN
    服务端:“我听得到呀,你听得到我吗?” ACK,SYN
    客户端:“我能听到你,今天balabala……” )ACK
    (两次握手:
    客户端:“喂,你听得到吗?”
    服务端:“我听得到”
    客户端:…………
    客户端:“…………”
    客户端:…………
    客户端:“……你妹的”)
    (四次握手:
    客户端:“喂,你听得到吗?”
    服务端:“我听得到呀,你听得到我吗?”
    客户端:“我能听到你,你能听到我吗?”
    服务端:“……不想跟傻逼说话”)
    4次挥手:
    a.假设客户端向服务端发送FIN请求结束报文。
    b.服务端返回ACK报文,并且确认数据是否传送完毕。
    c.客户端收到ACK报文后,进入等待关闭状态,等待服务端发送FIN请求结束报文 (等待时间超过一定时间还没有收到ACK报文可以重传FIN请求报文)
    d.服务端数据传送完毕后发送FIN请求结束报文,客户端接受到后返回ACK,服务端客户端关闭TCP连接
    (客户端:我说完了(FIN);
    服务端:我知道你说完了(ACK),我再给你说两句;
    服务端: 我说完了,咱们断了吧(FIN)
    客户端:我知道你说完了(ACK)

  2. 浏览器从接收到一个URL到最后展示出页面,经历了哪些过程?
    大概进行以下3个步骤展示页面:
    1.通过三次握手建立TCP的链接。
    2.成功建立连接后,服务器会根据url请求中的信息进行处理,作出响应。一般是找到一个HTML文件返还给客户端。(一般的web技术都会把请求进行封装然后交给我们的服务器进行处理,比如servlet会把请求封装成httpservletrequest对象,把响应封装成httpsevletresponse对象)
    3.客户端得到HTML文件,进行渲染。

  3. 长连接和短连接?
    在HTTP/1.0中,默认使用的是短连接。即浏览器和服务器每进行一次HTTP操作,就会建立一次连接,任务结束就断开连接。当浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(Js文件、css文件等),就会建立一个HTTP会话。
    在HTTP/1.1起,默认使用长连接。用以保持连接特性。【长连接通常在响应头会添加 Connection:keep-alive 】。使用长连接的情况下,当某个网页打开完毕之后,客户端和服务器之间的TCP连接不会关闭,如果客户端再次访问该服务器上的网页,会使用上一次已经建立的连接。长连接不是永久保持连接,它有一个保持时间。实现长连接的前提是客户端和服务器端都需要支持长连接。

  4. 长连接怎么实现的?
    从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:Connection:keep-alive

  5. forward与redirect区别,说一下你知道的状态码,redirect的状态码是多少?
    直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。
    间接转发方式(Redirect)实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。
    对于直接方式,客户端浏览器只发出一次请求,Servlet把请求转发给Servlet、HTML、JSP或其它信息资源,由第2个信息资源响应该请求,两个信息资源共享同一个request对象。
    对于间接方式,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。
    1 信息性状态码 接受的请求正在处理
    2
    成功状态码 请求正常处理完毕
    3 重定向状态码 需要进行附加操作以完成请求
    4
    客户端错误状态码 服务器无法处理请求
    5** 服务器错误状态码 服务器处理请求出错

  6. GET和POST区别?
    GET用于获取数据,POST用于提交数据;
    GET把请求的数据放在url上,即header上;POST把数据放在HTTP的包体内(request body);
    GET后退按钮/刷新无害,POST数据会被重新提交;
    GET书签可收藏,POST为书签不可收藏;
    GET能被缓存,POST不能缓存;
    编码类型不同;
    GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中;
    GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符);POST无限制;
    GET只允许ASCII字符;POST没有限制;

  7. cookie和session介绍一下区别?
    Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
    Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

    1. cookie数据存放在客户的浏览器上,session数据放在服务器上;
    2. cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session;
      1. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用cookie;
      2. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie;
  8. 把ip地址转化成mac地址的协议是什么协议?
    ARP协议是“Address Resolution Protocol”(地址解析协议)。

  9. Ip地址几位?
    IPV4是32位,IPV6是128位。

  10. 讲讲Http协议?
    HTTP(超文本传输协议,HyperText Transfer Protocol)对器客户端和服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”。

  11. 什么是Http协议无状态协议?怎么解决Http协议无状态协议?
    无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息;
    无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。

  12. Http协议由什么组成?
    请求报文包括三部分:
    (1).请求行:包含请求方法,URI,HTTP版本协议;
    (2).请求首部字段;
    (3).请求内容实体;
    响应报文包含三部分:
    (1).响应行:包含HTTP版本,状态码,状态码原因短语;
    (2).响应首部字段;
    (3).响应内容实体;

  13. http1.1,1.0和2.0的区别?

    1. 长连接:HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。
    2. 节约带宽:HTTP 1.1支持只发送header信息;
    3. HOST域:HTTP 1.1现在web server设置虚拟站点是非常常见的,也即是说,web server上的多个虚拟站点可以共享同一个ip和端口。
    4. 多路复用:HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
    5. 数据压缩:HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
    6. 服务器推送:当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。
  14. 说下https的请求过程。

    1. 客户端向服务器发出加密请求;
    2. 服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端;
    3. 客户端(浏览器)的”证书管理器”,有”受信任的根证书颁发机构”列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内;
    4. 如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告;
    5. 如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告;
  15. http,https,怎么实现的?
    后者是前者的安全实现,客户端发起请求时服务端会返回一个公匙,然后客户端根据公匙规则发送消息,服务端根据自己的配对密匙解密实现加密。https = http+ssl(安全套接字层)

  16. 输入一个网址到加载整个页面经历的整个过程。

    1. 输入地址
    2. 浏览器查找域名的 IP 地址
    3. 这一步包括 DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存…
    4. 浏览器向 web 服务器发送一个 HTTP 请求
    5. 服务器的永久重定向响应(从 http://example.comhttp://www.example.com)
    6. 浏览器跟踪重定向地址
    7. 服务器处理请求
    8. 服务器返回一个 HTTP 响应
    9. 浏览器显示 HTML
    10. 浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等)
      浏览器发送异步请求
  1. tcp怎么实现拥塞控制?
    TCP的拥塞控制机制是从端到端的角度,推测网络是否发生拥塞,如果推断网络发生拥塞,则立即将数据发送速率降下来,以便缓解网络拥塞。TCP的拥塞控制采用的是窗口机制,通过调节窗口的大小实现对数据发送速率的调整。拥塞窗口调整的原则是:只要网络没有出现拥塞,就可以增大拥塞窗口,以便将更多的数据发送出去,相当于提高发送速率;一旦网络出现拥塞,拥塞窗口就减小一些,减少注入网络的数据量,从而缓解网络的拥塞。

  2. Tcp粘包?
    “粘包问题”的概念用一句话说:就是不同结构的多个包合成了一个大包,从而不知道怎么去把这个大包分割出原来的包。

  1. arp攻击?
    ARP欺骗攻击建立在局域网主机间相互信任的基础上的当A发广播询问:我想知道IP是192.168.0.3的硬件地址是多少?
    此时B当然会回话:我是IP192.168.0.3我的硬件地址是mac-b,可是此时IP地址是192.168.0.4的C也非法回了:我是IP192.168.0.3,我的硬件地址是mac-c。而且是大量的。
    所以A就会误信192.168.0.3的硬件地址是mac-c,而且动态更新缓存表这样主机C就劫持了主机A发送给主机B的数据,这就是ARP欺骗的过程。
    假如C直接冒充网关,此时主机C会不停的发送ARP欺骗广播,大声说:我的IP是192.168.0.1,我的硬件地址是mac-c,此时局域网内所有主机都被欺骗,更改自己的缓存表,此时C将会监听到整个局域网发送给互联网的数据报。

  2. 知不知道一个应用层协议,运输层既没有使用TCP,也没有使用UDP?
    SCTP(Stream Control Transmission Protocol,流控制传输协议)是IETF(Internet Engineering Task Force,因特网工程任务组)在2000年定义的一个传输层(Transport Layer)协议,是提供基于不可靠传输业务的协议之上的可靠的数据报传输协议。SIP(Session Initiation Protocol,会话初始化协议)和SS7(Signaling System No.7,七号信令系统)。在商业领域中,您可以在Cisco的IOS(Inter-Operation Specification,互操作规范)中找到SCTP的影子。

  3. 转发与重定向(302):

    1. 从地址栏显示来说
      forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
      redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
    2. 从数据共享来说
      forward:转发页面和转发到的页面可以共享request里面的数据.
      redirect:不能共享数据.
    3. 从运用地方来说
      forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
      redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
    4. 从效率来说
      forward:高.
      redirect:低.
  4. HTTP过程?

  5. 详细讲下cookie和session,token,OAuth2.0协议