引言
从这篇开始,将详细地介绍TCP/IP协议。但是“纸上得来终觉浅,欲知此事须躬行”,所以在讲解理论的同时,将结合wireshark进行抓包分析,通过实际的例子进行分析,才能更好地理解协议栈的内容。
1.ISO/OSI七层网络模型
OSI(Open System Interconnection)开放系统互联模型是由ISO(International Organization for Standardization)国际标准化组织定义的网络分层模型,共分为七层,如下图所示:
各层的作用如下。
物理层(Physical Layer):物理层定义了所有电子及物理设备的规范,为上层的传输撮合了一个物理介质,本层中的数据传输的单位为比特(bit).属于本层定义的规范有EIA/TIA RS-232,EIA/TIA RS-449,V.35,RJ-45等,实际使用中的设备如网卡等属于本层。
数据链路层(Data Link Layer):在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错地传输,并进行各电路上的动作系列。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址,数据的成帧,流量控制,数据的检错,重发等。
在数据链路层中数据的单位为帧(Frame).属于本层定义的规范有SDLC,HDLC,PPP,STP,帧中断等,实际使用中的设备如switch交换机属于本层。
网络层(Network Layer):在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点,确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息,源站点和目的站点地址。需要注意的是,IP只是第三层问题的一部分,此外还有一些路由协议和地址解析协议(ARP).有关路由的一切事情都是在这一层处理。地址解析和路由是第3层的重要目的,此外还可以实现拥塞控制、网际互连等功能。本层中的数据传输单位为数据包(packet)(This packet can be either an IP datagram or a fragment of an IP datagram).属于本层定义的规范有IP,IPX,RIP,OSPF,ICMP,IGMP等。实际使用中的设备如路由器属于本层。
传输层(Transport Layer):第4层的数据单元也称作数据包(packets).但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段(segments)而UDP协议的数据单元称为数据报(datagrams).这个层负责获取全部信息,因此,它必须跟踪数据单元碎片、乱序到达的数据包和其它在传输过程中可能发生的危险。第4层为上层提供端到端的透明的、可靠的数据传输服务。传输层的协议有TCP,UDP,SPX等。
会话层(Session Layer):管理主机之间会话过程,包括会话建立、终止和会话过程中的管理。这一层的数据传送单位称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制,如服务器验证用户登录便是由会话层完成的。
表示层(Presentation Layer):表示层对网络传输的数据进行交换,使得多个主机之间传送的信息能够互相理解,包括数据的压缩、加密、格式转换等。
应用层(Application Layer):应用层与应用程序界面沟通,以达到展示给用户的目的。在此常见的协定有:HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
2.TCP/IP协议五层模型
首先声明一下,在《TCP/IP详解 卷一》上说TCP/IP网络协议栈分为应用层、传输层、网络层和链路层这四层,但是我觉得应该把物理层也加进去,Wireshark上所抓的包也是分为5层来表示的,后面会讲到。
TCP/IP协议的五层模型如下所示:
其中传输层及其以下的机制由内核提供,应用层由用户进程提供,应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示:
不同的协议层对数据包有不同的称呼,在传输层叫做段(segment,UDP协议则叫datagram),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器.
1)其实在链路层之下还有物理层,指的是电信号的传递方式,比如现在以太网通用的网线(双绞线),早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)是工作在物理层的网络设备,用于双绞线的连接和信号中继。
2)链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(就是说从网线上检测到什么信号作为新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧(比如10M以太网和百M以太网之间,以太网和令牌环网之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉网络层和链路层两层首部并重新封装。IP协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应用程序中提供支持。
3)网络层负责点到点(point-to-point)的传输(这里的点是指主机或路由器),而传输层负责端到端(end-to-end)的传输(这里的端是指源主机和目的目的主机).传输层可选择TCP或UDP协议。TCP是一种面向连接的、可靠的协议,有点像打电话,双方拿起电话互通身份之后就建立了连接,然后说话就行了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。也就是说TCP传输需要首先建立连接,之后由TCP协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用程序收到的总是可靠的数据流,通讯之后关闭连接。UDP协议不面向连接,也不保证可靠性,有点像寄信,写好信放到邮筒里,既不能保证信件在邮递过程中不会丢失,也不能保证信件是按顺序寄到目的地的。使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作。
目的主机收到数据包后,如何经过各层协议最后到达应用呢?整个过程如下:
3.OSI七层模型与TCP/IP五层模型的对比
OSI模型是一个参考标准,解释协议之间应该如何相互作用。而TCP/IP协议是美国国防部发明的,是让互联风成为了目前这个样子的标准之一。OSI模型中没有清楚地描绘TCP/IPC协议,但是在解释TCP/IPC协议时很容易联想到OSI模型。两者的主要区别如下:
1)TCP/IP协议中的应用层处理开放式系统互联模型中的第五层、第六层和第七层的功能。
2)TCP/IP协议中的传输层并不能总是保证在传输层可靠地传输数据包,而OSI模型可以做到。TCP/IP协议还提供UDP(用户数据报协议)的选择,UDP不能保证可靠的数据包传输。