zoukankan      html  css  js  c++  java
  • HTTP

    TCP/IP网络分层模型

    TCP/IP网络分层模型
    它的层次顺序是“从下往上”数的,所以第一层就是最下面的一层。

    • 第一层叫“链接层”(link layer)

      • 负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层
    • 第二层叫“网际层”或者“网络互连层”(internet layer)

      • IP 协议就处在这一层。因为 IP 协议定义了“IP 地址”的概念,所以就可以在“链接层”的基础上,用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再“翻译”成 MAC 地址就可以了。
    • 第三层叫“传输层”(transport layer)

      • 这个层次协议的职责是保证数据在 IP 地址标记的两点之间“可靠”地传输,是 TCP 协议工作的层次,另外还有它的一个“小伙伴”UDP。
      • TCP 是一个有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复
      • UDP 则比较简单,它无状态不用事先建立连接就可以任意发送数据,但不保证数据一定会发到对方
      • TCP 的数据是连续的“字节流”,有先后顺序.
      • UDP 则是分散的小数据包,是顺序发,乱序收。
    • 协议栈的第四层叫“应用层”(application layer)

      • 由于下面的三层把基础打得非常好,所以在这一层就“百花齐放”了,有各种面向具体应用的协议。例如 Telnet、SSH、FTP、SMTP 等等,当然还有 HTTP。
    • MAC 层的传输单位是帧(frame)

    • IP 层的传输单位是包(packet)

    • TCP 层的传输单位是段(segment)

    • HTTP 的传输单位则是消息或报文(message)

    • 但这些名词并没有什么本质的区分,可以统称为数据包

    OSI 网络分层模型

    Open System Interconnection Reference Model 开放式系统互联通信参考模型
    OSI 模型分成了七层,部分层次与 TCP/IP 很像,从下到上分别是:
    OSI 网络分层模型

    • 第一层:物理层
      • 网络的物理形式,例如电缆、光纤、网卡、集线器等等;
    • 第二层:数据链路层
      • 它基本相当于 TCP/IP 的链接层;
    • 第三层:网络层
      • 相当于 TCP/IP 里的网际层;
    • 第四层:传输层
      • 相当于 TCP/IP 里的传输层;
    • 第五层:会话层
      • 维护网络中的连接状态,即保持会话和同步;
    • 第六层:表示层
      • 把数据转换为合适、可理解的语法和语义;
    • 第七层:应用层
      • 面向具体的应用传输数据。

    TCP/IP网络分层模型与OSI网络分层模型

    TCP/IP 等协议已经在许多网络上实际运行,再推翻重来是不可能的。所以,OSI 分层模型在发布的时候就明确地表明是一个“参考”,不是强制标准,意思就是说,“你们以后该干什么还干什么,我不管,但面子上还是要按照我说的来”。

    OSI网络分层模型的优点

    • OSI 模型也是有优点的。对比一下就可以看出,TCP/IP 是一个纯软件的栈,没有网络应有的最根基的电缆、网卡等物理设备的位置。而 OSI 则补足了这个缺失,在理论层面上描述网络更加完整。
    • 还有一个重要的形式上的优点:OSI 为每一层标记了明确了编号,最底层是一层,最上层是七层,而 TCP/IP 的层次从来只有名字而没有编号。显然,在交流的时候说“七层”要比“应用层”更简单快捷,特别是英文,对比一下“Layer seven”与“application layer”。
    • 在实际工作中这种说法只是“理论上”的层次,并不是与现实完全对应。

    两个分层模型的映射关系

    两个分层模型的映射关系
    这样是有一定原因的。

    • OSI 的分层模型在四层以上分的太细,而 TCP/IP 实际应用时的会话管理、编码转换、压缩等和具体应用经常联系的很紧密,很难分开。
      • HTTP 协议就同时包含了连接管理和数据格式定义。

    四层负载均衡

    指工作在传输层上,基于 TCP/IP 协议的特性,例如 IP 地址、端口号等实现对后端服务器的负载均衡。

    七层负载均衡

    指工作在应用层上,看到的是 HTTP 协议,解析 HTTP 报文里的 URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器。
    有一个辨别四层和七层比较好的(但不是绝对的)小窍门,“两个凡是”:凡是由操作系统负责处理的就是四层或四层以下,否则,凡是需要由应用程序(也就是你自己写代码)负责处理的就是七层。

    TCP/IP 协议栈的工作方式

    可以把 HTTP 利用 TCP/IP 协议栈传输数据想象成一个发快递的过程。

    • 假设想把一件毛绒玩具送给朋友,但要先拿个塑料袋套一下,这件玩具就相当于 HTTP 协议里要传输的内容,比如 HTML,然后 HTTP 协议为它加一个 HTTP 专用附加数据。
    • 把玩具交给快递小哥,为了保护货物,他又加了层包装再贴了个标签,相当于在 TCP 层给数据再次打包,加上了 TCP 头。
    • 接着快递小哥下楼,把包裹放进了三轮车里,运到集散点,然后再装进更大的卡车里相当于在 IP 层、MAC 层对 TCP 数据包加上了 IP 头、MAC 头。
    • 之后经过漫长的运输,包裹到达目的地,要卸货再放进另一位快递员的三轮车,就是在 IP 层、MAC 层传输后拆包。
    • 快递员到了朋友的家门口,撕掉标签,去除了 TCP 层的头朋友再拆掉塑料袋包装,也就是 HTTP 头,最后就拿到了玩具,也就是真正的 HTML 页面。
    • 这个比喻里省略了很多 TCP/IP 协议里的细节,比如建连、路由、数据切分与重组、错误检查等,但核心的数据传输过程是差不多的。
    • HTTP 协议的传输过程就是这样通过协议栈逐层向下,每一层都添加本层的专有数据,层层打包,然后通过下层发送出去。
    • 接收数据则是相反的操作,从下往上穿过协议栈,逐层拆包,每层去掉本层的专有头,上层就会拿到自己的数据。
    • 但下层的传输过程对于上层是完全“透明”的,上层也不需要关心下层的具体实现细节,所以就 HTTP 层次来看,它不管下层是不是 TCP/IP 协议,看到的只是一个可靠的传输链路,只要把数据加上自己的头,对方就能原样收到。

    二层转发

    设备工作在链路层,帧在经过交换机设备时,检查帧的头部信息,拿到目标mac地址,进行本地转发和广播

    三层路由

    设备工作在ip层,报文经过有路由功能的设备时,设备分析报文中的头部信息,拿到ip地址,根据网段范围,进行本地转发或选择下一个网关

    CDN DNS

    CDN 工作在应用层
    DNS 协议位于应用层

    http-note 笔记内容来自极客时间《透视HTTP协议》专栏--罗剑锋老师 努力学习 受益匪浅

  • 相关阅读:
    Installshield Basic msi 禁用控制面板中添加删除应用
    js location.search
    c# 中关于office引用释放 技巧
    Installshield2016 condition
    bat script 点滴
    Installshield 2015 实现检测某安装文件是否存在并运行安装
    (八)基本概念列表
    (七)PM法律法规、文档配置、需求管理知识
    (六)PM项目沟通、风险、采购管理
    (五)PM项目质量管理与人力资源管理
  • 原文地址:https://www.cnblogs.com/liyf-98/p/14416157.html
Copyright © 2011-2022 走看看