• -W.LI-
    2019-06-14
    浏览器判断是不是ip地址,不是就进行域名解析,依次通过浏览器缓存,系统缓存,host文件,还是没找到的请求DNS服务器获取IP解析(解析失败的浏览器尝试换别的DNS服务器,最终失败的进入错误页面),有可能获取到CDN服务器IP地址,访问CDN时先看是否缓存了,缓存了响应用户,无法缓存,缓存失效或者无缓存,回源到服务器。经过防火墙外网网管路由到nginx接入层。ng缓存中存在的直接放回,不存在的负载到web服务器。web服务器接受到请后处理,路径不存在404。存在的返回结果(服务器中也会有redis,ehcache(堆内外缓存),disk等缓存策略)。原路返回,CDN加入缓存响应用户。

    作者回复: 说的非常详细。

     1
     23
  • 郭凯强
    2019-06-14
    作业:
    1. 浏览器判断这个链接是要在当前页面打开还是新开标签页,然后走一遍本文中的访问过程:拿到ip地址和端口号,建立tcp/ip链接,发送请求报文,接收服务器返回并渲染。
    2. 先查浏览器缓存,然后是系统缓存->hosts文件->局域网域名服务器->广域网域名服务器->顶级域名服务器->根域名服务器。这个时间通常要很久,最终找不到以后,返回一个报错页面,chrome是ERR_CONNECTION_ABORTED

    作者回复: 回答的比较全面。

    这里面还有个长连接的问题,后面会讲,如果连接还是本站就不会有建连过程,直接用已有的连接发请求。

     1
     8
  • 极客时间
    2019-06-14
    我有几个小疑问没搞明白,万望老师解答, 在进行DNS解析的时候,操作系统和本地DNS是如何处理的呢?
    我的理解是本地系统有可能有缓存,DNS解析前先查看本地有没有缓存,如果没有缓存,再进行本地DNS解析,本地DNS解析就是查找系统里面的hosts文件的对应关系。不知道这里理解的对不对。

    还有一个疑问。
    什么是权威DNS呢,我一般是在万网购买域名,然后用A记录解析到我的服务器,这个A记录提交到哪里保存了呢,这里的万网扮演的是什么角色呢?它和权威DNS有关系吗?

    上次我提到了一个问题,就是域名和ip的对应关系,没接触这个课程以前,我的理解是一个域名只能解析到一个ip地址,但是一个ip地址可以绑定多个域名,就像一个人只有一个身份证号码,但是可以有多个名字,但是我在用ping命令 ping‘ baidu.com’ 时,发现 可以返回不同的ip,结合本课程前面的文章,我理解是百度自己的服务器本质是一台DNS服务器,用DNS做了负载均衡,当我访问baidu.com时,域名解析过程中,有一个环节是到达了百度的DNS服务器,然后DNS服务器根据负载均衡操作,再将我的请求转发给目标服务器。不知道理解的对不对,或者哪里有偏差。
    展开

    作者回复: 本地dns你的理解是正确的。

    万网是个域名注册的代理机构,最终域名还是要由dns系统来解析。

    百度的理解基本正确,在真正服务器前面是dns负载均衡。

    
     7
  • 极客时间
    2019-06-14
    老师 我有个疑问,第四个包到第六个包,为什么又进行了一次tcp连接呢,而且这个端口号是52086,这个是浏览器的特性吗,仔细比对文章发现这个问题啊

    作者回复: 因为http/1连接传输效率低,所以浏览器一般会对同一个域名发起多个连接提高效率,这个52086就是开的第二个连接,但在抓包中只是打开了,还没有传输。

    到后面讲长连接的时候你就会明白了。

     1
     5
  • 四月的紫色花
    2019-07-30
    1.你能试着解释一下在浏览器里点击页面链接后发生了哪些事情吗?
    浏览器点击页面请求后,正常网络中都是域名,那么浏览器会先用DNS解析一下,拿到服务器的ip和端口,去请求服务器前会先找一下缓存,浏览器自己的缓存-操作系统缓存-本地缓存(Hosts),都没有的话就会到根域名服务器-顶级-权威,当然中间可能有类似CDN这样的代理,那它就可以取CDN中的服务器地址,总的来说,其实就是个“走近道”的过程,就近原则,在DNS不错的情况下,先从离自己近的查起,再一级一级往下。
    2.这一节课里讲的都是正常的请求处理流程,如果是一个不存在的域名,那么浏览器的工作流程会是怎么样的呢?
    如果是一个不存在的域名,那浏览器还是会从DNS那解析一下,发现,自己,操作系统,本地的缓存都没有,CDN里也没有,根域名,顶级域名,权威域名,非权威域名里
    都没有,那它就放弃了,不会建立链接,返回错误码,可能是4××类的客户端请求错误。
    展开

    作者回复: 回答的很认真,鼓励一下。

    第二个问题后面有误,因为dns解析失败,根本没有进入http处理流程,所以不会有4xx之类的错误,而是dns解析错误信息。

     1
     3
  • 陈1016
    2019-06-27
    第一个问题的回答:浏览器缓存、系统缓存、hosts文件、野生DNS服务器(本地DNS服务器)、根DNS、顶级DNS、权威DNS、本地(附近)CDN、源站。

    作者回复: √

    
     3
  • 肥low
    2019-06-17
    1、如果域名不是ip,需要走域名解析成ip的逻辑,优先级顺序为: 1 浏览器缓存 > 2 本地hosts > 3 系统缓存 > 4 根域名 > 5 顶级dns服务器(如 com) > 6 二级dns服务器(baidu.com) > 7 三级dns服务器(www.baidu.com),如果客户端指向的dns服务器为非官方的如 8.8.8.8,那在第4步之前可能还有一层cache,当然最后解析的ip有可能是cdn的,如果cdn失效了就直接穿透到源ip,当然这个服务器这一部分可能做了四层负载均衡的设置,所以有可能每次获取的服务器ip都不一祥,也有可能到了服务器ngx层做了七层转发,所以虽然获得的ip一样,但是内部可能转发给了很多内网服务器

    2、通过中间各种路由器的转发,找到了最终服务器,进行tcp三次握手,数据请求,请求分两种一种是uri请求,一种是浏览器咸吃萝卜淡操心的请求网站图标ico的资源请求,然后服务端收到请求后进行请求分析,最终返回http报文,再通过tcp这个连接隧道返回给用户端,用户端收到后再告诉服务端已经收到结果的信号(ack),然后客户端有一套解析规则,如果是html,可能还有额外的外部连接请求,是跟刚才的请求流程是同理的(假设是http1.1),只不过没有了tcp三次握手的过程,最终用户看到了百度的搜索页面。当然如果dns没解析成功,浏览器直接就报错了,不会继续请求接下来的资源
    展开

    作者回复: 非常详细,赞!!

     2
     2
  • keep it simple
    2019-11-27
    老师,学习这一章萌生出几个问题:
    1.如果在TCP连接保持的情况下某一方突然断电了,没有机会进行TCP 四次挥手,会出现什么情况呢?
    2.如果不主动关浏览器,TCP连接好像一直存在着,会有超时时间吗?中间是否会保活?
    3.若server端负载较高,当它收到client的SYN包时,是否要过一段时间才会回应SYN,ACK?

    作者回复:
    1.tcp收发数据有超时机制,超时没有响应就会断开连接,当然这个就不是正常的结束连接。

    2.tcp收发有超时,连接本身没有超时机制,http使用keepalive在tcp上实现了连接保活。

    3.tcp建连是在操作系统内核里实现的,有一个处理队列,如果并发的请求太多,就会排队等待。

    4.这些问题涉及的都是tcp比较底层的细节,我也不能很好的解释清楚,建议再去参考其他的资料,sorry。

    
     1
  • nora
    2019-11-25
    有个疑问是,如果DNS解析得到的IP已经失效,并不是当前最新的IP,会发生什么呢?
    作者回复: 那就会在tcp层次发生连接失败,或者连接到了错误的其他网站。

    老师,接这个问题,提出两个疑问
    1. 发生链接错误时,会重新进行DNS解析嘛?
    2. 假如连接到了错误的IP,那么什么时候会更新成为正确的IP呢?或者有什么办法可以更正DNS的解析错误
    展开

    作者回复:
    1.不会,因为一次请求已经完成了,这种错误计算机不会认为是dns错误,因为处理流程都是正确的,只是得到的ip地址数据错误。

    2.可以手动改hosts,强行指定正确的ip,或者等待dns服务恢复正常,后者在dns被污染的时候就很难说了。

     1
     1
  • 错夕
    2019-09-29
    关于浏览器回车发生了什么我觉得应该关注的是
    1.是否一定会进行DNS解析如果有缓存这个时候该怎么办
    2.是否一定会进行TCP链接
    3.收到服务器相应报文一定会解析dom进行渲染吗?如果返回304呢
    4.TCP链接何时关闭

    作者回复:
    1.如果输入的不是ip地址,那么必然会做dns解析,否则没有ip就无法访问。而dns解析有可能会直接从缓存里取,不一定会走到解析服务器。

    2.必须要有tcp连接,因为互联网和http就建立在tcp/ip之上。

    3.这个与客户端有关,如果用的是curl这样的命令行就没有渲染。

    4.短连接会立即关闭连接,而长连接会保持较长的时间,直到客户端或者服务器某一方主动断开连接。

    
     1
  • qiezitx
    2019-09-24
    作业
    1、浏览器判断是否输入的是ip地址,不是的话就进行DNS解析:浏览器缓存->操作系统缓存(看到老师后面的解释是缓存)->host文件->根DNS->顶级DNS->权威DNS;如果是就开始访问的过程:拿到ip和端口号->3次握手建立TCP连接->发送请求->服务端返回结果->浏览器解析渲染。
    这里有几个课外小贴士的实验和疑问:
    1、ip要么直接输入要么通过DNS解析拿到,但端口号呢?默认端口号不行的时候,会尝试其他候选么?
    2、经试验,确实有缓存,刷新访问会返回304 not Modified
    3、经试验,没抓到favicon.ico的流程,chrome可能秘密发送了🐶

    2、同留言:属于dns解析错误
    展开

    作者回复:
    1.如果uri里没有端口号,默认用80或者8080、443,但如果在这两个端口上不提供http服务,那浏览器就猜不出来,只能用户手动输入。比如后面安全篇里,就用了442等端口,必须手动输入。

    2.实验出真知。

    3.有的时候浏览器也不会发favicon请求,可能已经缓存了,这跟浏览器的工作流程有关,不必太在意。

    
     1
  • 陈波
    2019-08-17
    你好,罗老师
    我在本地测试了一下,结果有点不解
    1、浏览器上访问了一次127.0.0.1,发起了两次:三次握手,四次握手;但没有访问/favicon.ico;对应端口分别是52181->80、52182->80。
    2、52181在四次挥手是服务端先发起了:[FIN,ACK],客户端:[ACK],[FIN,ACK],服务端:[ACK],和你画的四次挥手顺序不对,52182和52181四次挥手顺序保持一致。
    展开

    作者回复:
    1.这是浏览器建立了两个并发连接,没有访问favicon也是正常的,跟浏览器有关。

    2.这个应该是服务器主动关闭连接。

    3.课程里的示例是挑选了一个最典型的场景,并不是所有的请求响应都会按照这个来。

    
     1
  • 乐雨
    2019-08-16
    操作系统缓存是指什么?我理解就是hosts文件,为什么dns解析时分成了两步?

    作者回复: hosts文件相当于是一个简易的dns解析器(KV格式),而操作系统缓存则是在内存里,访问缓存要比访问磁盘快的多。

    所以解析dns都要先找缓存,没有才去访问解析器(hosts、dns服务器等)。

    
     1
  • Cris
    2019-08-13
    老师图里的SYN和ACK是什么意思?

    作者回复: 是tcp里的握手包。

    
     1
  • 温木
    2019-08-06
    老师,我有一个问题请教。
    DNS域名解析不需要发请求,建立连接吗?本地缓存的dns除外。
    比如我第一次访问一个域名abc.com,那这第一次不是需要从dns服务器上拿真正的IP吗,去拿IP的这个过程不是应该也是一个请求吗?这个请求又是什么请求呢?

    作者回复: dns请求是专门的dns协议,使用udp发送,因为是udp所以不需要建立连接。

    
     1
  • 京东PLUS会员
    2019-07-13
    老师我想请教您一个问题,为什么我用wireshare抓包做上面的实验,每次都会重复一遍三次握手的过程

    作者回复: 那就是没有使用长连接,每次都重连服务器,所以有三次握手。

    你可以试试打开页面后不要关闭,刷新看看,这样就不会有握手信息,而是直接发请求。

    
     1
  • Geek_Wison
    2019-06-15
    老师,你好。我记得以前在教材里面,客户端在与服务器端建立TCP连接的时候,会发送一个SYN置为1的TCP报文段。但是在wireshark里面我看到的第一条TCP报文段怎么SYN=0?

    作者回复: 这个是wireshark重新修改了起始值,方便查看,我觉得这个不用太在意,毕竟我们研究的是http这样的应用层协议。

    
     1
  • 隰有荷
    2019-06-15
    老师,文中在讲解请求Apple网站的例子时,说到:
    "这就要用 DNS 协议开始从操作系统、本地 DNS、根 DNS、顶级 DNS、权威 DNS 的层层解析"。
    而我看前几天的内容总结的是,请求会在进入网络后先到达非权威DNS、权威DNS、顶级…、最后才是到达根DNS去解析,那么本文怎么是先从根DNS开始的呢?

    作者回复: 今天的这讲是简化的说法,没有那么精确,完整的dns解析以第6讲为准。

    另外,dns解析通常是先到非权威dns,然后是根dns->顶级dns->权威dns,你可以再回顾一下。

    
     1
  • 业余草
    2019-06-14
    老师很有责任感!期待后面的内容!

    作者回复: thanks.

    
     1
  • xing.org1^
    2019-06-14
    老师请问,输入一个地址按下回车,浏览器把页面请求发送出去,服务器响应后返回html,浏览器在接受到html后就会立即发生四次挥手吗?还是说会延迟一会,遇到link、img等这些带外链的标签后继续去发送请求(省去dns解析和ip寻址?),最终确定html中没有外链请求了才会断开链接呢?

    作者回复: 现在的http都是长连接,不会立即断开连接,尽量复用,因为握手和挥手的成本太高了。

     1
     1
我们在线,来聊聊吧