1、思科路由器
2、Wireshark(强大的网络协议分析工具)
在R1上做telnet 10.1.1.1 因为TELNET使用TCP协议,而TCP正是封装在IP数据包里的,所以用telnet的过程来分析这个IP报文。
人们都说IP首部是20字节,20字节的。但是很多人不明白这20字节到底是怎么回事,我这个帖子的目的就是通过抓包、分析包来让大家了解这20字节。前面的准备工作都做好了,下面我们就来具体分析一下IP 20字节的首部。
①首先是版本号:4 (相信大家也都听过ipv6,如果是ipv6的话,那么这个地方就是6),这个没什么好说的。②接下来是首部长度字段,这个首部长度是这样规定的:首部长度是指首部占32bit字的数目。一般来说32bit就是4个字节,也就是说,这个首部长度的内容也就是有多少个4字节。按我们图3所示,首部长度是20字节,所以图4中Header Length的内容就是5。当然首部长度不一定就是20,因为首部长度字段一共有8位,所以IP首部最大可达60字节。③8位服务类型在当今来说几乎不怎么用,即使用也不是原来设计那样,所以这里不做介绍。
④16位总长度字段是指整个IP数据报的长度,以字节为单位。因为总长度字段是16位,所以可以传送一个长达65535字节的IP数据报,当然在实际应用中不可能传这样长度的一个报文,因为涉及一个IP包分片的问题。⑤标识字段唯一的标识主机发送的每一份数据报。通常每发送一份数据报这个值就会加1。在数据报分片的时候,标识字段相同的分组会重组装成一个数据报。⑥3位标识和13位的偏移字段都与数据报的分片有关,这里偷下懒,等以后再说。其实说简单了就是:标识字段标识了这个分组后面还有没有分组以及是否分片,而偏移字段则标识了分组的先后顺序问题。
⑦8位的生存时间,虽然是生存时间,但这个字段不是以时间来计数的,一开始设计的时候的确是以时间来计数,后来由于种种原因,就变成了以跳数来计数了。也就是说,这个生存时间字段设置了数据报可以经过的最多路由器数,每经过一个路由器,这个值都要减1。而当TTL值变为0时,路由器就要丢弃这个数据报,返回给发送主机一个ICMP报文。cisco路由器上的traceroute命令就是依靠TTL来实现的。为什么要设计这个TTL值呢,就是为了防止数据报在网络中无休止的传送。⑧协议字段,这个字段的目的是为了区分上层的协议,是TCP?UDP?ICMP?IGMP?这里的值是6,代表上层协议是TCP,而17代表UDP,1代表ICMP。。。⑨首部校验和字段,首部校验和,顾名思义,是对IP首部进行计算的检验和,不对首部后面的数据进行计算。而ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据的校验和。这点IP和他们不同,需要注意一下。⑩最后两个字段很清楚啦,源IP和目的IP。从哪来的,要到那里去。
了解了IP首部,我们可以很清晰的了解到数据在网络中传输的流程。接下去我们继续学习新的知识。