TCP/IP协议族体系结构以及主要协议

   现在Internet使用的主流协议族是TCP/IP协议族,它是一个分层,多协议的通信体系。TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。

1、数据链路层

   数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输。不同的物理网络具有不同的电气特性,网络驱动程序隐藏了这些细节,为上层协议提供一个统一的接口。

    数据链路层常用的协议是ARP协议和RARP协议。他们实现了IP地址和机器物理地址之间的相互转换。因为网络层使用IP地址寻址一台机器,而数据链路层使用物理地址寻址一台机器,因此网络必须先将目标机器的IP地址转换成其物理地址,才能使用数据链路层提供的服务,这就是ARP协议的用途。RARP协议则仅使用于网络上某些无盘工作站。

2、网络层

  网络层实现数据包的选路和转发,即数据通过发送方发出后,如何在广域网中选择合适的路线到达接受方。网络层最核心的协议是IP协议。IP协议根据数据包的目的IP地址来决定如何投递它。如果数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一跳路由器,并将数据包交付给该路由器转发。多次重复这一过程,数据包最终到达目标主机,或者由于发送失败而被丢弃。

      网络层另外一个重要的协议是ICMP协议(因特网控制报文协议)。它是IP协议的重要补充,主要用于检测网络连接。ICMP协议使用的报文格式如下:

8位类型 8为代码 16位校验和

    8位类型字段用于区分报文类型。它将ICMP报文分为两大类:1、差错报文:这类报文主要用来回应网络错误,比如目标不可到达和重定向2、查询报文:这类报文用来查询网络信息,比如ping程序就是使用ICMP报文查看目标是否可到达的。

    有的ICMP报文还使用8位代码字段来进一步细分不同的条件。比如重定向报文使用代码值0表示对网络重定向,代码值1表示对主机重定向。

     16位校验和字段对整个报文进行循环冗余校验,以校验报文在传输过程中是否损坏。

3、传输层

   传输层为两台主机上的应用程序提供端到端的通信。与网络层使用的逐跳通信方式不同,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程。下图展示了传输层和网络层的区别。

TCP/IP协议族体系结构以及主要协议

传输层协议主要有三个:TCP协议、UDP协议、SCTP协议。

  TCP协议为应用层提供可靠的、面向连接的基于流的服务。TCP协议使用超时重传、数据确认等方式来确保数据包被正确地发送至目的端,因此TCP服务是可靠的。使用TCP协议通信的双方必须先建立TCP连接,并在内核中为该连接维持一些必要的数据结构,比如连接的状态、读写缓冲区,以及诸多定时器等。当通信结束时,双方必须关闭连接以释放这些内核数据。TCP服务是基于流的。基于流的数据没有边界(长度)限制,它源源不断地从通信的一端流到另一端。发送端可以逐个字节地向数据流中写入数据,接收端也可以逐个字节地将它们读出。

UDP协议则与TCP协议完全相反,它为应用层提供不可靠、无连接和基于数据报的服务。“不可靠”意味着UDP协议无法保证数据从发送端正确的传送到目的端。如果数据在中途丢失,或者目的端通过数据校验发现数据错误而将其丢弃,则UDP协议只是简单的通知应用程序发送失败。因此,使用UDP协议的应用程序通常要自己处理数据确认、超时重传等逻辑。UDP协议是无连接的,即通信双方不保持一个长久的联系,因此应用程序每次发送数据都要明确指定接收端的地址。基于数据报的服务,是相对基于流的服务而言的。每个UDP数据报都有一个长度,接收端必须以该长度为最小单位将其所有内容一次性输出,否则数据将被截断。

SCTP协议是一种相对较新地传输层协议,它是为了在因特网上传输电话信号而设计的。

4、应用层

   应用层负责处理应用程序的逻辑。数据链路层、网络层和传输层负责处理网络通信细节,这部分必须即稳定又高效,因此它们都在内核空间中实现。而应用层在在用户空间实现,因为它负责处理众多逻辑,比如文件传输、名称查询和网络管理等。如果应用层也在内核中实现,则会使内核变得非常庞大。

     应用层的协议有很多,如:telnet协议、OSPF协议、DNS协议等,ping是应用程序而不是协议。