Krains's Blog

vuePress-theme-reco Krains    2020 - 2021
Krains's Blog Krains's Blog

Choose mode

  • dark
  • auto
  • light
Home
Category
  • Algorithm
  • LeetCode题解
  • 数据结构
  • 计算机基础知识
  • Java基础
  • Java多线程
  • JVM
  • MySQL
  • 设计模式
Tag
TimeLine
Contact
  • GitHub (opens new window)
author-avatar

Krains

80

Article

22

Tag

Home
Category
  • Algorithm
  • LeetCode题解
  • 数据结构
  • 计算机基础知识
  • Java基础
  • Java多线程
  • JVM
  • MySQL
  • 设计模式
Tag
TimeLine
Contact
  • GitHub (opens new window)

计算机网络-网络层

vuePress-theme-reco Krains    2020 - 2021

计算机网络-网络层


Krains 2020-08-23

# 概述

网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错控制、流量控制等)。那么网络层是如何传送 IP 数据报的?

# 网际协议 IP

与 IP 协议配套使用的还有三个协议

  • 地址解析协议 ARP (Address Resolution Protocol)
  • 网际控制报文协议 ICMP (Internet Control Message Protocol)
  • 网际组管理协议 IGMP (Internet Group Management Protocol)

IP 要使用ARP协议,而ICMP和IGMP要使用IP协议。

image-20210306112241074

IP 地址与硬件地址的区别,每个网卡都有一个唯一的硬件地址,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,IP是一种逻辑地址,是由软件实现的。

在分组转发的过程中,源IP和目的IP地址是不变的,而MAC是改变的。

image-20210306145557491 image-20210306145616879
  • 在IP层抽象的互联网上只能看到IP数据报
  • 路由器只根据目的站的IP地址的网络号进行路由选择
  • 在局域网的链路层,只能看到MAC帧

两个关键的问题

主机或者路由器怎么知道在MAC帧首部填入的硬件地址?

路由器中的路由表是怎么得出来的?

# 地址解析协议ARP

ARP协议能够通过机器(主机或路由器)的IP地址找到它的硬件地址。ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。如果不在同一个局域网,就把路由器的地址给写上,由路由器转发到下一个局域网。

每台主机都设有一个ARP高速缓存(ARP cache),里边有本局域网上的各主机和路由器的IP地址到硬件地址的映射表。那么这个映射表是如何维护的呢?

当主机A要向本局域网上的某台主机B发送IP数据报时,在ARP高速缓存中查看有没有主机B的IP地址。如果有,就拿到对应的硬件地址。如果没有,则通过以下步骤找出主机B的硬件地址:

  • ARP进程在本局域网上广播发送一个ARP请求分组,该分组包含A的IP和MAC地址和B主机的IP地址
  • 在本局域网上的所有主机上运行的ARP进程都受到此ARP请求分组
  • 如果主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下,并向主机A发送ARP响应分组,该分组包含自身的MAC地址,如果不一致,不理睬这个请求分组
  • 主机A收到主机B的ARP响应分组后,在ARP高速缓存中写入主机B的IP地址到硬件地址的映射

# IP数据报格式

image-20210306154119608

  • 版本:IP协议版本

路由表,保存了(目的网络地址(网络号),下一跳地址)

image-20210306160520095 image-20210306164315142

# ICMP协议

网际控制报文协议 ICMP (Internet Control Message Protocol) ,用于传输出错报告控制信息。ICMP协议主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。

我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的如跟踪路由的Tracert命令也是基于ICMP协议的。

# 虚拟专用网VPN和网络地址转换(NAT)

假如一个机构内部的计算机通信采用的是TCP/IP协议,这些计算机可以由机构内部自行分配IP,这些IP地址称为本地地址,不需要向互联网管理机构申请全球唯一的IP地址(全球地址),这样能够节约IP地址资源。

但是如果机构内部的某台主机需要和互联网连接,那么本地地址就可能和全球地址重合。所以为了解决这个问题,RFC 1918 指明了一些专用地址,这些地址只能用于一个机构的内部通信,而不能用于和互联网上的主机通信,就是说,这些专用只能用作本地地址而不能用作全球地址。同时,在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发,以下是三个专用地址块

  • 10.0.0.0 到10.255.255.255
  • 172.16.0.0到172.31.255.255
  • 192.168.0.0到192.168.255.255

采用这样的专用IP地址的互连网络称为专用互联网或者本地互联网。

有时一个很大的机构分布在世界各地,这些部门需要交换信息,该如何做到?

虚拟专用网:利用公用的互联网作为本机构个专用网之间的通信载体。

image-20210306201536659

使用IP隧道技术实现虚拟专用网

场所A上的主机要和场所B上的主机通信,需要R1,R2路由器一段连接本地互联网,另一端连接互联网,连接互联网的一端需要具有合法的全球IP地址。主机X和主机Y的通信需要通过R1和R2,X发送IP数据报,路由器把IP数据包加密后,然后重新加上数据报的首部,源IP和目的IP是R1和R2连接互联网的IP,R2受到数据报之后,解密,拿到真实的目的IP,向主机交付

网络地址转换

如果专用网需要使用互联网?

image-20210306202704492

专用网内的IP数据报发送到互联网的时候,它的IP报是不能够被转发的(前面提到),但是路由器可以将IP数据包的源IP换成路由器的全球IP地址,然后发送出去,数据报回来的时候通过地址转换表找到真实的源IP地址。

image-20210306203047683
  • 概述
  • 网际协议 IP
  • 地址解析协议ARP
  • IP数据报格式
  • ICMP协议
  • 虚拟专用网VPN和网络地址转换(NAT)