前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP协议原理

HTTP协议原理

作者头像
Java学习录
发布2020-01-19 19:38:19
1.1K0
发布2020-01-19 19:38:19
举报
文章被收录于专栏:Java学习录Java学习录

上篇文章我们以一个访问我的博客shiyujun.cn为例子描述了如何把一个域名转化为ip这个过程,那么拿到ip之后的交互过程是什么样的呢

第一步就是客户端和服务端之间建立连接,也就是基于3次握手。这个之前的文章中也提到过了

接着就是发生http请求,一个http请求的格式是这样的(红色字体是我给出的示例):

HTTP 请求报文封装完成后,数据来到了TCP层

TCP 层发送每一个报文的时候,都需要加上自己的地址(即源地址)和它想要去的地方(即目标地址),将这两个信息放到 IP 头里面,交给 IP 层进行传输

IP 层需要查看目标地址和自己是否是在同一个局域网。如果是,就发送 ARP 协议来请求这个目标地址对应的 MAC 地址,然后将源 MAC 和目标 MAC 放入 MAC 头,发送出去即可。

如果不在同一个局域网,就需要发送到网关,发送 ARP 协议,获取网关的 MAC 地址,然后将源 MAC 和网关 MAC 放入 MAC 头,发送出去

网关收到包发现 MAC 符合,取出目标 IP 地址,根据路由协议找到下一跳的路由器,获取下一跳路由器的 MAC 地址,将包发给下一跳路由器。

这样路由器一跳一跳终于到达目标的局域网。这个时候,最后一跳的路由器能够发现,目标地址就在自己的某一个出口的局域网上。于是,在这个局域网上发送 ARP,获得这个目标地址的 MAC 地址,将包发出去。

目标的机器发现 MAC 地址符合,就将包收起来。发现 IP 地址符合,根据 IP 头中协议项,知道自己上一层是 TCP 协议,于是解析 TCP 的头,里面有序列号,需要看一看这个序列包是不是我要的,如果是就放入缓存中然后返回一个 ACK,如果不是就丢弃。

TCP 头里面还有端口号,而我们的Tomcat正在监听这个端口号。于是,目标机器自然知道是Tomcat想要这个包,于是将包发给Tomcat

忽略上方网关和路由的过程,整个请求流程如下图所示

HTTP2.0

上方我们说的比较适应HTTP1.0/HTTP1.1,而HTTP2.0则与它们有一些区别:

  • 采用二进制格式而非文本格式
  • 消息头压缩
  • 支持服务端推送
  • 使用多路传输:HTTP1.0时一个连接一次只提交一个请求。HTTP1.1试过用流水线来解决这个问题, 但是效果并不理想(数据量较大或者速度较慢的响应, 会阻碍排在他后面的请求). 此外, 由于网络媒介和服务器不能很好的支持流水线, 导致部署起来困难重重。而多路传输能够同时处理多个消息的请求和响应; 甚至可以在传输过程中将一个消息跟另外一个掺杂在一起。所以客户端只需要一个连接就能加载一个页面
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HTTP2.0
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档