网络协议介绍

理解网络协议前, 因该先理解什么是协议? 协议是: 一系列规制, 标准和约定的集合. 协议有两个关键的要素: 语法和语义. 语法解决的是形式的问题; 语义解决的是含义的问题. 而网络协议就是建立在协议的基础上. 网络协议是用于数据传输的, 不仅要包含语法和语义两个要素, 还要解决时序问题. 如果一个数据包延迟到达, 需要合理的机制将数据进行合并. 在时间尺度上, 时序问题可以归结为语法问题, 即在时间上不合语义. 此处单独拿出来讨论. 总结以下, 网络协议包含三要素: 语法, 语义和时序.

网络协议不是一个单一的协议, 而是由多个不同的子协议构成的. 自底向上包括: 数据链路层协议, 网络层协议, 传输成协议, 应用层协议. 各层协议又包含不同的协议. 在编程上, 接触最多的是应用层协议, 如: http, ftp, tftp, rtsp, pop3等. 不同于其他各层协议, 应用层协议可以自定义. 用户可以自定义自己的应用层协议, 来实现很多有趣的功能.

发送一段信息在网络协议栈经过怎样的加工处理呢?

  • 添加应用层协议头
|--------------|------------|
| 应用层协议头 | 发送的信息 |
|--------------|------------|
  • 添加传输层协议头(tcp/udp)
|--------------|------------|
| 传输层协议头 | 上一层信息 |
|--------------|------------|
  • 添加网络层协议头(ip)
|--------------|------------|
| 网络层协议头 | 上一层信息 |
|--------------|------------|
  • 添加数据链路层协议头(mac)
|------------------|------------|
| 数据链路层协议头 | 上一层信息 |
|------------------|------------|

通过物理层的发送设备将数据包发送出去, 通过路由器将数据在网络上转发, 最终到达接收端的主机. 而接收端的主机将接收到的数据包进行一层层的解析, 最终将发送的信息交给应用程序. 应用程序解析应用层协议, 读取真正的数据. 在整个交互的过程中会涉及到很多交互逻辑和错误处理, 此处都没有说, 有机会再写几篇博客简单介绍一下.

最后看一个wireshark抓包的例子:

如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.

Leave a Reply

Your email address will not be published. Required fields are marked *