概要:网页打开是一个十分复杂的过程,本文是本人通过学习所得,来讲解用户从浏览器输入域名(如:www.baidu.com)到可以浏览网页之间的各种过程;如有错误,敬请指正。

首先,我们需要知道各种前置知识;例如:HTTP,TCP / IP,DNS等,本人博客中有相应的文章,可以简单参考。


首先简单讲一下DNS,域名系统,域名系统,万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。这和我要讲的第一步有关。


第一步:访问目标地址。

我们浏览网页肯定是要在浏览器输入一个域名或者IP地址的,不然就会一直是空网页。

如果输入的是就是IP地址,这一步就END了,但是,由于IP地址是比较难记的,因此就有了域名(如:http://www.baidu.com)来方便记忆。因此在使用域名访问时,需要进行域名解析(就是域名到IP地址的转换过程),由DNS服务器完成。

具体过程:

1.浏览器首先搜索浏览器自身缓存的DNS记录。

2.如果浏览器缓存中没有找到需要的记录或记录已经过期,则搜索主机文件和操作系统缓存。

3.如果在主机文件和操作系统缓存中没有找到需要的记录或记录已经过期,则向域名解析服务器发送解析请求。

4.如果域名解析服务器也没有该域名的记录,则开始递归+迭代解析。(简单说就是一层层地找)


再科学一点:(这里只详细说明不能在本机找到有关记录的情况)

1.浏览器向本机DNS模块发出DNS请求,DNS模块生成相关的DNS报文;

2.DNS模块将生成的DNS报文传递给传输层的UDP协议单元;

3.UDP协议单元将该数据封装成UDP数据报,传递给网络层的IP协议单元;

4.IP协议单元将该数据封装成IP数据包,其目的IP地址为DNS服务器的IP地址;

5.封装好的IP数据包将传递给数据链路层的协议单元进行发送;

6.发送时在ARP缓存中查询相关数据,如果没有,就发送ARP广播包含待查询的IP地址,收到广播的主机检查自己的IP,7。符合条件的主机将含有自己的MAC地址的ARP(包发送给ARP广播的主机)请求,等待ARP回应;

8.得到ARP回应后,将IP地址与路由的下一跳的MAC地址对应的信息写入ARP缓存表;

9.写入缓存后,以路由下一跳的地址填充目的MAC地址,以数据帧形式转发;

10.转发可能进行多次;(之前说到的递归与迭代)

11.DNS请求到达DNS服务器的数据链路层协议单元;

12.DNS服务器的数据链路层协议单元解析数据帧,将内部的IP数据包传递给网络层IP协议单元;

13.DNS服务器的IP协议单元解析IP数据包,将内部的UDP数据报传递给传输层UDP协议单元;

14.DNS服务器的UDP协议单元解析收到的UDP数据报,将内部的DNS报文传递给DNS服务单元;

15.DNS服务单元将域名解析成对应的IP地址,DNS产生回应报文;

16.DNS回应报文 - > UDP-> IP-> MAC->我的主机;

17.我的主机收到数据帧,将数据帧 - > IP-> UDP->浏览器;

18.将域名解析结果以域名和IP地址对应的形式写入DNS缓存表。

19.接下的一堆操作。

20.开开心的浏览网页./404未找到。

(以上推荐对照一张TCP协议的图示一起看)


这张图示是解析http://mail.google.com,具体操作为上述的操作。


第二步:三次握手

一旦通过解析等方法获得了IP地址,就会向目的主机发送TCP连接请求报文。


这里稍微提一下TCP报文:

有关的主要名词解释:

  1. ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
  2. SYN:同步序号,用于建立连接过程,在连接请求中,SYN = 1和ACK = 0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN = 1和ACK = 1。
  3. FIN:结束标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。

回到正题

详细一点的过程:

1.该TCP报文中的SYN标志位设为1,表示连接请求;

2.该TCP报文通过IP(DNS) - > MAC(ARP) - >网关 - >目的主机;

3.目的主机收到数据帧,通过IP-> TCP,TCP协议单元回应请求应答报文;

4.该报文中SYN和ACK标志设为1,表示连接请求应答;

5.该TCP报文通过IP(DNS) - > MAC(ARP) - >网关 - >我的主机;

6.我的主机收到数据帧,通过IP-> TCP,TCP协议单元回应请求确认报文;

7.该TCP报文通过IP(DNS) - > MAC(ARP) - >网关 - >目的主机;

8.目的主​​机收到数据帧,通过IP-> TCP,连接建立完成。

但是,从这个过程中间还是看不出“三次握手”(尽管实际上是有的),这里给张示意图:

简要说明:

seq:序列号,顺序号码。

ack:确认号码,确认号码。

这两者在三次握手中的使用如下:

在第一次握手时,客户端随机产生SEQ = M的数据包到服务器,要求联机。

在第二次握手时,服务器收到后要确认联机信息,向客户端发送ACK = m + 1个,随机产生SEQ = N的数据包。

在第三次握手时,客户端会检查ACK及ACK是否正确,如果正确,客户端会再发送ACK = N + 1,SEQ = M + 1(就是服务器发来的ACK的值)的数据包,服务器收到之后确认正确则连接建立。

大致就是两端通过产生序列与ACK疯狂确认是不是正确的。


第三步:发送与收取数据

这里需要前置知识:HTTP协议。

传送门:https://blog.csdn.net/qq_32102325/article/details/82117375

这一步的本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。

详细过程:

1.浏览器向域名发出GET方法报文(HTTP请求);

2.该GET方法报文通过TCP-> IP(DNS) - > MAC(ARP) - >网关 - >目的主机;

3.目的主机收到数据帧,通过IP-> TCP-> HTTP,HTTP协议单元会回应HTTP协议格式封装好的HTML形式数据(HTTP响应);


再详细一点:

从请求信息中获得客户机想访问的主机名。

从请求信息中获取客户机想要访问的网络应用(网络应用程序指提供浏览器访问的程序,简称网络应用)。

从请求信息中获取客户机要访问的网络资源。(网络资源,即各种文件,图片,视频,文本等)读取相应的主机下的网页应用,网络资源。

用读取到的网络资源数据,创建一个HTTP响应。

4.该HTML数据通过TCP-> IP(DNS) - > MAC(ARP) - >网关 - >我的主机;

5.我的主机收到数据帧,通过IP-> TCP-> HTTP->浏览器,浏览器以网页形式显示HTML内容。

这一步的详细的图示可以到远程登录连接实验中看到(可以去看本人的HTTP协议的心得)。


第四步:四次挥手

这一步与第二步有些类似。

这里就直接说明详细内容了:

1.浏览器向目的主机发出TCP连接结束请求报文,此时进入FIN WAIT状态;

2.该报文FIN标志位设为1,表示结束请求;

3.TCP结束请求报文通过IP(DNS) - > MAC(ARP) - >网关 - >目的主机;

4.目的主机收到数据帧,通过IP-> TCP,TCP协议单元回应结束应答报文,当前只是进行回应,因为目的主机可能还有数据要传,并不会断开连接;

5.该报文中ACK标志位设为1,表示收到结束请求;

6.目的数据发送完所有数据后,向我的主机发出的TCP连接结束请求报文;

7.该报文FIN标志位设为1,表示结束请求;

8.TCP结束请求报文通过IP(DNS) - > MAC(ARP) - >网关 - >我的主机;

9.我的主机收到数据帧,通过IP-> TCP,TCP协议单元回应结束应答报文,此时进入TIME WAIT状态,由于不确定网络是可靠的,以防目的主机没收到用于重发;

10.该报文中的FIN标志位均设为1,表示结束应答;

11.该TCP回应报文通过IP(DNS) - > MAC(ARP) - >网关 - >目的主机;

12.目的主机关闭连接;

13.TIME WAIT等待结束后,没有收到回复,说明目的主机正常关闭了,我的主机也关闭连接。

14.看网页吧。


上述比较晦涩难懂,这里给一张示意图:

(转载自qzcsu的博客的文章:TCP的三次握手与四次挥手(详解+动图),原文地址:https://blog.csdn.net/qzcsu/article/details/72861891 )

过程类似于三次握手,只是对应的是FIN与ACK。这会保证服务器会先关闭,也使得客户端和服务器不会一直连接,除非客户端再次打开网页或者刷新等。大致意思是将内容缓存在本地打开,不是在服务器上打开。


以上的一堆就是网页打开过程,但是这只是针对HTTP的,不是带SSL的HTTPS,之后我学习了SSL等一些内容后会写一篇有关心得。

超萌新级的学习心得——网页打开过程相关推荐

  1. python 字体颜色_超萌新级的Python学习心得——字体颜色

    概要:本文讲的是Python语言中在命令行中显示不同字体颜色的方法,如有错误,欢迎指正. 正文: 开发过程中,为了方便调试代码,以及处理错误信息,基本上是需要输出一些文本的,例如在使用try-catc ...

  2. java超级点击器是怎么实现的_超萌新级的Java学习心得——简单监听器

    之前在界面文章中提到,按钮在没有设置事件监听时,无论怎么按都不会起作用,如果要使这些按钮被按下时可以执行不同的操作,就必须使用监听器. ActionListener:可以提供用于监听按钮的监听器,一旦 ...

  3. 初中计算机新课标培训心得,新课标学习心得体会

    新课标学习心得体会由好范文网的会员投稿精心推荐,小编希望以下6篇范文对你的学习工作能带来参考借鉴作用. 第1篇:新课标学习心得体会 新课标学习心得体会怎么写?以下是我们给你的范文格式参考. 用课余时间 ...

  4. 计算机新课标学习心得体会,【精品】新课标学习心得体会模板锦集10篇

    [精品]新课标学习心得体会模板锦集10篇 在平日里,心中难免会有一些新的想法,马上将其记录下来,这样可以记录我们的思想活动.很多人都十分头疼怎么写一篇精彩的心得体会,下面是小编收集整理的新课标学习心得 ...

  5. 初中计算机新课标培训心得,初中数学新课标学习心得体会

    与<初中数学新课标学习心得体会>相关的范文 通过初中数学新课程培训,使我受益匪浅.总的说来通过紧张而又认真的学习所获得的感想与心得体会可概括为以下几点: 1.通过培训学习,使我清楚地认识到 ...

  6. 萌新的java学习之路——第一周

    萌新的java学习之路--第一周 第一周的学习 这是我学习Java的第一周,写这个博客更多的时为了总结自己这一周的学习情况,如果有人看到我写的博客,有什么问题的话,可以问我.虽然我也是一个小白,但我会 ...

  7. 初中计算机新课标培训心得,初中数学新课标的学习心得体会;

    <初中数学新课标的学习心得体会;>由会员分享,可在线阅读,更多相关<初中数学新课标的学习心得体会;(2页珍藏版)>请在人人文库网上搜索. 1.新课标的学习心得体会三中 赵秋南数 ...

  8. 初中计算机新课标培训心得,初中数学新课标学习心得体会(精选3篇)

    初中数学新课标学习心得体会(精选3篇) 当我们受到启发,对学习和工作生活有了新的看法时,就十分有必须要写一篇心得体会,这样可以记录我们的思想活动.怎样写好心得体会呢?以下是小编整理的初中数学新课标学习 ...

  9. 萌新SQL基础学习1

    萌新学习(捡起)数据库(其实学校学过,忘了...) SQL是什么? SQL,一种用于访问和处理数据库的标准的计算机语言. SQL,指结构化查询语言,全称是Structured Query Langua ...

最新文章

  1. 2012关于钱的Tips
  2. 全模型组的测试初步结果
  3. JavaScript中的Try...Catch 语句
  4. vscode css提示_锋利码农武器之vscode
  5. Jenkins持续集成环境之插件管理和角色管理
  6. js怎么把函数字符串转成函数_字符串处理函数
  7. 在Win7中怎样打开摄像头?
  8. c+ +三角函数_C ++中的三角函数
  9. 孙鑫VC学习笔记:第十三讲 (四) 生成可串行化的类
  10. html input 禁止浏览器自动填充
  11. Python 文本挖掘:使用gensim进行文本相似度计算
  12. 富斯FS_I6六通道遥控器玩转APM飞控失控保护
  13. coreldrawx4缩略图显示不出来_CDR缩略图不显示怎么办?CorelDRAW缩略图不显示解决办法 - 优优下载站...
  14. php新年倒计时源码,新年倒计时源码
  15. 最小系统板 STM32入门,呼吸灯实现(STM32F103C6T6)
  16. python小说电子书阅读系统毕业设计开题报告
  17. JLX256160 液晶屏串行 无字库
  18. 【Excel函数】相对定位与绝对定位
  19. java循环例题while型_Java基础--while、do-while、for循环结构(附例题)
  20. Oracle中如何添加date类型的数据

热门文章

  1. 黄金斗士原生android,联想黄金斗士S8对比红米Note视频评测
  2. SkyWalking 数据清理机制(TTL)
  3. 如何在上传图片的时候,选中图片可以在前端预览
  4. GMap.NET使用教程
  5. 认识因特网络(小学计算机课件),认识因特网课件.ppt
  6. SnakeYaml反序列化
  7. 阿里云经典web架构分析
  8. 软件开发——软技能(一、IDE)
  9. opencv获得相机的最大分辨率
  10. WebSocket 实现页面数据实时更新