网卡

唯一的标志 MAC地址:14:21:S8:8B:44:89 昵称:TP-Link-4489

如何获取局域网IP?

DHCP(动态主机配置协议)

DHCP 服务器可以动态的分配地址。

1)网卡(TP-Link-4489)向局域网发送一个报文以获取自己在局域网中的IP地址。

网卡工作在数据链路层, 必须得知道对方的MAC地址才能发信,如果不知道就对外广播, 那就是所有局域网内的电脑都会收到。

报文包括:

应用层的DHCP发现报文, 然后被一个UDP的报文封装,然后再被一个IP的数据报封装,然后再被以太网数据链路层的数据报封装。

通过网线发给了交换机。  交换机看到FF:FF:FF:FF:FF:FF, 立刻转发给了所有连到交换机的设备。

2)局域网里可能有多台DHCP服务器,每台服务器都会跟进MAC和端口进行回复,里面包含了分配给你的IP地址和DHCP服务器地址。

3)需要网卡(TP-Link-4489)选择一个DHCP服务器地址并进行回复确认分配的IP。

4)DHCP会返回一个确认消息,包括网关路由器的地址 , DNS服务器的地址,当然还有IP地址。

最终,网卡(TP-Link-4489)得到了:自己在局域网中的IP : 192.168.1.2,网关路由器:192.168.1.1,DNS服务器:202.152.219.74

如何访问外网?

最直接获取域名IP地址的方式:

发件人: 192.168.1.2    (网卡(TP-Link-4489))

收件人: 202.152.219.74   (DNS服务器)

内容:  给我www.baidu.com的IP地址

存在的问题:

  1. 网卡是数据链路层的需要通过mac地址通信
  2. DNS服务器不在我们的局域网内,要把这个发给网关路由器(有一个与ISP网络相连的外网IP地址89.32.288.156),由他转给DNS服务器的。
  3. 网关路由器的MAC地址是什么呢?

ARP(地址解析协议)

通过广播查询一个IP地址对应的MAC地址。

收件人: FF:FF:FF:FF:FF:FF (同一子网内的所有电脑)

发件人: 14:21:S8: 8B:44:89  (网卡(TP-Link-4489))

内容:网关路由器(192.168.1.1), 给我你的MAC地址!

通过返回信息获取网关路由器的mac地址(28:91:S8:3A:44:55)并进行保存。

NAT(网络地址转换)

发给网关路由器查询域名对应的IP:

发件人: 14:21:S8: 8B:44:89  (网卡(TP-Link-4489))

收件人: 28:91:S8:3A:44:55   (网关路由器)

内容: DNS服务器(202.152.219.74)  给我www.baidu.com的IP地址

把数据链路层的封装去掉, 发现IP数据包中的目标地址是 202.152.219.74, 网关就知道这是要向外网发出请求了。
于是把IP数据包中的源地址192.168.1.2 替换成网关的外网地址  89.32.288.156。
创建一个新的端口号1029, 把TCP数据包中的源端口也替换掉, 数据包就变成了这个样子:

把源地址和源端口都替换了, 其实就是让外部的网络认为这是网关路由器发出的, 而局域网内的网卡对外是不可见的。

这就是网络地址转换,网关路由器需要保存一份NAT转换表,譬如LAN端192.168.1.2:1028-->202.152.219.74:1029

当回复到达路由器时去掉数据链路层的封装,发现TCP和IP数据报中包含这样的信息:目的地IP : 202.152.219.74 , 端口 1029 ,根据NAT转换表,把数据报中的IP地址和端口号改了发回给网卡(TP-Link-4489)。

UPnP

网卡主动要求网关路由器建立一个NAT映射 (192.168.1.2 : 4096) <-> (61.52.247.112: 3001)。

此时此网关的某个端口就是某块网卡专用了,此网卡的此端口就可以成为网卡与外界交流的专线。

局域网的路由器&网卡的更多相关文章

  1. 计算机网络四:网卡与MAC地址

    网卡与MAC地址 ㈠网卡 1.网卡定义 网卡是工作在OSI的数据链路层的网络组件,是局域网中连接计算机和传输介质(网线或WIFI信号)的接口,不仅能实现与局域网传输介质之间的物理连接和电信号匹配,还涉 ...

  2. 实现upnp ssdp来查找局域网内的其他节点

    upnp协议常用于一些智能家居产品中,这些产品连上家里局域网后,用同样连入家中局域网的手机就能很快检测到此产品了.在区块链技术中,upnp也被应用于寻找同一局域网内的其他节点. 关于upnp的具体描述 ...

  3. VM虚拟机网卡LAN区段模拟内网使用教程

    目录   1. 测试环境   2. 设置LAN区段并测试    2.1. 添加LAN区段    2.2. 在虚拟机中设置静态IP地址    2.3. 测试同一LAN区段的主机是否可以联通    2.4 ...

  4. centos双网卡配置

    centos双网卡问题,一个网卡配置局域网,一个网卡配置公网,如果内网访问自动走eth1,如果外网访问自动走eth2. 需要配置路由吗? 1. 首先查看机器是否是双网卡,命令如下: lspci | g ...

  5. openwrt 单网卡路由模拟实现

    关键字 vlan openwrt 单臂路由 一直以来都认为路由器要至少要求是双网卡,因为至少要有lan/wan.最近看了单臂路由的介绍,自己在虚拟机测试了一把,发现单网口做路由器确实可行! 测试环境 ...

  6. libvirt 网络手册(二):桥接网络

    原文:Bridged Network 在一个桥接网络里面,宿主机和虚拟机共享物理网卡.每一个虚拟机可以直接绑定任意可用的IPV4或IPV6局域网地址,就像一个物理机一样.桥接给libvirt网络提供最 ...

  7. ARP防火墙绑定网关MAC地址预防ARP攻击和P2P终结者

    [故障原理]  要了解故障原理,我们先来了解一下ARP协议.  在局域网中,通过ARP协议来完成IP地址转换为第二层物理地址(即MAC地址)的.ARP协议对网络安全具有重要的意义.通过伪造IP地址和M ...

  8. 在家用机上搭建 Git https 服务器

    今天主要叙述在家里台式机的虚拟机上搭建支持 https 的 ubuntu git 服务器. 实际上,从一个用户请求家里 git 服务器代码,最终完成代码的传输,主要是通过以下的过程: 首先,从外界寻找 ...

  9. DHCP配置部分

    1.DHCP工作过程 dhcp discover \\客户端请求服务器器提供地址 dhcp offer \\服务器提供ip地址 dhcp request \\客户端租用ip地址 dhcp ack \\ ...

随机推荐

  1. 个人理解的int数组和char数组

    char数组中不论是一维还是二维的,在程序执行时每一块的分离依据都是以提供的起始地址到'\0'为一个处理的字符串.所以关于char[]的函数都是只提供相应起始地址作为形参就可以. char[]互相交换 ...

  2. (记忆化搜索) FatMouse and Cheese(hdu 1078)

    题目大意:   给n*n地图,老鼠初始位置在(0,0),它每次行走要么横着走要么竖着走,每次最多可以走出k个单位长度,且落脚点的权值必须比上一个落脚点的权值大,求最终可以获得的最大权值   (题目很容 ...

  3. codeblocks+SDCC开发51单片机

    说到51,大部分人都是用的是KEIL开发环境,但是KEIL是商业软件,我们一般人都用的是破解版的,如果用于商业就会收到法律诉讼.然而有一款很好的编译器专为51内核而存在.SDCC最大的有点就是开源免费 ...

  4. KVM学习(初步安装与使用)

    本机环境介绍 本次使用Vmware workstation 12 pro版本号为12.5.2 build-4638234.虚拟机操作系统版本如下 [root@node2 ~]# cat /etc/re ...

  5. jQuery插件初级练习1

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  6. 二分图匹配-HK算法

    先把代码贴上,其他南京回来再补了.. #include <cstdio> #include <cstdlib> #include <cstring> #includ ...

  7. 1.虚拟机中安装ubuntu

    1.VMware安装很简单,全部默认安装即可. 2.安装完VMware之后,打开VMware,点击创建虚拟机 典型安装易出问题,所以这里选择自定义安装 安装过程选项配置如下 处理器数,核数,内存都可以 ...

  8. SignalR 2 入门

    在本教程中使用的软件版本 Visual Studio 2015 .NET 4.5 SignalR 版本 2 概述 本教程介绍了通过演示如何生成简单的基于浏览器的聊天应用程序的 SignalR 开发. ...

  9. WPF圆角按钮例程

    <Window x:Class="WpfApp3.MainWindow" xmlns="http://schemas.microsoft.com/winfx/200 ...

  10. GoLang学习控制语句之字符串

    Go语言字符串是一种值类型,且值不可变,即创建某个文本后你无法再次修改这个文本的内容:更深入地讲,字符串是字节的定长数组.Go 代码使用 UTF-8 编码(且不能带 BOM),同时标识符支持 Unic ...