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的加密协议的证书协商阶段,接下来是服务器准备我们需要的内容,准备好内容之后就是客户端下载内容的阶段。
盛世美颜科斯塔是怎么和孔蒂切尔西闹翻的?被外界冠以盛世美颜的西班牙入籍巴西人迭戈科斯塔,在场上的他是一名典型的实力远大于名气的球星,出身巴西的他其貌不扬,在比赛中也时常被诟病为了胜利而不择手段,在他加盟蓝军的前三年中,就
家用音响用什么牌子的好?怎么选好音箱?从这个问题的提问上,可以发现很多问题,音响和音箱的概念不明确,另外对于音响品牌的认识上面也存在着误区。这个问题非常普遍,如果不弄清楚,购买音响的时候就会造成很大的困惑。音响一般意义
贵的眼影和便宜的眼影有什么区别呢?我始终相信一分价钱一分货,好多人都会说眼影不都是那样吗,反正也不是很重要的必备品,随便几十块的也就可以了,没必要买太贵的!我以前也觉得差不多。后来入手了一盘算是比较贵的,UD的衰败
有退休金和没有退休金的公婆,子女的生活有啥不一样?有退休金和没有退休金子女的生活肯定不一样啊!就像我家公婆退休费一个月6000多,自己还种两个菜园,吃不完的菜还卖给菜贩子,所以我家一年四季基本没有买过几次菜不说,因为公婆有退休费所
谁是中国院士第一城?你这个问题有没有固定说法,要是按工作城市来说北京当之无愧,院士人数领先其它城市一大截。前五分别是北京,上海,南京,武汉,西安。上面五个城市也是公认的科教最强的城市,也是对高端人才最
女儿在校被掌掴,我让她打回去,老师称做法不可取,你觉得这样可取吗?对此你怎么看?谢邀我看到这个问题,首先令人想到的是,近几年来学生在校以强凌弱,以大欺小的现象普遍存在。不能不说把学生绑在课堂上,钻在书堆里,追求分数,追求升学率,知识就是金钱,知识改变命运的教学
李易峰赵丽颖关系怎么样?李易峰和赵丽颖真的很熟呀。装不熟也是为了避嫌吧。李易峰和赵丽颖结识于电视剧青云志,两个人在里面饰演张小凡和碧瑶,是一对cp组合。俩人因为这部剧传出了绯闻。他们在戏外的互动也非常的亲
孩子得了鼻窦炎,可以用哪些药?你好!用药方面要看孩子患的是何种类型的鼻窦炎,如果是急性鼻窦炎,应用抗生素或磺胺类药物进行治疗,每个年龄段的孩子用量是不同的,所以还是要根据孩子的具体情况咨询医生选择用量。如果是慢
孩子一年级,家长到底要不要陪着孩子写作业?这个问题提的好!这里有个一年级一词,还有作业一词和陪着,这三个方面什么意思呢?答案就在这里,孩子的能力,知识点的问题,大人的教育观念。什么是作业呢?在学习环节中作业仅仅一个方面,也
给孩子打生长激素治疗一年下来费用有多少?这东西到底有用吗?以后不会有什么负作用吗?个人还是觉得自然的最好,安全放心。曾经,我们对生长激素药品望洋兴叹。如今,越来越多的中国儿童正在接受生长激素治疗。根据最新数据调查,让我们
微信推出群插件小程序,意欲何为?社群管理是一个很大的市场。因为这是一个典型的私域流量管理。以前都是些第3方的工具,wetool通过类似于外挂的市场进行管理。这类工具因为微信推出了企业微信,而被起诉消灭了。问题是不