主要根据课本《高级计算机网络》李向丽整理。
1.1 TCP/IP层次结构
应用协议:主要包括HTTP(超文本传输协议)、SMTP(简单邮件传送协议)、FTP(文件传输协议)、TELNET(远程登录协议)、SNMP(简单网络管理协议)。
传输协议:主要包括TCP(传输控制协议)、UDP(用户数据报协议)。
网际互联协议:主要包括IP(Internet协议)、ARP(地址解析协议)、RARP(逆地址解析协议)、ICMP(因特网控制报文协议)、IGMP(因特网组管理协议)。
路由控制协议:TCP/IP体系中的链路层协议,分为内部网关协议和域间路由协议。内部网关协议包括RIP(路由信息协议)、IGRP(内部网关路由协议)、EIGRP(增强内部网关路由协议)、OSPF(开放式最短路径优先协议)、IS-IS(中间系统到中间系统路由协议)。域间路由协议包括BGP(边界网关协议)。
1.2 TCP/IP工作原理
1.2.1 协议之间的关系
每个应用层协议都是为了解决某一类应用问题而定义的,各种应用进程就是通过不同的应用层协议来使用网络所提供的服务。
TCP和UDP是两个传输层协议。一般地,应用进程可以选择使用TCP或者UDP协议。如果应用层协议要求传输层提供可靠的服务,则应该选择TCP协议;否则,如果应用层协议要求较高的数据传输速率,但是可以容忍一定的数据丢失,则可以选择UDP协议。TCP协议的数据单元称为TCP报文段或简称TCP段(TCPsegment),UDP协议的数据单元称为UDP数据报(UDPdatagram)。
IP协议是网际层上的一个主要协议。TCP和UDP协议都可以直接使用IP协议所提供的服务。IP协议的数据传送单位称为IP数据报或IP分组。TCP报文段或UDP数据报都可以封装在IP数据报中,以便在互联网上传输。除IP协议外,网际层还有其他协议,例如ICMP协议用于报告差错和其他重要信息;IGMP是多播组管理协议,是一个与多播有关的协议;ARP(地址解析协议)和RARP(逆向地址解析协议)用于提供IP地址与物理地址的映射功能。IP数据报可以在不同的物理网络上进行传送。通过以太网传送的数据单元称为以太网帧,或简称为帧(frame)。
1.2.2 封装与拆封
在发送方(也称为源主机),当应用程序使用TCP或UDP传送用户数据时,将用户数据送入TCP/IP协议栈,然后自上而下地逐个通过每一层,直到被当做一串比特流送入网络。其中每一层对收到的数据都需要增加一些首部信息,有时还需要增加尾部信息。这些操作过程称为封装,如图所示。
TCP、UDP、ICMP和IGMP等协议都要使用IP数据报传送数据,所以必须在IP数据报的首部加入某种标识,以说明是哪个协议的数据封装到了IP数据报中。IP数据报首部定义的一个8位的“协议”宇段就是为此目的而设置的。协议宇段的值为1表示ICMP,为2表示IGMP,为6表示TCP,为17表示UDP。
类似地,许多应用进程使用TCP或UDP传送数据,则需要在TCP段或UDP数据报首部定义一个应用程序标识符。TCP和UDP都使用一个16位的端口号来标识不同的应用程序,TCP和UDP把“源端口号”和“目的端口号”分别存人TCP段首部和UDP数据报首部。网络接口分别发送和接收IP、ARP、RARP的数据,同理,也必须在以太网(假定物理网络是一个以太网)的首部加入一个字段,用来说明是哪个协议的数据。为此,以太网帧首部定义了一个16位的“类型”字段。
当接收方(也称目的主机)收到一个以太网帧时,数据就开始在协议栈中自下而上传送。各层协议利用报文首部所携带的协议控制信息做相应的处理,然后去掉各层协议数据单元的首部,将封装的数据交给上层协议。每层协议都要检查协议首部中的协议标识,以确定让哪一个协议接收数据,这个过程称为拆封。下图说明了以太网数据帧的拆封过程。
源主机封包:
1、 应用层:源主机将数据向下传输给传输层;
2、 传输层:将数据分组,加上TCP首部形成TCP数据段,向下传输给网络层;
3、 网络层:给TCP数据段加上源主机、目的主机IP首部,生成IP数据包,向下传输给链路层;
4、 链路层:链路层在其MAC帧的数据部分装上IP数据包,再加上源主机,目的主机的MAC地址和帧头,并根据其目的的MAC地址,将MAC帧发往目的主机或IP路由器;
目的主机拆包:
1、 链路层:在目的主机,链路层将MAC帧的帧头去掉,并将IP数据包向上传递给网络层;
2、 网路层:检查IP报头,如果报头中校验和计算结果不一致,则丢弃该IP数据包,若校验和计算结果一致,则去掉IP报头,将TCP数据段向上传递给传输层;
3、 传输层:检查顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据,若正确,则向源主机发送确认信息,若不正确或丢包,则向源主机要求重发信息;
4、 应用层:目的主机,传输层去掉TCP报头,将排好顺序的分组组成应用数据流送给应用程序,这样目的主机接收到的来自源主机的字节流,就像是直接接收来自源主机的字节流一样。
总结
数据在每层有不同的格式,从上到下依次叫数据段,数据包,数据帧,数据从应用层通过协议栈向下传递,每经过一层加上对应层协议报头,最后封装成"数据帧"发送到传输介质上,到达路由器或者目的主机去掉头部,交付给上层需要者。这一过程称为封装,传输,分离,分用。
数据段:TCP 数据流中的信息;
数据包:IP 和 UDP 等网络层以上的分层中包的单位;
数据帧:数据链路层中包的单位;
1.2.3 两个端系统的TCP/IP通信
两个端系统的通信会涉及不同层的协议。如下图所示,主机A和主机B在同一个局域网(以太网)上,两台主机都运行实现FTP协议的应用进程,它们的通信过程所涉及到的主要协议都标识在下图中。
主机A主机B大多数网络应用程序都设计成客户—服务器方式,客户是服务请求方,服务器是服务提供方,服务器为客户提供某种服务。例如,FTP服务器允许客户访问FTP服务器所在主机上的文件,WWW服务器允许客户(浏览器)访问WWW服务器所在主机上的网页,等等。在两个端系统的同一层上,双方都有对应的一个或多个协议进行通信。例如传输层利用TCP或UDP等进行通信,网际层利用IP进行通信。
上图局域网上运行FTP的两台主机从前面的讲述可知,应用进程的数据要经过主机A(源主机)自上而下的封装,然后在网络中传输,最后在主机B(目的主机)经过自下而上的拆封这样复杂的处理过程,才能到达目的主机的应用进程。但是,对用户来说,这些复杂的处理过程都屏蔽掉了,好像是主机A的应用进程直接把数据交给了主机B的应用进程。同理,我们可以认为,任何两个对等层(peerlayer),例如传输层、网际层、网络接口层之间的通信,如同上图中标识的一样,好像是将数据通过水平虚线直接传递给对方,这就是所谓的对等层之间的通信。实际上,协议就是在两个对等层之间传递数据时的各种规定。由此可以这样认为:实际通信是按垂直方向进行的,层与层之间经过封装和拆封这样的操作实现物理通信。但是逻辑上,却是在水平方向上利用协议进行的对等层通信。在协议的控制下,对等层的通信使得本层能够向上层提供服务。为了实现本层协议,还需要使用下面一层所提供的服务。
如果两个端系统不在同一个网络上,例如它们分别是在路由器连接起来的两个不同的网络上,主机A在以太网上,主机B在令牌环网上,通过一个路由器使这两个网络连接起来。以太网上的任何主机都可以与令牌环网上的任何主机进行通信,如下图所示。