TCP/IP五层模型视角下的浏览器请求

浏览器请求的传输过程

前言

以应用层、运输层、网络层、链路层、物理层的视角,详细分析了浏览器请求到服务端的传输过程,其中特意区分了网络层与链路层的区别。

浏览器输入网址

在浏览器中输入一个网址www.taobao.com

应用层

1.DNS解析域名,得到ip地址

2.HTTP或HTTPS封装
HTTP

传输层

其实传输控制层的作用主要是产生包。产生握手包,数据切片包,挥手包等,怎么发不归他管,归网络层链路层物理层。

TCP或UDP协议,若是TCP则进行三次握手连接。同时在传输层通常会对数据报文进行切片,去掉TCP头和IP头,最大为1460字节(HTTP头和主体)

往往采用TCP协议,所谓的面向连接就是,TCP会保证这个包能够到达目的地。如果不能到达,就会重新发送,直至到达;TCP协议中有两个端口,一个是浏览器监听的端口,一个是服务器监听的端口。操作系统往往通过端口来判断,它得到的包应该给哪个进程
TCP协议

网络层

传输层封装完之后,浏览器会将包交给操作系统的网络层。网络层的协议是IP协议,在IP协议里面会有源IP地址,即浏览器的所在的机器的IP地址和目标IP地址,也就是电商所在的IP地址
image-20210328154256998

此为路由表,输入的ip地址后总是进行下一跳,若ip和掩码相乘后,对不上前两个,则都到了网关(路由器)192.168.150.2,到了192.168.150.2后要找对应的mac地址

image-20210328162803941

链路层

于是操作系统将IP包交给了下一层,也就是MAC层。**链路层有ARP表,能看到ip对应的MAC地址(网卡的硬件地址)。**网卡再将包发出去,包里面包含MAC地址,因此可以到达网关。网关收到包以后,会根据自己的知识,判断下一步该怎么走。网关往往是一个路由器,到了某个IP地址应该怎么走,这个叫作路由表。

路由器就像唐僧西天取经路过的一个个国家之间的城关,每个城关都连接着两个国家,每一个国家都相当于一个局域网,每个国家的内部都可以使用MAC地址进行通信;

一旦跨越城关,就需要拿出IP头来,里面记录着IP源地址(东土大唐),欲前往西天拜佛取经(目的IP地址),路过宝地,借宿一晚,请问接下来该如何走?

城关与城关之间的沟通协议叫做路由协议,常用的由OSPF和BGP;

城关与城关之间是一个国家,网络包知道了要去哪个城关的时候,还是要使用国家内部的MAC地址,通过下一个城关的MAC地址,找到下一个城关,然后在问下一步该怎么走,一直走到最后一个城关。最后一个城关知道这个网络包要去的地方。于是,对着这个国家吼一声,谁是目标IP啊?目标服务器就会回复一个MAC地址。网络包过关后,通过这个MAC地址就能找到目标服务器;

流程:

客户端拿着服务器的IP,和掩码相乘后没对上,都到了网关,在网关(路由器)处得到网关MAC地址。于是到路由器处,根据目标服务器ip地址和路由表下一跳得到运营商MAC地址,不断地下一跳最终找到服务器MAC地址。

image-20210328163427410

最终数据包中有三个地址,IP地址,进程端口号,MAC地址,才能定位到数据交给服务器的某个进程
IP包

物理层

网线、光纤等,传输比特流。

请求到达服务端

1.取下MAC头、IP头、TCP头

目标服务器发现MAC地址对上了以后,取下MAC头来,发送给操作系统的网络层,发现IP地址对上了,在取下IP头。IP头里会写上一层封装的TCP协议,然后交给传输层,即TCP层。

在这一层中,对于收到的每个包,都会有一个回复说明收到了。这个回复的包绝非这次单次请求的结果,例如购物是否成功,扣了多少钱等,而仅仅是TCP层的一个说明,即收到之后的回复。当然这个回复,会沿着刚才来的方向走回去,报个平安,防止在传输过程中造成的丢包等。

如果过一段时间还没有收到的话,发的端TCP层会重新发送这个包,还是上面的请求,直到收到平安到达的回复。这个重试绝非你的浏览器重新将下单这个动作重新请求一次。对于浏览器来讲,就发送了一次下单请求,TCP层不断自己闷头重试。除非TCP这一层出了问题,例如连接断了,才轮到浏览器的应用层重新发送下单请求。

当网络包平安到达TCP层之后,TCP头中有目标端口号,通过这个端口号,可以找到电商网站的进程正在监听这个端口号,假设一个Tomcat,将这个包发给电商网站。

2、取完头之后重组HTTP请求,服务端处理请求

电商网站的进程得到的是HTTP请求,知道要买什么东西,买多少。往往一个电商网站最初接待请求的这个Tomcat只是个接待员,负责统筹处理这个请求,而不是所有的事情都自己做。例如,这个接待员要告诉专门管理订单的进程,登记要买某个商品,买多少,要告诉管理库存的进程,库存要减少多少,要告诉支付的进程,应该付多少钱,等等。

如何告诉相关的进程呢?往往通过RPC调用,即远程过程调用的方式来实现。远程过程调用就是当告诉管理订单进程的时候,接待员不用关心中间的网络互连问题,会由RPC框架统一处理。RPC框架有很多种,有基于HTTP协议放在HTTP的报文里面的,有直接封装在TCP报文里面的。

当接待员发现相应的部门都处理完毕,就回复一个HTTPS的包,告知下单成功。这个HTTPS的包,会像来的时候一样,经过千难万险到达你的个人电脑,最终进入浏览器,显示支付成功。

参考文献
https://blog.csdn.net/m0_37907797/article/details/102740903

https://blog.csdn.net/ghw15221836342/article/details/100191924

https://www.cnblogs.com/onesea/p/13053697.html

https://www.zhihu.com/question/34873227/answer/1657140394

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值