浏览器输入url,到底发生了什么

一次网络订单发生了什么事情?

一共分为7步

输网址找IP

  • 你先在浏览器里面输入 https://www.kaola.com
  • 通过DNS或者HTTPDNS 最终都会得到这个地址:106.114.138.24。

填内容发请求

  • 这个是IP地址,是互联网世界的“门牌号”。通过用HTTP协议;但是对于购物的请求,安全的HTTPS协议。无论是什么协议,里面都会写明“你要买什么和买多少”。
    浏览器输入url,到底发生了什么

保稳定保安全

  • 浏览器会将应用层的包交给下一层去完成,通过 socket 编程来实现。下一层是传输层。传输层有两种协议UDP,TCP
    浏览器输入url,到底发生了什么
  • 传输层封装完毕后,浏览器会将包交给操作系统的网络层。网络层的协议是 IP 协议。在 IP 协议里面会有源 IP 地址,即浏览器所在机器的 IP 地址和目标 IP 地址,也即电商网站所在服务器的 IP 地址。
    浏览器输入url,到底发生了什么

通网关

  • 而操作系统启动的时候,就会被 DHCP 协议配置 IP 地址,以及默认的网关的 IP 地址 192.168.1.1。

  • 操作系统如何将 IP 地址发给网关呢?在本地通信基本靠吼,于是操作系统大吼一声,谁是 192.168.1.1 啊?网关会回答它,我就是,我的本地地址在村东头。这个本地地址就是MAC地址,而大吼的那一声是ARP协议。
    浏览器输入url,到底发生了什么

  • 于是操作系统将 IP 包交给了下一层,也就是链路层。网卡再将包发出去。由于这个包里面是有 MAC 地址的,因而它能够到达网关。

走路由

  • 路由器有点像玄奘西行路过的一个个国家的一个个城关。每个城关都连着两个国家,每个国家相当于一个局域网,在每个国家内部,都可以使用本地的地址 MAC 进行通信。

  • 一旦跨越城关,就需要拿出 IP 头来,里面写着贫僧来自东土大唐(就是源 IP 地址),欲往西天拜佛求经(指的是目标 IP 地址)。路过宝地,借宿一晚,明日启行,请问接下来该怎么走啊?
    浏览器输入url,到底发生了什么

  • 城关往往是知道这些“知识”的,因为城关和临近的城关也会经常沟通。到哪里应该怎么走,这种沟通的协议称为路由协议,常用的有OSPF和BGP。
    浏览器输入url,到底发生了什么

每走一个城关,都要拿本地mac地址和下一个城关的mac地址进行通信

  • 最后一个城关知道这个网络包要去的地方。于是,对着这个国家吼一声,谁是目标 IP 啊?目标服务器就会回复一个 MAC 地址。网络包过关后,通过这个 MAC 地址就能找到目标服务器。

找服务

  • 找到目标服务器,在这一层里,对于收到的每个包,都会有一个回复的包说明收到了。这个回复的包绝非这次下单请求的结果,例如购物是否成功,扣了多少钱等,而仅仅是 TCP 层的一个说明,即收到之后的回复。当然这个回复,会沿着刚才来的方向走回去,报个平安。
  • 因为一旦出了国门,西行路上千难万险,如果在这个过程中,网络包走丢了,例如进了大沙漠,或者被强盗抢劫杀害怎么办呢?因而到了要报个平安。
  • 如果过一段时间还是没到,发送端的 TCP 层会重新发送这个包,还是上面的过程,直到有一天收到平安到达的回复。这个重试绝非你的浏览器重新将下单这个动作重新请求一次。对于浏览器来讲,就发送了一次下单请求,TCP 层不断自己闷头重试。除非 TCP 这一层出了问题,例如连接断了,才轮到浏览器的应用层重新发送下单请求。
    浏览器输入url,到底发生了什么

去下单

  • 电商网站的进程得到 HTTP 请求的内容,知道了要买东西,买多少。往往一个电商网站最初接待请求的这个 Tomcat 只是个接待员,负责统筹处理这个请求,而不是所有的事情都自己做。例如,这个接待员要告诉专门管理订单的进程,登记要买某个商品,买多少,要告诉管理库存的进程,库存要减少多少,要告诉支付的进程,应该付多少钱,等等。
  • 由RPC 框架统一处理,开始减去库存 登记商品操作
  • 当接待员发现相应的部门都处理完毕,进入浏览器,显示支付成功。
  • 关于文章中出现的各种协议,下一篇文章会做梳理
  • 参考文章:https://time.geekbang.org/column/article/7581
    参考文章:https://juejin.im/post/5a98e1f7f265da237410694e
    参考文章:https://zh.wikipedia.org/wiki/域名系统#cite_note-1