计网学习笔记七 IP protocol basic

科技资讯 投稿 6300 0 评论

计网学习笔记七 IP protocol basic

IPv4协议的具体定义:RFC 791

Internet的地址分类

    按地址层级:

    • 网际网路地址:全球可达,地址数量跟接口数量相关,例如IP地址,用于在多个网络间路由PDU

  • 按地址范围

      全球地址:即在全球范围内独一无二用以区分host的地址,路由器允许有多个这种地址(还是看接口数量);
  • 网络附件地址:用来在特定的网络中区分设备,例如 MAC 地址或 ATM host 地址;
  • 端口地址:在host系统中独一无二,用来区分进程。
  • 按寻址方式:

      单播地址(最常见的unicast MAC,IP)
  • 广播地址(全FF);
  • 多播地址(每天在家看电视看直播时,就有多播地址的应用:多个用户看cctv1,就发多播地址给这几个人)
  • 任意播地址(假设百度有一千个站点,不用在南京时记住南京的百度地址,在北京时记住北京的,只需要用任播地址就可以就近访问)
  • IP Operation

    Routing

      host和router都持有路由转发表。转发表指明了当前数据报要送达的下一个路由器,这个表既是静态的——可能存在不同的路由路线,又是动态的——需要对拥塞和错误进行灵活响应;

    • Distance vector, Link state, Path vector。在这里暂时不深入介绍;

    • 路由器可以做到路由记录。

    Datagram lifetime

    环路而一直在传播,同时route需要基于先前的网络信息进行,还有TCP也需要基于数据报的生存周期来决定执行方式;所以我们需要设置数据报在网络中的生存周期——TTL(Time To Live)。

    hop count(根据跳数来计时)。

    Fragmentation and re-assembly

    当数据报的长度超过了MTU(最大传输unit)时,需要对数据报进行切片发送,以及切片到达目的地时进行重组。早期做法为不做全球控制,让路由器有分片功能,切了就发送。

    Error control

    不监测传播过程。由于checksum检查或者TTL expired等事件发生,路由器需要通知src数据报“去了数据报天国”;用ICMP来返回错误信息,src的I网络层收到信息后同时需要通知高层。

    Flow control

    IPv4 Packet Structure

    IPv4有很多blog都帮忙精读过了,所以也不在这写太多生产数据垃圾……想要仔细研究的话可以去看RFC 791原文,在这里中贴一点简要的图例,给自己简单复盘用:

    最大长度为65535个字节,包括头部字段和数据字段。

    IP Fragmentation

    最大传输单元MTU来表示。

    datagram的长度。当路由器中某条出链路的MTU比当前要转发的IP datagram小时,IP datagram是无法一次性在这条出链路上成功传输的。解决办法就是把该IP datagram切片成多个小数据报,再经过链路层封装后进行传输。切片后的数据报被称为fragment

    fragment送达destination后需要重新组装成原来的datagram,组装必须在datagram送到传输层前完成。

    组装任务通过识别IP datagram中的三个字段来完成:identificationflagsfragment offset

    identification即标识号,是在host生成datagram时贴上去的,每生成一个值就加一,protocalsrc addrdest addridentification四个字段共同确定一个独一无二的datagram。

    flags即标志位,由于IP服务是“尽力而为”的,所以不能确保所有fragment都能到达目的地;要让目的地确定接收已经完成(即使fragment没有全部到达,也要有一个机制让host确定已经收到了最后的一个fragment,结束漫长的等待),就将最后一个fragment的flags的MF位置为1,其余fragment的MF位为0

    fragment offset即偏移字段,可以用来确定该fragment在原来的datagram的哪个位置,同时让dest host确定是否丢失了fragment。

    PS:有一个有意思的小问题:fragment再被切片会怎么样?

    IP Address

    IP地址长度32位,可以划分为network部分和host部分(划分标准是不定的,看你划在第几位);在地址的分配上,是一个链路接口与一个IP地址相关联,而不是一个host或一个路由器。

    接口来分的。RFC950中写了对“子网”(subnet的定义:Internet Standard Subnetting Procedure。在这里,我们引入子网掩码(subnet mask的概念。像绿色部分的子网,它的子网地址就是223.1.1.0/24,其中的24就是子网掩码,指示了高24位是network部分,是属于网络地址。

    classful addressing(分类编制方式)和现在使用的CIDR(无类别域间路由选择)。

    CIDR

    a.b.c.d/x,其中x指示了地址中的最高x位为network部分,也被称为前缀prefix

    Hierarchical addressing(分层编址)。如下图所示:ISP手持最大的20位子网,然后剩下的12位可以供它任意分配,于是它又把20~23位分给了8个组织,组织可以利用后面的9位host部分自由分配给组织里面的主机。

    路由聚合。由于子网内部的host通常被分配一块连续的地址,即前缀相同,则当路由器转发一个datagram进来时,在转发表中就像上一节说的那样,仅仅需要考虑prefix即可。

    32-x位为host部分,这部分并不是有2^(32-x个地址可以用——需要留出全0的地址作为子网地址,还有全1的地址用来做广播地址。

    Classful addressing

    A类地址:目前已经被全部瓜分

    B类地址:同样也被全部瓜分^^

    C类地址:接近瓜分完毕

    其实分类编制方案也可以用子网掩码的视角看待,如下图:

    编程笔记 » 计网学习笔记七 IP protocol basic

    赞同 (40) or 分享 (0)
    游客 发表我的评论   换个身份
    取消评论

    表情
    (0)个小伙伴在吐槽