少女祈祷中...

IP

1、IP是TCP/IP协议族中最核心的协议。基本上很多协议(TCP/UDP/ICMP/IGMP)的数据都依靠IP数据报格式传输。IP包在网络中传输过程中源IP和目的IP始终不变(如果使用源路由选项则要变),但是MAC层的地址会变。
IP是不可靠、无连接的数据传输服务。

  • 不可靠,即不能保证IP数据报能成功到达目的地,IP只提供最好的传输服务(尽力而为),
    当IP数据包传输错误时,会有一个简单的错误处理算法–ICMP发送回来。
  • 无连接,IP每个数据报的处理都是独立的,IP数据报的发送数据也可以是无序的。

2、IP数据报格式如下
IP数据报格式
从中选取个别字段记录:

  • 版本,一般就是IPV4和IPV6
  • 首部长度,最大就是15*4=60字节。由于IP首部固定20字节,因此后面留给选项和选项对应数据的最多40字(介绍选项)。
  • 服务类型(TOS),用于质量服务(QOS),前3bit是优先权字段,后面4bit分别是最小延迟、最大吞吐量、最高可靠性、最小费用,最后一bit必须为0(无意义)
  • 总长度,2^16=65535字节。
  • 标识,用于ip包的id标识,每发一个包id自动++,被分片后的id不变,方便接收端把同一个id的分片包组合起来。
  • 标识。
    第一个是DF位:决定要不要分片;如果是1,那么就告诉路由器不要分片,直接丢包,并返回应该ICMP报文告诉我是哪台路由器丢的包。
    第二位是MF位:(more frame)是用来判断后面还有没有分片;1-说明该包后面还有分片包,0-当前包已经是最后一个分片包。
  • 偏移量,标记分片的数据位置
  • 生存时间(TTL),每经过一个路由器就–,减到0就说明不可达(主要用于traceroute,通过发送TTL递增的探测包,逐跳发现路径上的路由器。)
  • 协议,上一层用的什么协议。(1-ICMP;6-TCP;17-UDP)
  • 首部校验和,用于校验首部数据有没有被破坏。
  • 选项。拓展选项
    记录几个选项
    记录路径
    时间戳
    宽松的源站路由
    严格的源站路由
  • 数据部分。一般不能成功MTU,超过的IP包需要分片。

3、特殊IP

  • 0.0.0.0 没有IP向DHCP服务器申请IP的请求包中的原地址介绍全0
  • 广播地址(略
  • 环回地址(略

4、IP源站选路的操作机制
严格源站路由:目的IP地址必须直连;宽松的源站路由则不用。
数据报根据指定的IP传输列表进行传递(需要提前知道网络的拓扑结构)IP源站路由

5、IP分片
在IP分片后,每一片都是独立的,因此在传输时会走不同的路由路径,最终倒数到达目的地时会失序,但是由于IP首部有分片信息让接收到根据这些信息正确组装数据报分片。如果在传输过程在一个包的某一个分片未能正确
到达目的地,那么只能把其它分片全部丢弃然后重传整个数据报

ARP

1、ARP时位IP地址到硬件地址之间提供动态映射

2、ARP工作原理

  • ARP请求(广播)
    当主机A需要与主机B通信(已知B的IP,但未知其MAC)时,
    会先检查ARP缓存主机A先查询本地ARP表,若没有B的MAC记录,则广播发起ARP请求包:|发送方IP-A的IP|发送方MAC-A的MAC|目标IP-B的IP|目标MAC-00:00:00:00:00:00|
    局域网内所有主机接收该包,但只有IP匹配的主机B会响应。

  • ARP响应(单播)
    主机B收到ARP请求后,会记录A的IP和MAC到本地ARP表(更新ARP缓存表),然后单播回复ARP响应包给A:|发送方IP-B的IP|发送方MAC-B的IP的MAC|目标IP-A的IP|目标MAC-A的MAC|
    主机A收到响应后,更新ARP表,完成通信准备。

3、ARP报文格式ARP报文格式
从中选取个别字段记录:

  • 帧类型:0806 ARP (0806-IP)
  • 硬件类型,以太网
  • 协议类型,IP
  • 硬件地址长度,对于以太网:6
  • 协议地址长度,对于IP:4
  • op操纵符,2bit共4种操作类型,分别是:ARP请求、ARP应答、RARP请求、RARP应答。
  • 目的地以太网地址,发送arp请求时一般是全0,ARP应答时目的主机把自己的MAC地址塞进去再发送。

4、ARP代理
大致流程:
主机A(IP: 192.168.1.10)—–(接口1: 192.168.1.1)路由器(接口2: 192.168.2.1)—–主机B(IP: 192.168.2.20)
A未配置默认网关。路由器启用ARP代理。
当主机A发送ARP请求(广播)后;路由器拦截请求,发现目标IP 192.168.2.20 属于其另一接口的子网。于是代理响应:以自身接口1的MAC地址回复主机A,假装是192.168.2.20的MAC。
然后主机A收到响应,将192.168.2.20的MAC记录为路由器的接口1 MAC(Router-MAC-1)。因此后续发往B的流量实际发给路由器,由路由器转发到B。

一个问题:
ARP的一个问题

5、免费ARP
免费ARP是主机主动广播自己的IP和MAC映射,不请求任何信息,而是用于声明或检测。
发生场景

  • 当一台主机配置或获取到一个IP地址(如DHCP分配)时,会发送免费ARP请求,以检查局域网内是否有其他设备已经使用了该IP。如果收到响应:说明IP冲突,主机可能拒绝使用该IP
  • 当主机的MAC地址发生变化(如更换网卡、虚拟机迁移)时,发送免费ARP,通知局域网内其他设备更新ARP缓存,避免因旧MAC导致通信失败。

问题:容易被攻击

ICMP

1、简介
ICMP通常用于传递差错报文以及其它需要注意的信息,通常被IP层或者TCP/UDP使用,一些ICMP报文把差错报文返回给用户进程。ICMP报文是在IP数据报内部进行传输的。

2、报文格式
ICMP报文格式

  • 类型和代码,用于描述特定类型的ICMP报文,结合代码字段进一步描述不同条件。
    ICMP报文类型
    ICMP报文分为查询报文和差错报文。当发送语法ICMP差错报文是,报文会始终包含IP首部和产生ICMP差错报文的IP数据报前8个字节(根据端口号将差错报文发送给原来的程序)
    对于差错报文,为防止差错报文对广播分组响应,带来广播风暴有以下几种情况不会产生差错报文:ICMP差错报文;目的地址是广播/多播地址;作为数据链路层广播的数据报;
    不是IP分片的第一片(只有第一片才有端口号等信息);源地址不是单个主机的数据报,即零地址、环回地址、广播/多播地址。

3、使用 ICMP 的ping程序
Ping命令的ICM报文结构
ping -R 记录路由选项。使用了IP结构种的记录路由选项,但是由于IP首部除去固定20字节后只剩下40字节,因此也记录不了啥路由,感觉有点鸡肋。
IP时间戳选项,和记录路由选项类似。
记录IP包传输经过的路由有一个程序叫Tracerote(unix),是利用TTL来记录路由的。(疑问:利用TTL会发多次包,它怎么确保每个包都走一条路径?)
具体流程:Traceroute程序会发送UDP数据报给目的主机。设置目的端口号>33434(用于区分是否到达目的主机),发送第一个探测包(TTL=1),到第一个路由器后TTL减到0,路由器丢弃包并返回ICMP超时,
发送第二个探测包(TTL=2),到第二个路由器时返回ICMP超时,重复此过程直到到达目的主机,由于端口号太大,会找不到该端口号,返回ICMP端口不可达。(不同操作系统记录路由实现不一样,但原理类似)。
4、ICMP重定向差错。
ICMP重定向差错