网络编程网络层
网络层由来:有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由
一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,
这就不仅仅是效率低的问题了,这会是一种灾难
上图结论:必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送,如果不是,
就采用路由的方式(向不同广播域/子网分发数据包),mac地址是无法区分的,它只跟厂商有关
网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址
IP协议:
- 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
- 范围0.0.0.0-255.255.255.255
- 一个ip地址通常写成四段十进制数,例:172.16.10.1
ip地址分成两部分
- 网络部分:标识子网
- 主机部分:标识主机
注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网
例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网
子网掩码
所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,
172.16.10.1:10101100.00010000.00001010.000000001
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
172.16.10.2:10101100.00010000.00001010.000000010
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
结果都是172.16.10.0,因此它们在同一个子网络。
总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。
ip数据包
ip数据包也分为head和data部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分
head:长度为20到60字节
data:最长为65,515字节。
而以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。
以太网头 | ip 头 | ip数据 |
ARP协议
arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到
通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议
arp协议功能:广播的方式发送数据包,获取目标主机的mac地址
协议工作方式:每台主机ip都是已知的
例如:主机172.16.10.10/24访问172.16.10.11/24
一:首先通过ip地址和子网掩码区分出自己所处的子网
场景 | 数据包地址 |
同一子网 | 目标主机mac,目标主机ip |
不同子网 | 网关mac,目标主机ip |
二:分析172.16.10.10/24与172.16.10.11/24处于同一网络(如果不是同一网络,那么下表中目标ip为172.16.10.1,通过arp获取的是网关的mac)
源mac | 目标mac | 源ip | 目标ip | 数据部分 | |
发送端主机 | 发送端mac | FF:FF:FF:FF:FF:FF | 172.16.10.10/24 | 172.16.10.11/24 | 数据 |
三:这个包会以广播的方式在发送端所处的自网内传输,所有主机接收后拆开包,发现目标ip为自己的,就响应,返回自己的mac
1.网络层的基本功能:
网络层要实现路由选择、拥塞控制和网络互联等基本功能,在使用了数据链路层提供的服务的同时,
也为传输层的端到端的传输连接提供服务。
2.网际协议IP
IP地址4个字节,共32位,采用点分十进制地址
IP地址由网络号和主机号组成
3.有类的编址方案:
A类:0.0.0.0~127.255.255.255
私有:10.0.0.0~10.255.255.255
网络号占一个字节,只有7位可供使用,第一位固定为0,实际上共有2^7-2=126个网络号可被指派
主机号占3个字节,即24位,主机数共有2^24-2个,全0或全1分别被用于网络地址和广播地址
B类:128.0.0.0~191.255.255.255
私有:172.16.0.0~172.31.255.255
网络号占2个字节,共14位可用,前两位固定为10,实际上共有2^14-1位可用(128.0.0.0不指派)
主机号占2个字节,共16位,共有2^16-2位可使用
C类:192.0.0.0~223.255.255.255
私有:192.168.0.0~192.168.255.255
网络号占3个字节,只有21位可供使用,前三位固定为110,实际上共有2^21-1位可用
主机号占1个字节,有2^8-1位可使用
D类:224.0.0.0~239.255.255.255
不标识网络,用于组播,即一对多通信
E类:224.0.0.0~255.255.255.255
暂时保留,用于实验和将来使用
4.IP数据报格式
在因特网上传输的包,由首部(固定为20个字节)和数据两部分组成
首部包括:版本,首部长度,区分服务,总长度,标识,标志,片偏移,协议,首部校验和字段,
源地址和目的地址,可选字段
5.MAC地址/物理地址/硬件地址/链路地址:48位,
前6位16进制表示网络硬件制造商的编号,后3位16进制表示网络产品序列号
6.地址解析协议(ARP)
地址解析协议的功能就是通过目标设备的IP地址,查询目标设备的MAC地址,保证通信的顺利进行
7.地址解析:主机在发送帧前将目标IP地址转换成目标MAC地址的过程
地址解析过程:如果ARP缓存表中没有该MAC地址,则该主机将在网络上发送一个广播,目标MAC地址是
“FF.FF.FF.FF.FF.FF”
8.反向地址解析协议(RARP)
反发现地址解析协议的功能就是将局域网中某个主机的物理地址转换成IP地址
9.划分子网和构造超网的原因:
[1].IP地址资源的有效利用率低
[2].路由器的工作效率低
[3].网络规模的限制
10.划分子网:将一个大网络划分成多个小网络供内部使用,每个小网络都有自己的子网地址,
但是对于外部仍然像个单个网络一样。
构造超网:将多个小网络合并成一个更大的逻辑网络。
11.子网划分:从原IP两级地址结构中的主机号借用若干位作为子网号
网络号+主机号——>网络号+子网号+主机号
12.子网掩码
子网掩码是一个32位的二进制数,由一串1和一串0组成
IP地址中的网络号和子网号部分子网掩码置1,主机号部分子网掩码置0
将子网掩码和收到数据报的目的IP地址做逐位的与运算,即可得到子网的网络地址
13.子网掩码的作用:
[1].用于屏蔽IP地址的一部分,以区别网络标识和主机标识,并说明该IP地址是在局域网上还是在远程网上。
[2].用于将一个大的网络划分成多个小的网络
A,B,C类IP地址由默认的子网掩码
14.可变长子网掩码(VLSM)
可变长子网掩码提供了在一个主类(A,B,C类)网络内包含多个子网掩码的能力,以及对一个子网
再进行子网划分的能力。
15.无类域间路由CIDR9
无类域间路由CIDR开发用于帮助减缓IP地址耗尽和路由表急剧增大问题的一项技术。
(1).采用无类编址,将IP网络地址空间看成是一个整体,并划分成连续的地址块,然后采用
分块的方法进行分配。
将32位的IP地址划分成两部分,前面部分用于标识网络地址,后面部分用于识别主机
(2).CIDR支持路由汇总(或称路由聚合),将路由表中的许多路由条目合并成更少的数目,
从而减少路由表的增大,减少路由通告。
(3).利用CIDR实现地址汇总时需要满足两个基本条件:
a.待汇总的地址的网络号拥有相同的高位
b.待汇总的网络地址数目必须是2^n倍,否则可能导致黑洞(即汇总后的网络可能包含实际中
并不存在的子网)
16.NAT网络地址转换
NAT的工作原理:当内部网络中的一台主机想要传输数据到外部时,它先将数据包传输到NAT路由器上,
路由器检查数据包的报头,获取该数据包的源IP信息,并从它的NAT映射表中找出与
该IP匹配的转换条目,用所选用的内部全局地址(全球唯一的IP地址)来替换内部
局部地址,并转发数据包。
当外部网路对内部主机进行应答时,数据包被送到NAT路由器上,路由器接收到目的
地址为内部全局地址的数据包后,它将用内部全局地址通过NAT映射表查找出内部
局部地址,然后将数据包的目的地址替换成内部地址,并将数据包转发到内部主机。
NAT实现的三种方式:
[1].静态转换(Static NAT):
静态转换是指将内部网络的私有IP地址转换为公网IP地址,IP地址是一对一的,是一成不变的,
某个私有IP地址只转换为某个公网IP地址。
借助于静态转换,可以实现外部网络对内部网络中某些特定设备的访问。
[2].动态转换(Dynamic NAT):
动态转换是指将内部网络的私有IP地址转换为公网IP地址时,IP地址时不确定的,是随机的,
所有被授权访问Internet的私有IP地址可随机转换为任何指定的公网IP地址。
[3].端口地址转换(Port Address Translation,PAT):
端口地址转换采用端口多路复用的方式,改变外出数据包的源端口并进行端口转换。
网络的所有主机均可共享一个公网IP地址实现对因特网的访问从而可以最大限度地节约IP地址
资源,同时,又可隐藏网络内部的所有主机,有效避免来自因特网上的攻击。
PAT是应用最广泛的。
17.以全0结尾的IP地址是网路地址,不能作为主机地址
以全1结尾的IP地址是广播地址,不能作为主机地址
18.如果数据包是给本网广播的,那么该数据包的目的IP地址是子网最高地址。
19.实现高层互联的设备是网关。
高层互联是指传输层及其以上各层协议不同的网络之间的互联。
20.以太网交换机实际上就是一个多端口的网桥。
21.中继器、集线器(Hub)工作在物理层。
22.网际报文控制协议ICMP协议是被IP协议封装的。
23.0.0.0.0表示本网络上的本主机。
24.能在vlan之间传递数据的设备是路由器,
能在vlan内部传递数据的设备是交换机。
25.IP地址三种传递模式:单点传送、多点传送、广播传送
26.路由器对IP信息包的操作必须包括分片与重组机制。
27.tracert命令通过网际报文控制协议ICMP协议来实现的。
28.路由器进行地址解析NAT时,对流经它每一个端口的IP信息包都会改变源IP地址。
29.如果数据包是给本网广播的,则目的IP地址是255.255.255.255
1.1、网络协议IP概述
因为网络是整个互联网的核心,因此应当让网络层尽可能的简单那。网路层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。
使用IP协议可以把异构的网络链接起来、使得在网络层看起来好像是一个统一的网络。
![](https://i.imgur.com/Je2hxJR.png)
与IP协议配套使用的还有三个协议:
- 地址解析协议ARP(Address Resolution Protocol)
- 网际控制报文协议ICMP(Internet Control Message Protocol)
- 网际组管理协议IGMP(Internet Group Management Protocol)
![](https://i.imgur.com/C1vawkC.png)
1.2、IP数据报格式
![](https://i.imgur.com/3W4Ocal.png)
- 版本:有 4(IPv4)和 6(IPv6)两个值。
- 首部长度:占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为首部固定长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
- 区分服务 : 用来获得更好的服务,一般情况下不使用。
- 总长度 : 包括首部长度和数据部分长度。
- 标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
- 片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。
![](https://i.imgur.com/UpFy6J3.png)
- **生存时间:**TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
- 协议:指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
- 首部检验和:因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
1.3、IP地址的编码方式
IP 地址的编址方式经历了三个历史阶段:
- 分类
- 子网划分
- 无分类
分类
由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。
IP 地址 ::= {< 网络号 >, < 主机号 >}
![](https://i.imgur.com/a30V5tL.png)
子网划分
通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。注意,外部网络看不到子网的存在。
IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}
要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。
无分类
无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。
IP 地址 ::= {< 网络前缀号 >, < 主机号 >}
CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。
CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。
一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网 。
在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。
1.4、IP地址和MAC地址
网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。
![](https://i.imgur.com/mOXjSbf.png)
1.5、地址解析协议ARP
实现由 IP 地址得到 MAC 地址。
![](https://i.imgur.com/OAMeGoy.png)
每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到硬件地址的映射。
![](https://i.imgur.com/qs2eQQp.png)
1.6、路由器的结构
路由器从功能上可以划分为:路由选择和分组转发。
分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。
![](https://i.imgur.com/ilYbALI.png)
1.7路由分组转发的流程
- 从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。
- 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付;
- 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
- 若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;
若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;
报告转发分组出错。
![](https://i.imgur.com/Q1aDrv4.png)
1.7、路由选择协议
互联网使用的路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。
互联网可以划分为许多较小的自治系统 AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。
可以把路由选择协议划分为两大类:
- 内部网关协议 IGP(Interior Gateway Protocol):在 AS 内部使用,如 RIP 和 OSPF。
- 外部网关协议 EGP(External Gateway Protocol):在 AS 之间使用,如 BGP。
![](https://i.imgur.com/hbN75tR.png)
内部网关协议 RIP
RIP 是一种分布式的基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1,跳数最多为 15,超过 15 表示不可达。
RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。
距离向量算法:
- 对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1;
- 对修改后的 RIP 报文中的每一个项目,进行以下步骤:
- 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中;
- 否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。
- 若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。
RIP 协议实现简单,开销小,但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。
内部网关协议 OSPF
开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的。
开放表示 OSPF 不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。
OSPF 具有以下特点:
- 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。
- 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。
- 只有当链路状态发生变化时,路由器才会发送信息。
所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。
外部网关协议 BGP
AS 之间的路由选择很困难,主要是互联网规模很大。并且各个 AS 内部使用不同的路由选择协议,就无法准确定义路径的度量。并且 AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。
BGP 只能寻找一条比较好的路由,而不是最佳路由。它采用路径向量路由选择协议。
每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。
![](https://i.imgur.com/MQLNBBq.png)
1.8、网际控制报文协议 ICMP
ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。
![](https://i.imgur.com/yledLDw.png)
ICMP 报文分为差错报告报文和询问报文。
1.9、分组网间探测 PING
PING 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。
Ping 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报。
Traceroute
Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。
- 源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,但 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
- 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
- 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
- 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。
1.10、虚拟专用网 VPN
由于 IP 地址的紧缺,一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。
有三个专用地址块:
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
VPN 使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其它主机通信;虚拟指“好像是”,而实际上并不是,它有经过公用的互联网。
下图中,场所 A 和 B 的通信经过互联网,如果场所 A 的主机 X 要和另一个场所 B 的主机 Y 通信,IP 数据报的源地址是 10.1.0.1,目的地址是 10.2.0.3。数据报先发送到与互联网相连的路由器 R1,R1 对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器 R1 的全球地址 125.1.2.3,目的地址是路由器 R2 的全球地址 194.4.5.6。路由器 R2 收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为 10.2.0.3,就交付给 Y。
![](https://i.imgur.com/Ums9X7Y.png)
1.11、网络地址转换 NAT
专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。
在以前,NAT 将本地 IP 和全球 IP 一一对应,这种方式下拥有 n 个全球 IP 地址的专用网内最多只可以同时有 n 台主机接入互联网。为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把运输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。
![](https://i.imgur.com/0CNol4g.png)
---------------------
作者:傅华涛
来源:CSDN
原文:https://blog.csdn.net/fu_jian_ping/article/details/80654143
版权声明:本文为博主原创文章,转载请附上博文链接!