一、TCP/IP协议群基础知识
从字面上来将TCP/IP协议,很多人会认识其主要由TCP、IP协议构成。具体来说IP或ICMP、TCP或UDP、TELNET或FTP、以及HTTP等都属由TCP/IP的协议。他们与TCP或IP的关系密切,是互联网不可缺少的组成部分。
二、TCP/IP协议群的分层模型
1、硬件(物理层)
TCP/IP协议中最底层的是负责数据传输的硬件。
2、网卡层(数据链路层)
数据链路层实现了网卡接口的网络驱动程序,以处理数据再物理媒介(比如以太网、令牌环等)上的传输。
数据链路层常用的两个协议是ARP(地址解析协议)和RARP(逆地址解析协议),它们实现了IP地址和机器物理地址(通常是MAC地址,以太网地址、令牌环和802.11无线网络都是用MAC地址)之间的相互转换。
网络层是使用IP地址来寻址一台机器,而数据链路层使用物理地址来寻址一台机器,因此网络必须先将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供的服务,这就是ARP协议的作用。RARP协议仅用于网络上某些无盘工作站。
3、互联网层(网络层)
网络层实现数据包的选路和转发。WAN(广域网)通常使用众多的分级的路由器来连接分散的主机或LAN(局域网),因此,通信的两台主机不是直接相连的,而是通过多个中间节点(路由器)连接的。**网络层的任务就是选择这些中间节点,以确定两台主机之间的通信路径。**同时,网络层对上层协议隐藏了网路拓扑连接的细节,使得再传输层和网络应用程序看来,通信的双方是相互连接的。
网络层的主要协议是IP协议(因特网协议)和ICMP协议(因特网控制报文协议),而IP协议是网络层的核心,其主要的作用是通过数据包的目的IP地址来决定如何投递它,如果未能找到目的地址会因为发送失败而被丢弃。ICMP协议是IP协议的一个补充,主要用于检测网络连接,如果数据包发送途中发生异常无法到达对端目标地址的时候,就会给发送端发送一个发生异常的通知。
4、传输层
传输层为两台主机上的应用程序提供端到端(end to end)的通信。与网络层使用的逐级通信方式不同,传输层只会关注通信的起事端和目的端,而不在乎数据报的中转过程。
传输层的主要协议有三个:TCP协议(传输控制协议)、UDP协议(用户数据包协议)、SCTP协议(流控制传输协议)。其中TCP协议和UDP协议是最为常见的传输层协议,SCTP协议是一种相对较新的传输层协议,他是为了再因特网上传输电话信号而设计的。
TCP协议是一种为传输层提供可靠的、面向连接的和基于流的服务,其使用超时重传、数据确认等方式来确保数据包被正确的发送至目的端,因此TCP服务是可靠的。使用TCP协议的双方必须 先建立TCP连接,并在内核为该连接维持一些必要的数据结构。
UDP协议是一种为应用层提供不可靠、无连接和基于数据报的服务。UDP协议无法保证数据从发送端正确的发送到目的端,如果数据发送过程出现异常,UDP协议只会简单的通知应用程序发送失败。使用UDP协议通常需要自己处理数据确认、超时重传等逻辑。UDP协议是无连接的,所以通信双方不会保持一个长久的联系,每次发送数据都需要明确指定接收端的地址。
5、应用层(会话层以上的分层)
应用层负责处理应用程序的逻辑。数据链路层、网络层和传输层负责处理网络细节,所以他们都需要在内核中进行实现。
应用层协议有很多例如:ping、DNS、telnet、OSPF等等,其中值得注意的是 ping是应用程序而不是协议,他是基于ICMP协议的调式网络环境的工具。
三、数据的封装和分用
1、封装
上层协议是通过封装实现上、下层协议之间相互提供服务的。应用程序在发送到物理网络上之前,将沿着协议栈从上往下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时还包含有尾部信息),以实现该层的功能。
2、分用
当帧达到目的主机是,将沿着协议栈自底向上依次传递,各层协议依次处理帧中本层负责的头部数据,以获取所需要的信息,并最终将处理后的帧交给目标应用程序。这个过程称为分用,其主要依靠的是头部信息中的类型字段实现的。
【注】:文中图片均剪切自《图解TCP/IP(第五版)》、《Linux高性能服务器编程》