说明
《透视HTTP协议》是
罗剑锋
(奇虎360技术专家)在极客时间开的一门专栏课,笔者记录一下学习笔记,仅供参考。
TCP/IP 网络分层模型
层次图如下:
第一层:链接层(link layer)
负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫
MAC 层
。
第二层:网际层或者网络互连层(internet layer)
IP 协议
就处在这一层。因为 IP 协议定义了IP 地址
的概念,所以就可以在链接层
的基础上,用 IP 地址取代 MAC 地址
,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再“翻译”成 MAC 地址就可以了。
第三层:传输层(transport layer)
保证数据在 IP 地址标记的两点之间“可靠”地传输,是 TCP 协议工作的层次。
-
TCP
:是一个有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复 -
UDP
:则无状态,不用事先建立连接就可以任意发送数据,但不保证数据一定会发到对方。 - TCP 的数据是连续的
字节流
,有先后顺序
,而 UDP 则是分散的小数据包,是顺序发
,乱序收
。
第四层:应用层(application layer)
有各种面向具体应用的协议。例如
Telnet、SSH、FTP、SMTP、HTTP
。
MAC 层的传输单位是帧
(frame)。
IP 层的传输单位是包
(packet)。
TCP 层的传输单位是段
(segment)。
HTTP 的传输单位则是消息或报文
(message)。
可以统称为数据包
。
OSI 网络分层模型
OSI,全称是
开放式系统互联通信参考模型
(Open System Interconnection Reference Model
)。
OSI 模型分成了七层,如下图:
- 第一层(物理层):网络的物理形式,例如电缆、光纤、网卡、集线器等等
- 第二层(数据链路层):它基本相当于
TCP/IP
的链接层 - 第三层(网络层):相当于
TCP/IP
里的网际层 - 第四层(传输层):相当于
TCP/IP
里的传输层 - 第五层(会话层):维护网络中的连接状态,即保持会话和同步
- 第六层(表示层):把数据转换为合适、可理解的语法和语义
- 第七层(应用层):面向具体的应用传输数据。
两个分层模型的映射关系
大概的一个对应关系:
- 第一层:物理层,
TCP/IP
里无对应 - 第二层:数据链路层,对应
TCP/IP
的链接层 - 第三层:网络层,对应
TCP/IP
的网际层 - 第四层:传输层,对应
TCP/IP
的传输层 - 第五、六、七层:统一对应到
TCP/IP
的应用层
TCP/IP 实际应用时的
会话管理
、编码转换
、压缩
等和具体应用经常联系的很紧密,很难分开。例如:HTTP 协议就同时包含了连接管理
和数据格式定义
。
四层负载均衡:就是指工作在传输层
上,基于 TCP/IP
协议的特性,例如 IP 地址、端口号等实现对后端服务器的负载均衡。
七层负载均衡:就是指工作在应用层
上,看到的是 HTTP 协议,解析 HTTP 报文里的 URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器。
小窍门(不是绝对的):
“两个凡是”:凡是由操作系统负责处理的就是四层或四层以下,否则,凡是需要由应用程序(也就是你自己写代码)负责处理的就是七层。
TCP/IP 协议栈的工作方式
1、HTTP 协议的传输过程就是这样通过协议栈逐层向下,每一层都添加本层的专有数据,层层打包,然后通过下层发送出去。
2、接收数据则是相反的操作,从下往上穿过协议栈,逐层拆包,每层去掉本层的专有头,上层就会拿到自己的数据。