网络基础——IP协议

  • Post author:
  • Post category:其他




IP协议的主要功能

网络层(IP协议)的主要功能: 地址转换和路由选择

传输层(TCP协议)的主要功能: 传输数据的控制。

有什么区别吗? tcp (决策)——-> 决定数据如何传输, 例如传送多少, 重传,,,,,

ip (执行)——-> 决定数据在路上如何传输。

在这里插入图片描述

节点: 路由器和主机的统称。

报文从节点跳转的过程,称为 数据包跳转到 下一跳

ip协议头格式

在这里插入图片描述

4位版本 : 区分 IPv4 和IPv6。

4位头部长度: 单位是4个字节。 1个bit位是4个字节

8位服务类型(TOS): 前3位已经弃用, 4位TOS字段, 分别表示: 最大吞吐量, 最小延时, 最高可靠性, 最小成本。

4位只能有1位置1(也就是说这4种相互排斥), 还有1位是保留字段。

16位总长度: 报文总长度,单位是字节。

8位生存时间 : 没经过一个节点, 生存时间减减, 减到0消散。 防止路由循环的问题。

8位协议 : 向上交付, 交付给tcp或者udp协议。

16位首部检验和 : 由发送方填充, 接收方检验。

32位源ip : 从哪哪个主机来。

32位目的ip : 要去哪个主机。

关于16位分片标识, 3位标识, 13位片偏移:

首先 : 为什么会ip分片???

对于数据链路层来说, 规定了一次性向网络中发送的数据大小是有限制的, MTU: 1500字节

意味着网络层的最大数据是1480字节, 因为ip报头是20个字节。

如果ip报文超过了 1500字节——-> 就要ip分片

那为什么在不在数据链路层分片呢?

因为分片后的报文也是需要ip报头的, 只有网络层才有资格添加报头信息, 并且每个16位总长度也是会变化的。

例如 : 网络层有一个3420个字节的报文, 就要ip分片

1, 20(原始的ip报头) + 1480

2, 20 (拷贝的ip报头) + 1480

3, 20(拷贝的ip报头) + 440。

那么问题来了, 对端的网络层如何组装呢? —-> 16位分片标识, 3位标识, 13位片偏移

16位标识(1,聚合在一起) :对于, 没有分片的独立报文, 16位标识是不同的。

对于, 分片后的报文, 16位标识是相同的。

13位片偏移(2, 将有效载荷组合在一起): 该报文的有效载荷在原始报文中的偏移量。

例如 : 对于 1600个字节的独立报文

分片后 : 1480 + 20 / 120 + 20

16位标识 1234 1234 (假设的)

片偏移 0 1480

但是问题来了, 如何判断是最后一个报文呢? ——->3位标识

3位标识(区分是最后一个报文):1位保留, 1位禁止分片, 1位 表示后面还有更多报文。

该位为1 —- > 后面还有报文 该位为0——–> 后面无

大概就是 :

if(更多分片标志位 == 1 || 片偏移 > 0)
{
       //分片报文
}
else
{
        if(更多分片标志位 == 0 && 片偏移 == 0)
        {
               //独立报文
        }
}

在这里插入图片描述



网段划分

网段划分的本质 : 提高查找效率, 减少查找难度。

IP地址 = 网络号 + 主机号 (确定一台互联网中的一台主机的)

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

主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;

不同的子网其实就是把网络号相同的主机放到一起.

如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致,

但是主机号必须不能和子网中的其他主机重复.

手动管理ip地址是非常不方便的。

有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便.

在这里插入图片描述

曾经的5类地址划分:

其中的绿色部分是固定不变的

这样划分存在很多的缺陷, 例如大家都申请B类, 那会导致B类地址被大量申请,而其他类型的地址没人使用

在这里插入图片描述

新的划分方案 : CIDR

引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;

子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾, 0和1的分界线是主机位

将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;

网络号和主机号的划分与这个IP地址是A类、B类还是C类无关

例如:

在这里插入图片描述



IP数量限制

IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右。

而现在的电脑数量已经远超过43亿了, 如何解决呢?

动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到

的IP地址不一定是相同的;

NAT技术 : 不断更换源IP地址。

IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表

示一个IP地址; 但是目前IPv6还没有普及



WAN口的IP 和 LAN口的IP

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

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

不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之

间的IP地址就可以重复了.

每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级,

最外层的运营商路由器, WAN口IP就是一个公网IP了.


子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级

替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地

址转换).


在这里插入图片描述



路由

当IP数据包, 到达路由器时, 路由器会先查看目的IP;

路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;

依次反复, 一直到达目标IP地址

在这里插入图片描述

例如:

在这里插入图片描述

这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络;

路由表的Destination是目的网络地址 ,Genmask是子网掩码, Gateway是下一跳地址

Flags中的U标志表示此条目有效(可以禁用某些 条目),G标志表示此条目的下一跳地址是某个路由器的

地址,

没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发

转发过程例1: 如果要发送的数据包的目的地址是192.168.56.3

跟第一行的子网掩码做与运算得 到192.168.56.0,与第一行的目的网络地址不符

再跟第二行的子网掩码做与运算得 到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去;

由于192.168.56.0/24正 是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发;

转发过程例2: 如果要发送的数据包的目的地址是202.10.1.2

依次和路由表前几项进行对比, 发现都不匹配;

按缺省路由条目, 从eth0接口发出去, 发往192.168.10.1路由器;

由192.168.10.1路由器根据它的路由表决定下一跳地址;



版权声明:本文为CL2426原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。