网卡与路由器

整理自:网卡与路由器

TODO: 以下只是梗概

DHCP

DNS 和 ARP

网关路由器

router

网关,访问广域网必经的一关,IP 由 ISP(网络服务提供商,Internet Service Provider)提供并与其网络相连。

NAT(网络地址转换)

网关不仅仅是路由器,还是一个 DHCP 服务器,局域网内主机无法使用 DHCP 分配的 IP 无法直接上网,因为这是内网 IP,外网主机并不知道这个内网 IP 是谁的。因此内网主机要上网必须通过路由器。在内网主机访问外网时,通过交换机给路由器发去一个数据帧:

以太网帧
目的地:88:25:93:79:E0:C8
源地址:11:27:F5:8A:79:54
    IP 数据报
    目的地:115.239.211.112
    源地址:192.168.1.2
        TCP 报文
        目的地端口:80
        源地址端口:3345
            HTTP 报文
            GET / HTTP/1.1
            Host: www.baidu.com

路由器收到后把数据链路层解开,发现 IP 数据包中的目标地址是 115.239.211.112,就知道这是发向外网的请求。于是把 IP 数据包中的源地址 192.168.1.2 替换成路由器的外网 IP,并创建一个新的端口号 2001,把 TCP 数据包中的源端口也替换掉,数据包就变成了这样:

IP 数据报
目的地:115.239.211.112
源地址:61.52.247.112
    TCP 报文
    目的地端口:80
    源地址端口:2001
        HTTP 报文
        GET / HTTP/1.1
        Host: www.baidu.com

这样就让外网认为这是路由器发出的请求,因为外网并不知道内网主机的存在。接着查询路由表,确定到底转发到哪个端口去,再给这个 IP 数据报封装到 数据链路层,把数据包发给 ISP 的网络,剩下的事就不是路由器管的了。

以太网帧
目的地:XX:XX:XX:XX:XX:XX
源地址:88:25:93:79:E0:C8
    IP 数据报
    目的地:115.239.211.112
    源地址:61.52.247.112
        TCP 报文
        目的地端口:80
        源地址端口:2001
            HTTP 报文
            GET / HTTP/1.1
            Host: www.baidu.com

以太网帧的 MAC 地址,源地址已经变成路由器的了,而不是内网主机的。这个替换源地址和源端口过程称为网络地址转换(NAT)

由于内网主机不止一台,路由器需要把这些转换信息以表形式记下:

WAN 端 LAN 端
61.52.247.112:2001 192.168.1.2:3345
…… ……

当百度的响应通过别的路由转回来,路由器需要反过来处理:去掉数据链路层,查 NAT 表把 IP 和端口转为对应的内网主机。

NAT 穿越

P2P 软件电驴。P2P 就是 Peer to Peer,网络中的机器是对等的。

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

一般情况下,局域网内某台主机试图做服务器时,其他电驴根本连不上它,因为局域网主机的 IP 是路由器分配的,是个内网地址,外网主机根本不知道。

这时候,主机可以主动要求路由器建立一个 NAT 映射192.168.1.2:4096 <-> 61.52.247.112:3001,路由器把该映射保存到 NAT 表中,内网主机就 可以对外通告自己是电驴服务器,谁要连接的话就连61.52.247.112:3001,这样外网连接的时候,路由器必须把请求转到该映射主机。

这些都可以通过路由器来设置。

Tags: