网络层(IP,ICMP),数据链路层(以太网协议)

网络层

ip协议报头的格式+地址管理+路由选择
网络层

ip协议报格式

网络层(IP,ICMP),数据链路层(以太网协议)_第1张图片
4位版本:指定ip协议版本,ipv4和ipv6,ipv6并不向下兼容;
4位首部长度:表示ip协议头部长度,也就是length*4的字节数,4bit表示最大的数字是15,因此IP头部最大长度是60字节(固定的20字节+40字节的选项);

8位服务类型:3位优先权字段(已经弃用),4位TOS字段和1位保留字段(必须置为0).4位TOS分别表示:最小延迟(ssh),最大吞吐量(ftp),最高可靠性,最小成本.这4中相互冲突,只能选择一个。

16位总长度:表示ip数据报整体的长度,单位是字节;ip头部+有效载荷
注意:a.由于网络电气特性的影响,在数据链路层对数据帧做出了限制,MTU:最大传输单元,可以使用ifconfig来进行查看,单位是字节
b.如果网络层提交给数据链路层的数据大于MTU,需要分片传输
c.本身网络层ip协议最大的数据报文长度为2^16次方,65536字节
d.数据封装的时候,网络层的数据来源于传输层,而传输层有两个协议TCP,UDP;
TCP由于按照MSS给网络层提交数据,所以在网络层加上ip头部之后,也是小于等于MTU的,所以不需要分片传输;(tcp在三次握手的时候已经协商了最大报文段长度MSS)
(如果tcp通信双方在同一台机器,网络传输只走了协议栈,走的是本地回环网卡,而本地回环网卡的MTU大小一般是65536);
UDP是整条数据交付的,就有可以能交付给网络层的数据,超过MTU的大小,所以在网络层就需要对UDP的数据进行分片传输;UDP协议是不可靠的,网络层的ip协议也是不可靠的,如果在分片传输的时候,网络层丢失了一个分片,则需要整条UDP数据全部丢掉了;

16位标识:标识当前UDP数据包分片传输的数据是哪一个完整的UDP报文的;同一个UDP数据包当中所有的分片具有相同的标识值;

3位标志:位1 保留位;位2 禁止分片;位3 标识更多分片,当标识自己不是最后一个分片的时候,该位值为1,当标识自己是最后一个分片的时候,该位值为0;

13位片偏移:标识分片在UDP报文当中的位置;最大213=8192数值,片偏移=13位数值*8字节=216,也是分片的起始位置;

8位生存时间:数据在传输到达目的地之前允许经过的路由器的个数;TTL:跳数,描述该数据包最大可以经历多少路由设备转发,每一个路由器转发之后,TTL就进行减1操作,在TTL内到达对端主机或者直到减为0,则转发设备就丢弃该报文;一般TTL=64;防止路由循环;

8位协议:标识传输层使用什么协议,意味着对端分用时,对端的网络层通过该标志位知道该将该数据提交给传输层的哪一个协议;

16位首部校验和:判断IP头部在传输过程中是否有损坏;

32位源ip地址:在转发过程中该ip地址不会被改变。除了NAT技术;
32位目的ip地址:在转发过程中该ip地址不会被改变。除了NAT技术;

IP地址管理

讨论的是ipv4版本的ip地址,类型是unit32_t,范围是(0~2^32)

早期划分方式

ip=网络号+主机号
网络号:标识一个子网络,代表一堆ip地址,网段;
主机号:在子网当中唯一标识一个主机;

早期划分ip地址的方式,将ip地址划分为不同的种类,在不同的种类当中,通过网络号划分出来不同的子网,每一个子网当中有若干个ip地址;

A类

A类:高1位固定为0,后面7位为网络号,24位为主机号
00000000 00000000 00000000 00000000–》0.0.0.0
01111111 11111111 11111111 11111111–》127.255.255.255
网络号范围:0~127 意味着总共划分出来128个子网络
ip地址范围:0.0.0.0~127.255.255.255
每一个A类的子网,能够拥有最大2^24(16777216)个ip地址

B类

B类:高两位固定为10,后面的14位表示网络号,16位标识主机号
10000000 00000000 00000000 00000000 --》128.0.0.0
10111111 11111111 11111111 11111111–》191.255.255.255
网络号范围:128.0~191.255
主机号范围:0~2^16
ip地址范围:128.0.0.0~192.255.255.255

C类

C类:高3位固定为110,后面21位表示网络号,8位标识主机号
110 00000 00000000 00000000 00000000–》192.0.0.0
110 11111 11111111 11111111 11111111 --》223.255.255.255
网络号范围:192.0.0~223.255.255
主机号范围:0~2^8(256)
ip地址范围:192.0.0.0~223.255.255.255

D类

D类:高4位固定,28位多播组号

E类

E类:高5位固定,27位留用

CIDR方式–引入子网掩码netmask

子网掩码是一个unit32_t的整数,由一段连续的二进制1构成;
为了更加精确化的分配ip地址,在每一个子网中,都可以计算分配的ip地址数量;

子网掩码取反后,有多少个比特位为1,表示主机号使用了多少比特位
最大主机号 = 子网掩码取反
网络号 = 子网掩码 & IP地址

主机号全为0的表示 网络号
主机号全为1的表示 广播号

私网IP

在42亿地址池当中,划分出来3个段,在这三个段当中的ip地址不具备访问互联网的能力,也就是这些ip地址不能够访问互联网。

本质

1.这三段ip地址可以进行复用,不管是个人还是去也还是国家,都可以不用申请就直接使用;
2.这些ip可以组建子网,而我们将这种子网称为私网,对应的互联网称为公网;
3.这个私网当中的ip之间,不影响网络通信;就是私网当中的机器之间可以互相通信,但是不能访问互联网;
网络层(IP,ICMP),数据链路层(以太网协议)_第2张图片

私网网段划分

1.10.*.*.* 10.0.0.0~10.255.255.255 云服务器的时候,10开头
2.172.16.*.*~172.31.*.* 172.16.0.0~172.31.255.255
3.192.168.*.* 192.168.0.0~192.168.255.255

特殊的IP地址

127.0.0.1:本都回环地址
0.0.0.0 用于在服务器程序中,表示服务器机器上所有网卡的ip地址
255.255.255.255 :UDP的广播地址,DHCP协议:动态主机分配协议:谁上网给谁分配IP

路由选择

网络层(IP,ICMP),数据链路层(以太网协议)_第3张图片
可使用route命令查看路由表
目的ip地址:
1.用目的ip地址,和路由器当中的每一个条目的子网掩码进行按位与操作;

如果得到的结果不是该子网的网络号,表示这个数据不是给这个子网中的某一个机器的;
如果得到的结果是该子网的网络号,则直接转发给子网中的机器;

2.如果除了默认网关之外的路由条目都没有匹配上,则这条数据就需要走默认网关,直接传递给上级路由器;

3.如此往复,在每一个路由设备上进行对比,之后进行传输,直到TTL耗尽被丢弃,或者抵达到目标主机;
注意:
网络层的ip协议不负责数据有序或者可靠到达对端;
网络层的ip协议值负责数据的源端和目的端;

ICMP协议

ip协议并不能提供可靠传输,如果丢包了,ip协议并不能通知传输层是否丢包以及丢包的原因。

一个新搭建好的网络,往往需要进行一个简单的测试,来验证网络是否畅通。

ping命令基于ICMP,是在网络层,而端口号,是传输层的内容,在ICMP中根本不关注端口这样的信息。

功能:
确认IP包是否成功到达目标地址;
通知在发送过程中IP包丢去的原因;
ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6;

数据链路层

负责相邻设备的传输,决定性因素MAC地址
MAC地址:6字节的整数 unit8_add[6];
MAC地址在每个机器上都是独一无二的

以太网协议

目的MAC地址(6字节)+源MAC地址(6字节)+类型(2字节)+数据+CRC校验

类型:标识网络层使用什么协议;
数据:有效载荷
CRC校验:检测数据链路层的数据帧是否差错;

ARP协议:通过IP地址获取相邻设备的MAC地址

MTU(最大传输单元)

MTU相当于发快递时对包裹尺寸的限制,这个限制是不同的数据链路对应的物理层,产生的限制。

MTU对IP协议的影响

由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。

将较大的IP包分成多个小包,并给每个小包打上标签;
每个小宝IP协议头的16位标识字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为0,否则置为1);
到达对端时再将这些小包,会顺序重组,拼装到一起返回给传输层;
一旦这些小包中任意一个小包丢失,接收端重组就会失败,但是IP层不会负责重新传输数据;
网络层(IP,ICMP),数据链路层(以太网协议)_第4张图片

MTU对UDP的影响

一旦UDP携带的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么就会在网络层分成多个I数据报。
这多个IP数据报有任意一个丢失,都会引起接收端网路层重组失败,那么就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就打打增加了。

ARP协议(介于数据链路和网络层之间的协议)

作用:

通过IP地址获取相邻设备的MAC地址。

ARP协议格式:

网络层(IP,ICMP),数据链路层(以太网协议)_第5张图片

ARP协议格式=以太网首部+28字节ARP请求或者应答首部
以太网首部:
以太网目的地址:ARP请求的目的MAC地址,填充为1,则表示广播地址;
以太网源地址:ARP请求的主机的MAC地址;
帧类型:以太网数据帧类型,表示上层使用什么协议–>ARP协议是介于网络层和数据链路层之间的协议。

28字节的请求或者应答:
2字节硬件地址类型:定义运行ARP网络的类型,1为以太网。
2字节协议类型:转换的地址类型,0x0800为IP地址;
1字节的硬件地址长度:表示MAC地址的长度;
1字节的协议地址长度:表示IP地址的长度
op:标识ARP请求还是ARP应答,1表示请求,2表示应答;
4字节发送端以太网地址;发送ARP请求或者应答主机的MAC地址;
4字节发送端ip地址:发送ARP请求或者应答主机的IP地址;

目的以太网地址:
ARP请求:0x000000000000;
ARP应答:填充的是,ARP请求中的源MAC地址;

目的IP地址:目标主机的IP地址

ARP缓存表(可用arp -a命令查看)

1.每一台机器,会定时的获取相邻设备的MAC地址,时间为20min,20min也是ARP缓存表的老化时间;
2.如果在数据链路层没有在缓存表当中发现相邻的MAC地址,则发送ARP请求,否则,直接从缓存表当中获取,组织数据链路层的以太网数据帧;

注意:

ARP请求时广播发送的,如果是目标主机收到则处理,如果不是目标主机收到,则丢弃;

你可能感兴趣的:(Linux,网络层(IP协议,ICMP),数据链路层(以太网协议))