网络基础——网络层(ip协议详解)

我们知道网路分层存在TCP/IP五层模型:

应用层:负责应用程序之间的数据沟通;自定制协议;知名协议(HTTP/FTP/SSH协议)

传输层:负责端与端之间的数据沟通(端口与端口之间);封装端口信息(TCP/UDP协议)

网络层:负责地址管理与路由选择;(选择最优路径);(IP协议,路由器)

链路层:相邻设备之间的数据传输(两个网卡之间,通过mac地址地址标识)(以太网协议(Etherne)交换机)

物理层:负责光电信号的传输(以太网协议,集线器(比如双绞线的长度直径,等等))

应用层和传输层,阿鲤在之前已经分享过了,链接再此:

http     https     tcp     udp

我们在这篇文章中会介绍网络层


提到ip,我想大家首先会想到的是ip地址,是的网络中的一个ip就是一个网络节点。但是ip地址只是ip协议中的一个标识而已,现在就让我们看看IP协议的格式是怎样的。

网络基础——网络层(ip协议详解)_第1张图片

1:4位版本号:指定ip版本协议,对于ipv4而言就是4;

2:4位首部长度:ip头部长度是以4字节为单位的;而其首部长度是4bit,4bit表示最大的数是15;所以ip头部的最大长度为15*4=60字节

3:8位服务类型:3位优先权字段(弃用);4位tos字段,和1位保留字段(必须置为0);4位tos字段分别表示,最小延迟,最大吞吐量,最高可靠性,最小成本,这四者冲突所以只能选一个。eg:对于ssh/telnet这样的应用程序,最小延迟就比较重要,对于ftp这样的程序,最大吞吐量比较重要。

4:16位总长度:ip数据报整体占多少个字节

5:16位标识:唯一的标识主机发送的报文,如果ip报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的。

6:3位标志字段:第一位保留(不知道干啥,先空下来);第2位置为1表示禁止分片,如果这时候报文长度超过mtu,ip模块就会丢弃报文。第3位表示”更多分片“,如果分片的话,最后一个分片置为1,其他为0,类似于结束标志。

7:13位片偏移:是分片相对于原始ip报文开始处的偏移,其实就是在表示当前分片在原始报文中的位置。实际偏移的字节数是这个值*8得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍。

8:8位生存时间:数据报到达目的地的最大报文跳数,一般为64,每次经过一个路由,TTL就会减一,如果减到0还没有到达,就直接丢弃了;这个字段就是用来防止出现路由循环的。

9:8位协议:表示上层协议(网络层)

10:16位首部校验和:使用CRC进行校验,来鉴别头部是否受损

11:32位源/目的端口:表示发送端和接收端

12:选项字段:。。。

ok,现在大家对ip协议的结构应该有了一定的认识,那么接下来让我们看看ip协议在网络层是怎样传输的

在网络中,数据的传递被成为一个路由的过程,而路由中的每一个点就是一个ip地址;而在我们日常生活中,负责路由的仪器就是路由器(主机虽然有ip节点,但是不能进行路由控制)

那路由的过程是怎样的呢?

唉,不着急,在讲解路由过程之前,让再看看ip地址的结构

一个ip地址被分为两个部分:网络号+主机号

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

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

其实不同的子网,就是把网路号相同的主机放在一起;如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其主机重复。

那么合理设置主机号和网络号,就可以保证在相互链接的网络中,每台主机的ip不相同。

那么问题来了,手动的管理子网ip,是一个相当麻烦的事情。但是!有一种技术叫DHCP

DHCP能够自动的给子网内新增主机节点分配ip地址,避免了手动管理ip的不便,一般的路由器都带有这个功能。

说了这么多,我们还不知道网络号和主机号是怎样划分的?

对于网络号和主机号的划分,可以分为两种,以前和现在

首先让我们看看以前的划分

A以前提出的网络号码的划分,将ip地址归为以下5类:

网络基础——网络层(ip协议详解)_第2张图片

A类地址:0.0.0.0到127.255.255.255;高1位固定,7位网络号,24位主机号;一般用于组建超大型网络--可以包含一千多万的主机

B类地址:128.0.0.0到191.255.255.255;高2位固定,14位网络号,16位主机号;一般用于组建中型网络--可以包括65536个主机

C类地址:192.0.0.0到233.255.255.255;高3位固定;21位网络号,8位主机号;一般用于组建小型网络,可以包含256个主机

D类地址:224.0.0.0到239.255.255.255;高4位固定,28位多播组号

E类地址:240.0.0.0到247.255.255.255;高5位固定,27位保留

随着internet的飞速发展,这种划分方案的局限性很快就显现出来,大多数组织都申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址;

eg:申请一个B类地址,理论上一个子网能够允许6万5千多个主机。A类地址的子网数更多,然而实际网络假设中,不会存在一个子网内有那么多情况。因此大量ip地址都被浪费掉了。

为了针对这种情况提出了新的划分方案,成为CIDR(classless interdomain routing)

引入一个额外的子网掩码来区分网路号和主机号;

1:子网掩码也是一个32位的正整数。通常用一串“0”来结尾;

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

3:网络号和主机号的划分与这个ip地址是A类,B类还是C类无关;

eg:

ip地址 140.252.20.68
子网掩码 255.255.255.0
网络号 142.252.20.0
子网地址范围 142.252.20.0~140.252.20.255

细心的同学根据例子可以看出:ip地址与子网掩码做与运算可以得到网络号,主机号从全0到全1就是子网的地址范围;

ip地址和子网掩码还有一种更简洁的表示方法,

eg:140.252.20.68/24,表示ip地址位140.252.20.68,子网掩码的高位是1,也就是255.255.255.0

在介绍完ip地址的划分后,让我们再看看几个特殊的ip地址散散心

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

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

3:127.*的ip地址是用于本机回环测试的,通常是127.0.0.1

可是,以上的这些技术可以让我们拥有足够的ip地址吗?

答案是:不能的;因为现在通用的ip地址是ipv4,一共是4个字节,那么一共只有2的32次方个ip地址,大概是43亿左右,而tcp/ip协议规定,每个主机都需要有一个IP地址。

但是世界上的主机远不止43亿个,并且ip地址都是按照网卡分的;

虽然CIDR在一定程度上缓解了ip地址的不够,但是仍然不足。所以出现了下面的三种方法去解决ip地址不够用

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

2:IPV6:使用128bit来表达一个地址,现在还未推广开;因为和ipv4不兼容。

3:NAT技术:在介绍NAT技术之前,我们先看一下什么是私有ip地址和公网ip地址

私有IP地址:如果一个组织内部组建局域网,ip地址只用于局域网内的通信,而不是直接连到interent上,理论上,使用任意ip地址都可以,但是RFC1918规定了用于组建局域网的私有ip地址。

1:10.*,前八位为网络号,共16777216个地址

2:172.16.到172.31.,前12位是网络号,共1048,576个地址

3:192,168.*,前16位是网络号,共65536个地址

在这个范围中的,都称为私有ip,其余则称为公网ip;

每一个路由器可以配置两个ip地址,一个是wan口ip,一个是lan口ip(子网);

路由器的所有lan口连接所有主机,其网络号都是这个ip;

不同的路由器,子网ip都是一样的(因为对内),一般都是192.168.1.1;子网的主机ip不可以重复。但是子网之间的主机ip就可以重复了。

wan口ip就是公网ip了,lan对内,wan对外;wan口ip就不能重复了,所以子网之间的ip是可以重复的。

每次在子网内的主机需要和外网进行通信的时候,路由器将ip首部中的ip地址进行替换,这样逐级替换,最终将数据包中的ip地址转换成一个公网ip;这个转换技术被称为NAT(network address translation)

如果我们希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网ip的服务器上。比如阿里云,腾讯云等。

说了这么多,就是未我们介绍路由的过程打铺垫的,现在就让我们一起看看路由的过程

路由选择就好比一个人问路的过程;

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

指路:路由器决定这个数据包是否可以直接发送给目标主机,还是需要发送给下一个路由器

重复:依次反复,一直达到目标IP

那你知道,路由器是如何判定这个数据该发送到哪里呢?

这是因为每个节点都会维护一个路由表;这个表格可以在linux中使用route命令查看。如果ip命中了路由表,就直接转发。

路由表中的最后一行,主要由一下次路由的地址和发送接口两部分组成。

eg:

网络基础——网络层(ip协议详解)_第3张图片

 

destination:目的网络地址

gateway:下一条地址;(广播)

genmast:子网掩码

flags:U表示有效,G表示此条目的的下一条地址是某个路由器的地址。

Iface:发送链接接口

 

好了,以上是阿鲤总结的网络层的知识点了,若有误请慷慨指出!

你可能感兴趣的:(网络)