网络基础知识(六) Application 层与OSI 七层模型

系列回顾

Application Layer 应用层

应用层是整个网络模型中最靠近用户, 常用的协议有 HTTP, FTP/SFTP, SMTP等等. 比如说浏览器, 市面上有很多很多浏览器, 常见的有 Chrome, Firefox, Safari, Edge等等, 服务器有 nginx, apache, tomcat 等等, 但是无论一个网站的后端使用什么样的服务器, 用户使用什么样的浏览器, 数据都能被正确解读, 这是为什么呢? 那是因为服务器和浏览器都采用了同一个协议, 叫 HTTP 协议.

对于应用层来说, 它的数据也需要被封装到底层. 对于不同的协议, 数据包的格式/字段可能会不一样, 但是对于底层的协议来说, 并不care. 它们要做的就是把应用层的数据包封装到data payload里面, 然后传输到相应的网络节点.

OSI 七层模型

OSI是 Open System Interconnection 的缩写. 与之前介绍的5层模型不一样的地方是, 在之前的5层模型的基础上额外增加了两层, 它们分别是 Session 层和 Presentation 层. 这两层位于Transport Layer (传输层) 和 Application Layer (应用层) 之间.

Session 层

session层主要负责连接应用层和传输层的对话. 换句话说, 就是session 层负责构建传输层和应用层沟通的通道.

Presentation 层

当Session层把数据包传递给presentation层之后, presentation层需要做的是确认数据包能够被应用程序成功处理. 也就是说,它要确保应用程序能”看懂”这个数据包的内容. 日常使用方面就是传输中的加密/解密都在这一层完成.

网络工作原理

在这一小节中, 我将假设一个场景来解释5成模型是如何协同工作的.

现在有三个网络:

  • 网络A: 地址是 10.1.1.0/24
  • 网络B: 地址是 192.168.1.0/24
  • 网络C: 地址是 172.16.1.0/24

两个路由器:

  • 路由A: 连接网络A和网络B; 接口ip地址分别是 10.1.1.1192.168.1.254
  • 路由B: 连接网络B和网络C; 接口ip地址分别是 192.168.1.1172.16.1.1

两台电脑:

  • 电脑A: 客户端, 存在于网络A中; ip地址是10.1.1.100
  • 电脑B: 服务端, 存在于网络C中; ip地址是172.16.1.100. 因为这个是服务器, 所有个服务器软件在监听80端口.

现在, 一个用户打开了 电脑A 的浏览器, 并输入了一个172.16.1.100. 在他敲击回车后会发生什么呢?

  1. 浏览器知道, 它需要向172.16.1.100这个地址请求网页.
    • 它需要和172.16.1.100 端口 80 建立 TCP 连接.
  2. 网络A检查后发现 172.16.1.100不是一个本地的ip地址.
  3. 电脑A知道它需要向它的本地网关发送数据包.
    • 网关地址是 10.1.1.1
  4. 电脑A搜索 ARP表 来确定 10.1.1.1的MAC地址.
    • 不幸的是, ARP表中没有10.1.1.1的MAC地址.
  5. 电脑A发送了ARP广播, 请求 10.1.1.1的MAC地址.
  6. 路由器A接收到广播后发现, 10.1.1.1是自己的地址, 所以它回应了自己的的MAC地址.
  7. 电脑A收到路由器A的MAC地址后, 开始准备数据包.
    • 因为这是一个TCP数据包, 所以准备一个TCP端口
    • 操作系统判定端口50000是空闲的, 所以将浏览器连接到此端口
  8. 准备好的TCP数据包现在被传递到 网络层.
    • 网络层将构建一个IP Header
    • 关键参数
      • 目标ip 172.16.1.100
      • 源头ip 10.1.1.100
      • TTL: 64
    • TCP 数据包被封装到pay load字段
  9. 有了IP数据包之后, 电脑A需要把这个数据包发送到路由A的MAC的地址.
    • 连接层 构建一个Etherframe Datagram
    • 关键参数
      • 目标MAC地址 (路由A的MAC地址)
      • 源头MAC地址 (电脑A的MAC地址)
    • IP数据包被封装到 Ethernetframe datagram里面
  10. 数据包经过Physical Layer, 被发送到路由A
  11. 路由器A对数据包进行检查.
    • 目标MAC是否和自己的MAC一致
    • checksum是否一致
  12. 路由A将 Ethernetframe的payload取出, 也就是IP Datagram
    • 路由A将检查IP Datagram的checksum
    • 目标IP 字段取出
  13. 路由A发现, 如果要到达172.16.100, 最短路径是经过路由B
    • 路由A将IP Datagram的TTL字段减1
    • 计算新的checksum
    • 检查Rounting Table, 获取路由B的MAC地址
    • 构造新的Ethernetframe Datagram
    • 封装TCP
  14. 数据包送到路由B
  15. 重复上面的步骤…
  16. 数据包被送到电脑B
    • 取出TCP数据包
    • 获取目标端口
    • 操作系统判定80端口打开了

上面就是一次传输过程, 如果要完成一次TCP三次握手, 这个过程将被重复三次.