数据包在网络中的流转
文分为两部分 基础概念介绍 和数据包在网络中流转的过程
1.啥是集线器
从0开始,当一台机器A想与机器B发消息,连一根实体线即可完成(假设这根线很牛逼,连上就能通消息)
两台机器交互没有问题,如果一台机器A想与B,C,D,E,F五台机器通信,他就需要扯五根线,
如果六台机器想互相通信那就得扯十五条,十分尴尬。 so 有了集线器,每台机器只需要和集线器扯一根线即可
机器A都发消息到集线器中转,再由集线器转发至所有的机器。
每台机器接到消息再通过MAC地址判断该消息是不是自己接收。属于无脑广播类型,
集线器属于网络分层中的最底层——物理层
集线器的主要问题在于每个消息都要广播发给所有连接的机器,开销极大。 引入交换机来解决。
2.啥是交换机
交换机这东西可以理解为一个plus版的集线器
交换机维护了一份MAC地址表
当机器A想发消息给机器C,A只需要将消息发给交换机,交换机找到C的MAC地址,然后单独发给C 而不是广播。
交换机如何构建这个MAC地址表呢?
很简单,不知道MAC地址是哪台机器还是广播,广播给所有连接交换机的机器,当C发现MAC地址是自己然后响应,MAC地址表记录下来,就得这么一点点构建。
单台交换机的端口有限,只能支撑那么几个机器连接。
那么多台机器可以通过交换机与交换机连接
如果当一台交换机需要对接的交换机多了起来,还是会出现端口不够用情况,因此引入了路由器。
3.啥是路由器
路由器也是作为一个转发的中转站,每个路由器有自己独立的MAC地址。路由器的每个端口都代表了独立的MAC地址
路由器属于网络层,通过IP地址进行转发
4. 啥是子网
ip地址通过子网掩码进行与运算后相等的,就是在同一子网,不相等就不在同一子网。
在同一子网的机器可以仅通过交换机,通过MAC地址就能通信。
不在同一子网的机器就需要通过路由器转发来实现最终通信。
5. 啥是默认网关
我新到手一台机器A想通过互联网通信,第一时间要配置默认网关——也就是路由器的ip
机器A发现要发送的机器ip是外网的,直接把消息发给默认网关,剩下的不用管了,默认网关去做转发。
6.完整的流转过程
好,依据上边的图,我现在拥有一台机器A,今天刚装的宽带 村里通了网,我想往隔壁村的 机器H发一条消息。
我们首先要知道成功的发送一条消息的数据头信息的几个必要字段
我现在机器A已知的信息:
机器A的MAC地址,机器A的IP地址,机器A的子网掩码,默认网关,要发送的机器H的IP地址
第一步
那么机器A首先通过子网掩码,判断机器H的IP地址是否与A是同一子网。
发现并不是,那么把消息丢给默认网关,也就是路由器。
此时源MAC地址就是:MAC_机器A 目标MAC地址:MAC_路由器 源IP地址:IP_机器A 目标IP地址:IP_机器H
其中MAC_路由器如何知道呢?
ARP协议,可通过IP地址找到对应MAC地址。原理也是先广播,后缓存
第二步
机器A打包将数据包发给连接的交换机,交换机通过MAC地址映射表找到具体哪台机器是路由器 (表中没有就广播去找),然后发出去
第三步
路由器此刻拿到这个数据包,此时通过ARP协议,找到 IP_机器H 对应的MAC地址 MAC_机器H,填到目标MAC地址的位置
看到目标IP为 IP_机器H,便从路由表中查到这个IP对应路由器的哪个端口,选择该端口发出数据包。
(路由表是路由器自己维护的表,由路由算法+人工配置生成。通过路由表可以查到某个子网的ip对应路由器的哪个端口)
第四步
包从路由器的端口出来,发到对应的交换机上。
交换机再通过MAC地址表,找到MAC地址对应的机器H,最终消息到达。
7. 再看网络分层与对应的协议
TCP/IP 五层模型是以 OSI 七层优化而来
自底向上依次是 物理层,数据链路层,网络层,传输层,应用层
物理层 没有感情的物理电信号传输
数据链路层 通过交换机来中转,通过MAC地址来识别 主要解决的问题就是通过MAC地址映射表,找到想要发送的MAC是哪台机器
网络层 通过路由器来中转,通过IP地址来识别 典型的协议就是IP协议,ARP协议 主要解决的问题就是分清内网外网,通过下一跳准确路由到路由器,并通过IP地址找到MAC地址
传输层 这时候就上升到了操作系统端口,套接字等层面 典型的协议就是 TCP协议,UDP协议 主要解决的问题就是数据包收发的可靠性等问题
应用层 到这包已经能完美的发到对应的机器上,问题就在于怎么解析这个包 典型的协议就是HTTP协议,FTP协议等 主要解决的就是千辛万苦来的包怎么解析成你想要的样子
over