1. 网际协议IP
IP是一种不可靠的无连接数据报协议,一种尽最大努力交付的服务。尽最大努力意味着IP分组有可能损坏、丢失、失序或延迟到达,并且有可能给网络带来拥塞
IP是分组交换网络使用数据报方式的一种无连接协议。意味着每个数据报被独立处理,且各数据报可能沿着不同的路由传送到终点。如果一个源点向一个终点发送多个数据报,可能不按顺序到达,有些数据报在传输过程可能受到损伤或丢失。IP依靠更高层次的协议解决上述问题
2. 数据报
网络层的分组称为数据报,一个可变长度的分组,包含首部和数据两个部分。首部的长度可以是20~60字节,包含有关路由选择和交付的重要信息。习惯上,TCP/IP都是以4个字节表示首部
版本:4位比特定义IP协议的版本。首部长度:4位比特定义数据报首部的总长度,以4字节为单位计算。服务类型:指明应当如何处理数据报。总长度:16位比特定义了以字节为单位的数据报总长度(首部+数据)。存在原因:有些情况下,封装在一个帧里的不仅仅是数据报,可能附加一些填充。例如,以太网协议对能够封装在一个帧里的数据限制为46~1500字节。当一个IP数据报的长度小于46字节,必须增加一些填充字节才能满足要求。这种情况下,当主机对这个数据报进行拆装时,必须检查总长度字段,确定数据的真正长度和填充字节的长度
标识、标志和分片偏移:用于分片。生存时间:绝大多数用来控制数据报所经过的最大跳数(路由器)。当源主机发送数据报时存入一个数值。这个数值大约是任意两台主机之间的最大路由器数的两倍。每一个处理数据报的路由器都把这个数值递减1。若减1之后值变为0,路由器丢弃数据报。存在原因:因特网中的路由表可能会损坏,这个字段限制数据报的生存时间;源主机想故意限制分组的行程。协议:8位比特定义使用IP服务的高层协议。指明IP数据报必须交付给哪个最终目的协议,因为IP协议对来自不同高层协议的数据进行复用和分用,所以数据报到达最后终点时,使用这个字段值完成分用过程
3. 分片
每个路由器从接收到的数据帧拆解出IP数据报,进行处理,然后封装成另一个帧。接收到的帧格式与长度取决于帧刚刚经过的物理网络使用的协议,而发送出去的帧格式与长度取决于帧将要经过的物理网络使用的协议。不同的物理网络的帧格式与长度是不一样的
3.1 最大传送单元MTU
每个数据链路层协议都有自己的帧格式,格式中有一个字段是”数据字段最大长度”。当数据报被封装程成帧时,数据报的总长度必须小于最大长度,由网络使用的硬件和软件的限制确定
对于不同的物理网络协议,MTU的值是不同的。例如以太网局域网的值是1500字节,FDDI局域网的值是4352字节,PPP的值是296字节。为了使IP协议与物理网络无关,设计者决定让IP数据报的最大长度等于65535字节。如果物理网络的MTU小于这个值,那么数据报需要进行分片。当数据报被分片时,每一个数据报片都有自己的首部,其中大部分的字段是重复的,有些是变化的。如果已经分片的数据报遇到更小MTU的网络,已经分片数据报可再次进行分片
数据报可以被源主机或任何路由器分片,数据报的重装只能在目的主机上进行。一方面分片的数据报可以各走不同的路由,无法控制或保证分片的数据报应当走哪一条路径;另一方面,属于同一个数据报的所有数据报分片最终总是会到达目的主机,逻辑上应当在最后终点进行重装;最后,传输期间进行重装会严重影响效率。
数据报分片时,首部一些必要的部分必须复制到所有分片。选项字段可以被复制,也可不被复制。对数据报进行分片的主机或路由器必须改变三个字段的值:标识、分片偏移和总长度。其余各字段必须被复制,不管是否进行分片,校验和的值总是需要重新计算。只有数据报中的数据是分片的
3.2 与分片有关的字段
与一个数据报的分片与重装有关的字段是:标识、标志和分片偏移
标识:16位比特标识了从源主机发出的一个数据报,与源IP地址的组合必须唯一地确定一个数据报。为了保证唯一性,IP协议使用一个计数器为数据报生成标号,初始值是一个正整数。IP协议每发送一个数据报时,计数器的当前值复制到标识字段,同时计数器的值加1。数据报分片时,标识字段的值复制到所有的分片。所有的分片具有相同的标识号,终点知道所有相同标识号的分片必须组装成一个数据报
标志:3位比特的字段。第一位保留。第二位是不分片位,1表示不能对数据报进行分片,如果无法通过任何可用的物理网络转发数据报,丢弃数据报,并向源主机发送ICMP差错报文;0表示必要时对数据报进行分片。第三位是还有分片位,1表示数据报不是最后的分片;0表示最后的或唯一的分片
分片偏移:13位比特表示分片在整个数据报中的相对位置。数据在原始数据报中的偏移量,8字节为度量单位。因为分片偏移字段的长度只有13位比特,不能超过8191字节。所以数据报进行分片的主机或路由器选择每一个分片的长度时必须使第一个分片的字节数量能够被8整除
所有分片的标识字段都是一样的。另外,除最后一个分片之外,所有分片的标志字段的“还有分片”位均被置为1。如果分片本身再一次进行分片时,分片偏移值永远是相对于原始数据报的。即使各个分片采取不同的路径失序到达,最终的目的主机也能够用收到的分片重装成原始的数据报,使用策略如下:a.第一个分片的分片偏移字段为0 b.把第一个分片的长度除以8,即第二个分片偏移值 c.把第一个和第二个分片的总长度除以8,即第三个分片偏移值 d.继续以上过程,最后一个分片的“还有分片”位值为0
4. 检验和
绝大多数TCP/IP协议采用的差错检测方法称为检验和。检验和能够防止分组在传输期间出现的损坏。检验和是附加在分组上的冗余信息。发送端计算出检验和,把得到的结果与分组一起发送出去。接收端对包括检验和在内的整个分组重复同样的计算
4.1 发送端计算检验和
在发送端,分组首部划分为n位的段。这些段使用反码算术运算相加,得到的和的长度也是n位。然后把这个和取反码得出检验和。操作步骤:分组划分K段,每段的长度都是n位;反码算术运算累加所有段;最终结果取反码得出检验和
4.2 接收端计算检验和
接收端把收到的分组划分为K段,累加所有段,然后把得到的和取反码。若最后结果为0,则接受分组,否则拒绝分组
4.3 IP分组中的校验和
在IP分组中,检验和的实现和上面讨论原理一样。首先,“校验和”字段置为0。然后把整个首部划分为16位的段,再将各个段相加。把结果取反码,并插入到检验和字段。
IP分组中的检验和仅覆盖首部,不包括数据。原因有两个:首先,将数据封装在IP数据报中的所有高层协议,都有一个涉及整个分组的检验和字段。其次,每经过一个路由器,IP数据报的首部需要发生变化,但是数据部分保持不变。如果检验包括数据部分,则每一个路由器必须重复计算整个分组的检验和,意味着需要花费更多的处理时间