说明

《透视HTTP协议》​是 ​​罗剑锋​​ (奇虎360技术专家)在极客时间开的一门专栏课,笔者记录一下学习笔记,仅供参考。

TCP/IP 网络分层模型

层次图如下:

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:有层次的协议栈_传输层_02

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

两个分层模型的映射关系

大概的一个对应关系:

  • 第一层:物理层,​​TCP/IP​​ 里无对应
  • 第二层:数据链路层,对应​​TCP/IP​​ 的链接层
  • 第三层:网络层,对应​​TCP/IP​​ 的网际层
  • 第四层:传输层,对应​​TCP/IP​​ 的传输层
  • 第五、六、七层:统一对应到​​TCP/IP​​ 的应用层

TCP/IP 实际应用时的​​会话管理​​​、​​编码转换​​​、​​压缩​​​等和具体应用经常联系的很紧密,很难分开。例如:HTTP 协议就同时包含了​​连接管理​​​和​​数据格式定义​​。

TCP/IP:有层次的协议栈_http_03

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

七层负载均衡:就是指工作在​​应用层​​上,看到的是 HTTP 协议,解析 HTTP 报文里的 URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器。

小窍门(不是绝对的):

两个凡是”:凡是由操作系统负责处理的就是四层或四层以下,否则,凡是需要由应用程序(也就是你自己写代码)负责处理的就是七层。

TCP/IP 协议栈的工作方式

TCP/IP:有层次的协议栈_传输层_04

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

2、接收数据则是相反的操作,从下往上穿过协议栈,逐层拆包,每层去掉本层的专有头,上层就会拿到自己的数据。