IP报头结构

IPv4的头部结构如图所示。其长度通常为20字节,除非含有可变长的选项部分

ospf p2p抓包分析_ipv4

·4位版本号:指定的IP协议的版本。对IPv4来说,其值是4。

·4位头部长度:标识该IP头部有多少个32bit字。因为4位最大能表示15,所以IP头部长度最长是60字节。

·8位服务类型:包括一个三位的优先权字段(现在已经被忽略),4位的服务类型(TOS)字段和一个保留字段(必须置0)。4位TOS字段分别表示:最小时延,最大吞吐量,最高可靠性和最小费用。其中最多只有一个能置一,应用程序应该根据实际需要来设置它。

·16位总长度:指整个IP数据报的长度,以字节为单位,因此IP数据报的最大长度为65535字节。但是MTU会限制数据报的长度,超过限制的数据报会被分片。

·16位标识:唯一的标识主机发送的每一个数据报。其初始值由系统随机生成,每发送一个数据报其值就加一。该值在数据报分片的时候被复制到每个分片中,因此同一个数据报的所有分片都具有相同的标示值。

·3位标志:三位标志位的第一位保留;第二位表示禁止分片(DF),如果这一位为一,那么这个IP数据报不会被分片。此时如果IP数据报长度超过MTU限制,IP模块将丢弃该报文并返回一个ICMP差错报文。第三位表示更多分片(MF),除了数据报的最后一个分片外,其他分片都要把它置一。

·13位片偏移:是分片相对原始IP数据报开始处的偏移。

·8位生存时间:是数据报到达目的地之前允许经过的路由器跳数。数据报在转发过程中没每过一个路由,该值就被路由器减一。当该值减到零时,路由器将丢弃数据报,并向源端发送一个ICMP差错报文,这样就可以防止数据报陷入路由循环。

·8位协议:用来区分上层协议。

·16位头部校验和:用来检验IP数据报头部在传输过程中是否损坏。

·32位源端IP地址和目的端IP地址用来标识数据报的发送端和接收端,他们是不变的。

·最后一个字段是可选字段,里面包含了记录路由、时间戳、松散源路由选择和严格源路由选择。

使用tcpdump查看IP数据报

在linux中使用tcpdump抓取数本地环路上的数据包,并使用telnet登陆本机,这里我使用xshell在我的linux虚拟机外登陆。

使用指令

tcpdump -ntx -i lo
//-n代表显示IP地址而非域名地址
//-t代表不显示时间戳
//-x表示以十六进制显示包内内容
//-i lo 表示只抓取本地回环上的数据包

接着在Xshell中使用telnet登陆到本机

telnet 127.0.0.1

ospf p2p抓包分析_字段_02

观察第一次抓到的数据报内容我们可以解读到一下信息,因为我们使用的telnet登录本机 ,所以源地址和目标地址IP都为127.0.0.1,只是两个端口号不一样。

ospf p2p抓包分析_网络_03