数据链路层是有目的主机的硬件地址的,以下是我为你做的比喻。里面附带着二层和三层寻址以及你所提问的问题!
你在家里,你的家里非常干净,而且你的家人在家里都穿着拖鞋(拖鞋:本地IP),这个时候你想去趟超市买个“苹果”,但是你出去的时候你不可能穿着拖鞋跑到外面去买苹果(你穿拖鞋出去,你回来了吧地板搞脏了,你妈肯定跟你没完),所以这个时候你在门口会换上外出的运动鞋(运动鞋:网络IP),然后你就穿着运动鞋去往超市的路径,(怎么去超市 你应该知道啊 所谓的三层寻址 之前走的路 你脑子肯定有印象)最终找到超市,然后在买你想要的苹果。
买到苹果之后你是不是要返回家里?这个时候你会带着苹果按原先的路径回到你家里,走到家门口的时候,你会自觉的换上你”自己“的拖鞋,然后回到你房间慢慢享受你的苹果
分析:
你的房子就是一个路由器,你就是使用者,你的拖鞋就是内网IP,你的运动鞋就是公网IP,超市就是目的IP,苹果就是目的服务端口,你个人的“嘴巴”就是源端口(端口就是区分服务,说白了就是我需要什么样的服务 是泡妞 还是买东西 你自己看着办)苹果是属于水果一类,我们比喻成TCP类型
现在就满足一条数据流了:源地址-目的地址-源端口-目标端口-协议类型
当你想去买苹果的时候,你应该知道自己需要干什么了,那么这个时候计算机就会生成一个数据包,数据包就是:拖鞋+嘴巴+超市+苹果+水果一类
因你的路由器出接口设置的NAT源地址转换,当这个数据包到路由出接口的时候,数据包会发生改变,数据包则是(请认真看那些参数变更了):”运动鞋“+”模拟嘴巴“+超市+苹果+水果一类
当路由器变更你的数据包的时候,路由器他很聪明,为了防止忘记我刚才对这个数据包做的更改,我先在纸上做一个记录,表的记录则是:[“拖鞋+嘴巴”+超市+苹果+水果类型<--------->”“运动鞋+模拟嘴巴”+超市+苹果+水果类型 ] ;然后在吧这个数据包从出接口发出去
当这个数据包到达对方之后,对方就会根据”源地址(运动鞋)“进行回复对方,这个数据包则是:超市+苹果+运动鞋+模拟嘴巴+水果类型
因出接口做了NAT源地址转换,当这个回复数据包到达路由器接口的时候,路由器会检查我刚才做的变更记录,我对比一下,我发现我改过这条记录(如果这条流在表里没有记录, 这个时候你懂得 要么往死里打 要么丢到一边),然后我在吧这个数据包之前变更过的参数在改回来,然后从路由器的内部接口转发给”最初“请求者。那么这个时候的数据包则是:超市+苹果+”拖鞋+嘴巴“+水果类型(源地址+源端口+目标地址+目标端口+协议)
关于数据包到了路由器的内部接口是如何转发到内部主机的:这个很简单,比如你换鞋的门口有一块牌子,牌子写着小明<----->1号房间 小明的妈妈<----->2号房间 小明的爸爸<------>3号房间 (在网络中 房间就是电脑的MAC ,名字就是电脑的IP)
在则如何知道对方的MAC和IP,在现实当中,一家人可以协商吧自己的名字写到门口的牌子上,在网络中 电脑一样,他们也会协商,他们协商是通过ARP广播来实现的,好比小明的爸爸喊:小明 你的房间号是多少,这个时候小明就回答 我的房间号是1 他爸爸听到了之后 就会铭记在心了,或者在自己的笔记本上做个记录,以防我以后有东西需要给的时候,我直接往他的门口一丢,而不用喊他名字了 然后在让他告诉我他在哪个房间里 (为什么要他的门号 因为链路层只认识门口号不认识)。
你在不懂,我就没辙了!
有个穿皮鞋的人也要到相同超市买苹果,那路由器的记录是皮鞋+嘴巴”+超市+苹果+水果类型”“运动鞋+模拟嘴巴”+超市+苹果+水果类型,那回来一个“运动鞋+模拟嘴巴”+超市+苹果+水果”数据他怎么知道是穿皮鞋的还是穿拖鞋的?
你要明白你所说的皮鞋是指的是内网的IP,内网的IP在全局里也是唯一的,我指的这个嘴巴就是源端口号了,那么这个端口就是随机生成的,也就是说在内网全局里,源地址+源端口是不会重叠的,那么既然不会重叠,就可以区分“内网”的每个请求者,回来的数据包、路由器是如何知道原先请求是皮鞋?还是一样,在出接口的时候,在NAT地址转换表里做转换记录(这个记录你肯定没有仔细观察,NAT在转换的时候把源地址和源端口号给变了:也就是“运动鞋+模拟嘴巴"这个模拟嘴巴在封装新的数据包的时候也是随机生成的源端口,说白了在数据包在出去的时候,是用源端口号来区分内网请求者(一个是公网的端口号、一个是内网的端口号 然后在地址转换表里一一对应,这是运用一个公网IP来上网的,如果你有多个公网IP 那么内网的用户就可以运用到多个IP地址出去了,那么这个地址转换表里也就多了一个IP,这样你的内网电脑就可以增加更多的电脑了))
总之一句话:源地址+源端口+目标地址+目标端口+协议 出去的时候我就变”源地址和源端口号
不过你要是跟别的主机通信,还是要配个ip地址,这样才能使用其他层面的应用。
肯定有交换机或者路由器
路由器怎么知道数据是哪个主机的,数据上有主机的本地ip地址或MAC地址?
路由器会根据你主机的IP和MAC地址来分配不同的端口,每台机器有自己独立的通道