第1章 – TCP/IP 协议族
1.1-TCP/IP协议族体系结构以及主要协议
1.1.1- 数据链路层
实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输。
RARP协议(逆地址解析协议)一般仅用于网络上的无盘工作站,由于没有存储介质,无盘工作站无法记住自己的IP地址,所以可以利用网卡上的物理地址向服务器查询自身的IP地址。
ARP协议(地址解析协议)最为重要,能实现任意网络层地址到任意物理地址的转换,不过一般只是IP地址到MAC地址的转换。其工作原理是:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址,而当其余主机收到这个请求时,只有被请求的目标主机会回应一个ARP应答,其中包含了自己的物理地址。
1.1.2-网络层
它实现了数据包的选路和转发。
在网络层上,最核心的协议就是IP协议。IP协议根据数据包的目的IP地址来决定如何投递它。以“逐跳通信”方式。
此外,还有ICMP协议(因特网控制报文协议),它是IP协议的重要补充,主要用于网络连接的检测。
1.1.3-传输层
传输层为应用程序封装了一条端到端的逻辑通信链路,主要包含:TCP、UDP。
TCP协议(控制传输协议)为应用层提供可靠的、面向连接的和基于流的服务,TCP协议使用了超时重传、数据确认等方式来确保数据包被正确地发送到目的端。TCP是基于流的,基于流的数据没有边界限制,它源源不断地从通信的一段流入另一端,发送端可以逐个字节地向数据流中写入数据,接收端也可以逐个字节地读出。
UDP协议(用户数据报协议)则恰恰相反,它是无连接,不可靠和基于数据报的服务,这意味着UDP协议无法保证数据从发送端正确地传送到目的端,如果在中途丢失,则UDP只是简单地通知应用程序发送失败,因此,使用UDP的应用程序通常要自己处理数据确认、超时重传等逻辑。UDP是基于数据报的服务,每个UDP数据报都有一个长度,接收端必须以该长度为最小单位将其所有内容一次性读出,否则数据将被截断。
1.1.4-应用层
应用层上就应该处理应用程序的逻辑,其余三层在内核空间实现,而应用层需要在用户空间实现。应用层的协议非常多,比如:ping,telnet、DNS、OSPF等。
ping:应用程序,用于调试网络环境。
telnet协议:一种远程登陆协议,使我们能在本地完成远程任务。
OSPF协议(开放最短路径优先协议):是一种动态路由更新协议,用于路由器之间的通信,以告知对方各自的路由信息。
DNS协议(域名服务协议):提供机器域名到IP地址的转换。DNS是一套分布式的域名服务系统。每个DNS服务器上都存放着大量的机器名和IP地址的映射,并且是动态更新的。
1.2-封装
应用程序数据在发送到物理网络上之前,将沿着协议栈从上往下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时还包括尾部信息),以实现该层的功能,这个过程就称为封装,如图1-4所示。
经过TCP封装后的数据称为TCP报文段(TCP message segment),或者简称TCP段。前文提到,TCP协议为通信双方维持一个连接,并且在内核中存储相关数据。这部分数据中的TCP头部信息和TCP内核缓冲区(发送缓冲区或接收缓冲区)数据一起构成了TCP报文段。
经过UDP封装后的数据称为UDP数据报(UDP datagram)。UDP无须为应用层数据保存副本,因为它提供的服务是不可靠的。当一个UDP数据报被成功发送之后,UDP内核缓冲区中的该数据报就被丢弃了。如果应用程序检测到该数据报未能被接收端正确接收,并打算重发这个数据报,则应用程序需要重新从用户空间将该数据报拷贝到UDP内核发送缓冲区中。
经过IP封装后的数据称为IP数据报(IP datagram)。IP数据报也包括头部信息和数据部分,其中数据部分就是一个TCP报文段、UDP数据报或者ICMP报文。
经过数据链路层封装的数据称为帧(frame)。帧是最终在物理网络上传送的字节序列。
1.3-分用
当帧到达目的主机时,将沿着协议栈自底向上依次传递。各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序。这个过程称为分用(demultiplexing)。
因为IP协议、ARP协议和RARP协议都使用帧传输数据,所以帧的头部需要提供某个字段(具体情况取决于帧的类型〉来区分它们。
因为ICMP协议、TCP协议和UDP协议都使用IP协议,所以IP数据报的头部采用16位的协议( protocol)字段来区分它们。
TCP报文段和UDP数据报则通过其头部中的16位的端口号(port number)字段来区分上层应用程序。
帧通过上述分用步骤后,最终将封装前的原始数据送至目标服务(图1-7中的ARP服务、RARP服务、ICMP服务或者应用程序)。