与OSI分层模型不同,TCP/IP协议族分为四层。
自下而上分别为数据链路层
,网络层
,传输层
,应用层
。
数据链路层
作用:
该层实现了网卡接口的网络驱动程序。驱动程序隐藏了不同物理网卡设备的不同电气特性,为上层协议提供统一接口。
该层协议:
ARP协议和RARP协议。他们的作用是实现IP地址与物理地址(通常是MAC地址)之间的相互转换。网络层用IP定位(寻址)一台机器,而数据链路层用MAC地址寻址一台机器。因此网络层必须先将目标机器的IP地址转化为物理地址,才能够使用数据链路层提供的服务。这就是ARP协议的用途。
ARP 协议(Adress Resolve Protocol, 地址解析协议)
RARP协议(Reverse Address Resolve Protocol)
网络层
作用:
实现数据包的路由(route)和转发。
该层协议:
IP协议和ICMP协议。
IP协议主要是用来选址。根据数据包的目的IP地址,IP协议来决定将它投递至何处,若不能直接投递至目标主机,则寻找一个合适的下一跳(next hop)路由器,并将数据包交付给路由器转发。多次重复此过程直至到达目标主机。
ICMP(Internet Control Message Protocol,因特网控制报文协议)是IP协议的重要补充,主要用于检测网络连接,报文格式如图:
8位类型字段主要用于区分报文类型。它将ICMP报文分为两大类:
-
差错报文
此类报文用来回应网络错误,如目标不可达(类型为3)和重定向(类型为5)
-
查询报文
此类报文用来查询网络信息。如ping程序就是用ICMP报文查看目标是否可达(类型为8)。
8位代码字段可能还被用于进一步细分不同条件。
16位校验和用于对整个报文进行CRC校验。
ICMP协议严格来讲并非网络层协议,因为它使用同一层的IP协议提供的服务。一般来讲上层协议使用下层协议提供的服务,使用网络层协议提供的服务,可以算是网络层的上层协议了……
传输层
作用:
为两台主机
上的应用程序
提供端对端
的服务。不关心中途流转途径。
这里的应用程序
其实指的是进程
。进程
便是应用程序
这一概念的实例化。
该层协议:
传输层协议主要有三个:TCP协议
,UDP协议
,SCTP协议
TCP协议(Transmission Control Protocol 传输控制协议)为应用层
提供可靠的、面向连接的和基于流(stream)的服务。
- 可靠:利用超时重传,拥塞控制,数据确认等方式来确保数据包被正确地传到目的端。
- 面向连接:要做到可靠性的要求,数据传输双方必须先建立连接。并在内核中为该连接维持一定的数据结构,比如连接的状态,读写缓冲区,以及诸多缓定时器。当通信结束时,必须关闭连接以释放内核中的相关数据。
- 基于流:基于流的数据没有长度限制,它源源不断地从一端流向另一端。发送端可以逐字节向数据流中中写入数据,接收端也可以逐字节将它们取出。
UDP协议(User Datagram Protocol,用户数据报协议)则是提供不可靠,无连接,基于数据报的服务。
- 不可靠:数据丢了或是错了,UDP协议只是通知应用程序发送失败。所以使用UDP协议的app要自己控制数据确认超时重传等逻辑
- 无连接:不同于TCP,不需要连接,也就不需要将数据拷贝一份放在所谓的发送数据缓冲区。因此要指定目标地址。
- 基于数据报:相对于流而言,每个udp数据报都有一个长度,超过此长度的数据会被截断。
应用层
作用:
处理应用程序的逻辑。
数据链路层、网络层、传输层负责网络通信的细节,因此必须稳定而高效地运行,因此他们都在内核空间中实现。
而应用层则在用户空间实现,因为它负责许多的逻辑,例如文件传输、名称查询、网络管理等。这些逻辑要是在内核中实现,必然会使得内核变得十分臃肿。
该层协议:
应用层协议较多
- ping:应用程序而非协议,利用ICMP协议检测网络连接,是调试网络的工具。
- telnet:一种远程登录协议
- OSPF:(Open Shortest Path First,开放最短路径优先),是一种动态路由更新协议,用于路由器之间的通信,以便告知对方各自的路由信息。
- DNS(Domain Name Service,域名服务):该协议提供机器域名到IP地址的转换。
应用层协议(或程序)可能直接跳过传输层协议而直接使用网络层的协议。比如ping程序和OSPF协议。
应用层协议(或程序)通常既可使用TCP服务,又可使用UDP服务,如DNS。
可以查看/etc/services
文件查找所有知名的应用层协议,以及他们都能使用哪些传输层服务。