当我们在浏览器输入一个网址访问到一个网页,看似简单的过程,究竟在程序中如何运行?

操作:在浏览器输入网址(如:www.baidu.com)

过程:


  1. 浏览器先会进行域名获取(www.baidu.com),获取后通过DNS解析得到百度的IP地址(202.108.22.5),通过这个IP地址找到客户端到服务器的路径。
  2. 浏览器与服务器建立TCP链接(默认端口80)通过TCP进行封装数据包,输入到网络层。客户端的网络层不需要关心应用层和传输层的东西,主要做的是通过查找确定如何到达服务器。
  3. 浏览器发送HTTP请求向服务器获取百度首页。
  4. 服务器通过HTTP响应把首页文件发送给浏览器。
  5. TCP链接释放
  6. 浏览器解析首页文件,将Web页显示给用户。
  7. #yyds干货盘点#前端到后端的访问过程_字节流


思考的问题

过程1:

什么是DNS?--->域名解析服务器

   怎么解析?(DNS解析过程)


  1.    浏览器检查自身缓存中有没有解析过这个域名

        有,解析结束返回IP

        没有,执行下面操作:


  1.  浏览器检查系统中有没有对应的已解析过的结果。

     而操作系统也有对应解析过程:

       在windows系统中的hosts文件进行设置,如果你在此指定了一个域名对应的ip地址,浏览器就会首先使用这个ip。(设置本地自己的博客方法)。

       因为可以通过修改你的hosts文件里的内容把特定的域名解析到他指定的ip地址上,就造成所谓的域名劫持.所以在windows7中将hosts文件设置成了管理员权限,防止被恶意篡改。(以前的黑-客操作)


  1. 如果还没有找到,才会真正的请求本地域名服务器(LDNS)来解析域名。

      这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。


  1. 如果LDNS仍然没有找到,就会找Root Server 域名服务器请求解析。

过程2:

    TCP是什么?

     传输控制层协议,面向字节流的通讯协议。

    TCP的三次握手


  1. 客户向服务器发送请求报文(客户端同步已发送状态)
  2. 服务器收到请求报文,如果同意连接,向A发送确认报文(服务器同步收到)
  3. 客户端收到服务器发送确认报文后(客户端已建立连接)服务器收客户端确定报文后(服务器已建立连接)。

    TCP/UDP区别

                  TCP                           UDP

可靠性       可靠                          不可靠

连接线       面向链接                   面向无连接

报文          面向字节流                面向无连接

效率          低                             高

传输速度   慢                             快

应用场景   效率要求低               对效率高

                 精准度要求高            准确度低的场景  

                 有连接的场景            远程文件服务器

                 电子邮件,HTTP

TCP的黏包问题

问题的产生


  1. TCP基于字节流,只维护送出去多少,客户端确定了多少,并没有维护信息与信息之间的边界,因而极有可能导致粘包问题。

  2.  TCP所发送的的字节流中存在一个MSS(最大报文端长度),如果所发送的消息的字节过长,那么会对所发送的消息进行分割,那么也会直接导致粘包。
  3. tcp的延迟发送问题

        问题的解决

        应用层要维持消息与消息的边界(因为传输层,链路层,网络层都没有)


  1. 在包的尾部加转义字符:\r\n(换行),但消息里面有就会出现问题
  2. 采用包头加包体长度的方法,一般情况下包头是定长的,假如包头是4个字节,可以先接受包头的4个字节,从而计算出包体的长度,然后继续进行接受。
  3. 当然,我们可以使用复杂的应用层协议。

过程3:

    请求方式(8种,GET请求,POST请求)

    GET使用给定的URI从给定服务器中检索信息(返回内容)

    POST方法用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。(更新内容)

过程4:

    响应方式(8种,与请求方式对应)

ps:状态码:200(请求成功)302(重定向访问),404(资源不存在),500(服务器报错),503(服务器暂时无法提供服务)