网络传输:网卡、IP、网关、子网掩码、MAC、ARP、路由器、NAT、交换机

目录

网卡

网卡(Network Interface Card,简称NIC),也称网络适配器。

OSI模型:

1、网卡工作在OSI模型的最后两层,物理层和数据链路层 。物理层的芯片称之为PHY,数据链路层的芯片称之为MAC控制器。

2、物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。

3、数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。

网卡混杂模式:

混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址。普通模式下网卡只接收发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃。

连接方式:PCI总线接MAC总线,MAC通过MII接PHY,PHY通过变压装器接网线。

网卡接收数据流程:

网卡接收到一个数据包,根据目的MAC地址判断是不是发给自己的,如果不是则将丢弃该数据包。

IP

IP(Internet Protocol),位于OSI模型的网络层。IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。

  • 1、IP地址 = 网络地址 + 主机地址(又称:网络号和主机号)
  • 2、我们把网络号相同的主机称之为本地网络中的主机,网络号不相同的主机称之为远程网络中的主机。
  • 3、本地网络中的主机可以直接相互通信,远程网络中的主机要相互通信必须通过本地网关(Gateway)来传递转发数据。

IP地址主要有A、B、C、D、E五类地址:

  • A类:由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是"0"(网络地址全为0的地址被保留使用)。地址范围是1.0.0.0 到 127.255.255.255,主要分配给大量主机而局域网网络数量较少的大型网络;

  • B类:由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高两位必须是"10"。地址范围是128.0.0.0 到191.255.255.255,一般用于国际性大公司和政府机构;

  • C类:由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是"110"。地址范围是192.0.0.0 到223.255.255.255,用于一般小公司校园网研究机构等;

  • D类:第一个字节由"1110"开始。全零("0.0.0.0")地址对应于当前主机。全"1"的IP地址("255.255.255.255")是当前子网的广播地址。地址范围是224.0.0.0 到 239.255.255.255,又称做广播地址,因此任何第一个字节大于223小于240的IP地址是多点播送地址。

  • E类:由"11110"开始,地址范围是240.0.0.0 到255.255.255.255,暂时保留。

网络地址

计算网络地址就是判断网络中的计算机在不在同一网络,在就能通,不在就不能通,需要借助本地网关的帮助。

将IP地址和子网掩码全部转换为二进制形式,然后二者逐位相与的结果就是网络地址。

bash 复制代码
IP十进制:192.168.1.1
IP二进制:11000000 10101000 00000001 00000001

子网掩码十进制:255.255.255.0
子网掩码二进制:11111111 11111111 11111111 00000000

网络地址 = IP & 子网掩码
网络地址二进制:11000000 10101000 00000001 00000000
网络地址十进制:192.168.1.0

主机地址

IP与子网掩码的非的结果相与就是主机地址。

bash 复制代码
IP十进制:192.168.1.1
IP二进制:11000000 10101000 00000001 00000001

子网掩码十进制:255.255.255.0
子网掩码二进制:11111111 11111111 11111111 00000000

主机地址 = IP & (~子网掩码)
主机地址二进制:00000000 00000000 00000000 00000001
主机地址十进制:0.0.0.1

子网

为了确定网络区域,分开主机和路由器的每个接口,从而产生了若干个分离的网络岛,这些独立的网络岛叫做子网(subnet)。

子网掩码

子网掩码的表示方法

(1)点分十进制表示法

二进制转换十进制,每8位用点号隔开。

例如:子网掩码二进制11111111.11111111.11111111.00000000,表示为255.255.255.0

(2)CIDR斜线记法

IP地址/n

  • 例1:192.168.1.100/24,其子网掩码表示为255.255.255.0,二进制表示为11111111.11111111.11111111.00000000

  • 例2:172.16.198.12/20,其子网掩码表示为255.255.240.0,二进制表示为11111111.11111111.11110000.00000000

不难发现,例1中共有24个1,例2中共有20个1,所以n是这么来的。运营商ISP常用这样的方法给客户分配IP地址。

注:n为1到32的数字,表示子网掩码中网络号的长度,通过n的个数确定子网的主机数=2(32-n)-2(-2的原因:主机位全为0时表示本网络的网络地址,主机位全为1时表示本网络的广播地址,这是两个特殊地址)。

为什么要使用子网掩码?

子网掩码可以分离出IP地址中的网络地址和主机地址。如果两台主机要通信,首先要判断是否处于同一网段,即网络地址是否相同。如果相同,那么可以把数据包直接发送到目标主机,否则就需要路由网关将数据包转发送到目的地。

可以这么简单的理解:A主机要与B主机通信,A和B各自的IP地址与A主机的子网掩码进行and运算,看得出的结果:

  • 结果如果相同,则说明这两台主机是处于同一个网段,这样A可以通过ARP广播发现B的MAC地址,B也可以发现A的MAC地址来实现正常通信。
  • 如果结果不同,ARP广播会在本地网关终结,这时候A会把发给B的数据包先发给本地网关,网关再根据B主机的IP地址来查询路由表,再将数据包继续传递转发,最终送达到目的地B。

子网掩码的分类

(1)缺省子网掩码

也叫默认子网掩码,即未划分子网,对应的网络号的位都置 1 ,主机号都置 0 。

未做子网划分的IP地址:网络号+主机号,则:

  • A类网络缺省子网掩码: 255.0.0.0,用CIDR表示为/8
  • B类网络缺省子网掩码: 255.255.0.0,用CIDR表示为/16
  • C类网络缺省子网掩码: 255.255.255.0,用CIDR表示为/24

(2)自定义子网掩码

将一个网络划分子网后,把原本的主机号位置的一部分给了子网号,余下的才是给了子网的主机号。其形式如下:

做子网划分后的IP地址:网络号+子网号+子网主机号,举个例子:

  • 192.168.1.100/25,其子网掩码表示:255.255.255.128,意思就是将192.168.1.0这个网段的主机位的最高1位划分为了子网。

网关

计算机的网关(Gateway)就是到其他网段的出口,也就是路由器接口IP地址。

  • 路由器接口使用的IP地址可以是本网段中任何一个地址,不过通常使用该网段的第一个可用的地址或最后一个可用的地址,这是为了尽可能避免和本网段中的主机地址冲突。

在如下拓扑图示例中,A与B,C与D,都可以直接相互通信(都是属于各自同一网段,不用经过路由器),但是A与C,A与D,B与C,B与D它们之间不属于同一网段,所以它们通信是要经过本地网关,然后路由器根据对方IP地址,在路由表中查找恰好有匹配到对方IP地址的直连路由,于是从另一边网关接口转发出去实现互连。

默认网关

默认网关地址是主机位除了最后一位全置1后得到的。

假设现有一个ip地址为193.6.7.0/24,根据网络前缀24可知前24位为网络位,后8位为主机位,因此该网络的默认网关地址就是IP地址193.6.7.11111110(加粗的部分为网络位),换算成十进制数即193.6.7.254/24。

一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。现在主机使用的网关,一般指的是默认网关。一台电脑的默认网关是不可以随随便便指定的,必须正确地指定,否则一台电脑就会将数据包发给不是网关的主机,从而无法与其他网络的主机通信。默认网关的设定有手动设置和自动设置两种方式。

(1)手动设置

手动设置适用于电脑数量比较少、TCP/IP 参数基本不变的情况,比如只有几台到十几台电脑。因为这种方法需要在联入网络的每台电脑上设置"默认网关",非常费劲,一旦因为迁移等原因导致必须修改默认网关的 IP 地址,就会给网管带来很大的麻烦,所以不推荐使用。

需要特别注意的是:默认网关必须是电脑自己所在的网段中的 IP 地址,而不能填写其他网段中的 IP 地址。

(2)自动设置

自动设置就是利用 DHCP(Dynamic Host Configuration Protocol, 动态主机配置协议)服务器来自动给网络中的电脑分配 IP 地址、子网掩码和默认网关 。这样做的好处是一旦网络的默认网关发生了变化时,只要更改了 DHCP 服务器中默认网关的设置,那么网络中所有的电脑均获得了新的默认网关的 IP 地址。这种方法适用于网络规模较大、TCP/IP 参数有可能变动的网络。另外一种自动获得网关的办法是通过安装代理服务器软件(如MS Proxy)的客户端程序来自动获得,其原理和方法和 DHCP 有相似之处。

MAC

MAC地址(Media Access Control Address),网卡硬件地址,用于在网络中唯一标示一个网卡,长度6字节,由IEEE协会分配,网络设备制造商生产时写在硬件内部。

MAC地址由48位二进制数(6个字节)组成,通常表示为6位十六进制数,格式为XX-XX-XX-XX-XX-XX。如:00-16-EA-AE-3C-40就是一个MAC地址,其中前3个字节,16进制数00-16-EA代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3个字节,16进制数AE-3C-40代表该制造商所制造的某个网络产品(如网卡)的系列号。

ARP

地址解析协议(Address Resolution Protocol,ARP),建立32位IPv4地址与以太网的48位MAC地址之间的映射,位于OSI模型的数据链路层

ARP映射表记录了IP地址和MAC地址的映射关系。每一台主机和路由器都设有ARP映射表,在实际传输中,通常已知下一跳的目的IP地址,通过查询ARP映射表即可知道对应的MAC地址。

ARP协议结构,总长度28字节。

  • 硬件类型(Hardware Type):表示网络类型,常见值为1,表示以太网,2字节。
  • 协议类型(Protocol Type):表示所使用的协议类型,IPv4的值为0x0800,2字节。
  • 硬件地址长度(Hardware Address Length):通常为6,表示MAC地址长度为6字节,1字节。
  • 协议地址长度(Protocol Address Length):通常为4,表示IPv4地址长度为4字节,1字节。
  • 操作码(Opcode):操作码为1表示ARP请求,操作码为2表示ARP应答,2字节。
  • 发送方硬件地址(Sender Hardware Address):发送方的MAC地址,6字节。
  • 发送方协议地址(Sender Protocol Address):发送方的IP地址,4字节。
  • 目标硬件地址(Target Hardware Address):目标主机的MAC地址,在ARP请求时为空,6字节。
  • 目标协议地址(Target Protocol Address):目标主机的IP地址,4字节。

ARP映射表建立:

1、初始映射表为空。

2、源主机已知下一跳目的IP地址,想知道下一跳的MAC地址。

3、源主机广播ARP请求,包含源IP、源MAC、目的IP,广播到本地网络所有主机(源主机和目的主机在同一网络)。

4、目的主机收到ARP请求后,检测目的IP地址是否和本机IP一致,不一致则丢弃。

5、如果一致,先把ARP请求中源IP源MAC保存在本机的ARP表;给源主机回复ARP响应,单播,告知源主机自己的MAC地址。

6、如果源主机和目的主机不在同一个网络,通过路由器查找路有表,把目的主机IP转换为下一跳IP,再通过ARP协议,将下一跳的IP转换为对应的MAC。

windows查询arp表

bash 复制代码
arp -a

linux查询arp表

bash 复制代码
arp -n

ARP抓包分析

使用Wireshark工具抓取ARP协议的数据包,输入arp过滤,下图截取两条arp包,第一个包是ARP请求包,第二个包是ARP响应包;请求和响应的协议结构一致,部分字段取值不同。

xiaodu设备发了ARP请求广播,询问192.168.3.135主机的MAC地址,135主机(也就是抓包的主机)回复ARP响应。

展开ARP请求包

看几个关键点:

  • arp请求包以太头的目的MAC地址,Destination: Broadcast (ff:ff:ff:ff:ff:ff),在局域网广播。
  • 以太头类型:ARP(0X0806)。
  • Opcode操作码是1,代表ARP请求。
  • Target MAC address,目的MAC为空,希望目标响应的MAC地址。

展开ARP响应包

关键点:

  • 以太头的目的MAC是ARP请求端xiaodu设备的MAC,不再是广播。
  • Opcode操作码是2,代表ARP响应。
  • 源MAC地址,也就是ARP请求想要获取的MAC地址。

路由器

路由器(Router)是连接两个或多个网络的硬件设备,在网络间起网关 的作用,路由器工作在网络层,根据目的IP进行数据转发。

具有相同网络地址的IP地址计算机之间可以直接通信,如果想要与其他网段的计算机进行通信,则必须经过路由器转发出去。

当IP数据包到达路由器时,路由器先查看目的IP地址,然后决定是直接发送目的主机还是转发给下一个路由器。

  • WAN(Wide Area Network)接口,是路由器上用于连接到互联网或其他广域网的接口。
  • LAN(Local Area Network)接口,是路由器上用于连接内部网络设备的接口。通过LAN接口连接多个网络设备,形成一个局域网,局域网内设备可以相互通信。

NAT

NAT(Network Address Translation,网络地址转换),是路由器的重要功能,是解决IP地址不够用的主要手段。

  • 路由器LAN口连接主机,当对外网通信IP数据包到达路由器时,路由器把源IP替换成WAN口IP,如果有多级路由器则逐级替换,最终数据包中的源IP成为一个公网IP,这种技术称为NAT。
  • NAT映射表,当局域网第一次访问外网时,局域网IP和外网IP记录到映射表;当路由器收到外网数据时,根据映射表把数据包目标IP修改为局域网IP并转发到主机。
  • NAT缺点:NAT是一对一的IP转换,不能满足多个局域网IP同时使用一个公网IP访问外网的需求。

NAPT

NAPT(Network Address Port Translation),即网络地址端口转换,克服了NAT的缺点,NAPT也被称为"多对一"的NAT。

  • NAPT与NAT的区别在于,NAPT不仅转换IP包中的IP地址,还对IP包中TCP和UDP的Port进行转换。这使得多台局域网主机利用1个NAT公共IP就可以同时和公共网进行通信。
  • 当局域网主机访问外网的IP数据包到达路由器时,NAPT网关会把源IP替换为NAPT的公网IP,同时将源Port转换为NAT动态分配的1个Port,然后转发到公共网。
  • 当公网响应的IP包到达NAPT网关时,NAPT会将IP包的目的IP转换成局域网主机的IP,同时将目的Port转换为局域网主机的Port,然后把IP包转发到局域网。
  • 对于通信双方而言,这种转换是透明的,缺点在于其通信仅限于TCP或UDP。

在路由器将数据包转发到下一个网络时,它会更改源MAC地址为当前接口的MAC地址,并更新目标MAC地址为下一个接口的MAC地址,以确保数据包在不同网络之间正确地转发和传输‌。

也就是说,经过路由器的IP包,MAC、IP、PORT都有可能改变。

交换机

交换机工作与OSI第二层,数据链路层

在交换机维护端口与MAC地址映射表,记录了端口下包含主机的MAC地址。端口地址表是交换机上电后自动建立的,保存在RAM中,并且自动维护。

交换机功能:

  • 1、自学习,交换机通过广播等自动学习的方式获取每个端口对应的MAC地址,建立映射表。
  • 2、转发和过滤,当一个数据帧的目的MAC地址在MAC地址表中有映射时,它被转发到连接目的节点的端口而不是所有端口(如该数据帧为广播/组播帧则转发至所有端口)。
  • 3、消除回路,当交换机包括一个冗余回路时,以太网交换机通过生成树协议(STP)避免回路的产生,同时允许存在后备路径。

自学习流程

  • 1、假设ABCD4个主机分别接入交换机1324端口上。
  • 2、A向B发送数据帧,从端口1进入交换机,交换机查询映射表,没有查到从哪个端口转发该帧;交换机会把A的MAC地址和端口1写入映射表,并在其他所有端口广播数据帧。
  • 3、C和D收到数据帧直接丢弃,因为目的MAC不匹配;B正确接收数据帧。
  • 4、如果此时B向A发送数据帧,交换机查询映射表发现有A的MAC地址,于是把数据帧从端口1转发给A,不再广播;此时交换机也建立了B的MAC与端口3的映射。

设备通过交换机直连,彼此之间一定要在同一网段,否则必须要用路由器进行转发。因此不同的网段之间才需要路由器转发。

相关推荐
还听珊瑚海吗几秒前
基于WebSocket和SpringBoot聊天项目ChatterBox测试报告
spring boot·websocket·网络协议
想睡hhh8 分钟前
网络基础——协议认识
网络·智能路由器
kunge201324 分钟前
Ubuntu22.04 安装virtualbox7.1
linux·virtualbox
清溪54925 分钟前
DVWA中级
linux
Sadsvit1 小时前
源码编译安装LAMP架构并部署WordPress(CentOS 7)
linux·运维·服务器·架构·centos
xiaok1 小时前
为什么 lsof 显示多个 nginx 都在 “使用 443”?
linux
苦学编程的谢2 小时前
Linux
linux·运维·服务器
G_H_S_3_2 小时前
【网络运维】Linux 文本处理利器:sed 命令
linux·运维·网络·操作文本
Linux运维技术栈2 小时前
多系统 Node.js 环境自动化部署脚本:从 Ubuntu 到 CentOS,再到版本自由定制
linux·ubuntu·centos·node.js·自动化
绝缘体12 小时前
折扣大牌点餐api接口对接适合本地生活吗?
大数据·网络·搜索引擎·pygame