1.数据链路层
数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输。不同的物理网络具有不同的电气特性,网络驱动程序隐藏了这些细节,为上层协议提供了一个统一的接口。
数据链路层两个常用的协议分别是ARP协议(Address Resolve Protocol,地址解析协议)和RARP(Reverse Address Resolve Protocol,逆地址解析协议)。它们实现了IP地址和主机物理地址(通常指MAC地址)间的互相转换。
2.网络层
网络层实现数据包的路由和转发。主要有IP协议(Internet Protocol)和ICMP协议(Internet Control Message Protocol).ICMP主要用于检测网络连接,ICMP报文分为两大类:一类是差错控制报文;另一类是查询报文;
3.传输层
传输层为两台主机上的应用程序提供端到端(end to end)的服务。传输层只关心通信的起点和终点,而不在乎中转的过程。传输层协议主要有三个:TCP协议、UDP协议和SCTP协议。SCTP协议是为了在因特网上传输电话信号而设计的,我只知道有这么个东西。
TCP协议(Transmission Control Protocol,传输控制协议)为应用层提供可靠的、面向连接的和基于流(stream)的服务。TCP协议使用超时重传、数据确认等方式来确保数据包被正确地发送到目的端。
UDP协议(User Datagram Protocol,用户数据报协议)提供不可靠、无连接和基于数据报的服务。当传输出错,UDP协议只是简单通知应用程序发送失败。
4.应用层
应用层负责处理应用程序的逻辑。应用层协议很多,例如DNS(Domain Name Service,域名服务)协议提供主机域名到IP地址的转换。应用层协议(或程序)可能跳过传输层直接使用网络层提供的服务,例如OSPF(Open Shortest Path First,开放最短优先)协议,它是一种动态路由更新协议,用于路由器之间的通行,以告知对方各自的路由信息。
5.封装
上层协议通过封装来使用下层协议提供的服务。
当发送端应用程序使用send(或者write)函数向一个TCP连接写入数据时,内核中的TCP模块首先把这些数据复制到与该连接对应的TCP内核发送缓存区中,然后TCP模块调用IP模块提供的服务,传输的参数包括TCP头部信息和TCP发送缓冲区的数据,即TCP报文段。
经过UDP封装后的数据称为UDP数据报(UDP datagram).UDP无需为应用层数据保存副本,因为它提供的服务是不可靠的。当一个UDP数据报被成功发送后,UDP内核缓冲区中的该数据报就被丢弃了。如果需要重新发送这个数据报,则应用程序需要重新从用户空间将该数据报拷贝到UDP内核发送缓冲区。
经过IP封装后的数据称为IP数据报(IP datagram).
经过数据链路层封装的数据称为帧(frame)。例如以太网上传输的是以太帧(ethernet frame)。以太网帧封装如下,则除了数据部分,其它部分固定18字节。
6.分用
当帧到达目的主机时,将沿着协议栈自底向上依次传递。各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序。这个过程称为分用(demultiplexing)。