一、IP数据包格式

image.png
版本(Version) :该字段包含的是IP的版本号,4bit。目前IP的版本为4 (即IPv4)。

首部长度(Header Length) :该字段用于表示IP数据包头长度,4bit。 IP数据包头最短为20字节,但是其长度是可变的,具体长度取决于可选项字段的长度。

优先级与服务类型(Priority & Type of Service) :该字段用于表示数据包的优先级和服务类型,8bit。通过在数据包中划分一定的优先级,用于实现QoS (服务质量)的要求。

总长度(Total Length) :该字段用以指示整个IP数据包的长度,16bit。 最长为65535字节,包括包头和数据。

标识符( Identification) :该字段用于表示IP数据包的标识符,16bit。 当IP对上层数据进行分片时,它将给所有的分片分配同一组编号,然后将这些编号放入标识符字段中,保证分片不会被错误地重组。路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。

标志(Flags) :标志字段,3bit。对当前的包不能进行分片(当该包从一个以太网发送到另一个以太网时),或当一个包被分片后用以指示在一系列的分片中,最后一个分片是否已发出。

段偏移量(Fragment offset) :该字段用于表示段偏移量,13bit。 段偏移量中包含的信息是指在一个分片序列中如何将各分片重新连接起来。

TTL (Time to Live) :该字段用于表示IP数据包的生命周期,8bit。一个数据包每经过一个路由器,TTL将减去1。当TTL的值为0时,该数据包将被丢弃。可以防止一个数据包在网络中无限循环地转发下去。

协议号(Protocol) :协议字段,8bit。 该字段用以指示在IP数据包中封装的是哪一个协议,是TCP还是UDP,TCP的协议号为6,UDP的协议号为17。

首部校验和(Header Checksum):该字段用于表示校验和,16bit。接收方和网关用来校验数据有没有被改动过。

源IP地址(SourceIPAddress):该字段用于表示数据包的源地址,32bit。

目标IP地址(Destination IPAddress) :该字段用于表示数据包的目的地址,32bit。

可选项(Options):可选项字段根据实际情况可变长,可以和IP一起使用的选项有多个。例如,可以输入创建该数据包的时间等。在可选项之后,就是上层数据。

二、ICMP协议(Internrt控制报文协议)

ICMP是一个“错误侦测与回馈机制”通过IP数据包封装,用来发送错误和控制消息。其目的是使管理员能够掌握网络的连通情况。当路由器收到一个不能被送达最终目的地的数据包时,路由器回向源主机发送一个主机不可达的ICMP消息。
image.png

三、ping命令

ping命令的基本格式为
C: \>ping [-t] [-l 字节数] [-a] [-i] IP_Address| target_name
ping命令的返回信息
image.png
windows系统中ping命令常用选项:
-t 参数会一直不停的执行ping
-a 参数可以显示主机名称
-l(小写L) 参数可以设定ping包的大小 ###在Linux系统下为:-s
–n 指定发送包的个数 -c
–S(大写) 指定源IP去ping -I(大写i)

跟踪路由路径命令:
WIN: tracert IP/域名
Linux: traceroute IP/域名

四、ARP 协议

ARP协议概述
■局域网中主机的通信
●IP地址与MAC地址
■什么是ARP协议
●Address Resolution Protocol,地址解析协议
●将一个已知的IP地址解析成MAC地址
ARP工作原理

1.PC1想发送数据给PC2,会先检查自己的ARP缓存表。

2.如果发现要查找的MAC地址不在表中,就会发送一个ARP请求广播,用于发现目的地的 MAC地址。
ARP请求消息中包括PC1的IP地址和MAC地址以及PC2的IP地址和目的MAC地址(此时为广播MAC地址FF-FF-FF-FF-FF-FF)。

3.交换机收到广播后做泛洪处理,除PC1外所有主机收到ARP请求消息,PC2以单播方式发送ARP应答,并在自己的ARP表中缓存PC1的 IP 地址和 MAC 地址的对应关系,而其他主机则丢弃这个ARP请求消息。

4.PC1在自己的 ARP表中添加 PC2的 IP 地址和 MAC地址的对应关系,以单播方式与PC2通信。

ARP相关命令

windows系统中ARP命令:
arp -a ###查看ARP缓存表
arp -d [IP] ###清除ARP缓存
arp -s IP MAC ###ARP静态绑定

如提示ARP项添加失败,解决方案:
a、用管理员模式:电脑左下角“开始”按钮右键,点击“Windows PowerShell(管理员)(A)” 或者 进入C盘windows\system32文件夹找到cmd.exe,右键“以管理员身份运行” 再执行arp -s命令

b、(1)netsh interface ipv4 show neighbors 或者netsh i i show in <查看网卡接口序号/Idx>
(2)netsh interface ipv4 set neighbors <接口序号> <IP> <MAC>

解除静态绑定
netsh -c i i delete neighbors 'Idx'

动态学习到的ARP的老化时间是120s,并且静态绑定的ARP条目在计算机关机或重启后会消失。

华为系统中的ARP命令
[Huawei]dis mac-address ###查看mac 地址信息

[Huawei]arp static <IP> <MAC> ###绑定ARP

[Huawei]undo arp static <IP> <MAC> ###解绑定
<Huawei>reset arp all ###清除mac地址表

ARP欺骗

假设主机 :

A 192.168.1.2, B 192.168.1.3, C 192.168.1.4; 网关 G 192.168.1.1; 在同一局域网,主机A和B通过网关G相互通信,就好比A和B两个人写信,由邮递员G送信,C永远都不会知道A和B之间说了些什么话。但是并不是想象中的那么安全,在ARP缓存表机制存在一个缺陷,就是当请求主机收到ARP应答包后,不会去验证自己是否向对方主机发送过ARP请求包,就直接把这个返回包中的IP地址与MAC地址的对应关系保存进ARP缓存表中,如果原有相同IP对应关系,原有的则会被替换。

这样C就有了偷听A和B的谈话的可能,继续思考上面的例子:

C假扮邮递员,首先要告诉A说:“我就是邮递员” (C主机向A发送构造好的返回包,源IP为G 192.168.1.1,源MAC为C自己的MAC地址),愚蠢的A很轻易的相信了,直接把“C是邮递员”这个信息记在了脑子里;

C再假扮A,告诉邮递员:“我就是A” (C向网关G发送构造好的返回包,源IP为A 192.168.1.2,源MAC地址为自己的MAC地址),智商捉急的邮递员想都没想就相信了,以后就把B的来信送给了C,C当然就可以知道A和B之间聊了些什么

上面ABCG的故事就是ARP双向欺骗的原理了

ARP单向欺骗就更好理解了,C只向A发送一个返回包,告诉A:G 192.168.1.1 的MAC地址为 5c-63-bf-79-1d-fa(一个错误的mac地址),A把这个信息记录在了缓存表中,而G的缓存表不变,也就是说,A把数据包给了C,而G的包还是给A,这样就是ARP单向欺骗了。