从这篇开始,就开始了计算机网络的学习,从面试时最常见的一道面试题开始,“在浏览器输入一个网址之后发生了什么?”

一、序言

1.1什么是互联网

说到计算机网络,先来认识一下天天说的互联网是什么。 互联网就是计算机之间通过路由器、交换机、集线器等相互之间连接在一起组成一个网络,路由器将网络与网络互相连接,最后组成了整个互联网。

网络把许多计算机连接在一起,许多网络通过路由器连接在一起作为互联网。

1.2客户-服务器模式

计算机之间的网络通信大多使用客户-服务器模式的方式进行。一个应用进程想要获取另一个计算机的某些数据,此时这个应用进程所在的计算机就是客户端,存储数据的计算机就是服务器。

二、浏览器在收到输入的网址后,做了什么?

2.1网址是什么?

网址其实就是计算机网络里的URL,就是常常在浏览器见到以HTTP://开头的东西,但其实不只是HTTP开头,还有FTP等文件传输。我们这里以HTTP为例。来看一个URL为 https://zhuanlan.zhihu.com/p/133532232来分析一下这个URL的组成https就是它使用的协议,//之后就是主机名,也叫域名,/之后的所以就是这个主机的文件路径,最后是文件名。

域名就是计算机网络中的对于计算机或者路由器的命名,域名按照层级划分为顶级域名、二级域名、三级域名等。每个域名都由名称组成,域名层级之间使用.来分隔。比如http://www.baidu.com中,com是顶级域名,baidu是二级域名,www是三级域名。 对于URL可能只有域名或者只有文件夹名的情况,http://www.baidu.com 就是只有域名的情况,这种情况下,对于服务器来说是有默认文件供你访问的,不用担心。 在知道网址也就是URL是什么之后,浏览器就可以对它进行解析了,按照上面说的组成部分,根据HTTP协议的要求,把各个部分添加到HTTP的请求报文中。

2.2HTTP是什么?

HTTP就是web客户端与服务器之间通信约定的一种规则。HTTP分为请求报文和响应报文。请求报文就是客户端告诉服务器“我要对你的哪个数据做什么”,响应报文就是服务器告诉客户端“我按照你的要求做了什么,成功了还是失败了”。 请求报文的格式就是:

方法【空格】

其中方法就是客户端想要服务器端做什么,URL就是对服务器的哪个地方做什么。 常用的方法有:

响应报文的格式如下:

版本【空格】状态码【空格】短语【换行】

常用的状态码有200,正确处理返回需要的信息;我们常见的404,没有找到所需要的信息等。

2.3浏览器对URL的处理

在浏览器输入URL后,根据前面的介绍,把URL按照需要分解为各个部分,填充到HTTP的请求报文之中,然后发送出去,得到服务器返回来的响应报文,按照前面的响应报文格式进行解析,之后就会可以将内容显示在屏幕上了。

当然这只是因为计算机网络下层的一个封装,让我们感觉起来是客户端和服务器端的直接相连。 如果在得到的响应报文中还有其他的URL(比如一个网页既有文本,又有图片的情况),则浏览器还需要重复解析,发送请求报文,解析响应报文的过程直到把所有数据都获得下来,之后在浏览器的界面显示。 这就是宏观上浏览器在收到URL所做的事情。整个过程细化起来如下图所示:

三、利用DNS获取web服务器的IP地址

3.1 IP地址是什么?

互联网是由计算机通过集线器、交换机、路由器组合到一起形成子网,子网通过路由器相互连接构成大的网络,为了能够在互联网中找到某一个计算机的位置,所以我们需要给计算机命名,之前介绍过给计算机取了域名,但是域名是可以方便人来记忆的,对于计算机的处理就相当困难了,因为域名的长度不确定等等原因。所以提出了IP地址的概念,用一个32位的二进制数来表示一个计算机。在表示上采用了点分十进制,比如常见的192.168.1.1,每八位在一起转为十进制,共3个点分隔4个十进制数,一共32位二进制数。 前面说到子网以及子网的每一个计算机,为了描述子网和每个子网的计算机,又提出了子网和主机的概念,类似于谁家在“xx街道xx号”。比如前面的IP地址,可以说192.168.1作为子网号而最后的1是主机号。那么对于一个32位的IP地址如何可以知道哪些位是子网,哪些位是主机号呢?用一个同样32位的二进制数来表示,这个二进制数前面一部分为1,后面一部分为0,1就是对应的IP地址的位为子网号,0对应的就是主机号,这个二进制数叫做子网掩码。

对于主机号部分全为0,和全为1两个IP地址具有特殊的意义。比如上面的举例192.168.1.0代表的是整个子网,192.168.1.255代表的是对整个子网进行广播。

所以在浏览器解析完URL和制作好HTTP请求报文之后,就需要获得这个URL中域名所在Web服务器的IP地址了。

3.2从DNS服务器获得IP地址

IP地址与域名的转换是通过DNS服务得到的,DNS服务其实也是从服务器取得数据,它负责返回域名所对应的IP地址。为了实现这个查询功能,DNS服务器也是与域名相匹配的,分为根域名服务器、顶级域名服务器、权限域名服务器、本地域名服务器。每一个层级的域名服务器负责相应的域名解析服务。整个结构如图所示:

当一台计算机想要查询一个域名的IP地址时,首先向本地DNS服务器查询,如果有,则返回给计算机。如果本地DNS服务器没有这个域名的IP地址,那么这个时候本地DNS服务器就会化身DNS客户端了,因为它要让根DNS服务器来给它提供服务了,它需要请求服务。根DNS服务器查询到这个域名所属的顶级DNS服务器,将它返回给本地DNS服务器,本地DNS服务器此时在向这个顶级DNS服务器查询,顶级DNS服务器要么可以确定这个域名的IP地址,返回给本地DNS服务器这个域名的IP地址,要么继续返回下一个层级的服务器的地址,本地NDS服务器继续去查询这个服务器,如此迭代,最终得到域名的IP地址。然后返回给本地的计算机。执行的顺序如下图的标号顺序所示。

为了提高DNS查询的效率,一般DNS服务器都带有缓存功能,将查询过的域名与IP的关系保存在自己本地,这样再有相同的查询的时候,直接返回了,而不需要进行在去访问其他的DNS服务器。但这种缓存是有时间限制的,因为域名与IP地址可能发生变化。 就这样浏览器从DNS服务器中获得了域名所代表web服务器的IP地址了。接下来就可以通过TCP协议,IP协议适配器将HTTP的请求报文发送给服务器了。

四、套接字概述

在浏览器得到IP地址后,就会调用套接字,其实在获得IP地址的时候也使用了套接字。套接字就是操作系统为应用程序编写网络通信功能提供的库函数,对于C语言向屏幕输出,操作系统提供了printf的函数来实现,这里也一样。提供了套接字实现网路编程功能。包括socket、bind、listen、connect、accept、send、close等。相当于套接字把TCP协议、IP协议、适配器等底层细节封装了起来(2.3节那个细化图)。调用这些套接字,就会发生系统调用,进入操作系统的内核之中,完成一些列网络协议的功能,详细的就是操作系统的知识了,这里不再详细说明。只要知道套接字其实就是把复杂的协议封装起来就好。

五、总结

这样,我们就介绍完了,输入一个URL之后,浏览器所完成的第一部分功能,解析URL,制作HTTP请求响应。接下来就会通过套接字进入系统的内核,借助系统完成发送前的其他准备,包括TCP报文段的生成,IP数据报的生成,MAC地址的生成等等,请听下回分解。

关注我,回复计算机网络,可以获得免费获得计算机网络学习资源电子版。让我们一起快乐的玩编程。

c语言 将url图片存到本地_计算机网络系列之浏览器对URL处理,小白看完吊打面试官...相关推荐

  1. c语言 将url图片存到本地_一个22万张NSFW图片的鉴黄数据集?我有个大胆的想法……...

    如果你想训练一个内容审核系统过滤不合适的信息,或用 GAN 做一些大胆的新想法,那么数据集是必不可少的.例如图像鉴黄,我们需要使用卷积神经网络训练一个分类器,以区分正常图像与限制级图像.但限制级的图像 ...

  2. mysql什么隔离级别最好_面试必问的 Mysql 四种隔离级别,看完吊打面试官

    什么是事务 事务是应用程序中一系列严密的操做,全部操做必须成功完成,不然在每一个操做中所做的全部更改都会被撤消.也就是事务具备原子性,一个事务中的一系列的操做要么所有成功,要么一个都不作.sql 事务 ...

  3. c语言 将url图片存到本地_python爬虫:爬取男生喜欢的图片

    任务目标: 1.抓取不同类型的图片 2.编写一个GUI界面爬虫程序,打包成exe重新文件 3.遇到的难点 1.分析如何抓取不同类型的图片 首先打开网站,可以看到有如下6个类型的菜单 在这里插入图片描述 ...

  4. mysql 查看表v空间自增涨_面试问烂的 MySQL 查询优化,看完屌打面试官!

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 作者:唐立勇 https://segmentfault.com/a/1190000013672421 什么影响了数据库查询速 ...

  5. 计算机网络符号意思,浅析网络语言中的符号网语_计算机网络论文.doc

    浅析网络语言中的符号网语_计算机网络论文.doc 浅析网络语言中的符号网语_计算机网络论文 浅析网络语言中的符号网语_计算机网络论文 论文关键词:符号网语特征成因规范 论文摘要:随着网络的普及,网络语 ...

  6. 重复订单号校验_吊打面试官系列重复消费、顺序消费、分布式事务

    你知道的越多,你不知道的越多 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难. 作为一个在互联网公司面一次拿一次Of ...

  7. java开发crm框架_这可能是2020年度最完整、详细的Java高级框架+CRM课程哟,小白看完直呼过瘾!...

    001_SpringMvc学习目标+MV核心思想 002_MVC框架对比+SpringMvc框架特点 003_SpringMvc内部请求流程解析 004_SpringMvc环境搭建与测试 005_Sp ...

  8. java比go难学_为什么Go比Java快这么多?看完这个例子就懂

    一,前言 本次小测试并不是试图说明Go是java的替代,Go lang和Java本就不是实现相同类型任务的语言 :Java是企业开发语言,而Go是系统编程语言.为什么Go比Java快这么多?看完这个例 ...

  9. Java修改图片大小尺寸图片缩放(URL图片和本地图片)

    方式一:使用Image.getScaledInstance 使用jdk的awt包下的Image.getScaledInstance实现图片的缩放.好处是无需引入第三方jar,缺点是会稍微有点模糊. 工 ...

最新文章

  1. python java web_Python 与 Java 使用 websocket 通信
  2. github加速-解决GitHub访问速度很慢的问题
  3. 组态王调用mysql存储过程_组态王与数据库通讯
  4. qml 函数使用经验总结1(image中调用函数)
  5. SQL安装过程中安装程序挂起问题解决
  6. [日志]怎样的男人才会讨美女喜欢?
  7. 登录业务的演变、单点登录(SSO)的三种解决方案
  8. blender初学实用快捷键
  9. 算法篇-----粒子群算法
  10. mysql运算符xor_MySql运算符
  11. php pecl_http,安装 PHP 的 PECL HTTP 扩展
  12. linux基础命令之一
  13. Pixel3 支持中国电信2G语音、4G网络、VOLTE
  14. 随机Tiled Map的生成
  15. 科学松鼠会压缩感知科普文章两篇:“压缩感知与单像素相机(陶哲轩)”“填补空白:用数学方法将低分辨率图像变成高分辨率图像(Jordan Ellenberg)
  16. username的用法
  17. 高阶数据结构 —— 红黑树(较平衡搜索树)
  18. three.js笔记2--两点画线
  19. EMQTT测试--压力测试
  20. 智慧旅游构建智能化服务平台指导方案

热门文章

  1. 深度学习-卷积神经网络实现图像风格转换
  2. WordPress 建站教程新手入门六主题使用 营销值得学
  3. win11蓝屏提示nvlddmkmsys怎么解决 win11蓝屏错误代码nvlddmkmsys怎么修复
  4. AboutYun Resources
  5. Android js交互 UI不能更新 切会炸包
  6. 定位数据集中有问题的图片位置
  7. mysql优化和索引的使用
  8. 正则表达式(详细了解 )
  9. 噬菌体展示抗体库的兼并引物设计
  10. 用python抓取网页中所有pdf文件的笨方法