zoukankan      html  css  js  c++  java
  • java面试题:网络协议

    网络分层

    Q:OSI网络七层模型。

    Http

    Q:http协议的状态码有哪些?含义是什么?
    200,服务器已成功处理了请求。
    302,重定向。
    400,错误请求。
    401,未授权,请求要求身份验证。
    403,禁止,服务器拒绝请求。
    404,未找到,服务器找不到请求的网页。
    405,方法禁用,禁用请求中指定的方法。
    500,服务器内部错误,服务器遇到错误,无法完成请求。
    504,服务器超时。
    Q:http1.0和http1.1的区别是什么?
    HTTP/1.0中浏览器与服务器只保持短暂的连接,连接无法复用。也就是说每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。
    HTTP/1.1相比较于HTTP/1.0来说,最主要的改进就是引入了持久连接。所谓的持久连接即TCP连接默认不关闭,可以被多个请求复用。
    HTTP/1.1版还引入了管道机制(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求。
    Q:http1.x 和http2.0的区别?
    HTTP2.0和HTTP1.X相比的新特性
    (1)新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
    (2)多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
    (3)header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
    (4)服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。
    Q:Http的请求报文的报文头,有哪些参数?
    请求方法Get/Post/Put/Delete等,请求URL,Http版本,ContentType,Host
    Q:Https与Http的一些区别?
    HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
    HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
    HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。
    Q:Get和Post的区别 ?
    (1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
    (2)post发送的数据更大(get有url长度限制)
    (3)post能发送更多的数据类型(get只能发送ASCII字符)
    (4)post比get慢
    (5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据
    Q:一次完整的Http请求是怎样的?
    DNS域名解析 –> 发起TCP的三次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如javascript、css、图片等) –> 浏览器对页面进行渲染呈现给用户
    Q:讲一下会话。
    因为Http是无状态机制,需要会话Session来保存状态。Session有SessionId,还有会话时长。
    Q:Session和Cookie的区别是什么?
    (1)存在的位置:
    cookie 存在于客户端,临时文件夹中; session存在于服务器的内存中,一个session域对象为一个用户浏览器服务
    (2)安全性:
    cookie是以明文的方式存放在客户端的,安全性低,可以通过一个加密算法进行加密后存放; session存放于服务器的内存中,所以安全性好
    (3)网络传输量:
    cookie会传递消息给服务器; session本身存放于服务器,不会有传送流量
    (4)生命周期(以20分钟为例):
    cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,cookie生命周期结束;
    session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问session,那么session生命周期被销毁。但是,如果在20分钟内(如在第19分钟时)访问过session,那么,将重新计算session的生命周期。关机会造成session生命周期的结束,但是对cookie没有影响。
    (5)访问范围:
    cookie为多个用户浏览器共享; session为一个用户浏览器独享
    Q:讲一下Http缓存。
    Q:讲一下Http长连接和短连接。

    Tcp

    Q:Tcp三次握手。
    SYN:它的全称是 Synchronize Sequence Numbers,同步序列编号。是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立 TCP 连接时,首先会发送的一个信号。客户端在接受到 SYN 消息时,就会在自己的段内生成一个随机值 X。
    SYN-ACK:服务器收到 SYN 后,打开客户端连接,发送一个 SYN-ACK 作为答复。确认号设置为比接收到的序列号多一个,即 X + 1,服务器为数据包选择的序列号是另一个随机数 Y。
    ACK:Acknowledge character, 确认字符,表示发来的数据已确认接收无误。最后,客户端将 ACK 发送给服务器。序列号被设置为所接收的确认值即 Y + 1。

    Q:为什么不能用两次握手进行连接?
    3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

    现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

    Q:Tcp四次挥手。

    首先,客户端应用程序决定要终止连接(这里服务端也可以选择断开连接)。这会使客户端将 FIN 发送到服务器,并进入 FIN_WAIT_1 状态。当客户端处于 FIN_WAIT_1 状态时,它会等待来自服务器的 ACK 响应。
    然后第二步,当服务器收到 FIN 消息时,服务器会立刻向客户端发送 ACK 确认消息。
    当客户端收到服务器发送的 ACK 响应后,客户端就进入 FIN_WAIT_2 状态,然后等待来自服务器的 FIN 消息
    服务器发送 ACK 确认消息后,一段时间(可以进行关闭后)会发送 FIN 消息给客户端,告知客户端可以进行关闭。
    当客户端收到从服务端发送的 FIN 消息时,客户端就会由 FIN_WAIT_2 状态变为 TIME_WAIT 状态。处于 TIME_WAIT 状态的客户端允许重新发送 ACK 到服务器为了防止信息丢失。客户端在 TIME_WAIT 状态下花费的时间取决于它的实现,在等待一段时间后,连接关闭,客户端上所有的资源(包括端口号和缓冲区数据)都被释放。

    Q:为什么连接的时候是三次握手,关闭的时候却是四次握手?

    因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

    Q:Tcp的头部有什么?

    Q:如果已经建立了连接,但是客户端突然出现故障了怎么办?

    TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

    Udp

    Q:Tcp和Udp的区别?
    是否连接:Tcp面向连接,Udp面向非连接
    传输可靠性:Tcp可靠,Udp不可靠
    应用场合: Tcp传输大量数据,Udp少量数据
    速度:Tcp速度慢 , Udp速度快
    模式:Tcp面向字节流,Udp是面向报文的

    NIO

    Q:NIO、AIO、BIO有什么区别?
    同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。
    Q:NIO和IO有什么区别?
    IO是多线程的,阻塞的。NIO,是同步的非阻塞IO。
    IO面向Stream(流),而NIO面向Buffer(缓冲区)。
    IO是多个线程的,不存在Selector。而Java NIO的Selector(选择器)允许一个单独的线程来监视多个Channel(输入通道)。
    Q:讲一下NIO
    NIO,同步非阻塞,IO多路复用。
    NIO包括Channel、Select、Buffer这些。
    Selector允许单线程处理多个 Channel。

    Netty

    Q:讲一下Netty。
    Q:讲一下Netty的线程模型。
    参考资料:
    搞定计算机网络面试
    Http请求/响应报文

    https://blog.csdn.net/qq_38950316/article/details/81087809

    https://juejin.im/post/5e9cda81e51d4547092219fa

  • 相关阅读:
    SharePoint 2013 商务智能报表发布
    sharepoint designer web 服务器似乎没有安装microsoft sharepoint foundation
    SharePoint 2013 Designer系列之数据视图
    SharePoint 2013 Designer系列之数据视图筛选
    SharePoint 2013 Designer系列之自定义列表表单
    SharePoint 2013 入门教程之创建及修改母版页
    SharePoint 2013 入门教程之创建页面布局及页面
    SharePoint 2010 级联下拉列表 (Cascading DropDownList)
    使用SharePoint Designer定制开发专家库系统实例!
    PL/SQL Developer 建立远程连接数据库的配置 和安装包+汉化包+注册机
  • 原文地址:https://www.cnblogs.com/expiator/p/10248326.html
Copyright © 2011-2022 走看看