IP协议与以太网

简介: 本文主要介绍在TCP/IP五层协议模型中位于网络层和数据链路层的协议,在网络层主要是IP协议,而数据链路层的协议主要为以太网。

1.IP协议


IP协议是位于TCP/IP协议五层模型中,网络层的主要协议,我们首先在1.1中了解其报文的格式,再在1.2、1.3中了解其主要工作。


1.1 报头格式


微信图片_20230111140417.png

1)版本:由4比特构成,表示标识IP首部的版本号,当前只有两个取值——4和6(IPV4和IPV6),本篇文章主要讨论IPV4。


2)首部长度:由4比特构成,表明IP首部的大小,单位为4字节(32比特),其与TCP类似,都是可变的,实际的首部长度为60字节。


3)TOS:由8比特构成,用来表明服务质量。其实只有4位有效,4位TOS分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。这四种状态在同一时刻只能取一种状态。


4)总长度:由16比特位表示IP首部与数据部分合起来的总字节数,IP包的最大长度为65535,如果要构造一个更长的数据报,就需要实现分包组包这样的操作


5)标识、标志位、片偏移:IP协议通过这三个字段来实现分包组包这样的操作。


如下图,如果整个IP数据报太长了,IP协议就会把这个大包拆成多个小包,来保证每个包都不超过64k。


微信图片_20230111140414.png

16位标识: 多个被拆分出的IP包,其16位标识相同

13位片偏移: 通过片偏移来描述多个包谁先谁后

3位标志: 仅一位有效,0表示还有后续包,1表示这是最后一个包。


小Tips:如何基于UDP实现分包组包呢?就是在应用层照抄IP的实现过程。


6)生存时间(TTL):由8个比特位构成,表示一个IP数据报在网络上还能存在多久,这里的单位不是s或者ms,而是转发次数。


IP数据报被发送的时候,会有一个初始的TTL(例如常见的取值128或者64),IP数据报每次经过一个路由器,TTL就会-1,如果TTL减到0了,此时收到这个包的路由器就会把这个包给丢弃。(一些包里的IP地址是可能永远无法到达的,像这样的包不可能在网络上无休止的转发,这样将会占用太多硬件资源)


7)协议:由8个比特位构成,表示传输层使用哪种协议,TCP或者UDP都有不同的取值。


8)首部校验和:由16个比特位构成(2个字节),用来校验数据是否正确。


9)源地址、目标地址:也就是源IP(发件人地址)和目的IP(收件人地址)。

对于IPV4来说,一个IP地址本质上是32位的整数,通常会使用“点分十进制”这样的方式来表示这个IP地址,通过三个点把32位整数分成4个部分,每个部分1个字节,每个部分的取值就是0~255。


1.2 地址管理


1.2.1 IP地址


IP地址是一个点分十进制构成的数据,其分为两个部分:

网络号(局域网的标识,描述当前的网段信息)和主机号(区分了局域网内部的主机)。


微信图片_20230111140410.png

要求同一个局域网内,主机之间的网络号是相同的,主机号不能相同


微信图片_20230111140407.png

两个相邻的局域网(同一个路由器连接的),网络号不同


微信图片_20230111140404.png

1.2.2 子网掩码


在譬如192.168.0.5这样的IP地址中,一定是前三个字节为网络号吗?其实是不固定的。


通过引入“子网掩码”这样的概念来表示前多少个bit位为网络号。


微信图片_20230111140710.png

子网掩码也是一个32位,由点分十进制表示的整数,在子网掩码中,左侧都是1,右侧都是0(不会1、0混着排列),左边的这些1就表示哪些位是网络号,剩下的0就表示哪些位是主机号


微信图片_20230111140401.png

1.2.3 特殊IP


1)IP的主机号全为0,该IP就表示网络号(局域网里的一个正常设备,主机号不能设为0)


2)IP的主机号全为1,该IP就表示“广播地址”,往这个广播地址上发的消息,在整个局域网中都能收到。


3)IP地址是127开头的,都表示“环回IP”,表示主机自己,例如典型代表:127.0.0.1


4)IP地址是10开头,192.168开头,172.16~172.31开头,表示该IP地址是一个局域网内部的IP(内网IP),除此之外,剩下的IP称为外网IP(直接在广域网上使用的IP)


要求外网IP一定是唯一的,每个外网IP都会对应到唯一的一个设备,内网IP只是在当前局域网中是唯一的,不同的局域网里可以有相同的内网IP设备。


1.2.4 IP地址不够用?


IP地址表示在一个网络上的唯一位置,IPV4协议中使用的IP地址是32位的整数,32位能表示的数据范围为42亿9千万,如果给每个设备都分配一个唯一的IP地址,世界上的设备肯定无法都获得唯一IP,如何解决这个问题呢,有以下三种方式:


1)动态分配IP地址:让每个设备在连上网的时候才有IP,不联网的时候就没IP(这样这个IP就可以供其他人使用),但是这个方案治标不治本。


2)NAT机制:让多个设备共用一个IP(外网IP)

把网络分成了外网(广域网)和内网(局域网),要求外网IP必须表示唯一的设备,同时内网中的若干个设备,可以共用一个外网IP,这样每个外网IP都可能表示很多个设备,IP地址的压力就得到了缓解。


NAI机制将IP分成了外网和内网,也隐藏了一个重要结论:

对于一个外网IP,可以在互联网的任意位置都能访问到

但对于一个内网IP,只能在当前局域网内部访问到(也就是说局域网1的设备不能使用内网IP来访问局域网2的设备)


这个方案也并没有真正的解决IP地址不够用的问题。


3)IPV6:IPV6在报头中使用了一个更长的字段(16个字节,128位)来表示IP地址,而在IPV4中只是4个字节,32位;通过这样的方法,使得IP地址能表示的范围大了很多很多,号称IPV6可以给地球上的每个沙子都分配一个IP地址,是从根本上解决了IP地址不够用的问题。


但现在大多还是在用IPV4+NAT,而不是IPV6,这是因为IPV6与IPV4并不兼容,要想升级到IPV6就需要耗费资金。


1.3 路由选择


路由选择也就是规划路径,如果数据要想从一个设备传输到另一个设备,要先找出一条路,根据IP数据报中的目的地址,运输到目的地。


这个目的地址,如果当前路由器直接认识,就直接告诉你路了;但如果当前路由器不认识,就会告诉你一个大概的方向,让你走到下一个路由器的时候再看是否认识,依次往后走,其实也就离目标越来越近了,这时候总会遇到一个认识这个地址的路由器,于是就可以具体的转发过去了。


就像我们去外地旅游时想到达一个著名的景点(没有导航的情况下),我们先问问路人是否知道这个位置,如果知道,我们直接就去了;如果不知道,他会告诉你一个大致的方位,你先沿着这个方向走,等离目标地点近一些时再问路人,就会问到了。


2.以太网


以太网协议是数据链路层的主要协议。


2.1 以太网帧格式


微信图片_20230111140356.png

目标地址、源地址:使用mac物理地址,在网卡出厂时就被写死了,mac地址做到了每个设备都是唯一的(每个网卡都是唯一的)


类型:该字段有三种值,分别对应IP、ARP、RARP


微信图片_20230111140353.png

一般情况下为第一种,特殊情况下为后两种


帧尾(4字节):帧尾的功能一般是校验,它是一个FCS或CRC算法实现的校验和。


2.2 认识MTU


以太网数据帧的最大数据载荷称为MTU,这个范围一般取决于硬件设备,不同硬件设备对应的数据链路层协议可能又不一样,MTU也就不同。


如果数据报超过了MTU,IP能够分包来解决,IP的分包其实不是给IP的报头64k准备的,更多的是为了适应数据链路层的MTU。


与MTU相关的概念还有一个是MSS,表示TCP在IP不分包的情况下,最多搭载多少载荷。


2.3 ARP协议


在传输一个IP数据报的时候,确定了源IP地址和目标IP地址后,就会通过主机「路由表」确定IP数据报下一跳。然而,网络层的下一层是数据链路层,所以我们还要知道「下一跳」的MAC地址。


ARP不是一个单纯的数据链路层协议,而是一个介于数据链路层和网络层之间的协议,通过ARP协议,建立主机IP地址和MAC地址的映射关系,来求得「下一跳」的MAC地址。


ARP报文并不是用来传输数据的,而是一个辅助信息,当设备启动的时候,就会向局域网中广播ARP报文,每个设备收到之后,都会给出一个应答,应答信息中就包含了自己的IP和MAC,发起广播的那一方,就可以根据这些回应,来建立起这个映射关系,求得「下一跳」的MAC地址。


微信图片_20230111140348.png


3.两层协议的区别和关系


IP(网络层)和MAC(数据链路层)之间的区别和关系:


IP主要负责在「没有直连」的两个网络之间进行通信传输,而MAC的作用则是实现「直连」的两个设备之间通信。


举个栗子:


假如我们想要去一个很远的地方旅行,制定了一个行程表,其间需先后坐飞机、地铁、公交车才能抵达目的地,因此我们需要买飞机票、地铁票等。


飞机票和地铁票都是去往特定的地点的,每张票都只能够在某一特定限定区间内移动,此处的「区间内」就如同通信网络中的数据链路。


在区间内移动相当于数据链路层,充当区间内两个节点传输的功能,区间内的出发点就好比源MAC地址,目标地点就好比目的MAC地址。


整个旅游表就相当于网络层,充当远程定位的功能,行程的起点好比源IP,行程的终点好比目的IP地址。


微信图片_20230111140343.png

如果我们只有行程表而没有车票,就无法搭乘交通工具到达目的地。相反,如果除了车票而没有行程表,也很难到达目的地,因为我们不知道该坐什么车,也不知道该在哪里换乘。


因此只有两者兼备,既有某个区间的车票又有整个旅行的行程表,才能保证到达目的地。与此类似,计算机网络中也需要「数据链路层」和「网络层」这个分层才能实现向最终目标地址的通信。


还有重要的一点,旅行中我们虽然不断变化了交通工具,但是旅行行程的起始地址和目的地址始终都没有发生改变。其实在网络中的数据包传输中也是如此,源IP地址和目标IP地址在传输过程中是不会变化的,只有源MAC地址和目标MAC一直在变化。


相关文章
|
6月前
|
存储 网络协议 文件存储
|
4月前
|
网络协议 网络架构
以太网链路连接 和 ISIS/OSPF等路由协议关系
以太网链路连接 和 ISIS/OSPF等路由协议关系
47 0
|
5月前
|
算法
以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析
以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析
606 1
|
5月前
|
边缘计算 安全 物联网
【网卡可能存在的后门】以太网控制器IP核中的潜在安全威胁与自主化思考
本文探讨了2011年作者在FPGA上开发以太网控制器时发现的一个潜在后门。该后门利用以太网协议的特性,通过特定数据触发网卡进入死亡模式,持续产生中断,导致设备无法正常关闭,对无操作系统的嵌入式设备构成威胁。尽管有操作系统的设备受此影响较小,但WiFi网卡可能因广播攻击而受影响。作者强调网卡安全的重要性,认为其比CPU更需自主化,并指出防止CPU后门的关键在于确保驱动和代码无后门,而非仅仅自主化CPU。
|
6月前
|
运维 监控 网络架构
|
5月前
|
域名解析 网络协议 程序员
网络原理(7)——以太网数据帧和DNS协议(数据链路层和应用层)
网络原理(7)——以太网数据帧和DNS协议(数据链路层和应用层)
172 0
|
6月前
|
网络协议 数据格式
|
6月前
|
存储 域名解析 缓存
网络原理(3)--以太网协议,DNS
网络原理(3)--以太网协议,DNS
63 0
|
6月前
|
存储 缓存 网络协议
计算机网络:思科实验【2-MAC地址、IP地址、ARP协议及总线型以太网的特性】
计算机网络:思科实验【2-MAC地址、IP地址、ARP协议及总线型以太网的特性】
|
6月前
|
存储 缓存 网络协议