前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从输入url到页面返回到底发生了什么

从输入url到页面返回到底发生了什么

作者头像
潘成涛
发布于 2018-01-18 06:18:25
发布于 2018-01-18 06:18:25
8670
举报
文章被收录于专栏:程序员与猫程序员与猫

1. 前言

Google应该是开发者平日里用得最多的网站之一,今早笔者在浏览器地址栏里键入www.google.com的时候,突然想了解下这背后的网络通信过程究竟是怎么样的。毕竟自己也算是一名Web开发工程师,光是TCP/IP的书也看过不少,但是至始自终却从未思考过这个问题,所以话不多说,让我们来一次深入体验吧。由于Google比较特殊,我们就用news.cnblogs.com站点做一个介绍好了。

本文适合具有一定的计算机网络相关背景知识的读者,不过只要最低不要比笔者还低就行。笔者在这方面大概战五渣的水平。

2. 网络通信过程

1. 域名解析

互联网上穿梭的数据包基本都是IP包,所以笔者与博客园新闻站点服务器传输的也是IP包,那么我们就需要博客园新闻站点服务器的IP地址。对于浏览器的使用者来说,我们只需要告诉浏览器我们需要的地址(在地址栏键入域名),那么之后解析IP地址的任务就会由浏览器代劳了。

IP包的格式为IP+TCP+HTTP。

浏览器程序通知DNS进程,请帮忙解析news.cnblogs.com的地址,此时解析IP地址的任务就由浏览器交给了DNS进程。

  1. DNS进程先检查自己的程序缓存,查看是否有news.cnblogs.com对应的IP地址,如果有,则直接返回给浏览器;否则,进入第2步。
  2. 检查本地的host文件,如果有对应的IP地址,依然选择直接返回给浏览器;否则,进入第3步。
  3. 检查本地的DNS服务器设置并发给消息给它,由它帮忙查找,这时解析IP地址的任务就由DNS进程交给了远程的DNS服务器。
  • DNS进程发送查询报文 "query news.cnblogs.com" 至DNS服务器,DNS服务器首先检查自身缓存,如果存在记录则直接返回结果。
  • 如果记录老化或不存在,则DNS服务器向根域名服务器发送查询报文"query news.cnblogs.com",根域名服务器返回.com域的权威域名服务器地址,这一级首先会返回的是顶级域名的权威域名服务器。
  • DNS服务器向.com域的权威域名服务器发送查询报文"query news.cnblogs.com",得到.cnblogs.com域的权威域名服务器地址。
  • DNS服务器向.cnblogs.com域的权威域名服务器发送查询报文"query news.cnblogs.com",得到主机news的记录,存入自身缓存并返回给DNS进程。
  • DNS进程将查询返回的IP地址 114.55.49.182 存入自身缓存并返回给浏览器。

2. HTTP打包

浏览器将我们访问news.cnblogs.com的请求打包成HTTP格式,然后将打包好的HTTP包和IP地址告诉TCP进程。

TCP进程和IP进程在本文中是一个抽象概念,专指操作系统内核对TCP/IP协议族的实现。

HTTP 是一个客户端和服务器端请求和响应的标准TCP。

3. 三次握手

TCP进程作风稳健,所以并不会轻易地将HTTP包和IP地址发给IP进程,所以这就引出了TCP通信三次握手。三次握手中,TCP进程决定先不发HTTP包,而是先要确保自己的IP包能够被远程服务器正常接收,同时,远程服务器的IP包也能被己方机器正常接收。

TCP进程:洞腰洞腰,我是洞拐,听到请回话 Cnblogs服务器:洞拐洞拐,我是洞腰,我听到了 TCP进程:OK,我听到你说话了。

4. HTTP数据传输

所谓兵马未动,粮草先行,还没真正进行数据交流呢,双方就已经传递了三个IP包了。不过这样一来,双方都能听到对方的回复了。现在TCP进程可以委托IP进程安心大胆地发送包含HTTP数据的IP包了。

这里还有一个问题,由于发送的IP包都是通过分组交换发出的,所以TCP进程怎么知道哪个IP包被服务端正确地接收了呢。这里就引出了SEQ和ACK的概念。

SEQ=Sequence Number ACK=Acknowledge Number

这两个字段分别被包裹在TCP头部(别忘了我们的IP包组成结构)。比如我们每次要传输1000字节的数据,初始序列号为1,那么就将SEQ设置为1,然后本地的TCP进程就把这1000个字节打包,然后层层地封装、传输,并最终到达服务器TCP进程。

讲完了SEQ的作用,ACK的作用呢?顾名思义,它是用来“确认收货”的。比如说假如我们发起了一个POST请求,第一次传输的报文中含有1000个字节的信息,服务端在接收到之后那么就将ACK标为1001,表示确认收到并返回给客户端(没有任何数据,只是一个IP+TCP而已),这样客户端可以安心传输第二波从1001序列号开始的数据了。当然啦,我们只是访问news.cnblogs.com站点界面,只是普通的HTTP GET请求而已。

接下来,我们静待news.cnblogs.com站点界面的返回即可。在这个过程中,存在一去一回表示数据和确认的两个IP包。

5. 服务器传回网页

cnblogs新闻站点服务器将首页封装成HTTP格式,通过TCP进程按照类似第4步的流程返回给我们的机器。这一个过程,数据传输也是基于分组交换的方式。所以又是两个IP包(只考虑一次传输)。

6. 释放TCP连接

经过两边不断的“交易”,网页数据终于基本传输完毕了,我们的浏览器也根据报文内容渲染出了最终的界面。但是这就结束了吗?显然还没有,我们还需要释放TCP连接以回收资源。

计算机上建立了大量TCP连接却没有释放可是要出大问题的,《使用HttpClient的优解

不同于通信连接阶段的三次握手,释放TCP连接则是四次握手。类比通信的一端有一个数据传输口和一个数据接收口,分别是另一端的数据接收口和数据传输口,这两根管道需要依次被关闭。

TCP进程:洞腰洞腰,我是洞拐,数据传输完毕,我要关闭连接我的数据传输口了 Cnblogs服务器:洞拐洞拐,我是洞腰,我听到了,你关闭吧 (TCP进程默默关闭数据传输口(Cnblogs服务器的数据接收口)) Cnblogs服务器:洞拐洞拐,我是洞腰,数据传输完毕,我要关闭连接我的数据传输口了 TCP进程:洞腰洞腰,我是洞拐,我听到了,你关闭吧 (Cnblogs服务器默默关闭数据传输口(TCP进程的数据接收口))

不考虑超时重传,这里又用了4个IP包。

让我们用一张图作为本次数据传输的总结。其中SYN(synchronous)是TCP/IP建立连接时使用的握手信号。

从图上也可以很直观的看出,本次通信总共用了3+2*2(双向通信)+4=11个IP包。

3. 参考资料

  1. 计算机是如何聊天的?
  2. 互联网协议入门
  3. 如何生动形象、切中要点地讲解 OSI 七层模型和两主机传输过程?
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-05-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
【docker】急速下载——Aria2
夜梦在急速下载——Aria2 这篇文章中已经讲述了如何使用脚本部署Aria2。这篇文章将使用docker部署Aria2。使用docker的小伙伴们可以看看哦!
夜梦星尘
2024/08/20
4170
【docker】急速下载——Aria2
群晖NAS套件Docker安装宝塔面板教程
群晖科技(Synology )自始便专注于打造高效能、可靠、功能丰富且绿色环保的 NAS 服务器,是全球少数几家以单纯的提供网络存储解决方案获得世界认同的华人企业。
哈德森
2023/04/07
10.2K0
群晖NAS套件Docker安装宝塔面板教程
在群晖Docker中安装Jellyfin媒体服务器
Jellyfin是一款媒体服务器软件,可在多个平台管理和播放流媒体文件。它是Emby和Plex之外的完美替代品,可通过多个应用程序从专用服务器向终端用户设备提供媒体。Jellyfin是Emby 3.5.2版本的后代,移植到.NET Core框架以得到完整的跨平台支持。最关键的是免费!没有任何附加条件。
爱游博客
2019/08/07
8.3K0
在群晖Docker中安装Jellyfin媒体服务器
基于腾讯轻量服务器安装Aria2+AriaNg+Nginx+File Brower 服务
基于腾讯轻量服务器安装Aria2+AriaNg+Nginx+File Brower 服务
lingchen 凌晨
2021/04/07
2.7K0
基于腾讯轻量服务器安装Aria2+AriaNg+Nginx+File Brower 服务
黑群晖常见问题集锦
答:群晖系统跟Windows不同,Windows有个盘要当成系统盘,而群晖会在每个硬盘上自动安装系统。每个硬盘?对,没错,就是每个硬盘。比如你是6盘位,接了6个硬盘,这6个硬盘初始化以后,每个硬盘都有系统了。所以拿一个SSD来做系统盘的这个做法没必要。当然,也有全部用SSD的土豪,那就不是这个话题了。
风吹屁屁凉
2021/07/14
12.3K0
Aria2 下载工具部署(docker)
GitHub - P3TERX/Aria2-Pro-Docker: Aria2 Pro | A perfect Aria2 Docker image | 更好用的 Aria2 Docker 容器镜像 p3terx/aria2-pro - Docker Image | Docker Hub
jgrass
2024/12/25
3560
Aria2 下载工具部署(docker)
让你的aria2支持SSL协议
如今SSL协议已是大势所趋所以爱游习惯了每个网站都加上SSL,这样才显得网站比较高大上,所以今天就在闲置的服务器上面安装一个AriaNg,一样的启用了SSL,启用后发现在AriaNg设置里面Aria2 RPC协议里面的Http 和 WebSocket 被禁用了,爱游查了下,AriaNg在0.2.0版本时对此做了限制,也就是在使用 Https 访问 AriaNg 时,Http 和 WebSocket 将被禁用,所以这里我们需要把Aria2也同样的加上SSL加密协议。
爱游博客
2019/08/07
10.9K0
让你的aria2支持SSL协议
【Docker】树莓派使用Docker安装NextCloud及其他的记录
http://ip:8888, 这个是刚刚配置的服务器地址加上刚刚映射的主机端口。 输入用户名密码,数据库使用MYSQL,数据库以后用户密码,数据库nextcloud,地址写内部地址172.17.0.2. 然后安装指示一路填写信息,安装就好了。
一朵灼灼华
2022/08/05
4.2K2
【Docker】树莓派使用Docker安装NextCloud及其他的记录
Aria2+AriaNG+AList实现离线下载
1、Aria2 1.下载 #脚本下载 wget https://pan.pengcheng.team/d/Tool/Aria2/aria2.sh?sign=GsbYlgmkkfMIRugifsVa2-
鹏程
2023/05/02
3.4K36
Aria2+AriaNG+AList实现离线下载
Aria2一键安装及管理脚本,宝塔面板搭建AriaNg前端- 星泽V社
Aria2作为一款linux下的下载神器,可以下载各种资源、种子文件、磁力链接等,功能强大,就不过多介绍了,此前提到过Aria2安装方法,这里再介绍个一键脚本,很方便,推荐使用; Github:
星泽V社
2022/05/30
3K0
Aria2一键安装及管理脚本,宝塔面板搭建AriaNg前端- 星泽V社
Aria2离线下载搭建
在服务的安全组或者防火墙中放行6800端口,我这里直接在宝塔面板中的安全中直接放行了
十玖八柒
2022/08/01
1.1K0
Aria2离线下载搭建
黑群晖安装和使用的常见问题及解决办法【不定期更新中】
答:群晖系统跟Windows不同,Windows有个盘要当成系统盘,而群晖会在每个硬盘上自动安装系统。每个硬盘?对,没错,就是每个硬盘。比如你是6盘位,接了6个硬盘,这6个硬盘初始化以后,每个硬盘都有系统了。所以拿一个SSD来做系统盘的这个做法没必要。当然,也有全部用SSD的土豪,那就不是这个话题了。
cnlixs
2022/11/01
60.4K2
黑群晖安装和使用的常见问题及解决办法【不定期更新中】
Aria2 下载工具部署(local)
Aria2 下载工具部署(docker) 中介绍了使用 docker 部署 Aria2 的方法,如果已经安装了 docker,执行起来是比较简单的。
jgrass
2024/12/25
2870
Aria2 下载工具部署(local)
腾讯云轻量应用服务器部署Aria2+AriaNg下载工具
Aria2是一款很好用的下载工具,支持多种下载协议,还能离线下载,配合腾讯云轻量应用服务器内置的宝塔面板镜像搭建一个web控制面板就在方便不过了。
zuantou
2021/07/21
10.1K0
腾讯云轻量应用服务器部署Aria2+AriaNg下载工具
用树莓派搭建公网个人下载平台aria2-pro,推荐6个优质种子资源站
很早zhaoolee就想搭个人下载站,趁着今年国庆时间充裕,我把下载站搭建到了树莓派上,并对公网开放;在任何地点,我只需通过网页提交下载任务,家中的树莓派就会自动把我需要的资源,日夜不间断地下载到我的硬盘里~ 本文是详细的搭建步骤, 文末提供6个风评极好的优质种子站~
zhaoolee
2021/12/07
2.6K0
用树莓派搭建公网个人下载平台aria2-pro,推荐6个优质种子资源站
安装Aria2的web管理界面(AriaNg)
一个Aria2新的更好用的Web前端,AriaNg是一个很实用的Aria2前端,比起Aria2 WebUI来说,好用多了,关于Aria2服务端搭建方法可参考:BT种子/磁力链接下载工具:Aria2一键安装管理脚本,这里说下前端AriaNg搭建方法。
骤雨重山
2022/01/17
3.4K0
安装Aria2的web管理界面(AriaNg)
安装Aria2+AriaNg
Aria2就不多做介绍了,反正是linux系统的下载神器,支持多种下载协议,还能离线下载。可惜Aria2作为后端,操作都要在ssh下敲代码输命令,实在太不友好。于是很多大神就开发了可视化操作的前端,这里推荐AriaNg。
子润先生
2021/06/24
4.4K0
重学Docker
以前开发项目有开发的环境、测试的环境、还有生产的环境,每经过一阶段就要迁移项目。不同的环境有不同的配置,可能导致不可预估的错误,运维要经常性的改动
晚上没宵夜
2021/07/19
5560
重学Docker
Centos+Aria2+AriaNg+Caddy Filemanager实现离线BT下载/在线播放
用途:实现离线下载HTTP/HTTPS/FTP/BT/磁力链接等离线下载,断点续传等、文件管理、在线播放等功能。
Lcry
2022/11/29
1.1K0
Aria2一键安装管理脚本
说明:Aria2作为一款linux下的下载神器,可以下载http资源、种子文件、磁力链接等,功能强大,就不过多介绍了。
无道
2019/11/12
2.4K0
推荐阅读
相关推荐
【docker】急速下载——Aria2
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档