zoukankan      html  css  js  c++  java
  • 常见问题:计算机网络/完整HTTP访问

    域名解析

    1. 以浏览器进行HTTP访问为例,首先搜索自身DNS缓存(一般缓存1000条左右,仅缓存1分钟),若有且未过期,结束。
    2. 若未找到,则搜索操作系统的DNS缓存。
    3. 若未找到,尝试读取hosts文件。
    4. 若未找到,发起向本地首选DNS服务商。DNS服务商优先找自身缓存,未找到,则找根域名的ip(如com),根域名再逐级查找(如cnblogs.com),直到找到。

    与服务器建立连接

    整体流程简述

    发送方:应用层(HTTP)-传输层(TCP)-网络层(IP)-链路层

    • HTTP协议: 生成对目标服务器目标资源的HTTP请求报文。
    • TCP协议: 将HTTP请求报文分割成报文段,打序号和端口号,将每个报文段可靠传输。
    • IP协议: 给TCP报文增加IP头部,转发给链路层。
    • 链路层: 利用ARP服务给IP增加目标MAC地址,处理物理层细节。

    接收方:链路层-网络层(IP)-传输层(TCP)-应用层(HTTP服务器)

    • 链路层: 消去以太网首部。
    • IP协议: 消去IP头部。
    • TCP协议: 接收收到的报文,按序号以原来的顺序重组报文段。
    • HTTP协议: 根据收到的请求报文,访问目标资源。
      接收方同样利用TCP/IP通信协议向用户回传。

    链路层

    1. 处理连接网络的硬件部分。如操作系统中的设备驱动。
    2. ARP协议提供IP-MAC地址的映射。

    ARP采用一问一答的形式,较为简单。发送方向ARP服务发出请求获取IP对应的MAC地址,并将其缓存在ARP缓存中。发送方(PC1)需要向ARP服务提供自己的IP和MAC地址,以及目标的IP地址。ARP服务会用这些信息在LAN内进行广播,其目标主机(PC2)收到该广播后,会先将PC1的信息放在自己的ARP缓存,之后,以单播形式向PC1回应ARP返回。

    网络层-IP协议

    IP协议作用是把数据包传给对方,因此需要给数据包添加两个条件:IP地址和MAC地址。IP地址指明节点被分配到的地址,可变。MAC地址指网卡所属固定地址,通常不变。当通信双方不在同一LAN时,则无法获取目标的MAC地址。此时,通常是经过多台计算机和网络设备中转才能连接到对方。中转时,利用下一站中转设备的MAC地址来搜索下一个中转目标。此时会使用ARP协议,ARP协议可以通过通信方的IP地址反查出对应的MAC地址。

    IP协议提供的是不可靠的服务,TCP和UDP的每组数据都通过端系统和中间路由器的IP层在互联网中传输。ICMP协议是IP协议的附属协议,IP协议用它来与其他主机或路由器交换报文及其他重要信息。IGMP是组管理协议,UDP的多播就利用了IGMP。

    传输层-TCP协议

    TCP提供字节流服务,将大块数据分割成以报文段segment为单位的数据包进行管理,其目的是更容易传送大数据。为确保送达,TCP采用三次握手方式,首先发送带SYN bit的包,对方接收后回传带SYN bit和ACK bit的包表示确认信息,发送方再回传带ACK bit的可带数据的包开始发送数据。

    传输结束后,TCP采用四次握手的方法断开连接,首先PC1发送FIN报文段,进入FIN_WAIT_1状态,表示自己没有信息发了。PC2收到后回复一个ACK报文段,同意其关闭连接的请求,PC1进入FIN_WAIT_2状态。PC2主动向PC1发送FIN报文段请求关闭连接,同时PC2进入LAST_ACK状态,PC1收到后回复ACK报文段,并进入TIME_WAIT状态,PC2收到PC1的ACK报文段则关闭,PC1等待后仍未收到回复则说明PC2正常关闭,于是PC1也关闭连接。

    TCP详细另开文章,此处略。

    应用层-HTTP协议

    HTTP是应用层协议,是无状态的TCP连接。HTTP报文是面向文本的,每个字段都是不定长的ASCII编码。

    HTTP请求报文格式如下:

    请求方法 URL 协议版本
    N行头部(字段名:字段值)
    
    请求数据
    

    请求方法在RESTful协议中常用GET POST PUT DELETE,其中GET和DELETE不能带数据
    URL=<协议>://<主机>:<端口>/<路径>

    HTTP响应报文格式如下:

    协议版本 状态码 状态码描述
    N行头部(字段名:字段值)
    
    响应正文
    

    HTTP状态码大致含义如下:

    • 1XX 表示请示已收到,继续处理,不常用。
    • 2XX 表示已成功。(200,成功)
    • 3XX 重定向 表示要完成请求必须进行更近一步操作。(301/302,跳转,响应头中的Location指定跳转地址,301则资源永久转移,302则资源临时转移)
    • 4XX 客户端错误 请求有语法错误或请求无法实现。(400,客户端语法错误不被服务器识别;403,认证失败拒绝提供服务;404,找不到资源)
    • 5XX 服务端错误 服务器未能实现合法的请求。(500,服务器内部错误;503,超负载暂时无法响应)
  • 相关阅读:
    常用 Git 命令
    Flex布局
    React-Redux系列4:增加listData列表数据
    React-Redux系列3:修改Store state的值
    React-Redux系列2:Provider提供器和Connect连接器
    React-Redux系列1:简介和安装
    Redux中间件redux-saga中间件之安装、配置、使用
    Redux中间件redux-thunk中间件之安装、配置、使用
    Redux优化之JS纯函数(Pure Function)
    浅谈JS纯函数
  • 原文地址:https://www.cnblogs.com/cielosun/p/11428983.html
Copyright © 2011-2022 走看看