java面试 网络协议

作者: 步积 | 来源:发表于2017-04-23 23:32 被阅读196次
    OSI七层模型

    一、 了解Web及网络基础

    TCP/IP协议族按层次可以分为下面四层:

    1. 应用层

    决定了向用户提供应用服务时通信的活动,TCP/IP协议族内预存了各类通用的应用服务,比如:FTP(文件传输协议)和DNS(域名系统)服务就是其中两类,HTTP协议也处于该层。

    2. 传输层

    对上层应用提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议:TCP(传输控制协议)和UDP(用户数据报协议)

    3. 网络层

    用来处理在网络上流动的数据包,数据包是网络的传输最小数据单位,该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。

    4. 链路层

    用来处理连接网络的硬件部分,包括控制操作系统,硬件的设备驱动,NIC,及光纤等物理可见部分(还包括连接器等一切传输媒介),硬件上的范畴均在链路层的作用范围之内。

    利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信,发送端从应用层往下走,接收端则往应用层往上走,就拿发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求为例,如下图示:

    HTTP网络通信流程
    发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息,反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去,这种把数据信息包装起来的做法称为封装

    负责传输的IP协议:作用是把各种数据包传送给对方,其指明了节点被分配到的地址,而MAC地址是指网卡所属的固定地址,IP间的通信依赖MAC地址,在网络上,通信的双方在同一局域网内的情况较少,通常是经过多台计算机和网络设备中转才能连接到对方,在中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标,这时,会采用ARP协议(ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址)。例子如图:

    IP协议通信数据发送流程

    TCP协议为了准确无误的将数据送达目标处,TCP协议采用了三次握手策略,其握手过程中用了三个标记:FLAG-SYN和ACK,该过程如图:

    TCP通信的三次握手协议示意图
    注意:若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。

    DNS服务是和HTTP协议一样位于应用层的协议,它提供域名到IP地址之间的解析服务其两者关系如图:


    HTTP网址请求解析流程

    各种协议与HTTP协议的关系就如图所示:


    HTTP协议使用TCP协议通信获取页面流程图

    URI用字符标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置),故URL是URI的子集。

    URI格式通常包括以下几个:

    • 登录信息
    • 服务器地址(IP或域名)
    • 服务器端口号
    • 带层次的文件路径
    • 查询字符串
    • 片段标识

    URI格式例子如图:


    网址请求示例
    • 黑色:协议方案名
    • 红色:登陆信息(认证)
    • 浅绿色:服务器地址
    • 浅蓝色:服务器端口号
    • 紫色:带层次的文件路径
    • 深蓝色:查询字符串
    • 深绿色:片段标识符

    二、 简单的HTTP协议

    请求报文:是由请求方法,请求URI,协议版本,可选的请求首部字段和内容实体构成的。
    响应报文:基本上由协议版本,状态码(表示请求成功或失败的数字代码),用以解释状态码的原因短语,可选的响应首部字段以及实体主体构成。


    请求报文内容示例
    响应报文内容示例

    HTTP是一种不保存状态的协议,即不保留之前一切的请求或响应报文的信息,为了解决这问题,许多网站引入了Cookie技术,例如:许多登陆网站就是用Cookie技术来保持登陆状态。
    告知服务器意图的HTTP方法有以下几个:

    • GET:获取资源,如果请求的资源是文本,那就保持原样返回,如果是像CGI那样的程序,则返回经过执行后的输出结果。
    • POST:主要用来传输实体的主体,而不是获取响应的主体内容。
    • PUT:传输文件,要求请求报文中包含文件内容,但是HTTP/1.1PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,故一般有开发此功能的Web网站都会配合Web应用程序的验证机制,如:REST机制。
    • HEAD:不获取返回报文主体部分,而是获取其URI的有效性及资源更新的日期时间等首部字段。
    • DELETE:用来删除文件,但是HTTP/1.1Delete方法自身也不带验证机制,任何人都可以删除文件,存在安全性问题,故一般有开发此功能的Web网站都会配合Web应用程序的验证机制,如:REST机制。
    • OPTIONS:用来查询针对请求URI指定的资源。
    • TRACE:在用其发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务器端就将该数字减1,当数值刚好减到0时,就停止继续传输,最后接收到请求的服务器端则返回状态码200OK的响应,因此可以查询发送出去的请求是怎样被加工修改的。
    • CONNECT:要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信,主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。

    HTTP持久连接:keep-alive(持久连接)的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态,好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载,也减少了开销的那部分时间,是HTTP请求和响应能够更早的结束。

    非持久化连接和持有化连接区别

    管线化技术可以让客户端同时并行发送多个请求,而不需要一个接一个地等待响应。

    HTTP是无状态协议优势在于它减少服务器的CPU及内存资源的消耗,但它不能保持之前的状态进行请求处理,这样需要在登陆认证的Web页面中那个,每次请求 跳转页面都需要再次认证登陆或附上请求认证参数,因此为了解决这个问题,可以引用Cookie技术,该过程如图:


    Cookie生成及使用流程
    Cookie请求报文明细

    HTTP错误代码表

    所有 HTTP 状态代码及其定义。

    代码 指示
    2xx 成功
    200 正常;请求已完成。
    201 正常;紧接 POST 命令。
    202 正常;已接受用于处理,但处理尚未完成。
    203 正常;部分信息 — 返回的信息只是一部分。
    204 正常;无响应 — 已接收请求,但不存在要回送的信息。
    3xx 重定向
    301 已移动 — 请求的数据具有新的位置且更改是永久的。
    302 已找到 — 请求的数据临时具有不同 URI。
    303 请参阅其它 — 可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此响应。
    304 未修改 — 未按预期修改文档。
    305 使用代理 — 必须通过位置字段中提供的代理来访问请求的资源。
    306 未使用 — 不再使用;保留此代码以便将来使用。
    4xx 客户机中出现的错误
    400 错误请求 — 请求中有语法问题,或不能满足请求。
    401 未授权 — 未授权客户机访问数据。
    402 需要付款 — 表示计费系统已有效。
    403 禁止 — 即使有授权也不需要访问。
    404 找不到 — 服务器找不到给定的资源;文档不存在。
    407 代理认证请求 — 客户机首先必须使用代理认证自身。
    415 介质类型不受支持 — 服务器拒绝服务请求,因为不支持请求实体的格式。
    5xx 服务器中出现的错误
    500 内部错误 — 因为意外情况,服务器不能完成请求。
    501 未执行 — 服务器不支持请求的工具。
    502 错误网关 — 服务器接收到来自上游服务器的无效响应。
    503 无法获得服务 — 由于临时过载或维护,服务器无法处理请求。
    代码 指示
    400 请求无效
    401.1 未授权:登录失败
    401.2 未授权:服务器配置问题导致登录失败
    401.3 ACL 禁止访问资源
    401.4 未授权:授权被筛选器拒绝
    401.5 未授权:ISAPI 或 CGI 授权失败
    403 禁止访问
    403 对 Internet 服务管理器 (HTML) 的访问仅限于 Localhost
    403.1 禁止访问:禁止可执行访问
    403.2 禁止访问:禁止读访问
    403.3 禁止访问:禁止写访问
    403.4 禁止访问:要求 SSL
    403.5 禁止访问:要求 SSL 128
    403.6 禁止访问:IP 地址被拒绝
    403.7 禁止访问:要求客户证书
    403.8 禁止访问:禁止站点访问
    403.9 禁止访问:连接的用户过多
    403.10 禁止访问:配置无效
    403.11 禁止访问:密码更改
    403.12 禁止访问:映射器拒绝访问
    403.13 禁止访问:客户证书已被吊销
    403.15 禁止访问:客户访问许可过多
    403.16 禁止访问:客户证书不可信或者无效
    403.17 禁止访问:客户证书已经到期或者尚未生效
    404.1 无法找到 Web 站点
    404 无法找到文件
    405 资源被禁止
    406 无法接受
    407 要求代理身份验证
    410 永远不可用
    412 先决条件失败
    414 请求 - URI 太长
    500 内部服务器错误
    500.100 内部服务器错误 - ASP 错误
    500.11 服务器关闭
    500.12 应用程序重新启动
    500.13 服务器太忙
    500.14 应用程序无效
    500.15 不允许请求 global.asa Error
    501 未实现
    502 网关错误

    参考:
    揭开HTTP网络协议神秘面纱系列(一)

    相关文章

      网友评论

        本文标题:java面试 网络协议

        本文链接:https://www.haomeiwen.com/subject/ydnsottx.html