Ethernet Network:数据通过以太网帧的本地以太网网络传送
Ethernet Address:以太网帧通过网络将数据从一个节点移动到另一个节点,以太网帧的数据或许只是原始数据,但一般情况下会与其他协议例如可能进一步携带TCP或UDP的IP协议相关联,在同一个以太网络中,不同的节点通过MAC地址来识别,MAC地址通常写为6个由冒号分开的8位字节。在本地以太网中,每一个节点只有一个唯一MAC地址。
MTU:MTU表示最大传输单元,它表示了硬件(物理层)的一个特性,MTU一般被写成8字节模式
MTU Size:该值表示向网络发送或从网络接收一个帧或包的最大大小,当应用层发送一个小于或等于一个帧大小的数据时,仅仅一个帧会被发送到网络,当大于MTU Size时,数据会被分为多个包发送,每个包内数据量小于或等于一个·帧的大小。在FREERTOS+TCP/IP中,MTU的大小以字节为单位,并通过FreeRTOSIPConfig.h中的ipconfigNETWORK_MTU设置,根据自己的MAC与硬件层来设置该值,一些MAC设备将它限制到1400.
Internet Protocol:它表示TCP/IP或UDP/IP中的IP,IP协议栈表示通过网络交流的协议,例如在因特网上,IP网络的节点通过IP地址来识别。
IP Address:在同一个IP网络中,不同节点通过IP地址来识别。
ARP:表示地址解析协议。IP包通过IP地址来发送,但是它们打包成的以太网帧通过MAC地址来发送。FreeRTOS+TCP将IP地址到MAC地址的映射存储在一个ARP表上,TCP/IP栈会自动处理ARP表。
Subnet:子网,子网允许IP地址中大部分有意义位转化为路由信息,小部分有意义位转化为本地网络中单独的节点地址。本地IP网络(也就是子网)是一种不通过网关或路由就可以定位的网络。两个不同子网必须通过路由传输数据。
Netmask:掩码,IP地址通过掩码将IP地址信息分为路由信息与本地地址信息,其中与掩码按位与保留下来的位为路由信息,路由器根据路由信息来判断该数据是否发向自己。
Router:若目的IP地址与掩码按位与得到的值与本地网络中IP地址按位与得到的值不一样,则目的地址不属于本地网络,因此不能直接将数据送到目的地址,应通过路由来将数据发送过去。
Gateway:网关表示路由器的地址,路由器就是连上其他网络的网关。网关决定了信息是否能直接发送,还是要传送给其他路由。FreeRTOS+TCP用户只需提供一个网关地址,网关IP可以通过作为FreeRTOS_IPInit(),的参数来静态分配,或通过DHCP服务器动态分配。
UDP:以太网协议包可以携带IP数据包,IP数据包游戏可以携带UDP数据包。UDP通过非连接数据包来发送或接收数据,数据包被认为是无连接的是因为不像TCP,UDP在能够接受或发送数据前不需要与其他网络节点建立一个稳定连接。UDP协议并不需要数据是否已经送达目的地的应答,如果一定要应答,则需要应用层自己提供。UDP相比于TCP更快更简单,消耗的RAM夜更小。
TCP:以太网协议包可以携带IP数据包,IP数据包游戏可以携带TCP数据包。TCP用于在一个已经建立起的稳定连接上发送或接收数据。TCP需要自己建立连接,并且每个数据都正确的传送。TCP相比于UDP更复杂,同时消耗更多内存,额外的内存主要用于维持已经被发送给网络的数据包,直到获取到应答,如果需要重新发送,则需要将之前数据分成可靠数据包发送。
MSS:MSS表示最大段长度,它定义了通过TCP或UDP包传输的最大数据长度,它与MTU不同,MTU表示帧的长度,它表示包的长度,它的值与MTU相关,若MTU为1526,则如下图所示:
则MSS最大设为1460;在FREERTOS+TCP/IP中MSS通过 FreeRTOSIPConfig.h中的ipconfigTCP_MSS来定义,若没有定义,则默认为1460.
Port Number:每个单一网络节点都可使用同一个网络接口运行多个应用,但是要使用同一个IP地址,因此为了区分不同应用,则每个应用会分配一个端口号,每一个TCP或UDP的目的地址由IP与端口号共同组成。
Network Sockets:一个套接字表示通信上的一个端点,一个套接字通过网络节点IP地址和端口号来识别,如果一个网络节点想要向网络中发送UDP数据,那么它应先创建一个套接字,然后将数据发送到套接字,如果一个网络节点想要从网络中接收UDP数据,那么它应先创建一个以发送方已知的地址为基础的套接字,然后从套接字上接收数据。如果一个设备想要通过网络节点向网络发送TCP数据,那么它应先创建一个套接字用于连接远程节点的套接字,然后通过这个套接字来发送数据,接收也是这样。
Binding:每一个套接字都需要连接到一个唯一的地址,地址包括IP与端口。当有一个套接字具有地址与端口,则可以认为该套接字已经依附于一个端口,给套接字申请一个端口号被称作“Binding”,FreeRTOS_bind()用于给一个套接字申请一个端口号。当FreeRTOSIPConfig.h中的ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND设置为0时,在套接字使用前必须调用FreeRTOS_bind() 来申请端口号,若该参数置为1,则不要要申请端口号,当套接字第一次发送数据时,内部会自动分配一个端口号,但是仍然只能在绑定端口号后接收数据。
Client:用于连接远程应用来获取服务的应用。远程应用就是Server。
Server:服务器是等待并回复到来的客户端请求的应用。客户端需要定位服务器,最简单的方法是客户端有服务器已经绑定好的地址。服务器不需要提前知道客户端的地址,它只需要在客户端请求来临后来获取客户端地址,然后想该地址应答。因此客户端可以绑定到任一端口,尽管0xC000 to 0xFFFF被FREERTOS+TCP/IP使用,低端口号保留用于通用网络服务。
Static IP Address:我们已知每一个节点有一个IP地址,如果IP地址为静态的,那么它需要被提前申请并且永远不会改变。如果 ipconfigUSE_DHCP被设置为0或ipconfigUSE_DHCP被设置为1但是DHCP获取不到IP地址,那么我们需要使用 FreeRTOS_IPInit()来申请静态地址。
DHCP:动态主机控制协议(Dynamic Host Control Protocol.),静态地址分配对于开发者来说很方便,但是对于没有这方面知识的人这种方法并不适合,因此我们采用动态地址分配方式。
Network Name Resolution:网络名称解析,也就是域名解析,主要有三种方式:DNS,LLMNR,NBNS。
DNS:域名系统,当FreeRTOSIPConfig.h中的ipconfigUSE_DNS设置为1时,我们可以使用FreeRTOS_gethostbyname()来获取域名的IP地址。
LLMNR:用于本地广播域名解析,主要用于本地网络,名称应不包含点(.),例如http://my_freertos_device/index.htm。LLMNR(本地链路组播名称解析)在DNS服务器不可用时,DNS 客户端计算机可以使用本地链路组播名称解析,通过UDP发送到组播地址224.0.0.252:5355,来解析本地网段上的名称,使用的也是普通DNS的数据包格式。类似的另一种协议是mDNS(组播DNS),通过UDP协议发送到组播地址224.0.0.251:5353,用于家庭局域网等小型网络。ipconfigUSE_LLMNR要置为1才有用。
NBNS:该方法与LLMNR类似,但是它采用发送UDP报文模式,只有当LLMNR失败后才可使用该方法,ipconfigUSE_NBNS 要置为一,才存在该方法。
Little Endian, Big Endian:MCU将包中重要数据放在前面存储的方式叫大端模式,反之小端模式,采用大端模式向内存中写数据必须采用大端模式从内存中读数据。TCP/IP一般采用大端模式