STM32F429IGT6 ETH—LwIP 以太网通信——学习笔记3(TCP/IP协议栈)

标准 TCP/IP 协议是用于计算机通信的一组协议,通常称为 TCP/IP 协议栈,通俗讲就是符合以太网通信要求的代码集合,一般要求它可以实现每个层对应的协议,比如应用层的 HTTP、FTP、DNS、SMTP 协议,传输层的 TCP、UDP 协议、网络层的 IP、ICMP 协议等等。关于 TCP/IP 协议详细内容推荐阅读《TCP-IP 详解》和《用 TCP/IP 进行网际互连》理解。

Windows 操作系统、UNIX 类操作系统都有自己的一套方法来实现 TCP/IP 通信协议,它们都提供非常完整的 TCP/IP 协议。对于一般的嵌入式设备,受制于硬件条件没办法支持使用在 Window 或 UNIX 类操作系统的运行的 TCP/IP 协议栈,一般只能使用简化版本的TCP/IP 协议栈,目前开源的适合嵌入式的有 uIP、TinyTCP、uC/TCP-IP、LwIP 等等。其中LwIP 是目前在嵌入式网络领域被讨论和使用广泛的协议栈。本章内容其中一个目的就是移植 LwIP 到开发板上运行。

1、为什么需要协议栈

物理层主要定义物理介质性质,MAC 子层负责与物理层进行数据交接,这两部分是与硬件紧密联系的,就嵌入式控制芯片来说,很多都内部集成了 MAC 控制器,完成 MAC 子层功能,所以依靠这部分功能是可以实现两个设备数据交换,而时间传输的数据就是 MAC数据包,发送端封装好数据包,接收端则解封数据包得到可用数据,这样的一个模型与使用 USART 控制器实现数据传输是非常类似的。但如果将以太网运用在如此基础的功能上,完全是大材小用,因为以太网具有传输速度快、可传输距离远、支持星型拓扑设备连接等等强大功能。功能强大的东西一般都会用高级的应用,这也是设计者的初衷。

使用以太网接口的目的就是为了方便与其它设备互联,如果所有设备都约定使用一种互联方式,在软件上加一些层次来封装,这样不同系统、不同的设备通讯就变得相对容易了。而且只要新加入的设备也使用同一种方式,就可以直接与之前存在于网络上的其它设备通讯。这就是为什么产生了在 MAC 之上的其它层次的网络协议及为什么要使用协议栈的原因。又由于在各种协议栈中 TCP/IP 协议栈得到了最广泛使用,所有接入互联网的设备都遵守 TCP/IP 协议。所以,想方便地与其它设备互联通信,需要提供对 TCP/IP 协议的支持。

2、各网络层的功能

用以太网和WiFi做例子,它们的MAC子层和物理层有较大的区别,但在MAC之上的LLC层、网络层、传输层和应用层的协议,是基本相同的,这几层协议由软件实现,并对各层进行封装。根据TCP/IP协议,各层要实现的功能如下:

  1. LLC层:处理传输错误;调节数据流,协调收发数据双发速度,防止发送方发送的太快而接收方丢失数据。主要使用数据链路协议。
  2. 网络层:本层也被称为IP层。LLC层负责把数据从线的一端传输到另一端,但很多时候不同的设备位于不同的网络中(并不是简单的网线两头)。此时就需要网的络层来解决子网路由拓扑问题、路径选择问题。在这一层主要有IP协议、ICMP协议。
  3. 传输层:由网络层处理好了网络传输的路径问题后,端到端的路径就建立起来了。传输层就负责处理端到端的通讯。在这一层中主要有TCP、UDP协议。
  4. 应用层:经过前面三层的处理,通讯完全建立。应用层可以通过调用传输层的接口来编写特定的应用程序。而TCP/IP协议一般会包含一些简单的应用程序如Telnet远程登录、FTP文件传输、SMTP邮件传输协议。

实际上,在发送数据时,经过网络协议栈的每一层,都会给来自上层的数据添加上一个数据包的头,再传递给下一层。在接收方收到数据时,一层层的把所在层的数据包的头去掉,向上层递交数据

STM32F429IGT6 ETH—LwIP 以太网通信——学习笔记3(TCP/IP协议栈)_第1张图片

你可能感兴趣的:(网络通信)