zoukankan      html  css  js  c++  java
  • 网络知识(2)【待完成】

    1,Web 页面请求过程

    ①网络配置-②获取MAC地址-③DNS域名解析-④TCP连接建立-⑤HTTP GET 报文发送给服务器-⑥服务器生成HTTP 响应报文-⑦浏览器接收数据-⑧提取渲染

    1.1 DHCP 配置主机信息

      如果已经有主机信息既不需要这一步骤【获取网络配置信息】

      ①DHCP 请求报文:源端口:68,目标端口:67【默认UDP数据报信息,长度超过 512 字节时使用 TCP】;源ip:0.0.0.0;目标地址:255.255.255.255【IP数据报】;放入MAC帧【数据帧】中;【广播数据合成】

      ②将上述数据广播到所有交换机连接的设备;

      ③DHCP服务器接收到广播数据帧,生成DHCP ACK报文,包含:IP 地址、DNS 服务器的 IP 地址、默认网关路由器的 IP 地址和子网掩码

      ④该帧的目的地址是请求主机的 MAC 地址,因为交换机具有自学习能力,之前主机发送了广播帧之后就记录了 MAC 地址到其转发接口的交换表项,因此现在交换机就可以直接知道应该向哪个接口发送该帧。

      ⑤主机收到该帧后,不断分解得到 DHCP 报文。之后就配置它的 IP 地址、子网掩码和 DNS 服务器的 IP 地址,并在其 IP 转发表中安装默认网关。

    1.2 ARP 解析 MAC 地址【地址解析协议】

    • 主机通过浏览器生成一个 TCP 套接字,套接字向 HTTP 服务器发送 HTTP 请求。为了生成该套接字,主机需要知道网站的域名对应的 IP 地址。

    • 主机生成一个 DNS 查询报文,该报文具有 53 号端口,因为 DNS 服务器的端口号是 53。

    • 该 DNS 查询报文被放入目的地址为 DNS 服务器 IP 地址的 IP 数据报中。

    • 该 IP 数据报被放入一个以太网帧中,该帧将发送到网关路由器。

    • DHCP 过程只知道网关路由器的 IP 地址,为了获取网关路由器的 MAC 地址,需要使用 ARP 协议【广播接收MAC地址】。

    • 主机生成一个包含目的地址为网关路由器 IP 地址的 ARP 查询报文,将该 ARP 查询报文放入一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧转发给所有的连接设备,包括网关路由器。

    • 网关路由器接收到该帧后,不断向上分解得到 ARP 报文,发现其中的 IP 地址与其接口的 IP 地址匹配,因此就发送一个 ARP 回答报文,包含了它的 MAC 地址,发回给主机。

    1.3 DNS 解析域名【DNS 查询报文-DNS服务器查询-UDP回发】

    • 知道了网关路由器的 MAC 地址之后,就可以继续 DNS 的解析过程了。

    • 网关路由器接收到包含 DNS 查询报文的以太网帧后,抽取出 IP 数据报,并根据转发表决定该 IP 数据报应该转发的路由器。

    • 因为路由器具有内部网关协议(RIP、OSPF)和外部网关协议(BGP)这两种路由选择协议,因此路由表中已经配置了网关路由器到达 DNS 服务器的路由表项。

    • 到达 DNS 服务器之后,DNS 服务器抽取出 DNS查询报文,并在 DNS 数据库中查找待解析的域名。

    • 找到 DNS 记录之后,发送 DNS 回答报文,将该回答报文放入 UDP 报文段中,然后放入 IP 数据报中,通过路由器反向转发回网关路由器,并经过以太网交换机到达主机。

    2, HTTP 请求页面

    • 有了 HTTP 服务器的 IP 地址之后,主机就能够生成 TCP 套接字,该套接字将用于向 Web 服务器发送 HTTP GET 报文

    • 在生成 TCP 套接字之前,必须先与 HTTP 服务器进行三次握手来建立连接【TCP连接建立】。生成一个具有目的端口 80 的 TCP SYN 报文段,并向 HTTP 服务器发送该报文段。

    • HTTP 服务器收到该报文段之后,生成 TCP SYN ACK 报文段,发回给主机。

    • 连接建立之后,浏览器生成 HTTP GET 报文,并交付给 HTTP 服务器。

    • HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一个 HTTP 响应报文,将 Web 页面内容放入报文主体中,发回给主机。【数据传输】

    • 浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。

    HTTP状态码

    服务器返回的 响应报文 中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求的结果。

    1XX 信息【正常】

    • 100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。

    2XX 成功【成功】

    • 200 OK

    • 204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。

    • 206 Partial Content :表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。

    3XX 重定向【附加操作】

    • 301 Moved Permanently :永久性重定向

    • 302 Found :临时性重定向

    • 303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。

    • 注:虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会在 301、302 和 303 状态下的重定向把 POST 方法改成 GET 方法。

    • 304 Not Modified :如果请求报文首部包含一些条件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不满足条件,则服务器会返回 304 状态码。

    • 307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。

    4XX 客户端错误【无法处理】

    • 400 Bad Request :请求报文中存在语法错误。

    • 401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。

    • 403 Forbidden :请求被拒绝。

    • 404 Not Found:没有找到页面。

    5XX 服务器错误【】

    • 500 Internal Server Error :服务器正在执行请求时发生错误。

    • 503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

    3 GET 和 POST 比较

    作用

      GET 用于获取资源,而 POST 用于传输实体主体。

    参数

      GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在实体主体中。

      不能因为 POST 参数存储在实体主体中就认为它的安全性更高,因为照样可以通过一些抓包工具(Fiddler)查看

      因为 URL 只支持 ASCII 码,因此 GET 的参数中如果存在中文等字符就需要先进行编码。例如 中文 会转换为 %E4%B8%AD%E6%96%87,而空格会转换为 %20。POST 参数支持标准字符集。

    GET /test/demo_form.asp?name1=value1&name2=value2 HTTP/1.1
    
    POST /test/demo_form.asp HTTP/1.1
    Host: w3schools.com
    name1=value1&name2=value2
    

    安全

    安全的 HTTP 方法不会改变服务器状态,也就是说它只是可读的。

    GET 方法是安全的,而 POST 却不是,因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。

    安全的方法除了 GET 之外还有:HEAD、OPTIONS

    不安全的方法除了 POST 之外还有 PUT、DELETE

    幂等性

    幂等的 HTTP 方法,同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。换句话说就是,幂等方法不应该具有副作用(统计用途除外)。

    所有的安全方法也都是幂等的。

    在正确实现的条件下,GET,HEAD,PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是。

    GET /pageX HTTP/1.1 是幂等的,连续调用多次,客户端接收到的结果都是一样的:

    GET /pageX HTTP/1.1
    GET /pageX HTTP/1.1
    GET /pageX HTTP/1.1
    GET /pageX HTTP/1.1
    

    POST /add_row HTTP/1.1 不是幂等的,如果调用多次,就会增加多行记录:

    POST /add_row HTTP/1.1   -> Adds a 1nd row
    POST /add_row HTTP/1.1   -> Adds a 2nd row
    POST /add_row HTTP/1.1   -> Adds a 3rd row
    

    DELETE /idX/delete HTTP/1.1 是幂等的,即使不同的请求接收到的状态码不一样:

    DELETE /idX/delete HTTP/1.1   -> Returns 200 if idX exists
    DELETE /idX/delete HTTP/1.1   -> Returns 404 as it just got deleted
    DELETE /idX/delete HTTP/1.1   -> Returns 404
    

    可缓存

    如果要对响应进行缓存,需要满足以下条件:

    • 请求报文的 HTTP 方法本身是可缓存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可缓存,POST 在多数情况下不可缓存的。
    • 响应报文的状态码是可缓存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501。
    • 响应报文的 Cache-Control 首部字段没有指定不进行缓存。

    XMLHttpRequest

    为了阐述 POST 和 GET 的另一个区别,需要先了解 XMLHttpRequest:

    XMLHttpRequest 是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。XMLHttpRequest 在 AJAX 中被大量使用。

    • 在使用 XMLHttpRequest 的 POST 方法时,浏览器会先发送 Header 再发送 Data。但并不是所有浏览器会这么做,例如火狐就不会。
    • 而 GET 方法 Header 和 Data 会一起发送。

    4 HTTPS

    HTTP 有以下安全性问题:

    • 使用明文进行通信,内容可能会被窃听;
    • 不验证通信方的身份,通信方的身份有可能遭遇伪装;
    • 无法证明报文的完整性,报文有可能遭篡改。

    HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPS 使用了隧道进行通信。

    通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。

    加密

    1. 对称密钥加密

    对称密钥加密(Symmetric-Key Encryption),加密和解密使用同一密钥。

    • 优点:运算速度快;
    • 缺点:无法安全地将密钥传输给通信方。

    2.非对称密钥加密

    非对称密钥加密,又称公开密钥加密(Public-Key Encryption),加密和解密使用不同的密钥。

    公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。

    非对称密钥除了用来加密,还可以用来进行签名。因为私有密钥无法被其他人获取,因此通信发送方使用其私有密钥进行签名,通信接收方使用发送方的公开密钥对签名进行解密,就能判断这个签名是否正确。

    • 优点:可以更安全地将公开密钥传输给通信发送方;
    • 缺点:运算速度慢。

    3. HTTPS 采用的加密方式

    HTTPS 采用混合的加密机制,使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使用对称密钥加密进行通信来保证通信过程的效率。(下图中的 Session Key 就是对称密钥)

    认证

    通过使用 证书 来对通信方进行认证。

    数字证书认证机构(CA,Certificate Authority)是客户端与服务器双方都可信赖的第三方机构。

    服务器的运营人员向 CA 提出公开密钥的申请,CA 在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公开密钥证书后绑定在一起。

    进行 HTTPS 通信时,服务器会把证书发送给客户端。客户端取得其中的公开密钥之后,先使用数字签名进行验证,如果验证通过,就可以开始通信了。

    完整性保护

    SSL 提供报文摘要功能来进行完整性保护。

    HTTP 也提供了 MD5 报文摘要功能,但不是安全的。例如报文内容被篡改之后,同时重新计算 MD5 的值,通信接收方是无法意识到发生了篡改。

    HTTPS 的报文摘要功能之所以安全,是因为它结合了加密和认证这两个操作。试想一下,加密之后的报文,遭到篡改之后,也很难重新计算报文摘要,因为无法轻易获取明文。

    HTTPS 的缺点

      • 因为需要进行加密解密等过程,因此速度会更慢;
      • 需要支付证书授权的高额费用。

    2,p2p基本原理

    3,网络下载

    4,未来网络趋势

  • 相关阅读:
    手动渗透测试漏洞
    博弈论一 [ 巴什游戏 ]
    [Error]EOL while scanning string literal
    Swift
    Swift
    Swift
    Swift
    Swift
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/Mufasa/p/11413330.html
Copyright © 2011-2022 走看看