IP协议学习总结
IP协议学习总结
一、IP协议来源
Internet上连接的所有计算机,从大型机到微型计算机都是以独立的身份出现,我们称它为主机。为了实现各主机间的通信,每台主机都必须有一个唯一的网络地址。就好像每一个住宅都有唯一的门牌一样,才不至于在传输资料时出现混乱。
Internet的网络地址是指连入Internet网络的计算机的地址编号。所以,在Internet网络中,网络地址唯一地标识一台计算机。
我们都已经知道,Internet是由无数台计算机互相连接而成的。而我们要确认网络上的每一台计算机,靠的就是能唯一标识该计算机的网络地址,这个地址就叫做IP(Internet Protocol的简写)地址,即用Internet协议语言表示的地址。
二、IP协议功能
(1)寻址和路由;(根据对方的IP地址,寻找最佳路径传输信息);
(2)传递服务:
① 不可靠(IP协议只是尽自己最大努力去传输数据包),可靠性由上层协议提供(TCP协议); ② 无连接(事先不建立会话),不维护任何关于后续数据报的信息;
(3)数据包的分片和重组。
三、IP地址分类
在Internet里,IP地址是一个32位的二进制地址,为了便于记忆,将它们分为4组,每组8位,由小数点分开,用四个字节来表示,而且,用点分开的每个字节的数值范围是0~255,如202.116.0.1,这种书写方法叫做点数表示法。
3.1.IP地址的类别
类别 | 网段 | 区分 | 地址范围 |
A | 0~127 | 二进制首位为0 | 1.0.0.1~127.255.255.254 |
B | 128~191 | 二进制首位为10 | 172.16.0.0~172.31.255.254 |
C | 192~223 | 二进制首位为110 | 192.168.0.1~192.168.255.254 |
D | 224~239 | 二进制首位为1110 | 224.0.0.0~239.255.255.254 |
E | 240~255 | 二进制首位为1111 | 240.0.0.0~255.255.255.255 |
(1) A类地址,一个A类地址是由一个字节的网络地址和三个字节的主机地址组成,网络地址的最高位必须是“0”
(2) B类地址,一个B类地址是由两个字节的网络地址和两个字节的主机地址组成,网络地址的最高位必须是“10”
(3) C类地址,一个C类地址是由三个字节的网络地址和一个字节的主机地址组成,网络地址的最高位必须是“110”
(4) D类地址,不区分网络地址和主机地址,D类地址是一种组播地址,D类地址的第一个字节以1110开始。目前D类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
(5) E类地址,不区分网络地址和主机地址,E类地址是保留地址用于以后使用。E类地址的第一个字节以1111开始。
3.2.特殊IP地址
(1) 0.0.0.0
严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。
(2) 广播地址(255.255.255.255)
限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机。如果翻译成人类的语言,应该是这样:“这个房间里的所有人都注意了!”这个地址不能被路由器转发。
(3) 环回地址(127.0.0.1)
本机地址,主要用于测试。用汉语表示,就是“我自己”。在Windows系统中,这个地址有一个别名“Localhost”。寻址这样一个地址,是不能把它发到网络接口的。除非出错,否则在传输介质上永远不应该出现目的地址为“127.0.0.1”的数据包。
(4) 165.254.x.x
如果你的主机使用了DHCP功能自动获得一个IP地址,那么当你的DHCP服务器发生故障,或响应时间太长而超出了一个系统规定的时间,Wingdows系统会为你分配这样一个地址。
(5) 组播地址
组播地址,从224.0.0.0到239.255.255.254都是这样的地址。224.0.0.1特指所有主机, 224.0.0.2特指所有路由器。这样的地址多用于一些特定的程序以及多媒体程序。如果你的主机开启了IRDP(Internet路由发现协议,使用组播功能)功能,那么你的主机路由表中应该有这样一条路由。
(6) 私有地址
A类地址的私有地址是:10.0.0.0~10.255.255.255
B类地址的私有地址是:172.16.0.0~172.31.255.255.255
C类地址的私有地址是:192.168.0.0~192.168.255.255
这些地址不会被Internet分配,他们再Internet上也不会被路由,虽然它们不能直接和Internet网连接,但通过技术手段仍旧可以和 Internet通讯(NAT技术)。
3.3.子网掩码
子网掩码(subnet mask)又叫网络掩码,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
对于A类地址来说,默认的子网掩码是255.0.0.0;
对于B类地址来说默认的子网掩码是255.255.0.0;
对于C类地址来说默认的子网掩码是255.255.255.0。
四、IP报文格式
版本号:4个bit,用来标识IP版本号。这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6。目前使用的IP协议版本号是4。
首部长度:4个bit。标识包括选项在内的IP头部字段的长度。
服务类型:8个bit。服务类型字段被划分成两个子字段:3bit的优先级字段和4bit TOS字段,最后一位置为0。4bit的TOS分别代表:最小时延,最大吞吐量,最高可靠性和最小花费。4bit中只能将其中一个bit位置1。如果4个bit均为0,则代表一般服务。
总长度:16个bit。接收者用IP数据报总长度减去IP报头长度就可以确定数据包数据有效负荷的大小。IP数据报最长可达65535字节。
标识:16个bit。唯一的标识主机发送的每一份数据报。接收方根据分片中的标识字段是否相同来判断这些分片是否是同一个数据报的分片,从而进行分片的重组。通常每发送一份报文它的值就会加1。
标志:3个bit。用于标识数据报是否分片。第1位没有使用,第2位是不分段(DF)位。当DF位被设置为1时,表示路由器不能对数据包进行分段处理。如果数据包由于不能分段而未能被转发,那么路由器将丢弃该数据包并向源发送ICMP不可达。第3位是分段(MF)位。当路由器对数据包进行分段时,除了最后一个分段的MF位被设置为0外,其他的分段的MF位均设置为1,以便接收者直到收到MF位为0的分片为止。
片偏移:13个bit。在接收方进行数据报重组时用来标识分片的顺序。用于指明分段起始点相对于报头起始点的偏移量。由于分段到达时可能错序,所以位偏移字段可以使接收者按照正确的顺序重组数据包。当数据包的长度超过它所要去的那个数据链路的MTU时,路由器要将它分片。数据包中的数据将被分成小片,每一片被封装在独立的数据包中。接收端使用标识符,分段偏移以及标记域的MF位来进行重组。
生存时间:8个bit。TTL域防止丢失的数据包在无休止的传播。该域包含一个8位整数,此数由产生数据包的主机设定。TTL值设置了数据报可以经过的最多的路由器数。TTL的初始值由源主机设置(通常为32或64),每经过一个处理它的路由器,TTL值减1。如果一台路由器将TTL减至0,它将丢弃该数据包并发送一个ICMP超时消息给数据包的源地址。
协议:8个bit。用来标识是哪个协议向IP传送数据。ICMP为1,IGMP为2,TCP为6,UDP为17,GRE为47,ESP为50。
首部检验和:根据IP首部计算的校验和码。
源地址:IP报文发送端的IP地址
目的地址:IP报文接收端的IP地址
选项:是数据报中的一个可变长的可选信息。选项字段以32bit为界,不足时插入值为0的填充字节。保证IP首部始终是32bit的整数倍。
五、IP报文抓包分析
六、IP分片偏移
6.1.分片原因
以太网的MTU是1500。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。
6.2.不同传输层协议的分片
(1)TCP协议
对于TCP协议来说尽量避免分片,因为当在IP层进行了分片后,如果其中的某片数据丢失,则需对整个数据报进行重传。因为IP层本身没有超时重传机制,当来自TCP报文段的某一片丢失后,TCP在超时后重发整个TCP报文段,该报文段对应于一份IP数据报,没有办法只重传数据报中的一个数据报片。
TCP协议可以避免分片,避免的机制是首先,TCP在建立连接时会进行3次握手,而在这3次握手中,客户端和服务端通常会协商一个值,那就是MSS(最长报文大小),用来表示本段所能接收的最大长度的报文段。MSS=MTU-TCP首部大小-IP首部大小,MTU值通过查询链路层得知。
当两端确认好MSS后进行通信,TCP层往IP层传输数据时,如果TCP层缓冲区的大小大于MSS,那么TCP层都会将其中的数据分组进行传输,这样就避免了在IP层进行分片。
(2)UDP协议
对于UDP而言,由于UDP是不需要保证可靠性的,没有超时和重传机制,这使得UDP很容易导致IP分片。
UDP协议分片会根据IP报文字段中的标识字段、标志字段、片偏移字段来解决。
对于每份IP数据报来说,其16位标识字段都包含一个唯一值。在数据报被分片时,这个值同时被复制到每个片中。用来识别分片的数据是否为同一个数据报文。
在IP首部中,我们看到有一个占了3位的标志字段,其中第1位是R作为保留字段未用;第2位分段是DF用来表示一个数据报是否允许在IP层被分片,DF=0时允许分片,DF=1时不允许分片;而第3位是MF更多分片字段,则是当数据报被分片时,让接收端知道在什么时候完成所有的分片组装,除了最后一片外,其他每个组成数据报的片都要把该比特置1。
而如果将其中的分段标志比特位置1,表示不允许IP层对数据报进行分片。例如当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志比特,路由器会丢弃数据报并发送一个ICMP差错报文(“需要进行分片但设置了不分片比特”)。
IP首部的13位片偏移字段表示IP分片再整个数据流中的位置,第一个数据报分片的偏移量置为0,而后续的分片偏移量则是根据网络的MTU大小设置,且必须为8的整数倍。
6.3.分片字段
以上图中我们看到把一个报文长度为3800字节的报文分片为三个。他们每一个分片都会含有一个标识(IP地址 + 标识),到达目的地要对其所有的分片进行重新组装;
片偏移计算过程;首部分大体的内容是一样,因为都属于同一个数据报文!
七、IP报文重组
IP报文分片后进行重组,只能在目标主机进行重组。
IP报文分片重组时,采用了一组重组定时器,片重组的控制主要根据数据首部中的标识、标志、偏移字段进行重组。
分片重组策略如下:
(1)第一个分片的偏移值时0
(2)将第一个分片携带的数据长度除以8,结果就是第二个分片的偏移值
(3)将第一个和第二个分片携带数据的总长度除以8,结果就是第二个分片的偏移值
(4)继续以上过程。直到之后分片的MF标志位为0
八、IP报文校验
8.1.IP报文校验和计算方式
(1)为了计算一份数据报的IP检验和,首先需要把检验和字段置为0
(2)对首部中每个16bit进行二进制反码求和(整个首部看成是由一串16bit的字组成)
PS:路由器收到IP报文,然后转发之后,是需要对TTL(Time to Live)字段减一,那么这样的话IP报文校验和数值也需要进行相应改变
8.2.IP报文不对数据校验原因
上层传输层是端到端的协议,进行端到端的校验比进行点到点的校验开销小。
8.3.IP报文对IP首部校验原因
IP首部属于IP层协议的内容,上层协议无法处理。
IP首部的部分字段在点到点的传递过程中是不断变化的,只能在每个中间点重新形成校验数据,在相邻点完成校验。