精华内容
下载资源
问答
  • 1.客户端浏览器获取用户在地址栏输入的域名。 2.客户端浏览器将域名发送给DNS域名系统,请求解析。 3.DNS解析域名得到相应IP,返回给客户端浏览器。 4.客户端浏览器根据IP向服务器发起TCP三次握手,建立TCP连接。 ...

    按照时间顺序:
    1.客户端浏览器获取用户在地址栏输入的域名。
    2.客户端浏览器将域名发送给DNS域名系统,请求解析。
    3.DNS解析域名得到相应的IP,返回给客户端浏览器。
    4.客户端浏览器根据IP向服务器发起TCP三次握手,建立TCP连接。
    5.客户端浏览器向服务器发送HTTP请求,请求百度首页。
    6.服务器通过HTTP响应向客户端浏览器返回百度首页文件。
    7.释放TCP连接。
    8.客户端浏览器解析HTML文件,根据文件内容获取CSS、JS等资源文件,将页面渲染展示给用户。

    TCP/IP五层模型中网络层及以上用到的协议:
    1.应用层:HTTP、DNS、HTTPS
    2.传输层:TCP、UDP
    3.网络层:IP、ARP

    展开全文
  • 在浏览器中输入URL后,首先要进行DNS解析,DNS解析的顺序为: 浏览器缓存 本地hosts文件 系统缓存 路由器缓存 DNS服务器迭代查询 2.发送请求 通过DNS得到目标的IP地址后,通过TCP协议向服务器发送请求即三次握手。...

    img_30d5e142b45ddd9d84943f9008b32616.png

    1.DNS

    在浏览器中输入URL后,首先要进行DNS解析,DNS解析的顺序为:

    • 浏览器缓存
    • 本地hosts文件
    • 系统缓存
    • 路由器缓存
    • DNS服务器迭代查询

    2.发送请求

    通过DNS得到目标的IP地址后,通过TCP协议向服务器发送请求即三次握手。

    3.服务器永久重定向响应

    大多数的网站会将用户访问的地址永久重定向,这主要与缓存和搜索排名有关。

    • 搜索排名方面:例如www.test.com与test.com搜索引擎认为是两个网站,不会将排名合并。如果使用重定向将test.com定向到www.test.com搜索引擎就会认为是一个页面将排名信息合并。
    • 缓存方面:如果使用不同的地址,在缓存中出现好几次,缓存友好性变差

    4.跟踪重定向地址

    根据返回新重定向地址,重新发送新的http请求

    5.处理HTTP请求,返回响应

    • 建立连接:服务器允许客户端建立连接
    • 接受请求:从网络中读取HTTP报文交给Nginx或者Apache进行规则匹配
    • 处理请求:根据方法,资源,首部和可选的主体部分对请求进行处理
    • 访问资源:寻找存储对象,访问报文中指定的资源
    • 构建响应报文:创建有正确首部的HTTP响应报文

    6.处理HTTP响应

    • 发送响应:将响应会送给客户端
    • 记录日志:将与已经完成的事务记录在一个日志文件中

    7.浏览器解析显示

    浏览器得到页面后会进行展示,如果还包含其他外部资源如图片、视频等等则继续请求其他资源。

    展开全文
  • 比如,没有缓存,客户机和服务器不一个局域网,输入的是一个域名而不是IP地址,etc。我们采用自顶向下方法,也是时间顺序的方法,来解答这个问题。浏览器是C/S架构中的客户端,通过想服务器发送请求,获取文件...
    计算机网络庞大且复杂,很难一言或几言以蔽之。因此,这里我们只考虑最一般的场景,所谓“一般”,就是...比如,没有缓存,客户机和服务器不在一个局域网,输入的是一个域名而不是IP地址,etc。我们采用自顶向下的方法,也是时间顺序的方法,来解答这个问题。浏览器是C/S架构中的客户端,通过想服务器发送请求,获取文件(html,js,css等),再通过浏览器引擎的解释和渲染,将这些文件呈现成你现在看到的样子。
    1、TCP/IP参考模型
    首先,我们不得不了解一下TCP/IP参考模型。
    如下图所示,TCP/IP参考模型分为四层:应用层、运输层、网络层和接口层。浏览器所完成的工作就属于应用层的范畴。
    <img src="https://pic2.zhimg.com/50/0ff21f5171c24887eba7b2d61f33921d_hd.jpg" data-rawwidth="160" data-rawheight="257" class="content_image" width="160">

    • 应用层: 为用户提供各种服务,比如我们浏览网页时用到的HTTP,收发邮件时用的SMTP,登录远程主机用的SSH。
    • 传输层:提供端到端的传输服务。更具体地讲,提供进程到进程的传输服务。
    • 网络层:和传输层一样,可以概括为提供端到端的传输服务。更具体地讲,网络层提供主机到主机的传输服务。
    • 网络接口层(链路层):为直接连接的设备提供传输服务,将数据帧转换为比特流,并将比特流转换为物理电路的电压高低信号。
    2、往哪里发送请求?
    假设我么输入的地址是
    zhihu.com
    
    浏览器看到这个域名的时候,就好像我们想去一家从没去过的餐厅吃饭,只知道名字是“黄大仙肠粉”但不知道具体地点在哪里。这个时候,我们打开地图,搜索“黄大仙肠粉”后找到一个地址:衡山路110号,于是我们便知道该去哪了。域名就像是一个餐厅的名字,而IP地址相当于一个具体的地址。浏览器必须知道所请求服务器的IP地址,发出的请求才有目的地。DNS(Domain Name System)提供的服务就是将知乎的域名转换成其服务器IP地址。
    DNS具有两层含义:①一个由分层的DNS服务器实现的分布式数据库;②一个允许主机查询分布式数据库的应用层协议。有三种类型的DNS服务器:根DNS服务器、顶级DNS服务器和权威DNS服务器。这些服务器以下图的层次结构组织起来。


    除此之外,还有一类重要的DNS,称为本地DNS服务器。严格来说本地DNS服务器并不属于DNS服务器的层次结构,但它在整个查询的过程中却扮演着重要的角色。
    首先,浏览器所在的主机向本地DNS服务器发送一个含有知乎域名的DNS查询报文。本地DNS服务器把查询报文转发到根DNS服务器,该根DNS服务器注意到其com后缀并向本地DNS服务器返回com的顶级域名服务器的IP地址。该本地DNS服务器再次向comDNS服务器发送查询请求,comDNS服务器注意到其zhihu.com后缀并用负责该域名的权威DNS服务器的IP地址作为回应。最后,本地域名服务器将含有zhihu.com的IP地址的响应报文发送给客户端主机。

    这里的查询过程是包含递归查询和迭代查询的,客户端主机发送给本地服务器的查询是递归查询,而后面的三个查询是迭代查询。最高票 @郭无心 的答案中给出的递归查询应该是迭代查询才对。
    2、封装HTTP请求
    其实这里主要讲HTTP报文的格式的。可以看到,这个请求里面包含了请求的方法GET,请求的路径“/”,请求的主机名,客户机的类型以及一些其他的信息。
    GET / HTTP/1.1
    Host: zhihu.com
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64;
    Accept-Encoding: gzip, deflate
    Connection: Keep-Alive
    
    前面辛辛苦苦通过DNS获得的IP地址怎么没有用到?HTTP请求报文里根本没有这一个字段。继续往下看。
    3、建立连接
    在应用层和传输层之间,更准确地讲是在浏览器进程和操作系统提供的TCP服务程序之间,有一个很重要的东西叫做套接字(Socket),如下图所示。如果把一台主机比作一座房子,把进程比作房子里面的房间,Socket相当于房间的门。不管是房间的人要出来还是外面的人要去到某一个房间,都必须先通过Socket这一道门。套接字的作用是实现传输层的多路复用和多路分解。在应用层可以同时运行多个进程,每个进程都需要通过传输层来收发分组,而传输层的TCP进程只有一个,当TCP进程收到一个分组后,该怎么确定应该转发给哪个进程呢?答案是通过套接字,这就是多路分解。同样的道理,多路复用就是进程将分组通过各自的套接字转发给传输层。TCP套接字是由一个四元组(源IP地址、源端口号、目的IP地址和目的端口号)来标识的。

    TCP是面向连接的,在实际发送数据之前,客户端和服务器需要建立起一个TCP连接。这种TCP“连接”只是逻辑上的链接,因为其状态完全保留在两个端系统中,中间路由器对TCP连接毫不知情。
    TCP连接的建立过程如下图所示。首先,TCP先发送一个创建连接的SYN请求,告诉服务器主机“我想和你创建一条TCP连接”。当服务器主机收到SYN请求后,如果其所请求的端口号正在等待连接,则会为这一条TCP连接分配资源,并发送一个SYNACK报文段作为应答。客户主机收到SYNACK报文段后,客户机也为该连接分配资源。此时,连接已经建立起来了。客户主机还会向服务器主机发送另一个报文段,对允许连接的报文段进行确认。这就是有名的“三次握手”。



    可以这样简单地认为,TCP连接创建成功的标志是:客户机和服务器都创建了一个由源IP地址、源端口号、目的IP地址和目的端口号标志的Socket。
    4、发送请求
    请求在“三次握手”的第三次“握手”就发送出去了。
    TCP报文段的格式如下图所示。

    目的端口和源端口号是为了在多路复用和多路分解时选择套接字时使用的。
    数据序号和确认序号是为了传输数据的完整性和顺序而设置的。
    用户数据这一个字段就存储了应用层生成的HTTP报文。
    ACK、SYN和FIN是在建立连接和关闭连接时使用。
    其他用于流量控制、拥塞管理等用途的字符就不展开了。
    5、路由寻址
    现在两个端系统已经建立起了连接,请求也被传送到客户端主机的网络层。网络层是协议栈中最复杂的层次,应用层和传输层只运行在两个端系统,而网络层不仅运行在端系统,还运行在各个中间节点上。
    我们先来看看IP数据报的格式。
    网络层实现的最重要的功能是路由选择,简单地说,就是怎么把这一个IP数据报从客户端主机出发,通过网络中的若干个路由器,到达目的主机。从概念上讲,IP路由选择是简单的,特别对于主机来说,如果目的主机和源主机直接相连(如点对点链路),或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接送到目的主机上。否则,主机把数据报发送到一默认的路由器上,由路由器来转发该数据报。大多数的主机都采用这种简单机制。
    我们把网络环境简化如下图:只包含源主机H1、目的主机H2和两个路由器R1、R2。



    IP路由选择是逐跳(hop-to-hop)进行的。IP并不知道从H1到H2的完整路径。所有的IP选择只为数据报提供下一站的IP地址。路由选择机制的基础是在每一台主机和路由器里都存储着一张路由表。路由表的每一项包含了目的主机IP地址、下一跳路由器(或主机)的IP地址、相对应的网络接口以及其他必要的信息。当一个数据报到达一个节点时,IP路由选择完成以下工作:
    1. 搜索路由表,寻找能与目的主机IP地址完全匹配的表目。如果找到,则把报文发送给下一跳节点。
    2. 搜索路由表,寻找能与目标网络号相匹配的表目。如果找到,则把报文发送给下一跳节点。
    3. 搜索路由表,寻找“默认”的表目。如果找到,则把报文发送给下一跳节点。
    如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。
    在我们的例子中,H1通过搜索自己的路由表将数据报转发给R1,R1根据路由表转发给R2,最后到达H2。
    6、关闭连接
    目标主机收到了请求后,自底向上地对该请求进行处理。链路层把数据报传给网络层,网路层将TCP数据段通过对应的Socket传给应用程序。应用程序处理请求后产生一个应答的HTTP报文,又经过了一层层的封装、一跳跳的传输到达了源主机。
    这样就结束了吗?那一条TCP连接还没有关闭呢,源主机和目标主机上都为它分配了资源呢,如果不释放掉的话资源很快就会耗尽(DDoS攻击就是利用这一点)。于是,当传输层收到了应答之后,就要关闭这条连接了。但是,又不能悄悄地自己关了,目标主机那边还不知道你要不要关闭呢。于是乎,就有了对应创建TCP连接“三次握手”的关闭TCP连接“四次挥手”。
    如下图所示,客户端向服务器发出了FIN报文段,服务器收到后,回复一个ACK应答。然后,服务器也向客户端发送一个FIN报文段,随后关闭了服务器端的连接,释放了资源。当客户端收到之后,又向服务器回复一个ACK应答。过了一段计时等待,客户端也关闭了连接,释放资源。这一段计时等待的时间是为了客户端重传最后的ACK防止其丢失。


    剩下的事情就交给浏览器了


    作者:何伟鹏
    链接:https://www.zhihu.com/question/34873227/answer/70038032
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    展开全文
  • 在浏览器地址栏输入网址,如:www.baidu.com后浏览器是怎么把最终页面呈现出来呢?这个过程可以大致分为两个部分:网络通信和页面渲染。 一、网络通信 互联网内各网络设备间通信都遵循TCP/IP协议,利用...

    https://www.cnblogs.com/ouyang99-/p/10284271.html

     

         当在浏览器地址栏输入网址,如:www.baidu.com后浏览器是怎么把最终的页面呈现出来的呢?这个过程可以大致分为两个部分:网络通信和页面渲染。

    一、网络通信

        互联网内各网络设备间的通信都遵循TCP/IP协议,利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。分层由高到低分别为:应用层、传输层、网络层、数据链路层。发送端从应用层往下走,接收端从数据链路层网上走。如图所示:

    TCPIP

    1. 在浏览器中输入url

        用户输入url,例如http://www.baidu.com。其中http为协议,www.baidu.com为网络地址,及指出需要的资源在那台计算机上。一般网络地址可以为域名或IP地址,此处为域名。使用域名是为了方便记忆,但是为了让计算机理解这个地址还需要把它解析为IP地址。

    2.应用层DNS解析域名

       客户端先检查本地是否有对应的IP地址,若找到则返回响应的IP地址。若没找到则请求上级DNS服务器,直至找到或到根节点。

    3.应用层客户端发送HTTP请求

    HTTP请求包括请求报头和请求主体两个部分,其中请求报头包含了至关重要的信息,包括请求的方法(GET / POST)、目标url、遵循的协议(http / https / ftp…),返回的信息是否需要缓存,以及客户端是否发送cookie等。

    4.传输层TCP传输报文

       位于传输层的TCP协议为传输报文提供可靠的字节流服务。它为了方便传输,将大块的数据分割成以报文段为单位的数据包进行管理,并为它们编号,方便服务器接收时能准确地还原报文信息。TCP协议通过“三次握手”等方法保证传输的安全可靠。

      “三次握手”的过程是,发送端先发送一个带有SYN(synchronize)标志的数据包给接收端,在一定的延迟时间内等待接收的回复。接收端收到数据包后,传回一个带有SYN/ACK标志的数据包以示传达确认信息。接收方收到后再发送一个带有ACK标志的数据包给接收端以示握手成功。在这个过程中,如果发送端在规定延迟时间内没有收到回复则默认接收方没有收到请求,而再次发送,直到收到回复为止。

    TCP

    5.网络层IP协议查询MAC地址

       IP协议的作用是把TCP分割好的各种数据包传送给接收方。而要保证确实能传到接收方还需要接收方的MAC地址,也就是物理地址。IP地址和MAC地址是一一对应的关系,一个网络设备的IP地址可以更换,但是MAC地址一般是固定不变的。ARP协议可以将IP地址解析成对应的MAC地址。当通信的双方不在同一个局域网时,需要多次中转才能到达最终的目标,在中转的过程中需要通过下一个中转站的MAC地址来搜索下一个中转目标。

    6.数据到达数据链路层

       在找到对方的MAC地址后,就将数据发送到数据链路层传输。这时,客户端发送请求的阶段结束

    7.服务器接收数据

       接收端的服务器在链路层接收到数据包,再层层向上直到应用层。这过程中包括在运输层通过TCP协议讲分段的数据包重新组成原来的HTTP请求报文。

    8.服务器响应请求

       服务接收到客户端发送的HTTP请求后,查找客户端请求的资源,并返回响应报文,响应报文中包括一个重要的信息——状态码。状态码由三位数字组成,其中比较常见的是200 OK表示请求成功。301表示永久重定向,即请求的资源已经永久转移到新的位置。在返回301状态码的同时,响应报文也会附带重定向的url,客户端接收到后将http请求的url做相应的改变再重新发送。404 not found 表示客户端请求的资源找不到。

    9. 服务器返回相应文件

       请求成功后,服务器会返回相应的HTML文件。接下来就到了页面的渲染阶段了。

    二、页面渲染

       现代浏览器渲染页面的过程是这样的:jiexiHTML以构建DOM树 –> 构建渲染树 –> 布局渲染树 –> 绘制渲染树。

       DOM树是由HTML文件中的标签排列组成,渲染树是在DOM树中加入CSS或HTML中的style样式而形成。渲染树只包含需要显示在页面中的DOM元素,像<head>元素或display属性值为none的元素都不在渲染树中。

       在浏览器还没接收到完整的HTML文件时,它就开始渲染页面了,在遇到外部链入的脚本标签或样式标签或图片时,会再次发送HTTP请求重复上述的步骤。在收到CSS文件后会对已经渲染的页面重新渲染,加入它们应有的样式,图片文件加载完立刻显示在相应位置。在这一过程中可能会触发页面的重绘或重排。

     

    二:一些通信名词解释

    DNS:

    作用: 将主机名转换为ip的一种协议

    TP/IP

    网络协议:http://www.cnblogs.com/linhaifeng/articles/5937962.html#_label5

    详解TCP|IP :https://www.cnblogs.com/wsnb/tag/TCP%2FIP/

    TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道

    展开全文
  • 在浏览器地址栏输入网址,浏览器把最终页面呈现出来过程可大致分为两个部分:网络通信和页面渲染。 (一)网络通信 互联网内各网络设备间通信都遵循TCP/IP协议,利用TCP/IP协议族进行网络通信时,会通过分层...
  • 在浏览器地址栏输入网址,浏览器把最终页面呈现出来过程可大致分为两个部分:网络通信和页面渲染。 (一)网络通信 互联网内各网络设备间通信都遵循TCP/IP协议,利用TCP/IP协议族进行网络通信时,会通过...
  • 在浏览器地址栏输入网址,如:www.baidu.com后浏览器是怎么把最终页面呈现出来呢?这个过程可以大致分为两个部分:网络通信和页面渲染。 一、网络通信 互联网内各网络设备间通信都遵循TCP/IP协议,利用TCP/...
  • 在浏览器地址栏输入一个网址开始,到最终页面呈现,浏览器完成了他工作。我们要优化这个程序呈现速度,首先就得弄明白这其中都发生了 什么事? 1.处理环节与顺序 这张图大致描述了浏览器一系列工作。...
  • 谁让微软那么会垄断呢^_^ 一般使用IE的时候,人们在输入地址的时候往往会偷懒,经常使用的网址,有的人会把它收藏到收藏夹,而有的人大开浏览器就直接单击地址栏后面的下拉箭头,大开地址栏的下拉菜
  • 地址栏输入url,浏览器下载html文档后开始解析:(参考链接:http://www.cnblogs.com/Peng2014/p/4687218.html) 1:首先形成dom tree 和 render tree。 1:<head>里面发现了link,则浏览器会加载css样式...
  • 在浏览器地址栏输入一url时,浏览器会做以下几个步骤: 1、将url转化为ip地址,也就是DNS解析,(先找本地host文件是否有对应的ip地址,如果有就直接用,没有的话,就按域名的二级,一级的顺序进行查找)。 2...
  • 浏览器上网一些原理

    千次阅读 2019-02-15 16:53:34
    当你在浏览器地址栏中输入一个域名网址,或者一个ip地址时,你可以成功访问到希望网站,但有时候需要科学上网才能成功。那么当你输入一个网址时,这背后发生了什么? 1.从DNS域名解析开始。 以域名,比如...
  • 在浏览器地址栏输入网址,如:www.baidu.com后浏览器是怎么把最终页面呈现出来呢?这个过程可以大致分为两个部分:网络通信和页面渲染。 一、网络通信 互联网内各网络设备间通信都遵循TCP/IP协议,利用TCP/...
  • JSHTML中的加载顺序

    2018-04-23 17:53:36
    用户在地址栏第一次输入网址需要请求html页面,浏览器发送一个html页面请求,服务器响应请求,并返回一个html页面 ; 浏览器开始下载html页面代码,发现&lt;head&gt;标签内有一个&lt;link&gt;...
  • 在浏览器地址栏输入网址,如:www.baidu.com后浏览器是怎么把最终页面呈现出来呢?这个过程可以大致分为两个部分:网络通信和页面渲染。 一、网络通信 互联网内各网络设备间通信都遵循TCP/IP协议,利用TCP/...
  • 本篇体验当在浏览器地址栏中输入网址后发生事情。参考了韩星和Igor Ostrovsky博文。 一切从输入网址/域名开始: 1、浏览器查找域名对应IP地址 实际上是查找DNS(Domain Name System缩写,存储域名和...
  • url-pattern 标签中值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值 servlet,两个 servlet-name 标签值必须相同,因为通过 servlet 标签中 servlet-name 标签映射到...
  • url-pattern 标签中值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值 servlet,两个 servlet-name 标签值必须相同,因为通过 servlet 标签中 servlet-nam
  • url-pattern 标签中值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值 servlet,两个 servlet-name 标签值必须相同,因为通过 servlet 标签中 servlet-name 标签映射到...
  • url-pattern 标签中值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值 servlet,两个 servlet-name 标签值必须相同,因为通过 servlet 标签中 servlet-n
  • url-pattern 标签中值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值 servlet,两个 servlet-name 标签值必须相同,因为通过 servlet 标签中 servlet-name 标签映射到...
  • 无法某些Flash中输入中文. 某些网页会无故跳转到手机版. Trident核心 某些网页上操作会导致无故多开一个页面. 用户界面 WindowsXP系统下启动浏览器侧边栏显示异常. 选项 不自动登录账户情况下,登录账户后,"只...
  • url-pattern 标签中值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值 servlet,两个 servlet-name 标签值必须相同,因为通过 servlet 标签中 servlet-n

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 149
精华内容 59
关键字:

在浏览器地址栏中输入地址的顺序