网卡和路由器

时间:2021-02-09 04:49:26

一、网卡:

每一块网卡都有唯一的标志:11:27:F5: 8A:79:54 ,人们把它叫做MAC地址,简单起见,你可以叫我 “TP-Link 7954”。有了网卡,我们要想上网还需要获取ip,以及DNS域名转换等。下面我们就来描述这几个过程是如何进行的。

1、DHCP(动态主机配置协议)动态地址分配过程:

主机首先需要在局域网内发送一个广播,来获得DHCP动态分配的ip地址。

报文的格式:先是一个应用层的DHCP发现报文, 然后被一个UDP的报文封装,然后再被一个IP的数据报封装。

网卡和路由器

网卡是工作在数据链路层,到达网卡后,必须得知道对方的MAC地址才能发信,如果不知道,网卡就对外广播, 那就是所有的电脑都会收到(显然这次是需要广播的)。于是网卡又封装了一层(否则交换机无法读取这样的信息)

网卡和路由器

目的地: FF:FF:FF:FF:FF:FF (广播到同一子网内的所有电脑),发件人: 11:27:F5:8A:79:54  (就是我自己了),然后我就把它通过网线发给了交换机,交换机看到FF:FF:FF:FF:FF:FF, 立刻转发给了所有连到交换机的设备。

不出所料,这个局域网里确实有DHCP服务器, 而且还不止一个!没有多久,交换机转来两封信,我拆开其中一封,里边写着:“我是DHCP服务器192.168.1.1,我这里有个空闲的IP192.168.1.2,你租不租?”另外一封信也差不多, 是另外一个DHCP服务器发来的,提供了另外一个IP地址。

最终选了192.168.1.2这个ip,然后把需要再发一个广播信息”我选了192.168.1.2这个ip“,然后会收到这样的回复:“这是一个确认信, IP 192.168.1.2 给你了。 网关路由器是192.168.1.1 , DNS服务器的地址是 202.102.224.69”

经过这个步骤,我们电脑中就保存了这样的上网配置信息:

我们的IP : 192.168.1.2网关路由器:  192.168.1.1DNS服务器: 202.102.224.69

如果重启电脑,这个过程还会再次进行。

网络结果如下图:

网卡和路由器

2、DNS和ARP:

搞定了IP,我们在浏览器上输入域名(www.baidu.com)访问到百度站点,还得要知道这个域名对应的ip才可以。这个时候我们想到了上面分配IP地址的时候,同时告诉了DNS服务器,那我们问问DNS不就可以了吗?

于是准备发这样的一封信:

发件人: 192.168.1.2    (我们刚刚搞定的IP)
收件人: 202.102.224.69   (DNS服务器)

内容:  哥们, 给我查查www.baidu.com 的IP地址吧

可是突然发现,我们仅仅知道DNS的ip,又不知道mac,而且DNS服务器不在我们的局域网内,这该怎么发送?

答案:把这个信发给网关路由器,他会想办法转给 DNS服务器的。(交换机只负责局域网内的事情,出了局域网就是路由器的事了)

网卡要想直接给路由器发送信息,同样需要知道路由器的mac地址,上面在分配IP地址的时候,只有路由器和DNS的ip,没有任何mac地址信息,那这些mac地址信息该如何获取呢?

答案是:ARP(地址解析协议)

       我可以把下面的消息广播出去,这个子网内的所有机器都会收到, 网关路由器也不例外, 他收到以后,一看是查询自己的MAC地址,就会创建一个ARP的应答。

收件人: FF:FF:FF:FF:FF:FF (同一子网内的所有电脑)
发件人: 11:27:F5:8A:79:54  (就是我自己了!)

内容:呼叫网关路由器(192.168.1.1), 请问你的MAC地址是什么?

过了一会, ARP应答果然来了, 我们看到了网关路由器的MAC地址: 88-25-93-79-E0-C8

有了网关路由器的MAC地址, 剩下的事情就好办了, 我只需要把之前准备好的DNS查询发给网关路由器即可。路由器能抽取这个DNS查询的数据报, 看到收件人是202.102.224.69  (DNS服务器), 自然可以转发出去。

DNS服务器很快就返回了www.baidu.com的IP : 115.239.211.112

到此为止,我们既可以畅通无阻的上网了。总结一下:

  1. 首先通过DHCP获取本机ip、dns的ip、路由器的ip;
  2. 通过arp获取路由器的mac地址;
  3. 给路由器发送信息(DNS的ip和域名),获取DNS服务器查询的具体域名对应ip;

二、路由器:

我就是网卡TP-Link 7954经常和大家提起的网关路由器,为啥叫网关呢? 因为大家想上网,一定得经过我这一关,这不是开玩笑,确实是这样, 所有的对局域网之外的访问那非得经过我不可

其实我直接和ISP(就是联通!)的网络相连,  我从联通那里搞了一个外网的地址: 61.52.247.112 。可是只有这么一个地址,我们局域网内这么多电脑,如果轮流着让每个电脑去用,那大家可就抱怨死了。于是我巧妙的构思了一个网络世界, 成功的欺骗了TP-Link 7954这些网卡们。

1、NAT (网络地址转换)

      还记得上次TP-Link 7954 向我要地址的事儿吗 ? 因为我不仅仅是个路由器, 还是一个DHCP服务器, 掌握着这个局域网的IP生杀大权。

我给TP-Link 7954 分配的IP是 192.168.1.2 ,但是他拿这个地址是无法直接上网的, 因为这是属于我管辖的内网地址, 别的网站像www.baidu.com  根本都不知道!即使知道了也没用, 因为在这个世界上可能有无数的路由器都会分配192.168.xxx.xxx 这样的地址, 你到底要找哪一个?所以TP-Link 7954 想上网必须得通过我, 我需要施展一点点小魔法, 比如说它想访问百度, 通过交换机给我发来这么一个数据帧:

网卡和路由器

我把数据链路层的外衣去掉, 发现IP数据包中的目标地址是 115.239.211.112, 我就知道这是要向外网发出请求了。于是我就把IP数据包中的源地址192.168.1.2 替换成我从联通那里搞到的外网地址  61.52.247.112。这还不够, 我会创建一个新的端口号2001, 把TCP数据包中的源端口也替换掉, 数据包就变成了这个样子:

网卡和路由器

不知道你看出来其中的奥妙没有,我把源地址和源端口都替换了, 其实我的目的就是让外部的网络认为这是我(路由器)发出的, 他们根本不知道什么TP-Link 7954 这个网卡

然后我需要查一下我的路由表,确定到底转发到哪个输出端口去,再给这个IP数据报穿上数据链路层的外衣,把数据包发给了联通的网络, 剩下的事我就不管了。

网卡和路由器

注意看以太网帧的MAC地址, 源地址已经是我了,而不是TP-Link 7954了, 因为这是我和联通网络之间的数据链路。这个替换源地址和源端口的小把戏就叫做网络地址转换 , 简称为NAT

当然不只是TP-Link7954通过我上网, 还有很多别的电脑呢, 我得把我的小把戏记下来 ,形成这么一张表:

网卡和路由器

过了不久, baidu 网站的回复就会通过别的路由器转到我这里,正如你所想的, 我需要反过来处理一遍

  1. 首先去掉数据链路层的外衣,发现TCP和IP数据报中包含这样的信息:目的地IP : 61.52.247.112 , 端口 2001 
  2. 这时候我就去查表, 找到了 192.168.1.2:3345  , 我就明白这是给TP-Link 7954的信了,那就再次把数据报中的IP地址和端口号改了吧, 让TP-Link 7954 认为这个数据包就是我给他的。

就这样, 我成功的用区区一个外网的IP就支持了局域网内多个电脑的上网需求, 并且他们根本就不知道是怎么回事!

2、NAT 穿越

路由器通过NAT这种欺骗的方式终究是不能长久的,麻烦很快就来了。有一天在TP-Link7954电脑上安装了一个P2P软件:电驴,接下来就发现了问题。

所谓的P2P就是Peer to Peer,即网络中的机器是对等的,所有使用电驴的机器不仅仅是一个发起请求下载数据的客户端,他们同时也是一个能够接受请求,向外发送数据的服务器。这样一来,当下载大文件的时候, 你就可以从很多安装了电驴的机器上分块下载,而不是仅仅从一个服务器上下载, 速度快了很多。

TP-Link7954 很快就发现, 当它试图做服务器的时候, 其他电驴根本就连不上它, 为什么? 因为IP地址是路由器分配的啊, 是个内网地址 192.168.1.2, 外网的人根本就不知道, 怎么连?(路由器辩解道:现在外网IP地址很稀缺, 我用这种NAT的方法也是不得已而为之,而且电驴这种p2p会占用很大流量...)

TP-Link 7954倒是很聪明,他立刻就意识到了问题所在,想出了解决办法:

“这样吧,路由器,你不是擅长搞玩小把戏吗, 可以继续玩下去, 但是得允许我们这些网卡参与进来玩, 比如说我(ip地址192.168.1.2)会主动的要求你建立一个NAT映射 (192.168.1.2 : 4096) <-> (61.52.247.112: 3001)。

“你还可以保存在你的NAT表中,  然后我就会对外通告了, 我是一个电驴服务器, 谁要是想连接我的话,请到这里来:61.52.247.112: 3001,当外网的连接来的时候, 你必须把连接请求转发到我这里来”

大家一致认为这个方法很简单, 很实用, 就这么决定了。

其实这就是这其实就是UPnP,打开路由器,可以看到这项配置。


声明:文章转自

https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513160&idx=1&sn=d938db4f1a2d62514b57e92fd8d3d749&scene=21#wechat_redirect

https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513173&idx=1&sn=6ec5281b12ed5195070fa4df22383595&scene=21#wechat_redirect