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 协议,看到的只是一个可靠的传输链路,只要把数据加上自己的头,对方就能原样收到