底层网络知识详解:最常用的应用层
概述
这个专栏的计算机网络协议,我是在极客时间上学习 已经有三万多人购买的刘超老师的趣谈网络协议专栏,讲的特别好,像看小说一样学习到了平时很枯燥的知识点,计算机网络的书籍太枯燥,感兴趣的同学可以去付费购买,绝对物超所值,本文就是对自己学习专栏的总结,评论区可以留下你的问题,咱们一起讨论!
上一篇文章中介绍了常见的传输层的协议,接下来开始讲应用层的协议。本文将分为三个协议给大家进行介绍:
- HTTP协议:看个新闻原来这么麻烦;
- HTTPS协议:点外卖的过程原来这么复杂;
- P2P协议:我下小电影,99%急死你;
一、HTTP协议
http://www.taobao.com 是个URL,叫作统一资源定位符;
HTTP请求的准备
系统会将http://www.taobao.com 提交给DNS服务器解析为IP地址;
目前使用的HTTP协议大部分都是1.1,默认开启Keep-Alive,建立起的TCP连接可以在多次请求中复用;
HTTP请求的构建
建立连接之后,浏览器发送HTTP的请求,请求格式如下:
HTTP分为三部分:请求行、首部、正文实体;
1.1、HTTP 1.1
第一部分:请求行
在请求行中,URL就是 http://www.taobao.com ,版本为HTTP 1.1,方法有几种类型:
-
GET
GET就是去服务器获取一些资源,可以返回的是一个网页,也有许多别的格式,比如说返回一个JSON字符串; -
POST
需要主动告诉服务端一些信息,一般会放在正文里面。正文可以有各种各样的格式。常见的格式也是JSON; -
PUT
向指定资源位置上传最新内容,POST往往是用来创建一个资源的,而PUT往往是用来修改一个资源; -
DELETE,删除资源,例如删除云主机;
第二部分:首部字段
首部是key value,通过冒号分隔,往往保存了一些非常重要的字段。例如,Accept-Charset,表示客户端可以接受的字符集,防止传过来的另外字符集导致乱码;
或者是Content-Type是指正文的格式,进行POST的请求,如果正文是JSON,那么我们就应该将这个值设置为JSON;
在HTTP头里面,Cache-control是用来控制缓存的。当客户端发送的请求中包含max-age指令时,如果判定缓存层中,资源的缓存时间数值比指定时间的数值小,那么客户端可以接受缓存的资源;当指定max-age值为0,那么缓存层通常需要将请求转发给应用集群。
If-Modified-Since也是一个关于缓存的,如果服务器在某段时间更新了就会下载最新资源,反之就会返回一个“304 Not Modifed”的响应;
HTTP请求的发送
HTTP协议是基于TCP,面向连接,通过stream二进制流的方式传给对方;
每发送一个报文,都需要对方有一个回应ACK,保证报文可靠传到了对方;
TCP层每发送一个报文,就会在IP头加上源地址和目标地址,交给IP层进行传输;
IP层和目标地址在一个局域网,就发送ARP协议来请求这个目标地址对应的MAC地址,然后将源MAC和目标MAC放入MAC头,发送出去即可;不在同一个局域网,就需
要发送到网关,还要需要发送ARP协议,来获取网关的MAC地址,然后将源MAC和网关MAC放入MAC头,发送出去;
网关收到包发现MAC符合,取出目标IP地址,根据路由协议找到下一跳的路由器,获取下一跳路由器的MAC地址,将包发给下一跳路由器。路由器一跳一跳终于到达目标的局域网后,找到目标机器的MAC地址进行匹配;;发现IP地址符合,根据IP头中协议项,知道自己上一层是TCP协议,于是解析TCP的头,里面有序列号,需要看一看这个序列包是不是我要的,如果是就放入缓