经典计网问题——给定一个网址,访问过程是怎样的,涉及的协议(1)

给定一个网址,访问过程是怎样的,涉及的协议

一.前言介绍

接下来的内容以 www.cctv.com 央视网这样一个 HTTP 网站为例来进行讲述。

需要注意的是,如果访问像 www.baidu.com 这样一个常见的域名,由于为百度已经采用了全站加密的技术,这样的话会出现一些重定向,比如从 http://www.baidu.com 重定向到 https://www.baidu.com,同时 SSL 层还有一个建立连接的过程,对于网络协议还不是那么熟悉的同学来说可能会显得较为复杂。

因此这里面使用一个没有重定向,基于 HTTP1.1 协议传输的网站会使问题的分析变的更加容易理解,同时目前国内的大多数网站还停留在 HTTP1.1 传输阶段,分析 HTTP1.1 传输也能够兼顾大多数的场景。虽然一些大的互联网企业都是积极的拥抱新技术,采用了 HTTPS,但是也可以看到,政府网站,学校网站,公司网站依然基于 HTTP1.1 传输居多

在分析 HTTP1.1 传输的基础上再去尝试分析重定向以及 HTTPS,甚至已经开始应用的 HTTP2 等网站就变得很容易。需要说明的是本文只分析协议层次的访问流程,也就是以对主页 URL 的访问为例。至于主页上的脚本,图片等资源的加载请求的 URL 跟主页的请求在协议角度原理一致,不在赘述。

本文的分析主要分为三个层次:

  1. 站在各个协议层次来看协议间是如何对等传输的。
  2. 站在数据发送者角度自顶向下的分析,分析各层协议字段如何获取。
  3. 站在数据接受者的角度自底向上的分析,分析各层协议之间的联系。

二.对等传输

在这里插入图片描述
以看到 TCP/IP 模型的协议栈包含四层,对等传输表达的就是上图虚线所示,应用层之间互相通信,传输层之间互相交换数据,同理网络层和物理层。这里面以 HTTP 这个常见的应用层协议为例说明对等传输。

在浏览器中输入 http://www.cctv.com 这样一个网址,同时通过 Wireshark 工具抓取传输过程中的数据。使用 http.host contains “cctv” 过滤排除无用的数据包,可以看到有诸多的 http 请求和响应。如前所述,只考虑主页 URL 的请求,并选择第一条进行 follow,如下图所示:
在这里插入图片描述
这时候你发现访问 www.cctv.com 应用层使用了 HTTP 协议进行传输,为什么呢?

因为浏览器地址栏这时候地址变成了 http://www.cctv.com/,也就是浏览器在访问 www.cctv.com 时候,会添加 http:// 这样一个协议头,默认了其传输协议为 HTTP。但是访问 gitchat 却是 https://gitbook.cn/ 这个样子的,前面也提到了会有 http://gitbook.cn/ 重定向到 https://gitbook.cn/ 的过程,为了问题的简化,本文不过多的讨论。

如果你和服务器之间想通过 ftp 协议进行传输,那么在浏览器访地址栏输入的时候就要带上具体协议了,例如 ftp://image.cctv.com 这种形式,因为 image.cctv.com 会被默认为 http://image.cctv.com,ftp 协议是没有重定向的功能的。

从 HTTP 这个应用层来说,通信过程是这样的。

客户端发起一个 HTTP GET 请求。
服务器给出一个 HTTP/1.1 220 OK 的响应,同时传输具体的网页数据。整体来看,HTTP 协议过程非常的简单,就是请求和响应的过程。不仅 HTTP 如此,大多数的通信协议都是请求和响应的过程。
当然 HTTP 协议复杂程度远不止上述请求和响应那么简单。例如 HTTP 所规定的方法就还包括 POST,PUT,DELETE,CONNECT,OPTIONS,HEAD,TRACE 这几种,涵盖了数据的增删改查等方面。HTTP 的响应也还包括 1xx,2xx,3xx,4xx,5xx 等多种响应方式,分别表示不同的应答,例如信息类应答,成功的应答,重定向,客户端错误应答,服务器错误应答等等。

除了请求方法和响应码之外,还有丰富的 HTTP 头域,例如在请求阶段 Host 表示请求域名,Connection 表示长连接,User-Agent 表示客户端名称,Referer 表示请求来源,Aceept-Encoding 表示可接受传输的压缩编码方式等常见的请求头域。在响应阶段,可以看到 Expires 表示内容过期时间,Server 表示服务器名称,Content-Encoding 表示传输的压缩编码方式等常见的响应头域。

总体上看,可以理解为 HTTP 层是基于请求和应答(请求应答最终是协商服务器绝对路径,因此也可以认为是基于服务器绝对地址)所建立的虚拟链接头域字段更多的是为了协商传输内容服务的。有了这样一个虚拟连接之后,自然而然的,数据就在 HTTP 层次对等的传输起来。如下图:
在这里插入图片描述
可以看到,我们忽略了所有的下层,认为 HTTP 层存在一条虚拟链接。

同理可以认为 TCP 层是基于端口所建立的链接,当然关于 TCP 层的对等传输通常指的是 TCP 的三次握手,如下图所示:
在这里插入图片描述
TCP 的三次握手具体过程是:

  1. 客户端发起 TCP 连接(SYN)
  2. 服务器同意,并响应(SYN,ACK)
  3. 客户端也准备就绪,开始发数据(ACK)。
  4. 在一条流的结束时候,有四次挥手断开相应的 TCP 连接,如下图:

在这里插入图片描述
同样的 IP 层是基于 IP 地址所建立的链接,MAC 是基于 MAC 地址多建立的链接。当然显而易见的是,这些链接并不唯一。但是协议栈中各层析协议组合起来构成的链接在某个时刻就是唯一的一条链接,因此可以看到在复杂的网络中数据为什么非常有秩序的从一个终端流向另一个终端,正是这一条条唯一的链接所决定,不会跑偏。同时也可以看到协议中非常重要的一个要素就是地址,无论是 MAC 地址,IP 地址,端口,URL 都是一种地址,而地址就是通信的目的地。基于地址的链接就构成了协议层次的对等传输

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值