zoukankan      html  css  js  c++  java
  • 「网络」一次网络请求的完整生命周期

    img

    客户端发起请求

    从客户端发起请求的时候,网络数据流是从上而下的:

    img

    访问网站,浏览器地址栏输入网址,这只是网站域名,浏览器并不知道要去哪里访问资源,这个时候用到DNS协议对域名进行解析,在域名注册商那里绑定了域名对应的IP地址,IP地址就相当于互联网世界的门牌号。

    知道了目标IP后,浏览器打包本次请求,根据传输数据是否机密与否分为HTTPHTTPS请求,分别使用HTTP协议HTTPS协议

    img

    DNS、HTTP、HTTPS所在的层是应用层,经过应用层封装,浏览器将应用层的包交给下一层完成,这个过程通过Socket编程来实现。

    下一层是传输层,传输层有两种协议,一种是无连接的UDP协议,和面向连接的TCP协议,UPD无需建立连接即可通信,不可靠,可能丢包,TCP需要三次握手建立连接,能保证数据包到达目的地,但是性能不如UPD。

    对于HTTP/HTTPS来说都是基于TCP的可靠连接,TCP协议有两个端口,一个浏览器监听的端口(监听服务器),另一个服务器监听的端口(HTTP请求通常为80,HTTPS为443)。操作系统会根据端口将包转发给不同的进程:

    img

    传输层封装完成,浏览器将包交给网络层,网络层的协议是IP协议,在这一层,会给数据包加上IP头,其中包含源IP地址(浏览器所在机器),目标IP(服务器所在机器)等信息:

    img

    操作系统知道目标机器IP地址后,就开始更具他寻找目标机器,如果是局域网内的机器,可以直接通过IP地址判断出来,如果是局域网外的机器需要通过网关出外面的世界查找。

    操作系统启动的时候,会通过DHCP协议配置IP地址,以及默认网关的IP地址 :192.168.1.1.操作系统同会通过ARP协议通过IP地址获取网关的MAC地址,并将本地网关和计算机的MAC地址添加到MAC头中:

    img

    这样操作系统就将IP包交给了下一层——链路层,再经由网卡发送出去。(客户端机器与网关之间还有物理层的线路连接。)

    使用网卡(NIC)的情况下,MAC地址会烧到ROM中,任何一张网卡的MAC地址都是全球唯一的。

    网关收到包以后,会根据自己的知识判断下一步怎么走,网关往往是一个路由器,到某个目标IP怎么走,有一个路由表。网络请求包往往需要经过多个网关的跳转,才能到达目标机器。

    假设网络包经过多个网关之后,最终到达了目标服务所在的网关,通过ARP协议,目标服务器根据目标IP地址返回一个MAC地址,表示目标服务器在此,然后网络包通过这个MAC地址找到目标服务器所在局域网的目标机器。

    服务端接收请求

    服务端接收请求的时候,与客户端发送请求相反,网络流是自下而上的。

    目标服务器发现与网络请求包的MAC地址对上了,取下MAC头,将包传递给上一层网络层,发现IP也对上了,就取下IP头,然后交给传输层,在传输层里,对于收到的每一个包,都要回复包收到了,这个回复不是此次请求的响应,仅是回复包收到了。

    如果过了一段时间还是没有收到服务器的回复,客户端会重新发送这个包,直到回复为止。这个重发也不是重新发送上边那个客户端请求,而是传输层将同一个请求反复重试,对于用户来说,只有一次请求。

    回到目标服务器,当网络包到达传输层后,TCP头中有一个服务器监听端口号,通过这个端口号可以识别将数据包交给哪个应用处理。

    当后台处理完成后,就会返回一个响应包,告知用户请求成功,并返回响应内容。

  • 相关阅读:
    SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)
    麦咖啡导致电脑不能上网
    SharePoint 2013 Central Admin 不能打开
    SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API)
    SharePoint 2013 APP 开发示例 系列
    synthesize(合成) keyword in IOS
    Git Cmd
    简单的正则匹配
    Dropbox
    SQL Server Replication
  • 原文地址:https://www.cnblogs.com/ColdJk/p/14961506.html
Copyright © 2011-2022 走看看