计算机网络原理——网络层的这些知识你真的知道吗?

网络层协议

IP协议

IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍。
在这里插入图片描述

4位版本号(version):
指定IP协议的版本, 对于IPv4来说, 就是4

4位头部长度(header length):
IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.

8位服务类型(Type Of Service):
3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.

16位总长度(total length):
IP数据报整体占多少个字节.

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

3位标志字段:
第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为1, 其他是0. 类似于一个结束标记.

13位分片偏移(framegament offset):
是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).

8位生存时间(Time To Live, TTL):
数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL =1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环

8位协议:
表示上层协议的类型

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

32位源地址和32位目标地址:
表示发送端和接收端.

地址管理

给每个主机分配一个唯一的身份标识(理想状态,互联网发展之初)
IP地址 32位的整数=》 0-42亿9千万

1、动态分配IP地址,联网了才分配,不联网不分配
2、NAT机制,网络地址转换,允许局域网内部的IP地址重复,使用一个外网IP来代表一批局域网内部的设备.。这样的地址转换过程一般由路由器负责。
在这里插入图片描述
3. IPv6:从根本上解决IP不够用的问题. IP地址很长,16个字节, 128位.,原来是2^32次方,现在 2128成指数增长,比原来大了296倍,哪怕给地球上的每个砂子分配个IP,也是够用的。
IPv6虽然已经提出很多年,但是现在全世界的普及程度很低但是在中国普及较高,和IPv4不兼容 (现有的各种网络设备,都不支持IPv6),需要更换设备。

网段划分

划分局域网,局域网中的IP如何进行配置
把一个IP地址(IPV4),分成两个部分
网络号、主机号
1、同一个局域网内部的设备,网络号都是相同的,但是主机号都是不同的。
2、两个相邻的局域网(同一个路由器连接的),要求网络号不能相同。

1、将IP地址分为ABCDE五个类别

在这里插入图片描述
各类地址的表示范围是:

A类:0.0.0.0~127.255.255.255

B类:128.0.0.0~191.255.255.255

C类:192.0.0.0~223.255.255.255

D类:224.0.0.0~239.255.255.255

E类:240.0.0.0~247.255.255.255
随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就分配完了, 而A类却浪费了大量地址,针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing)。

2、使用“子网掩码”划分

引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾;
将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;
网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;

子网掩码,也是32位的整数,左半部分都是1,右半部分都是0,用子网掩码和IP地址按位与,结果就是网络号。
1对应于目的主机所在的网络号和子网号,0对应于目的主机所在的主机号。对于没有划分子网的网络号,也有子网掩码,此时子网掩码中的1对应于网络号,0对应于主机号。将网络号和子网号统称为网络号后,子网掩码中的1就对应于网络号,0对应于主机号。

将目的主机的IP地址与子网掩码进行按位与操作,便可以确定目的主机所在的网络号。
在这里插入图片描述

此时,将目的主机IP与子网掩码按位与之后得到就是该目的主机所在的网络地址IP(网络号)。在本例中,该子网的主机IP的表示范围是:145.13.3.0~145.13.3.255。能够连接的主机个数为254台(去除主机号为全0和全1的IP地址)。

上述中,子网掩码与主机IP按位与之后得到网络地址,然后主机号由全0到全1即表示该子网的地址范围。

子网掩码除了上述的表示方法外,还有一种表示方法:在每个IP地址之后追加网络地址的位数。如上例中:

145.13.3.10/24。表示的是IP地址为145.13.3.10的主机IP,子网掩码的高24位为全1。因此网络地址的高24位与该IP地址相同即145.13.3.0。

所以,在路由表中既要有目的网络地址,也要有该网络的子网掩码。才能判断目的IP是否与目的网络地址对应。

公式

网络号= IP地址逻辑和(AND)子网掩码
主机号= IP地址异或(XOR)网络号

Q1:有一个IP地址为192.168.1.200,子网掩码是255.255.255.224,要求计算其网络地址,主机地址和广播地址。

(255.255.255.224 = 11111111.11111111.11111111.111 00000 也就是5位(黄色部分)做主机位,27位为网络位。172.1.1.200 = 10101100.00000001.00000001.110 01000
所以主机地址为:01000 )十进制主机地址为:200

172.1.1.200所在子网的网络地址就应该是5位主机位全为0时,即:172.1.1.192;

子网此的广播地址后5位全为1,即:172.1.1.223。所以,172.1.1.200 -255.255.255.224,所在网络应该是在172.1.1.192-172.1.1.223之间,可用地址30个。

Q2:如欲将乙类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台,问其子网掩码应该设为多少?

利用主机数来计算

1)700 = 1010111100

2)该二进制为十位数,N = 10(1001)

3)将该乙类地址的子网覆线255.255.0.0的主机地址全部置1,得到255.255.255.255,然后再从后向前将后10位置0,即为:11111111.11111111.11111100.00000000,即255.255.252.0 。

这就是该欲划分成主机为700台的乙类IP地址168.195.0.0的子网掩码。

Q3:设IP地址为192.168.100.5,子网掩码是255.255.255.0,要求算出网络地址,广播地址,地址范围,主机数。

 1)将IP地址和子网掩码换算为二进制,子网掩码连续全1的是网络地址,后面的是主机地址。 

 2)IP地址和子网掩码进行与运算,结果网络地址

 3)将上面的网络地址中的网络地址部分不变,主机地址变为全1,结果就是广播地址。

4)地址范围就是含在本网段内的所有主机

网络地址1即为第一个主机地址;

广播地址-1即为最后一个主机地址,由此可以看出
地址范围:网络地址+1至广播地址-1

本例的网络范围是:192.168.100.1至192.168.100.254
也就是说下面的地址都是一个网段的.192.168.100.1,192.168.100.2 .192.168.100.254

特殊的IP地址

将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

IP地址的数量限制

我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址.

这意味着, 一共只有43亿台主机能接入网络么?

实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿; 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个IP地址.
CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用. 这时候有三种方式来解决:

动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的
NAT技术
IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及

私有IP地址和公网IP地址

如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都可 以,但是RFC 1918规定了用于组建局域网的私有IP地址
10.* ,前8位是网络号,共16,777,216个地址
172.16.到172.31.,前12位是网络号,共1,048,576个地址
192.168.*,前16位是网络号,共65,536个地址 包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或 公网IP);

路由选择

在复杂的网络结构中, 找出一条通往终点的路线
我的电脑发送一个Ip数据报,这个包从我的电脑出发 看看我的电脑认不认识这个目的ip
如果认识就直接发送过去(一般都是些相同局域网内的设备认识),如果不认识 就把数据再交给光猫,如果光猫不认识就再次上交给运营商的路由器就这样如果不认识就一直向上级传递 但是我们的Ip报文里有一个生存时间默认为64 如果超过64次传递还没有找到就宣告失败 (只要对方正常 64足够了).
现在我访问搜狗的服务器
在这里插入图片描述
此处TTL为48 说明就传递了64 - 48 = 12 次
那么每一个路由器如何判断自己认识不认识?
通过路由表判断
目的Ip 相与 子网掩码的到其网络号 然后在路由表中查找是否匹配
如果找到匹配项 就从对应的端口中继续进行转发
如果没有找到就从默认的 “下一跳” 表项继续转发
如果对方正常转发到一定程度 总会有路由器认识这个IP的 也就发送完成了

路由表可以由网络管理员手动维护(静态路由), 也可以通过一些算法自动生成(动态路由)., 例如距离向量算法, LS算法, Dijkstra算法等

猜你喜欢

转载自blog.csdn.net/char_m/article/details/107176428
今日推荐