本文主要是介绍三、 网际互联的网络层——IP地址【计算机网络全景梳理系列】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
0.回顾——数据链路层
上一节讲到,Bob和Alice等小伙伴建立了一个小团伙的局域网。在这个局域网中:
- 他们把原始的信息流(Bits)封装成帧(Frame)来传输,这样可以区分出一个与一个消息。
- 同时,使用转义字符解决了某些数据和帧符号相同的问题,实现了可以传输任意字符的透明传输效果。
- 为了避免传输过程中受到噪声的影响,在这些帧中还添加了差错控制,避免传输错误的信息。
在局域网中的每个小伙伴,都有一个自己独特的身份证号——MAC地址,这个MAC地址在每个人的一生中是不会改变的。而且在局域网的范围中,通过交换机的自学习功能,小伙伴们可以通过这个MAC地址中来互相发送信息,实现了物理路由。
在这个局域网中,为了节省资金,大家会共用一个公共信道(逻辑上总线型)。而为了避免发生冲突,大家分想了不少的办法
- 大家根据令牌轮流使用(令牌)
- 边发边听,相互谦让(CSMA/CD 载波监听多点接入/冲突检测)
- 发前预约信道(CSMA/CA 载波监听多点接入/冲突避免)
1. 新挑战——不同局域网之间如何交流
Bob和小伙伴们创建的局域网大大方便了同学间的学习交流,从此声名远扬。大家纷纷效仿创建了一个又一个类似的局域网。在世界各地创建的局域网中,人们又希望世界各地不同的局域网之间任意两台机器也能实现相互交流的效果。
为了在不同的局域网之上,提供统一的任意地方到任意地方的信息传输服务,Bob和全世界的小伙伴们在数据链路层的基础上又创建了网络层。
回顾一开始的假设,网络层要解决的最大问题就是如何实现任意两台设备的互联,一个信息可以准确的从发送地传输到目的地?
2. 面向连接与无连接之争
在一开始的计算机网络领域,大家曾对网络层要使用类似与电报的面向连接的虚电路服务还是分组交换的无连接服务。针对面向连接的虚电路服务,ITU-T组织层发布多X.25协议。但是不同于电报中电话机设备简单,计算机网络设备比较智能,同时为了降低网络造价,面向无连接的分组交换协议成为现在网络层的主流方法。
服务方式 | 连接方式 | 协议 |
---|---|---|
虚电路 | 面向连接 | ITU-T X.25 |
分组交换 | 无连接 | IP |
3. 网络层之魂——IP地址
3.1 为什么需要IP地址,而不用MAC地址
为了实现任意两个网络设备之间的互联通信,需要辨别不同设备,即需要有一个身份辨别。在上一节中,我们讲到了在数据链路层中,每个设备都有一个自己的唯一ID(MAC地址)。
那么可以在网络层中使用MAC地址来寻址吗?
显然不能,理由很简单——在写信的时候,信封上地址栏会写身份证号码吗?哈哈,显然不会。我们不会写对方的身份证号码而是它的地址。仅仅靠身份证号码可找不到对方,所以我们需要另外的信息——IP地址。
所以,IP就是网络世界中的地址,数据包就是靠着这个IP地址传输到对方设备。
概念 | 唯一性 | 现实世界类比 |
---|---|---|
MAC地址 | 物理世界唯一 | 身份证号码 |
IP地址 | 网络世界唯一 | 住址 |
就跟人会搬家一样,不同的网络设备可能会接入不同的网络中。所以在写信寄包裹时候只能凭借具体的住址。
3.2 IP地址分配
IP地址是互联网上每台设备在全世界范围内唯一的32位标识符。
不同与真实世界中,各地的地址根据地理位置已经有所划分。网络中的IP地址是需要分配的,具体的机构为ICANN。IP地址可以分为两个部分:
- 网络号:设备所处的网络,类似小区的地址,这必须是全球唯一的
- 主机号:标志者主机在网络中的位置,例如3栋401,这个可以类似的
不同的局域网中有着不同数量的主机数量,为了分层次管理,全球的IP分为了A类到E类五种类型。
私有地址
即使可供分类的IP很多,但是全世界的主机更多。每个网络设备都有一个自己IP不太现实。所以为了避免这种情况,IP地址分为了公有地址和私有地址。其中私有地址不会出现在全球网络中,但是可以在一个局域网中中分配。这样,一个局域网对外可以只有一个共有IP,而在内部可以分配多个私有IP。
在不同的类型IP都有对应的私有地址,例如 A类中的10.x.x.x、B类中的172.16.x.x, C类中的192.168.0.x。
3.3 IP数据报封装
类似于以太网帧,网络层会把分组的数据封装为一个IP数据包。一个IP数据包可以分为两个部分,首部和数据部分。其中首部说明了一个数据报的很多相关信息,首部的最小长度为20字节。其中每个字段的含义如下:
字段 | bit | 含义 | 常见值 |
---|---|---|---|
版本 | 4 | IP协议的版本 | 4(IPV4) |
首部长度 | 4 | 所有首部的字节数(20-60字节) | 20(最小长度) |
区分服务 | 8 | 服务类型(实际上没有使用) | |
总长度 | 16 | 首部和数据之和,单位为字节 | 最大为65535字节 |
标识 | 16 | 表示字段 (计数器) | |
标志 | 3 | 是否分片 | |
片偏移 | 13 | 分片后在原来的位置偏移 | |
生存时间 | 8 | TTL (1-255) | |
协议 | 8 | 协议号 | TCP:6 UDP:17 ICMP:1 |
首部校验和 | 16 | 校验值 | |
源地址 | 32 | 发送设备的IP地址 | |
目的地址 | 32 | 接收设备的IP地址 | |
可选字段 | / | 用于测试 调试 安全限制等 | |
填充 | / | 让部分长度为32的整倍数 |
4. 是谁的包裹?——ARP协议
上一节中讲到数据包在发送时候使用的是IP地址(类别于信封上的信息),而具体的数据是必须发送到一个具有特定MAC地址的设备上(类似于有唯一身份证ID的一个人)。那从网络层到数据链路层,网络是需要知道具体的数据报属于谁。
这就像快递小哥把快递送到学校后,还需要找到包裹上信息的对应的人。(但是不同于真实世界可以打电话,这里加速快递小哥没有电话)
那该怎么办呢?——ARP协议出现了!
ARP协议机制
广播机制——逐个问:“是不是你的包裹?”
想象一下你就是快递小哥,你已经把包裹送到对应的宿舍里,宿舍里有四个人,而你肯定也都不认识。那你接下来应该怎么确定是谁的包裹呢?
“这不很简单,一个个问呗”。对,ARP协议也是使用这么粗暴的方式。
在不知道IP地址对应着的是哪个设备时候,设备会向同一链路的所有设备广播ARP请求包。
- 请求包中包含了目的地的IP地址。
- 每个设备接收到后会查看和自己匹不匹配
- 若匹配,主机会发送回ARP请求包(请求包中会包含了主机的MAC地址)
这样,包裹(数据包)就被成功的送到对应的同学(设备)上了。
cache机制——拿小本本记下
但这也不是事,总不能每次都一个一个去问,这也太浪费时间了吧。那有什么好的办法呢?
“嘿,这不简单,拿小本本记下呗!”
类似的,在每个设备上会维护一个APR表,用来记录每个IP对应下的MAC地址。这样,就不用每次去一个个问了。
超时清除机制——人员流动
类似于现实世界中人员会流动(学生更换寝室),小本本不能一直用下去需要更新一样,ARP表中的内容超过一定时间期限后就会被清除。
ARP结构
ARP协议会被包括在以太网帧中被发送。
整体的以太网帧结构为
DST
以太网的目的地址,全1表示广播SRC
以太网的源地址帧类型
- ARP数据包
硬件类型
,以太网来说,此值为 1协议类型
, 指出映射的协议地址类型,对于 IPv4 地址,这个值是0x0800
硬件大小
和协议大小
分别指出硬件地址和协议地址的字节数。常见值分别是 6 和 4Op
字段指出操作类型- 后面就分别是发送者和目的的以太网地址和IP地址
- 后面就是以太网帧帧尾了,包括对齐
PAD
和校验CRC
ARP攻击
从上面快递员送快递的例子来就可以感受到ARP协议是一个不安全的协议,很容易受到ARP攻击。
攻击类型 | 详细 | 类比 |
---|---|---|
泛洪攻击 | 发送大量假的ARP包,占用资源 | 假冒快递员给你打骚扰电话,把你弄的贼烦 |
主机欺骗攻击 | 骗过主机,使得局域网内被攻击主机发送给网关的流量信息实际上都发送给攻击者 | 假冒快递员,去收你的快递。把你的快递占为己有 |
网关欺骗攻击 | 骗过网关,攻击者源源不断的获取局域网内其他用户的数据 | 小红假冒小绿去领快递,所有小绿的快递都被小红领了 |
中间人攻击 | 同时欺骗局域网内的主机和网关,局域网中用户的数据和网关的数据会发给同一个攻击者 | 小红和小黄写信,本来是小红和小黄之间直接交换的。但是小绿作为中间人可以获得其中的私密信息 |
IP冲突攻击 | 假冒别人的IP地址 | 真假小红,有两个人都声称包裹是自己的。 |
IPv6中NDP协议
邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它定义了使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现以及重定向等功能。
这篇关于三、 网际互联的网络层——IP地址【计算机网络全景梳理系列】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!