目录:
TCP/IP 协议分层
IP 地址
域名系统
封装
最大传输单元 MTU
最大报文段长度 MSS
一 分层
TCP/IP通常被认为是一个四层协议系统,每一层负责不同的功能 。
TCP / IP协议族是一组不同的协议组合在一起构成的协议族。尽管通常称该协议族为TCP / IP,但TCP和IP只是其中的两种协议而已。
1 链路层
有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
在TCP / IP协议族中,链路层主要有三个目的:
(1)为IP模块发送和接收IP数据报;
(2)为ARP模块发送ARP请求和接收 ARP应答;
(3)为RARP发送RARP请求和接收RARP应答。
2 网络层
有时也称作互联网层,处理分组在网络中的活动,例如分组的选路,提供点到点的服务。在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。
网络层IP提供的是一种不可靠的服务。也就是说,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。
3 传输层
在TCP / IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和 UDP(用户数据报协议),二者都使用IP作为网络层协议。
TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。
局域网内两台 FTP 主机通信所用到的协议
应用程序通常是一个用户进程,而下三层则一般在(操作系统)内核中执行。
网络层和运输层之间的区别不那么明显。为什么要把它们划分成两个不同的层次呢?为了理解这一点,我们必须把视野从单个网络扩展到一组网络。
构造互连网最简单的方法是把两个或多个网络通过路由器进行连接。路由器的好处是为不同类型的物理网络提供连接:以太网、令牌环网、点对点的链接和FDDI(光纤分布式数据接口)等等。
我们可以划分出端系统(End system)(两边的两台主机)和中间系统(Intermediate system)(中间的路由器)。应用层和运输层使用端到端(End - to - end)协议。在图中,只有端系统需要这两层协议。但是,网络层提供的却是逐跳(Hop - by - hop)协议,两个端系统和每个中间系统都要使用它。
一个以太网和一个令牌环网,通过一个路由器互相连接。以太网中的任何主机都可以与令牌环网中的任何主机进行通信。一个路由器具有两个或多个网络接口层(因为它连接了两个或多个网络)。
TCP / IP实现也允许一个多接口主机来担当路由器的功能,但是主机为此必须进行特殊的配置。在这种情况下,我们既可以称该系统为主机(当它运行某一应用程序时,如FTP或Telnet),也可以称之为路由器(当它把分组从一个网络转发到另一个网络时)。连接网络的另一个途径是使用网桥。网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网络进行互连。
二 IP 地址
互联网上的每个接口必须有一个唯一的Internet地址(也称作IP地址),长32bit。
32位的地址通常写成四个十进制的数,其中每个整数对应一个字节。这种表示方法称作“点分十进制表示法(Dotted decimal notation)”。
区分各类地址的最简单方法是看它的第一个十进制整数。
多接口主机具有多个IP地址,其中每个接口都对应一个IP地址。
三 域名系统
域名系统(DNS)是一个分布的数据库,由它来提供IP地址和主机名之间的映射信息。
尽管通过IP地址可以识别主机上的网络接口,进而访问主机,但是人们最喜欢使用的还是主机名。
现在,我们必须理解,任何应用程序都可以调用一个标准的库函数来查看给定名字的主机的IP地址。类似地,系统还提供一个逆函数—给定主机的IP地址,查看它所对应的主机名。大多数使用主机名作为参数的应用程序也可以把 IP地址作为参数。
四 封装
当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息)。
TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCPsegment)。
IP传给网络接口层的数据单元称作IP数据报(IP datagram)。
通过以太网传输的比特流称作帧(Frame )。
以太网数据帧的物理特性是其长度必须在46~1500字节之间。
封装TCP的以太网帧格式
UDP数据与TCP数据基本一致。唯一的不同是UDP传给IP的信息单元称作UDP数据报(UDP datagram),而且UDP的首部长为8字节 。
分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用(Demultiplexing)。
端口号用来标识互相通信的应用程序。服务器使用知名端口号,而客户使用临时设定的端口号。例如,对于每个TCP/IP实现来说, FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP (简单文件传送协议)服务器的UDP端口号都是69。
以太网和IEEE 802 IP数据报封装
CRC字段用于帧内后续字节差错的循环冗余码检验(检验和)。
802.3标准定义的帧和以太网的帧都有最小长度要求。802.3规定数据部分必须至少为38字节,以太网则要求最少要有46字节。为了保证这一点,必须在不足的空间插入填充(pad)字节。
五 最大传输单元 MTU
以太网和802.3对传入的IP数据报长度都有一个限制,其最大值分别是1500和1492字节。链路层的这个特性称作MTU,最大传输单元。不同类型的网络大多数都有一个上限。MTU越大,通信效率越高而传输延迟增大。
如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于MTU,然后再进行传输。接收段收到分片以后在IP层进行重组。
注意:如果在传输过程中,哪怕被分片的其中一片丢失,也要重传所有的分片。因此,如果能够将传给IP层的数据段长度限制,就可以避免IP层的分片。这就是下面要说的TCP分段,在传输层就把数据段长度进行限制(小于等于最大报文段长度MSS)就可以避免被IP层分片,而UDP协议无法进行分段。
路径MTU
当在同一个网络上的两台主机互相进行通信时,该网络的MTU是非常重要的。但是如果两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的MTU。重要的不是两台主机所在网络的MTU的值,重要的是两台通信主机路径中的最小MTU。它被称作路径MTU。
两台主机之间的路径 MTU不一定是个常数。它取决于当时所选择的路由。而选路不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此路径MTU在两个方向上不一定是一致的。
六 最大报文段长度
MSS 表示TCP传往另一端的最大块数据的长度。当一个连接建立时,连接的双方都要通告各自的 MSS。
一般说来,如果没有分段发生,MSS还是越大越好。报文段越大允许每个报文段传送的数据就越多,相对 IP和TCP首部有更高的网络利用率。
MSS 值一般设置为外出接口上的 MTU长度减去固定的IP首部和TCP首部长度。对于一个以太网,MTU值一般为1500字节,减去TCP首部的20字节和IP首部的20字节, MSS值可达1460字节。如果目的 IP地址为“非本地的”, MTU通常为576,MSS通常的默认值为 (576-20-20=)536。
注意区分:分片和分段
分片是由于链路层MTU的限制,在IP层作用的。一个分片丢失,重传所有分片。
分段是由于传输层TCP协议MSS的限制,在传输层作用的。一个分段丢失,只需重传丢失的分段。
一般来说,MSS = MTU - IP首部长度 - TCP首部长度。