热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

计算机网络:IP协议(1)

网络层协议IP:网际协议InternetProtocolARP:地址解析协议ICMP:网际控制报文协议IGMP:网际组管理

网络层协议


  • IP:网际协议 Internet Protocol
  • ARP:地址解析协议
  • ICMP:网际控制报文协议
  • IGMP:网际组管理协议


文章目录

  • 网络层协议
  • IP地址
    • 一、IP地址的分类
    • 二、注意:
  • 地址解析协议ARP
    • 一、ARP原理
    • 二、ARP使用的情况情况
  • IP数据报内容
    • 一、首部的字段
  • IP数据报的分组转发
    • 一、路由表
    • 二、默认路由
    • 三、转发流程
  • 子网划分
    • 一、基本思路
    • 二、子网掩码
    • 三、使用子网时的分组转发
  • 超网
    • 一、无分类编址CIDR
    • 二、CIDR分配案例
    • 三、最长前缀匹配
  • ICMP协议(网际控制报文协议)


IP地址

IP地址是互联网上的每一台主机(或者路由器)的每一个接口分配一个在全世界范围内是唯一的32位识符,4字节


一、IP地址的分类

将IP地址划分为若干个固定类,每一类地址由两个固定长度的字段组成,分别为


  • net-id(网络号):标志主机所连接到的网络,整个互联网范围必须唯一
  • host-id(主机号):标志主机,在网络号所指的所属网络范围内必须唯一
    IP&#61;{,}IP &#61; \{ , \}IP&#61;{<netid>,<hostid>}

IP地址划分为A,B.C.D.E五类地址&#xff0c;其中A,B,C类地址为单播地址


  • A&#xff0c;B&#xff0c;C类地址的网络字段号分别为1&#xff0c;2&#xff0c;3个字节&#xff0c;网络号字段前面有1-3位的类别位&#xff0c;分别为0,10,110
  • D类地址前四位为1110&#xff0c;用于多播
  • E类地址保留为后用
    在这里插入图片描述

二、注意&#xff1a;


  • A类地址网络字段只有7位可以使用&#xff0c;但可指派的网络号位&#xff08;27−22^7-2272)个:1-126

    • 全0的IP地址为保留地址
    • 127&#xff08;011111111&#xff09;保留为本地软件测试&#xff0c;用于本主机之间的进程通信&#xff0c;不是网络地址。
  • A类地址的主机号占三个字节&#xff0c;每个A类网络中的最大主机数是224−22^{24}-22242:

    • 全0的主机号字段表示IP地址是本主机所连接到的单个网络地址
    • 全1表示网络上所有主机
  • B类地址&#xff1a;

    • B类最小网络地址&#xff1a;128.1.0.0&#xff0c;B类地址的可指派网络数为214−12^{14}-12141
    • 最大主机数&#xff1a;216−22^{16}-22162&#xff0c;需要除去全0和全1的主机号
  • C类地址&#xff1a;

    • C类最小网络地址&#xff1a;192.0.1.0&#xff0c;可指派的网络总数为KaTeX parse error: Expected &#39;EOF&#39;, got &#39;}&#39; at position 9: 2^{21}-1}̲
    • C类可指派的最大主机数28−22^{8}-2282

总结
在这里插入图片描述




地址解析协议ARP


一、ARP原理

解决问题&#xff1a;知道了同一个局域网一个机器的IP地址&#xff0c;找出其相应的硬件MAC地址
解决方法&#xff1a;ARP高速缓存&#xff0c;每台主机都设有一个ARP高速缓存&#xff0c;里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表。主机A向B发送数据报时


  • 首先查询主机的高速缓存中是否有主机B的IP地址&#xff0c;如果有就查出对应的硬件地址&#xff0c;把硬件地址写入MAC帧中&#xff0c;再通过局域网发送MAC帧
  • 如果查不到&#xff1a;
    1. ARP进程再本局域网上广播发送ARP请求分组&#xff0c;并加入自己的IP和MAC地址
    2. 本局域网上所有主机ARP进程收到广播
    3. B收到分组&#xff0c;IP地址和自己的一致&#xff0c;向主机A单播ARP响应分组&#xff0c;告诉IP地址和MAC地址&#xff1b;同时B将主机A的报文信息写入ARP缓存
    4. A收到B的ARP响应&#xff0c;写入ARP高速缓存

二、ARP使用的情况情况

如图
在这里插入图片描述




IP数据报内容


一、首部的字段


  • 版本&#xff1a;4位&#xff0c;指IP协议的版本&#xff0c;通信双方使用的版本必须一致&#xff0c;如IPV4&#xff0c;IPV6
  • 首部长度&#xff1a; 四位&#xff0c;最高&#xff08;1111&#xff09;标识15&#xff0c;但是对应于32位字即4字节&#xff0c;首部固定长度有20字节&#xff0c;所以最小为5
  • 区分服务
  • 总长度&#xff1a;首部和数据长度之和&#xff0c;字段总长度为16位&#xff0c;单位为字节&#xff0c;最大位65535字节
  • 标识&#xff1a;当IP数据报需要分片的时候&#xff0c;这个标识字段的值会被拷贝到所有数据报文的标识字段中&#xff0c;相同标识字段的值使分片后的各数据报最后能重组为原来的数据报&#xff0c;与序列号无关
  • 标志&#xff0c;占3位&#xff0c;只有前两位有意义&#xff1a;
    • 最低位 MF &#61; 1&#xff1a;标识后面还有分片
    • 中间位 DF &#61; 1&#xff1a;不允许分片&#xff1b;为 0允许分片
  • 片偏移&#xff1a;分组之后&#xff0c;某片在原分组中的相对位置&#xff0c;是相对于用户数据的起点&#xff0c;该片&#xff08;的起点&#xff09;从何开始。片偏移以8个字节为单位,所以分片长度一定是8字节&#xff08;64位的整数倍&#xff09;
  • 生存时间&#xff1a;TTL&#xff0c;又叫跳数&#xff0c;指数据报在互联网中至多可以经过多少个路由器&#xff0c;每次转发这个值减一&#xff1b;8位&#xff0c;最多255&#xff1b;若初始值设为1&#xff0c;则只能在本局域网传送
  • 协议&#xff1a;占8位&#xff0c;指出此数据报携带的数据使用的是何种协议&#xff0c;以便目的主机的IP层知道应该将数据部分上交给哪个协议进行处理
  • 首部检验和&#xff1a;只检验首部数据
  • 可变部分&#xff1a;为了增加IP数据报的功能&#xff0c;一般不用
    在这里插入图片描述



IP数据报的分组转发


一、路由表


当需要在互联网中转发数据报时&#xff0c;我们可以通过IP数据包首部确认目的IP地址和发送的源地址&#xff0c;但是问题需要知道达到这个网络需要的经过的路径&#xff0c;或者说经过哪些路由器进行转发&#xff0c;这个时候路由表的作用就体现出来了。路由表存储的主要信息就是(目的网络地址&#xff0c;下一跳地址)(目的网络地址&#xff0c;下一跳地址)(&#xff0c;)



二、默认路由

当对应的网络找不到路由表中的下一跳路由时&#xff0c;使用默认路由完成&#xff0c;路由表中默认路由标为0.0.0.0
在这里插入图片描述


三、转发流程

我们可以通过目的网络地址确定下一跳的路由器的IP地址&#xff0c;而当前路由器处于目的网络时&#xff0c;便可以交付给目的主机&#xff0c;整个流程总结如下&#xff1a;


  1. 从数据报首部提取目的主机IP地址D&#xff0c;得出目的网络地址N
  2. 若N直接和路由器相连&#xff0c;则进行直接交付&#xff08;通过ARP协议找到MAC地址&#xff0c;把数据报封装为以太网帧&#xff0c;利用链路层进行转发&#xff09;&#xff1b;否则执行3
  3. 若路由表中有目的地址为D的特定主机路由&#xff0c;则把数据报传送给路由表中指明的下一跳路由器&#xff0c;否则执行4
  4. 若路由表中有到达网络N的路由&#xff0c;则把数据报传送给路由表中指明的下一跳路由器
  5. 若路由表中有默认路由&#xff0c;则交给默认路由器&#xff0c;否则执行6
  6. 报告转发错误

路由表只是指明下一个路由器的IP地址&#xff0c;并没有完整的路径&#xff0c;所以转发过程需要逐层查找执行&#xff1b;同时转发给下一个路由器实际上也需要用到以太网协议&#xff0c;即需要知道目的路由器的MAC地址&#xff0c;这个也是通过ARP协议实现的




子网划分


一、基本思路


  1. 把一个IP地址下面划分为多个子网&#xff0c;外部网络看不见这个网络由多少个子网组成&#xff0c;对外表现依然为一个网络
  2. 二级IP地址为<netID,hostID>三级IP地址为<netID,subnetID,hostID>
  3. 其它网络发完本单位某台主机的IP数据报&#xff0c;仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。路由器收到IP数据报后&#xff0c;按目的网络号和子网号找到目的子网&#xff0c;把IP数据报交付给目的主机
    4.

二、子网掩码

用于解决到达路由器后&#xff0c;路由器如何把它转发到子网上的问题。


子网掩码组成为连续的1&#xff08;网络号有多少位就有多少个1&#xff09;&#xff0c;连续的0&#xff08;主机号&#xff09;&#xff1b;不划分子网的网络也需要子网掩码&#xff0c;通过子网掩码和IP地址进行与运算可以不用查找地址类别就知道是哪一类的IP地址



  • A类地址的默认子网掩码为255.0.0.0&#xff0c; 或0xFF000000
  • B类地址的默认子网掩码为255.255.0.0, 或0xFFFF0000
  • C类地址的默认子网掩码为255.255.255.0&#xff0c;或0xFFFFFF00

以下图为例&#xff0c;分析子网掩码和子网数的关系


  1. 网络号不能全为0或1&#xff0c;所以当子网数为二的时候&#xff0c;需要2位子网号的位数
    01&#xff0c;10来标识子网&#xff0c;对应子网掩码为0xFFFFC000
  2. 网络号不能全为0或1,子网数位w和子网号的位数n的关系是w&#61;2n−2w&#61;2^n-2w&#61;2n2
    在这里插入图片描述
    可以发现&#xff0c;子网号划分的位数越多&#xff0c;对应的子网所能连接的主机数目越少&#xff0c;反之则主机数越多

三、使用子网时的分组转发

流程如下&#xff1a;


  1. 首先从收到的数据报的首部提取目的IP地址D
  2. 判断是否为直接交付。对路由器相连的网络进行逐个检查&#xff1b;用各网络的子网掩码和D进行按位与&#xff0c;看是否与相应的网络地址相匹配。若匹配&#xff0c;则分组直接交付&#xff0c;转发任务结束&#xff0c;否则为间接交付&#xff0c;转3
  3. 路由表中有目的地址为D的特定主机路由&#xff0c;则把数据报传送给路由表中所指明的下一跳路由器&#xff0c;否则转4
  4. 对路由表中的每一行&#xff08;目的网络地址&#xff0c;子网掩码&#xff0c;下一跳地址&#xff09;&#xff0c;用子网掩码和D按位与&#xff0c;结果为N&#xff0c;若D和目的网络地址匹配&#xff0c;则把数据报传送给该行指明的下一跳路由器&#xff0c;否则执行5
  5. 有默认路由则传送给默认路由器&#xff0c;否则执行6
  6. 报告转发分组出错



超网


一、无分类编址CIDR


  1. CIDR消除了传统的A、B、C类地址划分和子网划分的概念&#xff1b;CIDR把32位IP地址划分为前后两个部分&#xff0c;分别为网络前缀和主机号 ,CIDR使得IP地址从三级编址又回到了两级编址&#xff0c;但这是无分类的两级编址&#xff0c;记为&#xff1a;{,}\{, \}{<netprefix>,<hostid>}在这里插入图片描述
    20是网络前缀的位数
  2. 网络前缀相同的连续IP地址组成一个CIDR块&#xff0c;知道一个块中的任何一个地址&#xff0c;就可以知道这个地址块的起始地址和最大地址&#xff1b;用地址掩码来标识CIDR块&#xff0c;将地址掩码和IP按位与就可以得到CIDR块号
  3. 路由表中利用CIDR来查找目的网络&#xff0c;这种地址的聚合叫做路由聚合

在这里插入图片描述
在这里插入图片描述
和IP划分位A&#xff0c;B&#xff0c;C类最大的区别在于&#xff0c;划分位ABC类的操作&#xff0c;实际上依然是通过子网掩码&#xff0c;划分出一个一个网络和子网进行管理&#xff0c;CIDR就直接一步到位&#xff0c;你IP的前缀相同&#xff0c;后面不管你是ABC类地址&#xff0c;我都不进行划分&#xff0c;都把你当成一个块进行管理&#xff0c;里面可能有很多个地址&#xff0c;我们转发都当成一个相同的大类进行处理


二、CIDR分配案例

某ISP有地址块206.0.64.0/18&#xff0c;相当于在前十位固定的情况下&#xff0c;拥有后14位的分配资格&#xff0c;当一个大学需要申请800个IP地址&#xff0c;该ISP可以给该大学分配206.0.68.0/22&#xff0c;即1K个IP地址&#xff0c;在各系下有可以进一步划分这个IP地址。


对比不应用CIDR的情况&#xff0c;如果没有使用CIDR技术&#xff0c;则该ISP相当于拥有64个C类地址&#xff0c;则所有需要转发给该ISP的路由器都不得不含有64个项目&#xff0c;当使用路由聚合后&#xff0c;只需要通过206.0.64.0/18就可以唯一确定该ISP&#xff1b;同理&#xff0c;该大学有四个系&#xff0c;每个系对应若干个C类地址&#xff0c;如果要进行转发&#xff08;不使用CIDR&#xff09;&#xff0c;同样会面对路由器中项目过多的问题&#xff0c;用CIDR路由聚合可以解决这个问题


在这里插入图片描述


三、最长前缀匹配

针对路由表中&#xff0c;使用CIDR进行路由聚合的路由块&#xff0c;有时会出现多个表项均满足转发标准&#xff0c;这个时候需要选择前缀最长&#xff08;即主机最少&#xff0c;网络最具体&#xff09;的表项进行操作。例如&#xff0c;设D&#61;206.0.71.130&#xff0c; 在ISP的路由表中&#xff0c;有大学&#61;206.0.68.0/22和四系&#61;206.0.71.128/25&#xff0c;当ISP收到数据报&#xff0c;且目的IP地址为D时&#xff0c;有
在这里插入图片描述
在这种均匹配的情况下&#xff0c;选择前缀最长的表项&#xff0c;转发给对应路由器&#xff08;路由器管理多个块&#xff09;




ICMP协议&#xff08;网际控制报文协议&#xff09;

重新开一个文章&#xff0c;太长了


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
author-avatar
alloyer
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有