[TOC]
前言
关于网络,其实对于我们客户端开发,网络部分绝大多数内容都是在应用层,多了就是再涉及点传输层的内容,但是为了了解计算机网络通信的整个逻辑,我想更深入的去学习网络的相关知识,这对于我们理解计算机,认清我们所处的网络世界,更快的解决开发中遇到的网络问题其实是很有帮助的,所以我打算从头开始学习网络相关内容
由于本系列是我个人学习过程中对网络内容的总结,因此更像是笔记性质,并且由于理解能力的问题,可能会出现表述错误的地方,所以这不是针对于网络和开发初学者的教程,以免误人子弟,如果在看的过程中发现有理解或表达错误的地方,还请见谅,也烦请指出,以便我去改正,感谢
计算机通信基础
- IP地址:通过IP地址找到主机
- MAC地址(网卡地址):网卡接收数据决定要不要继续处理
连接方式
网线直连
两台设备间通过交叉线直连通信,知道对方ip后先通过ARP广播获取对方mac地址,ARP广播会给同网段所有链接的设备发送消息询问mac地址,接收方收到询问后发现是找自己的mac地址则回复自己的mac地址,如果不是找自己就丢弃不处理
同轴电缆
优点:
- 可以连接多台设备,
缺点:
- 半双工通信(双发可以互发消息但不能同时)
- 不安全,arp会讲广播发给连接的所有设备
- 某一段断掉,网络瘫痪
连接的多台设备当有设备同事发消息,就会产生冲突,这样就形成了一个冲突域,
集线器
同同轴电缆类似,只不过当某一段断掉,不影响其他设备
网桥
- 可以连接多个集线器,但又能隔绝冲突域
- 可以记录mac地址,当arp广播询问mac地址时,会记录请求与响应设备的mac地址,当再次有arp广播时,会判断记录的mac地址属于哪个冲突域,然后只将消息发送到这个域
交换机
- 全双工通信
- 集线器与网桥功能的结合体,可以记录mac地址,又能连接多个设备
- 比集线器安全
路由器
以上的几种通信方式要求:
- 连接的设备要在同一网段
- 连接的设备在同一广播域
那么如果全世界的设备都通过以上方式连接,所有设备就在一个网段也就是同一个广播域,一个设备发送ARP广播,其他几十亿设备都会收到,这是不安全的,并且这样做IP地址也会不够
所以怎么在不同网段通信?路由器可以解决
- 可以在不同网段发送数据
- 可以隔绝广播域
概括·
- 路由器上有多个网关端口,每个网关可以设置自己的IP,通过设置IP地址(和要连接的网段一致)接入一个网段,通过此方式可以将多个网段连接起来
- 计算机发起通信前会判断目标IP和自己是否属于同一网段,如果是,则发起ARP广播获取目标MAC地址,如果不是则发起ARP广播获取网关的MAC地址;获取MAC地址前提是知道IP,计算机只知道自己要发送目标的IP,并不知道网关的IP,所以计算机的网络设置中如果是静态配置要手动配置一个默认网关地址(计算机网络设置中,显示"路由器地址"指的就是路由器网关地址),如果是DHCP则会自动获取
- 获取到网关MAC地址后将数据包发给网关
- 网关收到数据包后,通过目标网段对应的网关,发送ARP广播到对应网段获取目标MAC地址
- 目标设备收到数据后,回传数据给源设备完成跨网段通信
MAC地址
每个网卡都有一个全球唯一的MAC地址,固化在网卡硬件上,它由6字节也就是48位标识,前三字节由IEEE(注册管理机构)分配给厂商,后三字节厂商自行分配,查看地址
MAC地址一般长这样
1 | 8A-7B-6C-01-23-45(Windows) |
- MAC地址可以修改(网卡硬件的不能修改,但是我们可以给电脑设置一个虚拟的MAC地址,这样系统就会使用设置的这个MAC地址,而不是网卡本身的MAC地址)
- 有时因为交换机等的人为配置的限制,不在允许范围内的MAC地址的设备不能上网,那么我们可以拿到允许上网设备的MAC地址,将自己的进行修改,来进行蹭网,但是同一个网段有两台设备具有相同的MAC地址,同时间其中一台设备是不能上网的
- 通信过的设备会缓存目标的IP和MAC地址的映射关系
arp -a
查看 - 如果A设备的网卡换了,而其他设备缓存的有A设备的IP和MAC地址,这时候再向A通信会失败,这时候会重新发送ARP广播获取新的MAC地址
- 也可以手动给设备添加IP和MAC的映射关系
arp -s IP地址 MAC地址
补充
- 同一个网段,代表在同一个广播域,代表可以收到同样的ARP广播
ARP协议
工作过程
主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:
- 根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
- 如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
- 主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
- 主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
- 当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。
如果目标MAC地址全是F则表示这是一个广播
ICMP协议
ICMP是“Internet Control Message Protocol”(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。
ping命令使用的就是ICMP协议
- 本文标题:网络(1)--网络通讯的基础
- 本文作者:Lazyloading
- 创建时间:2022-05-23 17:42:14
- 本文链接:https://lazy.wiki/posts/49b8739d/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!