网络层---IP协议详解

网络层

网络层解决的问题是在复杂的网络环境中确定一个合适的路径

IP协议(不可靠)

1.IP提供了一种将数据从A主机跨网络送至B主机的能力。

2.IP地址被分为两部分。前半部分叫做网络号,后半部分叫做主机号。

但IP提供的这种能力并不能使数据每次都能送达(原因是可能发生数据包丢失问题),那么解决此种情况的方法是只要有数据丢失就重新发送即可。但IP不保证可靠性,所以重新发送需要TCP进行重传(TCP保证可靠性)。

客户端要跨网络将数据传输到服务器的前提是客户端要将数据先传输到离自己最近的某个路由器。

端到端由IP地址决定,点对点由MAC地址决定。

在这里插入图片描述

IP地址当中的目标网络为我们提供了路由依据。

为什么主机B发送数据要先到路由器F,F要到G呢?

因为要到主机C。

基本概念:主机:配有IP地址,但是不进行路由控制的设备;路由器:即配有IP地址又能进行路由控制;节点:主机和路由器的统称。

协议头格式

在这里插入图片描述

1.IP是如何做到将报头与有效载荷分离?

IP报文可以根据总长度将报头与有效载荷分离。

2.IP如何知道将数据交付给上层哪个协议呢?

由8位协议字段中的上层协议类型决定。

4位版本号:IPv4(4个字节)IPv6(16个字节)。通常均使用IPv4,则4位版本号就为4.

4位首部长度:与TCP相同。基本单位为4个字节,IP头部最大长度是15*4=60字节。

8位服务类型:最小延时(跨网络传输数据尽量保证所需时间最短)、最大吞吐量、最高可靠性、最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。

16位总长度:IP报文长度。

8位生存时间(TTL)TTL决定了IP报文在网络中被转发的次数(IP报文本身的生命时长)。数据报到达目的地的最大报文跳数,一般是64,每经过一个路由TTL减1,一直减到0还没有到达时就丢弃。这个字段主要是用来防止出现路由循环。

为什么要设置生存时间呢?

假设两种情景,第一个在物理方面我们可以知道信号在传输时随着距离越远信号会变弱,但在网络中一旦出现数据信号变弱情况集线器就会进行信号放大操作,以保证数据在网络中的正常传输。所以假设发送端与接收端无限远时,报文就会一直传输下去。第二种情况是由于网络bug或者异常出现报文发送路线循环,造成资源浪费。所以为了避免这些情况的出现,一定要设置生存时间。

当IP报文长度超过链路层所规定的MTU(最大传送单元 1500字节)时,必须要进行分片;而分片后到达对方后要将数据进行组装。

分片:将一个报文拆分为多个;组装:将多个报文组装为一个。

分片缺点:导致丢包率增加(分片后任何一个包的丢失都相当于该报文整体丢失)。故一般情况下不建议分片,所以就需要从源头上控制报文大小(TCP,因什么时间传输数据传送多大的数据都有TCP决定),所以IP层为1500-20(IP标准报头),TCP层为1480-20(TCP标准报头)。只要能从传输层上控制报头大小在1460(mss 最大段尺寸)字节范围内,之后传输就几乎不会再分片了。

传输层不需要知道网络层报文分片。因TCP进行数据传输时只是将数据从主机A送达主机B,只需要关心该报文是否丢失,丢失后重传即可;但底层究竟是怎样将数据传输到主机B的传输层不关心,由IP层决定。

作为接收方,怎么区分哪些是完整的报文哪些是被分片的报文呢?

接收方接收到报文后,首先要区分哪些为完整报文哪些为分片过的报文。因分片后报文丢失概率提高,故不可通过16位标识直接判断(因加入分片为3个报文,2个丢失,若直接用16为标识判断时剩余分片IP报文标识唯一,出现偏差)。所以我们可以通过13位片偏移进行判断,只要报文的偏移量不为0就说明是进行分片的,判断第一个分片时结合更多分片为0就说明是分片的;其余完整报文只需要判断偏移量即可(完整报文无其他分片)。

16位标识(IP报文标识):普通的正常报文标识不相同,但经过分片之后的标识相同。

13位片偏移被分片的报文在原来完整报文中的相对位置叫做偏移位置(第一个分片偏移量为0,第二个分片偏移量为第一个分片偏移量+第一个分片长度)又因为接收方不知道一个完整报文到底被分片成几个,所以发送发在将完整报文进行分片后,每个报文加入3位标志标志字段(更多分片),将最后一个分片的3位标志字段设置为1,其余设置为0,这样接收方在组装报文时就能知道报文是否拼接完全。

组装报文流程:先根据16位标识将分片分块,然后根据片偏移排序再根据更多分片判断是否拼接完成。

网段划分(重要):作用为提高效率

IP地址分为两个部分:

网络号:保证互相连接的两个网段具有不同的标识;

主机号:同一网段内,主机之内具有相同的网络号,但是必须有不同的主机号。(子网/局域网)

在这里插入图片描述

在子网/局域网中,一般第一台主机都指的是路由器接口。

同一网段内网络标识是相同的,主机标识不同;不同网段内网络标识不同。

路由器用来连接多个网络。

若要往某一局域网/子网中新增一台主机要怎么办呢?

可向路由器申请分配IP地址(路由器本身具备分配IP地址的能力 DHCP),该IP地址与同局域网中其他主机网络号相同主机号不同即可。

DHCP指的是路由器本身具备分配IP地址的能力,能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便。一般的路由器都带有DHCP功能,因此路由器也可以看作一个DHCP服务器。

分类划分法:这种方法简单粗暴容易导致IP地址浪费问题。

为了解决分类划分法的缺陷,提出了新的解决方案叫做CIDR(提供了利用率,减少了浪费。但是IP地址的绝对上限并没有增加)。

CIDR中引入一个额外的**子网掩码(一串10,前半部分为1,后半部分为0)**来区分主机号和网络号;子网掩码是一个32位的正整数,通常用一串“0”结尾;将IP地址和子网掩码进行“按位与&”操作得到的结果为网络号;网络号和主机号的划分与这份IP地址是A类、B类还是C类无关。

一般而言,如果IP地址中主机号为全0代表的是网络号;如果为全1代表的是广播地址(也就是说在一个子网中所有主机收到广播地址均会处理)。所以在一个局域网中合法的IP地址变为2^8-2(因为有两个作为特殊用途(主机号全0或全1))。

在这里插入图片描述
在这里插入图片描述

特殊的IP地址

1.将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;

2.将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;

*3.127.的IP地址用于本机环回测试,通常是127.0.0.1。通常在进行网络/程序测试时使用。

IP地址的数量限制

CIDR只是在一定程度上缓解了IP地址不够用的问题,但IP地址仍然不够用,这时有以下三种方式来解决:

1.动态分配IP地址(共享IP)(暂时缓解):只给接入网络的设备分配IP地址。因此同一个MAC地址的设备,每次接入互联网中得到的IP地址不一定是相同的;

2.NAT技术(暂时缓解):发送方向服务器发送请求报文时目的IP不变不断替换源IP(将源IP替换为路由器的WAN口IP,因主机(发送方)IP为私有IP不可出现在广网中)的机制叫做NAT。

3.IPv6(从本质上解决问题):IPv6并不是IPv4的简单升级版。这时两个互不相干的协议,彼此不兼容;IPv6用16字节128位来表示一个IP地址;但是目前IPv6还在大力推广中。

私有IP地址和公网IP地址

A: 10.0.0.0~10.255.255.255 即10.0.0.0/8,前8位是网络号,共16777216个地址;

B:172.16.0.0~172.31.255.255即172.16.0.0/12,前12位是网络号,共1048576个地址;

C:192.168.0.0~192.168.255.255 即192.168.0.0/16,前16位是网络号,共65536个地址。

包含在这些范围中的都为私有IP(只在局域网中有效,可在不同局域网中重复),其余的为全局IP(或公网IP:真正意义上可以标识一台主机的IP地址,不可以重复)

私有IP可解决IP地址不够用的情况,因为私有IP在不同局域网中可重复使用。

路由器有构建局域网的功能。

在这里插入图片描述

上图为主机请求服务及服务器响应过程。

1.一个路由器可以配置两个IP地址,一个是WAN口IP,一个是LAN口IP(子网IP)。

当主机向服务器发送请求报文时(NAT),源IP地址为192.168.1.201,目的IP地址为122.77.241.3。因为源IP地址为私有IP不可出现在广网中,故请求报文到达家用路由器时,目的IP地址不变源IP地址变为该路由器的WAN口IP;请求报文到达运营商路由器时目的IP不变源IP变为该路由器的WAN口IP。**当服务器像主机发送响应报文时,**源IP地址为122.77.241.3,目的IP为运营商WAN口IP122.77.241.5,首先确保将响应报文发送至运营商路由器,此时源IP改为该路由器的子网IP10.1.1.1,目的IP改为家用路由器WAN口IP,保证响应报文到达家用路由器,再同理将响应报文返回至主机。

2.路由器LAN口连接的主机都从属于当前这个路由器的子网中;

3.不容的路由器,子网IP其实都是一样的(通常都是192.168.1.1),子网内的主机IP地址不能重复,但不同子网中私有IP地址可重复。

4.每一个家用路由器,作为运营商路由器子网中的一个节点,这样运营商路由器可能会有很多层,最外层的运营商路由器WIN口IP就是一个公网IP了。

5.子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成WAN口IP,逐级替换),最终数据包中的源IP地址成为一个公网IP,这种技术称为NAT(网络地址转换)。

6.如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网IP的服务器上,这样的服务器可在阿里云/腾讯云上购买。

路由(根据目的IP地址中的目标网络):路由过程要不断查看路由表

IP地址包含源IP地址和目的IP地址,通过NAT的学习,我们可以知道源IP可能发生改变但目的IP绝对不会发生变化。MAC地址指的是在IP地址中某两段连续地址,包含这一段地址(源MAC地址)到下一段地址(目的MAC地址),所以源MAC地址与目的MAC地址均会发生改变(随着数据在不同路由器之间的传输)。

当IP数据包到达路由器时,路由器会先查看目的IP,路由器决定这个数据包是能直接发送给目的主机还是需要发送给下一个路由器;一次反复直到到达目的IP地址。

路由器、IP地址、MAC地址三者关系为:目的IP地址通过路由器就可决定下一站MAC地址是哪个。

路由分为两个阶段,第一阶段为找目标网络所在的局域网;第二阶段是在局域网中找特定主机。

寻找目标网络所在的局域网分为三种情况:

1.缺省路由:即该路由不知道报文下一步该到达哪个路由,此时可将报文交与默认的缺省路由处理,若该缺省路由依旧不知道就再次将报文交与下一个默认的缺省路由。

2.正常路由线路:该路由直接将报文交与下一个路由;

3.该路由下一个直接为服务器。

查看路由表方法:

首先将目的IP地址与第一行的子网掩码(Genmask)进行按位与操作,将得到的网络号与该路由存在的网络号(Destination)进行对比,若存在则直接可将报文送至下一个路由器,若不相同时将目的IP地址与第二行子网掩码进行按位与操作,以此类推,若全部不相等时将报文交与缺省路由,直到报文到达目的IP处。

猜你喜欢

转载自blog.csdn.net/weixin_42617262/article/details/88837430