当你在浏览器输入一个网址点击回车后发生的鬼故事

通常上网时输入购物网站的网址后,点一下回车一个五彩缤纷的网页就出现了,这时一般人能将讲的鬼故事就是自己的钱是怎么没的。不过作为IT人,除了要清楚钱是怎么没的,同时还是应该了解一下在二进制世界发生的事。

以下按步骤描述一下大体的过程:

1.打开浏览器输入URL,点击回车后,你的主机首先会去查找URL对应的IP地址,毕竟实际定位通信靠IP而不是URL。先在本地解析列表中查找,如果找不到,再根据定义的DNS服务器逐个查找,如果都找不到就死在万里长征的第一步了...

2.找到对应的IP地址后,应用层开始将请求的内容打包,目前基本上都使用https了,所以加https报文头。

3.应用层打包完成后,向下传递到传输层。传输层发现这是浏览器应用打好的包,应该使用TCP封装(此处如果之前没有到目标的TCP连接存在,则要先进行三次握手建立连接,由于握手过程中不能携带数据,实际的https请求的数据是在连接建立后才发送过去的,这里假设连接已经建立,开始发送实际数据),在传输层会加TCP报文头,包括源端口为你的浏览器监听的端口号,目的端口为你访问的URL对应的端口(https默认为443)

4.传输层封装完成后,向下传递到网络层。网络层会根据DNS查找到的IP地址进行封装,加IP报文头,包括源IP地址为你的主机的IP地址,目标IP地址为URL的IP地址。

5.网络层封装完成后,向下传递到数据链路层。一般情况下你的主机都是处于内网的,通过本地路由表,能找到匹配的规则也基本都是到默认网关的,无法直接找到远在云端的网站服务器(私网地址无法直接和公网地址通信),所以此处会加MAC报文头,包括源MAC地址为本地网卡的MAC地址,目的MAC地址为网关的MAC地址。(一般情况下本地ARP都会缓存网关的地址信息,如果不幸没有的话,则进行ARP请求,这时通信基本靠吼,在内网喊一声这个IP地址对应的MAC地址是多少,它听见了自然会回应给你)

6.上述所有层封装完成后,来到物理层。这时会通过网卡将包发送至网关。此时整个包的内容如下:

   应用层:   https头(打包请求的内容及其他相关信息)

   传输层:   TCP头(源端口:你的浏览器监听的端口号(内网地址的端口号),目的端口:你访问的URL对应的端口号(公网地址的端口号),以及该层的其他内容)

   网络层:   IP头(源IP地址:你的主机的IP地址(内网地址),目标IP地址:URL的IP地址(公网地址),以及该层的其他内容)

   链路层:   MAC头(源MAC地址:你的主机的网卡MAC地址,目的MAC地址:本地网关的MAC地址,以及该层的其他内容)

7.到达网关后,网关查看MAC地址确认是发给自己的,将MAC头解包,发现目的IP地址在远端,网关会根据自己学习到的路由信息,选择下一跳的地址,此时网关重新在链路层组装该包,加新的MAC报文头,此时MAC报文头包括源MAC地址为本地网关的MAC地址,目的MAC地址为下一跳网关的MAC地址。

   这里有一种常见的情况,就是内网发到公网的包会做NAT地址转换,一来是因为IPv4地址不够同时也比较贵,二来内网主机不会直接暴露在公网,一定程度上保证了安全,通常是NAPT。经过转换后数据包中已经不包含内网的相关信息,可以在公网中流转了(PS:NAPT只修改源IP地址和源端口号,与MAC地址的修改无关,而NAT不会修改源端口因为他们是一一对应的)经过NAPT转换后的包内容如下:

   应用层:   https头(打包请求的内容及其他相关信息)

   传输层:   TCP头(源端口:源网关NAPT的端口号(公网地址的端口号),目的端口:你访问的URL的端口号(公网地址的端口号),以及该层的其他内容)

   网络层:   IP头(源IP地址:源网关NAPT的IP地址(公网地址),目标IP地址:URL的IP地址(公网地址),以及该层的其他内容)

   链路层:   MAC头(源MAC地址:源网关的MAC地址,目的MAC地址:下一跳网关的MAC地址,以及该层的其他内容)

 8.数据包从本地网关出去后,途中可能经过多次路由,每经过一次路由就会修改包的MAC头部分,将源MAC地址改为当前路由器的地址,目的MAC地址改为下一跳路由器的MAC地址。

 9.到达目的IP地址所在网关后,可能还会做一次NAT或者NAPT,NAPT转换后再发送给对应内网IP主机。此时包的内容如下:   

   应用层:   https头(打包请求的内容及其他相关信息)

   传输层:   TCP头(源端口:源网关NAPT的端口号(公网地址的端口号),目的端口:你访问的URL对应的NAPT内网主机端口号(内网地址端口号),以及该层的其他内容)

   网络层:   IP头(源IP地址:源网关NAPT的IP地址(公网地址),目标IP地址:URL的对应的NAPT内网主机IP地址(内网地址),以及该层的其他内容)

   链路层:   MAC头(源MAC地址:目标网关的MAC地址,目的MAC地址:目标内网主机的网卡MAC地址,以及该层的其他内容)

10. 包到达指定目标服务器后,这个服务器可能还不是具体提供服务的主机,而是一个负载均衡器(LB),LB解开MAC头,发现IP地址是自己的,就不再转发了,开始对IP头进行解包处理,这时得到传输层TCP头中的端口号。继续处理数据报文前,该LB主机会向你的主机反馈一个TCP报文接收确认包(如果此处没有反馈,或者反馈包中途丢失,则过了TCP的超时等待时间,你的主机会再次发送一遍该数据包,当然这是传输层自动进行的处理,并不需要你去再次点击浏览器)。回到LB主机上,这里已经获得了应用的端口号,如果是4层LB的话,此时就可以根据定义的4层规则,将包转发至具体提供服务的主机上,比如一台Nginx主机。如果是7层LB的话,还需要分析https头的信息,获取要访问的URL,再根据定义的7层规则转发。

11.包最终来到应用服务器,假设是一台Nginx主机,层层解包,找出对应的端口号是本地Nginx监听的端口号,则将包交给Nginx进程进行处理,如果访问的内容是一个静态页面或者访问的内容本地有缓存的情况下,则直接将内容打包反馈到你的主机。(可能按原路返回,也可能不是)(由于MTU限制,可能还会产生分片)。如果是动态页面的话,应用服务器还需要使用连接池的中的连接到数据库里去查查改改什么的,然后再连同数据库返回的内容一起打包。当然如果是数据库更新操作的话,还涉及很多东西,比如写undo log、redo log、主从同步什么的,东西太多了,都可以再写一篇文章了......

12.等到目标主机将所有需要的包发送回来时,你的主机会将这些包组装好,最后以一个五彩缤纷(也可能不是,取决于个人审美)的页面展现在电脑屏幕上。

原文地址:https://blog.csdn.net/finalkof1983/article/details/87892173

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


现在给大家介绍一下如何查询MAC的生产日期,希望对你查询MAC的生产日期操作有所帮助。
1、点击【编辑虚拟机设置】,转到【CD/DVD (SATA)】,选中【使用 ISO 映像文件】复选框,点击【浏览】,找到已经准备好的 MacOS Ventura 镜像;4、客户机操作系统下,选择【Apple Mac OS X】,版本选择大家需要的【macOS版本】,再点击【下一步】;7、完成【抹掉】后,左上角关闭该窗口,返回上一界面,选择【Install macOS】,正式进入苹果系统安装流程;1、打开 Vmware Workstation,然后点击左上角的【文件】,打开的下拉项中,选择【新建虚拟机】;
注意:用哪个版本的 Python 运行安装脚本,pip 就被关联到哪个版本。一般情况 pip 对应的是 Python 2.7,pip3 对应的是 Python 3.x。pip介绍:pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。1.打开后输入python3确定电脑上是否已安装python3,如果输入python是查看mac上的自带版本。如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具。如下图是已经成功安装pip的状态。
Mac 安装nvm
Mac(M1)安装VMware虚拟机及Linux系统
Mac 如何安装 Telnet,mac安装telnet命令
是不是对键盘输入厌烦了?那你可以试试语音输入。 你可以按照下面的步骤打开Mac的语音输入功能。 以 macOS Catalina 为例: Step 1. 点击屏幕左上角的图标,点击【系统偏好设置】。
1.clean my Mac x 2.Cleaner One Pro 3.App Cleaner
按caps lock键。 CapsLock键,短按切换中英文,长按切换大小写。
windows: 1.PowerToys 2.不用软件进行分屏 Windows 10技巧1:窗口1/4分屏 - Acer Community 介绍说明 从Win7时代开始,微软便引入了屏幕热区概念,即
https://zhuanlan.zhihu.com/p/111111684 下载地址: https://www.smoothscroll.net/mac/
https://support.apple.com/zh-cn/guide/imac/apd2e7352054/mac 浏览:24 英寸 iMac 24 英寸 iMac 比以往更个
在Mac自带的中文输入法中,“反斜杠”键(“\”)就是顿号。
1.系统偏好设置。 2和3步如下图: 注意:在设置后,启用capslock大写的时候,需要长按capslock键。
Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别。即时渲染使得你写Markdown就想是写Word文档一样流畅自如,不像其他编辑器的有编辑栏和显示栏。简洁美观实时预览扩展语法跨平台免费Typora现在收费,但你仍然可以在官方网站上找到历史版本。虽然新版本仍然值得收费,但免费版本仍然可以使用。httpshttpshttpshttpshttpshttpshttpshttps。......
Mac M1安装Centos7
连接为官方下载链接, 直接复制MD5可迅雷下载亲测可用, 和付费版使用体验无差别.1. Windows 64bithttps://download.typora.io/windows/typora-setup-x64-0.11.18.exeMD5:12F96372BEE2951ACF5627EA28F8A389**2. Window 32bit **https://download.typora.io/windows/typora-setup-ia32-0.11.18.exeMD5:F5036
ubuntu22.04 、系统安装、win双系统、Ubuntu分区、Ubuntu优化、美化gnome tweaks,扩展、macos、搜狗输入法、wps字体、微信安装、navicat15、java开发环境搭建、idea 输入法问题处理、双系统问题、github慢等等。史上最全保姆级Ubuntu使用教程
MAC怎么获取文件路径 MAC获取文件路径的四种方法