zoukankan      html  css  js  c++  java
  • 输入网址到网页显示,发生了什么

    简单的网络模型:

      

    1.首先第一步就是要对输入的URL进行解析,从而生成发送给Web服务器的请求信息。

      URL的组成:

      

      当URL中没有数据源文件时,则表示访问根目录下事先设置的默认文件,即/index.html或者/default.html这些默认文件。

    2.对URL进行解析之后,浏览器就能够确定Web服务器和文件名,接下来就要根据这些信息生成HTTP请求消息。通过浏览器解析URL生成HTTP消息后,需要委托操作系统将消息发送给Web服务器。在发送之前需要先查询服务器域名对应的IP地址,因为委托操作系统发送消息时,必须提供通信对象的IP地址,而在DNS服务器中就专门保存了Web服务器域名与IP的对应关系。

      DNS中的域名都是用句点来分隔的,比如www.server.com,这里的句点表示不同层次之间的界限。根域在最顶层,它的下一层就是com顶级域,再下面就是server.com。DNS解析过程:

        

      通过DNS获取到IP之后,就可以把HTTP的传输工作交给操作系统的协议栈。协议栈的内部分为几个部分,分别承担不同的工作,上下关系是有一定的规则的,上面的部分会向下面的部分委托工作,下面的部分受到委托的工作并执行。

      应用程序(浏览器)通过调用socket库,来委托协议栈工作,协议栈的上半部分由负责收发数据的TCP和UDP协议组成,它们会接收应用层的委托执行收发数据的操作;协议栈的下面一半是用IP协议控制网络包收发操作,在互联网上传输数据时,数据会被分成一块块的网络包,而将网络包发送给对方的操作就是由IP负责的。在IP中还包括ICMP协议(用于告知网络包传送过程中产生的错误以及各种控制信息)和ARP协议(用于根据IP地地址查询相应的以太网MAC地址)。网卡驱动程序负责控制网卡硬件,网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。

      

    3. TCP协议传输

      TCP传输数据之前要先三次握手建立连接,所谓连接就是双方计算机维护一个状态机,三次握手目的就是保证双发都有发送和接收的能力。数据会以MSS的长度为单位进行拆分,拆分出来的每一块数据都会被放进单独的网络包中,也就是在每个被拆分的数据加上TCP信息,然后交给IP模块发送数据。

      

       在双方建立了连接后,TCP报文中的数据部分就是存放HTTP头部+数据,组装好TCP报文(下图所示)之后,就要交给下面的网络层处理。

      

    4.TCP模块在执行连接、收发、断开等各阶段操作时,都需要委托IP模块将数据封装成网络包发送给通信对象。 在IP层为报文加上IP包头部,就有了远程定位的能力。

    5.在生成IP头部之后,接下来网络包还需要在IP头部的前面加上MAC头部,MAC头部是以太网使用的头部,它包含了接收方和发送方的MAC地址等信息,用于两点之间的传输。发送方的MAC地址获取ROM中的值就可以了,但是接收方的MAC地址的获取嘞?

      这就需要ARP协议帮忙找到MAC地址,ARP协议会在以太网中以广播形式向所有以太网所有的设备广播“这个IP是谁的?请把你的MAC地址给我”,然后就会有人回答“这个IP是我的,我的MAC地址是。。。”。如果对方和自己处于一个网络中,那么这样就可以得到MAC地址。在后续中操作系统会把本次查询结果放到ARP缓存中,这样在下一次查询时就可以在缓存中找到。也就是说,想要接收者的MAC地址,先查ARP缓存,没有的话再ARP广播查询。

      这样生成的网络包的报文就是:

      

    6.IP生成的网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方,需要将数字信息转换为电信号,才能在网线上传输,负责这一操作的网卡,要控制网卡还需要网卡驱动程序。网卡驱动从IP模块获取到包之后,会将其复制到网卡内的缓存区中,接着会在开头加上报头和起始帧定界符,在末尾加上用于检测错误的帧校验序列。

      

      最后网卡会将包转为电信号通过网线发送出去。

    7.电信号到达网线接口,交换机里的模块进行接收,接下来交换机里的模块将电信号转换为数字信号,交换机内部有一张MAC地址与网线端口的映射表,当接收到包时,会将相应的端口号和发送MAC地址写入表中,这样就可以根据地址判断出该设备连接在哪个端口上了。

      交换机根据MAC地址表查找MAC地址,然后将信号发送到相应的端口。地址表中找不到指定的MAC地址时,交换机就无法判断应该把包转发给哪个端口,只能将包转发到除了源端口之外的所有端口上,无论该设备连接在哪个端口上都能接收到这个包。

    8.网络包经过交换机之后,到达路由器,并在此被转发到下一个路由器或目标设备。当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。

      在网络包的传输过程中,源IP和目标IP始终是不变的,一直变化的是MAC地址,因为需要MAC地址在以太网内进行两个设备之间的包的传输。

    9.数据包最终到达服务器,服务器首先查看数据包的MAC头部,看看是否和服务器自己的MAC是否符合,符合就将包收起来。

      接着扒开数据包的IP头部,发现IP头的协议项,发现自己的上层是TCP协议。

      扒开TCP的头部,查看里面的序列号是不是自己想要的,如果是就放入缓存中然后返回一个ACK,如果不是就丢弃,TCP头部里面还有端口号,HTTP的服务器正在监听这个端口号。

      服务器知道是HTTP进程想要这个数据包,于是将包发送给HTTP进程。

      

      服务器的HTTP进程看到是想要请求一个页面,于是就将这个网页封装在HTTP响应报文里。HTTP响应报文也需要穿上TCP、IP、MAC头部,不过源地址是服务器端IP,目的地址是客户端IP地址。

    10.然后数据包从网卡出去,交由交换机转发给路由器,路由器把响应数据包交给下一个路由器,最后到达客户端的路由器,路由器发现IP是子网内的,将包发给子网内的交换机,再由交换机转发给客户端。客户端收到服务器端的响应数据包开始层层扒皮,把收到的数据包扒剩HTTP响应报文,交给浏览器显示页面。

    11.客户端要断开连接,向服务器发起TCP四次挥手,双方连接断开。

    参考文献:https://mp.weixin.qq.com/s/tZ9-BoP1Oz3K4ZapLlnopQ

  • 相关阅读:
    Castle 1.0 RC2 尝鲜
    关注 Web Client Software Factory [Weekly Drop 08]
    ASP.NET AJAX入门系列
    Castle 1.0 Release Candidate 2发布
    ASP.NET AJAX入门系列(2):使用ScriptManager控件
    ASP.NET AJAX 1.0 Beta 发布相关文章总结及推荐
    关于ASP.NET AJAX的三个视频
    企业库2.0培训系列课程大纲[意见征询]
    Visual Studio“Orcas”October 2006 CTP版下载
    ASP.NET AJAX入门系列(4):使用UpdatePanel控件(一)
  • 原文地址:https://www.cnblogs.com/xiaona-/p/12795285.html
Copyright © 2011-2022 走看看