TCP / IP 网络分层模型

  • 链接层

    负责在以太网,WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址标记网络上的设备,也叫作 MAC 层

  • 网际层

    IP协议处在这一层,使用 IP 地址取代 MAC 地址,把局域网,广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址翻译成 MAC 地址就可以了

  • 传输层

    这个层次的职责是保证数据在两点之间可靠地传输,包含 TCP协议 以及 UDP协议。

  • 应用层

    有各种面向具体应用的协议,例如 telnet,ssh,ftp,http等

MAC 层的传输单位是 帧(frame),IP 层的传输单位是 包(packet),TCP 层的传输单位是 段(segment),HTTP 的传输单位是 消息或报文(message)。但这些名词没有本质区分,可以统称为数据包

OSI 网络分层模型

TCP / IP 发明于 1970 年代,当时除了它还有很多其他网络协议,国际标准组织(ISO)想要来个 “大一统”,于是设计出一个新的网络分层模型 OSI(开放式系统互联通信参考模型)

OSI 模型分为七层,从下到上分别是:

  • 物理层,网络的物理形式,例如电缆,光纤,网卡,集线器等
  • 数据链路层,相当于 TCP / IP 的链路层
  • 网络层,相当于 TCP / IP 的网际层
  • 传输层,相当于 TCP / IP 的网际层
  • 会话层,维护网络中连接状态,保持会话和同步
  • 表示层,把数据转换为合适,可理解的语法和语义
  • 应用层,面向具体的应用传输数据

不过 TCP / IP 协议已经在许多网络上实际运行,在推翻重来是不可能的。所以,OSI 分层模型在发布的时候就明确表明是一个 参考,不是强制执行

但 OSI 模型也是有优点的,TCP / IP 是一个纯软件的栈,没有网络最根基的电缆,网卡等物理设备的位置,OSI 补足了这个缺失。

还有一个形式上的优点, TCP / IP 的层次只有名字没有编号,OSI 为每一层标记了明确的编号,最底层是一层,最上层是七层

两个分层模型的映射关系

  • 第一层:物理层,TCP/IP 里无对应

  • 第二层:数据链路层,对应 TCP/IP 的链接层

  • 第三层:网络层,对应 TCP/IP 的网际层

  • 第四层:传输层,对应 TCP/IP 的传输层

  • 第五,六,七层:统一对应到 TCP/IP 的应用层

多余的一,五,六层就这样消失了,但这也有一定的实际原因,OSI 的分层模型在四层以上分的太细,而 TCP/IP 实际应用时的会话管理,编码转换,压缩等和具体应用经常联系的很紧密,很难分开。

TCP/IP 协议栈的工作方式

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

假设你想把一件玩具送给朋友,但你要先拿个塑料袋套一下,这件玩具就相当于 HTTP 协议里要传输的数据,比如 HTML,然后 HTTP 协议为它加一个 HTTP 专用附加数据。

你把玩具交给快递小哥,为了保护货物,他又加了层包装再贴了个标签,相当于在 TCP 层给数据再次打包,加上了 TCP 头

接着快递小哥下楼,把包裹放进了三轮车力,运到集散点,然后再装进更大的卡车里,相当于在 IP 层,MAC层对 TCP 数据加上了 IP 头,MAC 头

之后经过漫长的运输,包裹到达目的地,要卸货再放进另一位快递员的三轮车,就是在 IP层,MAC 层传输后拆包

快递员到了你朋友的家门口,撕掉标签,去除了 TCP 层的头,你朋友再拆掉塑料袋标桩,也就是 HTTP 头,最后就拿到了玩具,也就是真正的 HTTP 页面

HTTP 协议的传输过程就是这样通过协议栈逐层向下,每一层都添加本层的专有数据,层层打包,然后通过下层发送出去

接受数据则是相反的操作,从下往上传过协议栈,逐层解包,每层去掉本层的专有头,上层就会拿到自己的数据

下层的传输数据对于上层是完全透明的,上层也不需要关心下层的具体实现细节,所以就 HTTP 层次来看,它不管下层是不是 TCP/IP 协议,看到的只是一个可靠的传输链路,只要把数据加上自己的头,对方就能原样收到