zoukankan      html  css  js  c++  java
  • 1.2【基本路由原理】(三层转发原理)2

    三层转发原理:

     
    IPV4 头部:
    长度(20B~60B)
     
    ##【头部结构】:
     
    第一行(32bit):版本 (4bit) 首部长度(4bit) TOS(8bit)总长度(16bit)
    第二行(32bit):标识(16bit) 标志(3bit)偏移地址(13bit)
    第三行(32bit):TTL(8bit)协议标识(8bit)校验和(16bit)
    第四行(32bit):源IP
    第五行(32bit):目的IP
    //标准的头部是包含前5行,每一行4个字节,共20个字节
    第六行(32bit):填充字段 (40B)  填充时需要按照4的倍数填充
     
     
    ***************************************************************
    如果把首部长度全部填充为1的话,
    是15,表示15行,IP头部长度是15*4=60B;
    一般情况下是5,标准头部,表示5行,IP头部长度是5*4=20B;
    填充选项:
     
     ****************************************************************************
    TOS:服务质量:给IP包打标签,通过这个字段给IP包进行分级,
    通过不同的分级,可以标识IP包的优先性,针对不同的级别执行优先转发。
    **************************************************************************
    偏移地址:分片
    ************************************************************************
    TTL:生存时间:1.防止三层的环路问题,(不是路由的环路是ip包的 环路)        2.可以限制IP包的转发距离
     
    二层为什么会有广播风暴会有环?
    因为在二层的帧头里面是没有防环机制的,需要加协议,比如生成树来防止环路。
    TTL值是8个比特,255环,减到0,IP包会被丢掉
     
    TTL值减到0,IP包会被丢掉,对还是不对?不对
    TRACE的原理:
    可以做一个追踪,首先将TTL设为1,然后设为2,设为3,这样把网络上经过转发的所有设备的IP地址拿过来。
     
    *PC1->1:(类比快递)
    1.发送TTL=1报文,校验IP包的完整性checksum,TTL-1=0;
    2.TTL=0,需要判断一下目标IP地址是不是本地的IP?;
    3.如果不是本地的IP,需要说明 这个IP包是需要转发的,但是TTL=0,需要被丢弃;
    4.丢弃以后会告诉发送源什么原因造成丢包的,会回送ICMP超时应答,丢弃的原因:TTL超时应答。
    通过应答,可以获取到这台设备的IP地址
     
    //trace/ping 这两个是工具,不是协议
     
    PING-ICMP
    TRACE:
    tracert(ICMP)
    traceroute(UDP)
     
    可以 通过tracert可以把其他设备的IP给捞过来:通过TTL值。
    //看书:6-ICMP
    TTL超时 代码:110
     
    *PC1->2
    TTL=2
     
    *PC1->3
    TTL=3,IP包不需要转发,接收。
     
    3可能会给源PC1回送ICMP端口不可达的报文-tracerout(IP的上层 封装的是UDP的协议,UDP端口号大于30000,UDP进程下没有开这个 端口号,会回送端口不可达的报文)代码:33
     
    3可能会给源PC1回送reply信息-tracert;代码:00
     
     
    ping返回TTL值:靠ICMP的Reply:看对端的TTL值信息。
    ping网关:255
    ping百度:55
    时间:有一个定时器
     
    *****************************************************************************
    协议标识
    是为了标识上层的协议:[1=icmp 6=tcp 17=udp 88=eigrp 89=ospf
    47=GRE]
    *****************************************************************************
    校验和
    只针对包头做校验,而不包括所传递的数据
    *****************************************************************************
    分片
    为什么会有分片?
    要传递的数据大于MTU值最大传输单元1500B;
    MTU标识接口一次发送的IP数据包 的长度可以到达多少个字节;
    IP 3000,按MTU的大小值来进行分片;
     
    标识字段-用来标识同一个IP包,到目的可以进行重组;
     
    标志位(3bit)
    DF = 0:IP包可以被分片; 1:IP包不能被分片;默认是0
    MF = 3745
     
    ************************************************************************
    ##实验???
    关于DF分片的实验
    1.实验现象
    Packet sent with the DF bit set
    MMMMMM
     
    ping 3.3.3.3 size 1500 df-bit re100
     
    df-bit不能被分片 
     
    2.实验过程:
     
    3.实验分析:
    R2收到以后需要转发,IP包的长度需要大于出接口的MTU值,需要分片。但是IP包里面IP包置位了
    (ping 3.3.3.3 255.255.255.255 siza 1500 df-bit),说明IP包不能被分片,丢包。
     
    这时,丢弃者就会像发送源回送一个ICMP差错应答,原因就是IP包不能被分片,同时回送的IP包里面还包括这台设备出接口的MTU值代码:34
     
    是否分片只看出接口的MTU值,和入接口是没有关系的,入方向收包是不检查MTU的,只在出方向转发的时候才会检查MTU,
    所以,R3回复的时候,fa0/0没有改变MTU,3返回的包没有问题。
     
    4.实验结论:不能被分片造成丢包的
     
    5.抓包分析:
    在R2的f0/0上抓包分析
     
     看Request里面,DF位,置1
     看回送的数据包,DF位,置0
     

     注意:在校园网里面就,保证MTU的一致性
    实际上,在IPv4里面
    PPPOE   MTU值改成1492,为什么?
    标准的IP头【IP+上层协议+数据】,因为后续需要增加一些头部,PPPOE需要增加PPOE的头部和PP的头部,占了8个字节,如果按1500来添的话就会造成分片。
    MPLS往里插标签,IPsec里添加ESP 都会造成分片;
    丢了一片就会造成不通或者时通时不通,所以要保证整个网络MTU的一致性。
     
    MTU一致性的测试方法:PMTUD(Path MTU Discovery,路径MTU发现)
    方法:发个1500B或2000B报文,将DF比特位置位,经过一台设备如果出接口MTU值小于1500B会丢包;
    丢包会回送一个ICMP的差错应答,告诉你因为什么原因丢包,同时这个报文里面会携带丢弃者的MTU值,可以通过这种方法获得整个转发路径上面的最小设备的MTU值。
     
    1->2
    获取1300,用1300发
    1->3
    获取1000,用1000发
    1->4
    获取最小MTU,用最小MTU去封装数据报文
     
     

     
    这也是校园网的一种排查思路。
     

    ************************************************************************
    偏移地址:用来标识分片的起始位置,通过起始位置知道哪片是第一片,哪片是第二片,然后做一个重组
     
    //看书:分片-在UDP章,TCP不会被分片,因为TCP有MSS,可以自动分段,避免分片
    如果用UDP封装数据的话,很多时候会限制填充的数据长度,这个数据长度是512B
     
    rip 里的response报文可以传送多少条路由?
     
     跳数的话:最大15跳,16不可达;
     
    25条路由:rip每条路由的长度是20个字节,20*25=500B
    rip通过UDP承载的,UDP头部长度:8B  rip头部长度:4B
    500+8=4=512B;
     
    为什么rip的每个response报文最多只能传送25条路由?
    是因为它已经限定了UDP报文的长度,用UDP传送数据的话,很多协议会将最大填充数值固定在512B,不能太大,太大就会造成IP分片;为了避免分片
    ***************************************************************************
    ARP:地址解析协议
    用于解析MAC地址,实际上,在LAN网中才有ARP,在WAN中是没有ARP的,因为不需要,WAN网中没有MAC
    1.ARP的报文类型
    两种:request     reply
    2.ARP的报文长度:
    28B
    3.ARP的报文结构:
     硬件类型
     协议类型
     硬件长度
     协议长度
      OP字段[1=request  2=reply]
      发送方MAC
      发送方IP
      目的方MAC
      目的方IP
    4.ARP是靠什么协议来承载的?
    ARP算是2.5层协议,不算2层,也不算3层(ARP没有IP头部)
    5.ARP报文长度是28B,它满足最小MTU值吗?
      最小MTU是46B,ARP需要填充0来满足最小MTU的长度
    6.ARP和RARP有什么区别?
       ARP:将IP解析成MAC
       RARP:将MAC解析成IP(无盘工作站:只有服务器才有硬盘,PC没有硬盘,使用网卡启动加载系统:网卡会发送一个RARP广播报文,通告自己的MAC地址,服务器收到后会给你回送一个IP,PC获取IP后可以从服务器加载系统,对服务器,网络性能要求比较高)
    所有的request报文都是广播;
               reply报文都是单播;
    7.ARP的类型:
    普通ARP(获取MAC地址)、
    代理ARP、
    免费ARP(1.IP地址冲突检查 2.通告MAC地址)
    (自己发自己一个ARP请求,如果收到一个ARP应答,表示网络 中有跟我一样的IP地址,就会报错;
    免费ARP也会去刷新MAC地址);
     
    8.收到一个ARP请求后,在本地会 生成ARP的映射表
    show arp
    arp -a  看到绑定关系
     
    在思科路由器里面ARP表项的老化时间是多长?
    4个小时
     
    【实验验证】接收到下面哪个报文会刷新ARP的4个小时的老化时间?
    1、ARP request ?
    2、免费ARP ?
    只有免费ARP才会刷新ARP的time out这个定时器
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





  • 相关阅读:
    2021 Duilib最新入门教程(二)Duilib编译动态库
    2021 Duilib最新入门教程(一)Duilib简介
    webgl图库选型
    CUDA编程学习记录
    C++时间戳获取
    FFMPEG编译问题记录
    程序员的35岁
    Linux发行版及其目标用户
    服务器关机或重启
    Linux下找出吃内存的方法总结
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/11105436.html
Copyright © 2011-2022 走看看