TCP/IP协议栈介绍

谈到TCP/IP协议栈,我们可能对某些协议比较熟悉,比如在网页数据也就是超文本数据的传输我们所用到的HTTP协议,还有为HTTP协议提供服务的TCP协议,但是有一些协议我们有用到但可能知道地不是很清楚,比如ARP协议,DHCP协议还有DNS协议等等。

我们这篇文章就是为了给大家介绍一些非常重要,但是大家并不是很清楚的协议。

TCP/IP协议有一个五层的结构,从上到下分别是应用层、传输层、网络层、数据链路层和物理层。我们着重介绍一下上面四层。

第一个是应用层,应用层本身可以说是用户真正应用的接口,这一层存在很多的协议,比如HTTP协议、FTP协议、DNS协议等。应用层还有一种情况就是用户自己开发程序,然后在自己的程序上写应用,这样也是可以的。在应用层下面,真正负责数据传输的有两种方式,一种是TCP,另一种是UDP。TCP和UDP最简单也最根本的区别就是TCP是确保传输数据的可靠性的,而UDP是没有的。

然后是网络层,路由器、交换机都是网络层的设备。网络层主要负责的就是网络通讯,是不确保数据的可靠性的。

数据链路层是依靠物理设备来进行数据传输的,在以太网中数据链路层就是MAC控制器。

下图是TCP/IP协议栈的封装形式

TCP/IP是一个的分层是非常清晰的,在用户层上来讲是不用关心下面的每一层做什么,只需要在上层应用中通过调用某些应用接口的协议的一些标准来实现自己的应用和设计。

当我的用户数据通过TFTP向其发送的时候,TFTP协议栈会自动添加一个TFTP Header, TFTP是调用UDP来进行数据传输的,所以当它调用UDP函数时,它又会加一个UDP Header. UDP下面是IP层,IP层会加一个IP Header,接下来就是数据链路层和物理层,又会加入Ethernet Header和Ethernet Trailer.

在TCP/IP协议栈的软件部分,也就是应用层、传输层和网络层都是只加头包的,只有在数据链路层会添加头包和一个尾包

ARP协议

我们首先为大家介绍一下ARP协议

ARP协议的作用是把IP地址和MAC地址对应起来,它处于IP层和数据链路层之间的一个协议。

我们在做一个应用设计的时候只知道IP地址,下面举一个例子来说明为什么需要有ARP协议。

我们需要一个动态的映射,把IP地址192.168.0.10和MAC地址02-00-00-00-00-00对应起来,使它们都可以找到对方。

我们通过一个简单的模型来进行说明。我们这里有一块STM32的开发板和一台电脑

对STM32的开发板设置IP有两种方式,一种是静态设置的,也就是192.168.0.10;还有一种是DHCP服务器分配出来的,就是192.168.0.x,MAC地址是02-00-00-00-00-00。电脑的IP地址是192.168.0.11,MAC地址是Dell_8c:fb:d1。

首先电脑发送了一个广播包,询问谁知道192.168.0.10,请告诉192.168.0.11(也就是电脑自己)。发送广播包的原因是刚开始不知道192.168.0.10是谁,所以只能网段的所有人发送一个广播包,如果在网段中存在192.168.0.10,那它就会给电脑反馈,告诉电脑它就是192.168.0.10,并且告诉电脑它的MAC地址。

我们来总结一些ARP协议的过程

整个ARP协议中,当我拿到一个IP地址的时候我并不知道它的MAC地址,因此需要通过ARP的查询来问一下,发送一个广播包来寻找IP地址对应的MAC地址是什么,如果网段内存在这个IP地址,那它在收到广播包后就会回应并把MAC地址反馈回去。

ICMP协议

ICMP协议实际上也是属于网络层的一个协议,它的工作方式是我发送一个序列,对方再把这个序列发送回来,我看发送和接收的序列是不是相同来判断传输是不是正常,同时ICMP还提供了许多错误信息。

ICMP协议本身是为了诊断、控制在IP层的问题,其中最重要的就是诊断,通过ICMP可以诊断出IP层发生哪些网络传输的问题。

ICMP包含两部分,一部分是交互式查询信息,另一部分是错误信息,这些信息有些可能是通过用户自己发出去的,也有可能是协议栈自己产生的。

ICMP 错误信息有很多种,我们选其中比较常见的两种说一下,一种是目的地不可达,另一种是超时。超时的原因最可能是别人已经有了回复,但是只是超了时,超时的情况有好几种,比如网络驱动程序不好、当时的CPU很忙、网线情况不理想等。目的地不可达可能是由于网络没有搭建通。

DHCP协议

在它之前有一种功能跟它很相似的协议叫做BOOTP协议,这两种协议的功能几乎是一致的,目的都是请求一个IP地址。DHCP是通过UDP的客户端和服务器模型设计的一个协议,这个协议的目的就是为了动态获得IP地址,这个地址的分配和管理是由DHCP的server来管理的,我们要想去向HCP server请求租用一个IP地址,还需要一个DHCP的客户端,通过客户端和服务器的交互信息,就可以得到一个动态的可以使用的IP地址。

我们通过一个例子来说明DHCP的使用

首先我们必须在电脑上设置一个DHCP服务器,关于这一点有很多软件已经实现了,比较好用的是Tftpd32,这个软件可以开设一个DHCP server。我们把192.168.0.11设置成DHCP server,STM32评估板的MAC地址是02:00:00:00:00:00,给它分配的IP地址是192.168.0.2。那为什么给它分配这个地址呢?我们在设置DHCP server的时候,IP分配的起始地址是192.168.0.1,这个地址一般都是应用给网关的,最常见的网关就是路由器,当给新的DHCP客户端分配IP地址的时候是按顺序来的。但是我们说了,DHCP是一种租用IP的协议,也就是租期一到就要还,一般的DHCP服务器提供租期的时间是六个小时,也就是六个小时之后就会进行DHCP租期的更新。在租期到了的时候,如果想续租,那租用的IP地址很可能和原来的IP地址是一样的,这就是为了方便客户端进行一些处理,也为了能更好地管理网络。

DNS协议

DNS协议是一种应用层协议,这个协议最有趣的地方是它用了传输层的两种协议,既用了TCP协议,又用了UDP协议。

我们一般在浏览器中敲击的是域名,比如我们想查询ST官网的一些内容,我们会敲击www.st.com。其实我们要找到www.st.com是路由器通过查询ST官方网址的IP地址来得到的,也就是必须把www.st.com转为一个IP地址,但是让用户记住IP地址是很困难的,因此我们需要域名解析协议把www.st.com转化成一个IP地址。

我们看一下DNS的具体实现,它是向DNS server询问哪里是www.st.com,DNS也是基于UDP、TCP的客户端服务器模型来设计的一个协议。

转自:https://zhuanlan.zhihu.com/p/79252282

猜你喜欢

转载自blog.csdn.net/lingshengxiyou/article/details/130158286