HTTP请求的详细过程

承接上文

TCP网络包传输的整个过程

网络基础二

网络基础一

对于开发者来讲,只使用标准库进行网络开发,那是见自己;如果你了解背后的原理再进行开发,那是见天地;如果你了解原理并进行了创新,比如说开发出来自己的网络通信协议 ,那是见众生。

http状态码的含义

200-300之间的状态码代表一切正常;

300-400的状态码代表转向了别的地方,例如301是永久重定向,302是临时重定向,304是带参数重定向(如果参数不满足,则从缓存中拿已有的结果);

400-500之间代表你的错,比如404,表示你输入错的网址;

500-600代表是网站的错,网站服务器内部出现了问题。

耗时2.5秒表示从点击回车键开始到网站打开需要的所有时间,时间线以4种颜色区分网站打开过程中的每个阶段,第一个阶段是初始连接阶段,

因为发生在瞬间,导致只能看到三个颜色的标记;

第二个紫色表示SSL加密协议密钥的阶段;

第三个绿色是服务器准备内容的阶段;

第四个蓝色代表下载内容阶段;

从域名开始了解具体发生了什么

域名组成部分中,域名的末尾从斜杆开始,代表着要访问网站其他地方的路径;

斜杆代表要访问网站的默认索引页,比如网站首页;

斜杆➕字母、数字等组成的路径表示网站的其他地方;

域名的主题部分,好比存储在通信录中的人名,每个联系人都对应着自己的电话号码,域名也一样,它对应的有相应服务器的ip,这样任何人访问网站,就可以知道去哪个服务器里要我们想看到的东西。

通常验证是否和服务器互通使用ping命令

除了服务器禁ping的情况,ping不超时就说明可以和服务器相互交互,命令中参数-c 4表示和服务器交互了4次。

ping域名的后面,出现了ip地址,相当于在地址栏输入网址按下回车,第一件事就是去找域名对应的服务器地址,这个ip地址是从DNS服务器里存储的地址本里找出来的,如果你访问过该网站,就从本机缓存的数据里找,如果找不到就从路由器设置的电信服务商提供的DNS服务器中找,

如果还找不到,就从网站域名服务商提供的DNS服务器中找,所以DNS域名服务器存储的地址本是分布式的,可以用nslookup命令验证下。

如何从DNS查询域名对应的ip

使用nslookup得到应答,可以看到给b站域名响应了4、5个地址,大概率是因为b站的流量巨大,使用了CDN做了资源加速,让你从最近的服务器中提取资源。

将DNS服务器的设置为8.8.8.8

b站的响应结果是一样的,那起初DNS的域名是谁操作绑定在一起的,当然是b站所属的公司,注册了bilibili的域名,指定好域名的DNS,做好A记录解析来对应好服务器的ip地址,这样就可以通过域名访问b站了。

查看域名的注册信息

whois bilibili

这是域名的注册信息,可以反映出域名注册的过期日期、服务商是阿里云DNS服务器。

域名前的https是超文本传输协议,https代表超文本内容是加密传输的以保证传输的安全。

服务器和客户端的加密协议的协商就对应网络时间轴的紫色部分,

地址栏的小锁图标代表信任的安全认证的加密证书,

证书的使用人、颁发人和证书的有效期以及指纹信息、传输内容的加密是非对称加密、服务器持有密钥、客户端持有公钥、在证书的详细信息标签中可以看到更详细的证书信息,例如证书的签名算法和公钥的路径信息等。

http2协议必须使用加密证书,它保证一个客户端与服务器保持一个连接,比http1.1更高效。

https加密传输每次都是要有协商时间的,说明它比http非加密的方式访问网站要慢。

如果浏览器的要求必须使用加密的方式传输,如果证书过期或者没有使用证书,会将小锁换成不安全警告。

模拟不加密访问

使用的是http1.1非加密协议,请求的是80端口,返回301的状态码,表示b站将域名永久重定向到带www的域名上。

模拟https协议的域名

访问的是443端口,

这里出现了协商密钥交互的握手部分,协商成功之后将使用TLS证书进行加密链接,使用http2的协议进行传输;

这里特别说明下http2协议是http1.1协议的升级版,http2协议必须使用加密证书,它保证一个客户端与服务器只保持一个连接,比http1.1更高效。

互联网之所以互联,是因为它们都是基于TCP/IP协议族进行传输,客户端与服务器的每一次交互都要通过2*7=14到关卡。

OSI七层模型

TCP/IP的OSI 7层模型,虽然它不能代表现实中实际的网络模型但足具代表性。

按照客户端数据流向的方向,从7层模型的最高层讲起:

第7层应用层是由应用程序负责的协议层,比如HTTP/SMTP/POP协议等;

第6层表示层是负责数据的加解密,数据的转换和压缩,例如http协议数据传输中的gzip数据压缩,缩小数据大小以节约网络传输数据的流量;

第5层会话层,例如开发者工具窗口中时间线的紫色部分负责的就是数据加密协议的协商工作,就是在这一层完成的;

第5、6、7层可以统称为应用程序层,在数据向下传输的阶段,在数据段前加入http标头,表示请求的方法是get还是post请求;

第4层就是经典的传输层,负责数据是按照TCP的方式还是按照UDP的方式传输,比如HTTP是按照TCP方式传输的。

这一层会为数据追加20个字节的TCP标头,例如源端口、目标端口、请求序列号。

第三层网络层,负责数据路由的选择和数据分组的传输,典型的IP和IPv6协议就在这一层,这一层会为数据段追加来源IP和目标IP地址,

路由选择,当你输入网址按下回车,找到IP后进入网络层,路由选择是按照你访问的目标服务器的物理距离来决定第二层数据先到哪里,比如你做的是TCP火车还是UDP飞机,从上海到北京你都必须经过江苏安徽河北才能到达是一样的。

模拟路由的选择

下一跳次数越多,说明经停站越多,达到目的地的时间就越长。

这就是为什么使用nslookup查找b站域名ip的时候,会有多个ip,是因为b站为了让用户更快的访问网站使用了CDN技术,选择离你最近的服务器中快速的打开b站。

第二层数据链路层,这一层确保物理层传输的数据帧按需传输,并在这一层加入了来源MAC地址和目标MAC地址标头即网卡,每个网卡都有自己全球唯一的MAC地址确保传输的数据找不错设备,这里的MAC地址不一定是起初访问的设备MAC地址和真正的目的地的服务器的MAC地址,这是由第三层路由选择的下一跳地址决定的。

第一层就是物理层,例如网线、Wi-Fi等方式将你的二进制比特流的数据送出去。

当输入网址按下回车每一次从客户端发送出的请求数据,都会从第7层逐渐处理,加入不同的标头,然后达到目标地址,到达目标地址再反向,从第1层逐层去掉标头,直到网络的第7层,最终服务器拿到干净的请求数据。

知道了数据是怎么流向的,客户端和服务器还要确保数据链路的通畅,它俩必须要建立可靠的链接通道。

三次握手

开发者工具窗口中网络时间轴中瞬间发生的第一个阶段:初始链接阶段,第一次握手是客户端带上序列号x,给服务器打招呼:b站美女你好靓,可以认识下不?

客户端进入SYN-SEND的同步发送状态;

第二次握手服务器监听相关的端口,开通http协议请求端口,类似80和443端口,服务器监听端口收到了消息之后,带上自己的序列号y并带上ack确认码(客户端带来了序列号+1),然后回复:hi,你也好帅哦。

服务器进入SYN_RCVD状态。

第三次握手,客户端收到服务器的回复,带上服务器回复的序列号+1的确认码发送给服务器建立连接成功,就可以愉快的传递数据了。

四次分手

当客户端打算关上连接,会主动带上握手时客户端确认码作为序列号发送给服务器断开连接,客户端进入FIN-WAIT-1状态,发生了一次挥手,服务器收到了分手的消息,会带上自己的序列号v即客户端带来的序列号+1作为确认码回复给客户端。

服务端:分手消息我收到了,我想想,服务端进入CLOSE_WAIT等待关闭的状态,客户端进入继续等待FIN-WAIT-2的状态;然后发生第二次挥手,服务器想了想没有更多的话要给客户端说的,于是带上了序列号w和序列号+1的确认码给客户端发送了分手请求:分手就分手没有什么好说的了,然后服务器进入LAST-ACK最后确认状态;发生了第三次挥手,客户端收到了服务器的分手请求之后,带上+1的序列号和+1的确认码回复给服务器,于是服务器关闭了连接,客户端进入了定时等待时间,这两个报文的最大生存周期,不同的操作系统不一样,大约是1-4分钟即俗称的冷静期,冷静期后客户端才真正的断开。

小结

浏览器输入域名网址首先通过DNS找域名对应的ip地址,然后是三次握手进入初始链接阶段,每次链接都要经过TCP/IP七层模型, 链接初始成功后进入第二阶段SSL的加密协议的证书协商阶段,接下来是服务器准备我们需要的内容,准备好内容之后就是客户端下载内容的阶段。

展开阅读全文

页面更新:2024-04-25

标签:序列号   客户端   证书   状态   协议   阶段   过程   地址   服务器   域名   数据   详细

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top