32.网络基础概念(二)
局域网网络传输流程图
两台主机在同一个局域网,是否能够直接通信?以太网原理举例:上课,老师点名小王让他站起来回答问题。教室里的其他人是可以听见的,为什么其他人不响应?因为老师叫的是小王,和其他人无关。因此教室发送消息,并不是只有一个人能收到,而是有吃瓜群众(发消息有点类似消息队列,有类型的数据块)每台主机在局域网上,要有唯一的标识来保证主机的唯一性:mac地址。
以太网原理
以太网发送数据,数据是用一个结构封装的,src:源主机mac地址,dst:目标主机mac地址,data:数据。
结论:
- 以太网中,任何时刻,只允许一台机器向网络中发送数据。
- 如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞。
- 没有交换机的情况下,一个以太网就是一个碰撞域。
- 所有发送数据的主机要进行碰撞检测和碰撞避免。
工作流程:所有主机 先发 数据,然后进行碰撞检测,检测到碰撞进行碰撞避免,执行碰撞避免算法,例如发数据的主机休眠一段随机的时间后重发。如果没有检测到碰撞,收集到数据的主机对数据判断dst是否是自己,不是就丢弃,是就留下。
理解记忆:以太网本质就是共享的资源!-> 临界资源,互斥属性(与互斥锁不同的是,主机是先发在处理)
主机间通信的本质
主机之间通信:本质是两个协议栈在通信
数据发送的原始动力:人(90%情况)
TCP/IP协议栈理解
用户通信流程:用户A发送数据,用户层添加用户层报头,传输层添加传输层报头,以此类推,直到数据链路层,将数据交给网卡,网卡把数据发送给用户B的主机,传到数据链路层,然后往上传层层解包分用(对端同层,要先解包:报头和有效载荷进行分离),到用户B就拿到了数据。报文=报头+有效载荷为什么要自顶向下封装?必须贯穿操作系统,贯穿协议栈(发送数据需要网卡,OS是硬件网卡的管理者)。封装和解包实现了,同层之间,在直接通信,因为我收到的,就是你发送的!、细节1:
- 报头必须要能做到,和有效载荷进行分离的能力。
- 报头中必须包含,如何将自己的有效载荷,交付给上层的那一个具体协议。
细节2:
底层收到报文,但是报文不是发送给我的,数据链路层直接丢弃(数据链路层的报头有起始mac地址和目标mac地址)
细节3:
协议栈,栈的理解:自顶向下封装的过程(入栈),自底向上解包分用的过程(出栈)
拓展:网卡和数据链路层,混杂模式,抓包工具的原理(目标mac地址即便不是自己,也保留数据)
同层之间,都认为自己在和对方同层协议直接通信理解:
同层之间,报文的结构一样(报头结构一样,有效载荷结构也一样)
网络中的地址管理---认识IP地址
IP地址,用来表示,全球范围内,主机的唯一性(公网IP)
IP和MAC理解:
唐僧带着四个徒弟去西天取经,逢人便说,贫僧自东土大唐而来,要去往西天求取真经(东土大唐是起点,西天是终点)。他们到车迟国面见国王,车迟国国王说离我最近的是女儿国,你下一站是女儿国(车迟国是短期起点,女儿国是短期终点)。
从哪来,到哪去 --- 源IP,目标IP地址
上一站从哪里来,下一站去哪里 --- 源MAC,目标MAC地址
总结:MAC地址是标识局域网主机唯一性的地址,IP地址是标识广域网主机唯一性的地址。
跨网络传输流程(一切皆IP)
主机A发送数据给主机B,主机A的IP地址:192.168.2.2,主机B的IP地址:172.168.2.2,。
主机A不知道172主机在哪里!但是主机A一定能确定,报文绝对不是发送给本地网络的主机的!(有了目的IP,可以判定要将报文发送给路由器)
路由:发现不能发给自己局域网主机的报文,就推送给路由器
网络层报头包含:源IP地址和目标IP地址
数据链路层报头包含:源MAC地址和目标MAC地址
主机A发送数据到网卡,A局域网来发送,发给路由器的网卡macLeft。路由器数据链路层拿到数据,进行解包分用,报头去掉传到网络层。数据链路层对IP地址做分析,发现是B局域网内的IP,封装主机B的MAC地址,通过B局域网传到主机B。
结论:
- 路由过程中,IP地址不变,mac地址一直在变(mac地址只会在本局域网内有效)
- 无论底层用的是以太网,无线LAN还是自定义局域网通信原理,都可以
- 网络层+IP的本质意义:给网络提供了一层虚拟化层,让世界上所有的网络,都叫做IP网络(一切皆IP,类比一切皆文件,封装了struct file,屏蔽底层硬件差异)
只要IP地址,技术上可以实现网络通信吗?可以,IP地址是唯一的,局域网内也是唯一的,使用IP地址替换MAC地址技术上可以做到。
为什么不这么做?
网络的发展是从局部到整体的,局域网到广域网,MAC地址是比IP地址先出,复用MAC地址那套成本更低,兼容性更好,且只使用IP地址并不会给效率带来显著的提高(类比C语言翻译成汇编,汇编在翻译成2进制)。