Blog

网络原理-一张网卡设置两个IP的作用

一块网卡,设置两个IP的 作用

1、一个网卡设置两个或者多个IP地址,作用就是可以连接多个网段(就是可以访问多个网段),但前提是这些网段物理层是连接在一起。
2、举个例子:有两个LAN(局域网)通过交换机连接在一起,LAN1为192.168.0.0/24 网段
LAN2 为192.168.1.0/24网段,在没有三层设备的情况下LAN1与LAN2下的主机是不可以相互访问的,因为LAN1与LAN2的网络号分别为192.168.0.0、192.168.1.0,网络号不同即不在同一网段。虽然两个LAN通过交换机连接在一起了,但在没有三层设备时是无法进行通信的。但若是LAN1下的一台主机PC1设置两个IP地址如 192.168.0.100/24、192.168.1.100/24(不可与LAN2下的主机IP冲突) 则PC1就可以访问LAN2下的主机,因为此时PC1使用IP 192.168.1.100/24进行LAN2的访问。


设置双IP流程

首先打开“本地连接 属性”页

 

第二步,选择“Internet 协议版本4”点属性或双击它。打开“Internet 协议版本4 属性”页

 

第三步,设置其中一个IP段的IP地址、网关、DNS服务器地址,点“高级”,打开“高级TCP/IP设置”页。

 

第四步,点“添加”,输入另一个网段分配的IP地址,以及网关,如下图

 

第五步,点“确定”完成设置。

网络原理-网络拓扑之两条宽带叠加上网问题

一、宽带叠加概述

一直觉得上网,就需要一条宽带就行了。
偶尔想到,如果电脑同时接有线和无线宽带会怎么样?

当电脑连接两条宽带时,且两条宽带的公网ip不同。这时电脑上网会采用,有线宽带的IP。下载也是有线宽带。因为有线宽带的优先级比无线宽带高,我们需要修改有线网卡和无线网卡的跃点数,修改成一样【需要进入网络连接属性 /高级 TCP/IP 属性 修改 跃点数】。这样有线和无线宽带的优先级就一样了。平时上网只会用一条,但是用迅雷等多进程下载时,可以用两条宽带下载。

或者买一个双WAN口的 路由器或者 买两个路由器 且 组合成一个局域网,当电脑连接上路由器时,相当于两条宽带上网了。平时上网只用一条,多进程下载时可以用两条宽带。


无线和有线 同时连接时,电脑的路由表 (命令行 netstat -r) 可以看到 本机 无线网卡的 网段 和 有线网卡的网段 不一样,但是 电脑 同时可以访问 两个网段。【我测试时,无线连的是手机热点,有线连的是 路由器的 宽带】


二、两条宽带连PC操作

第一,右击右下角的网络图标,打开网络和共享中心,在弹出来的对话框中选择更改网络配置。

第二,在弹出来的对话框中可以找到我们现在使用的网络,右击击其中的一个网络适配器,选择属性。

第三,在弹出来的对话框中双击Internet 协议版本4,此项是用来设置我们当前使用的网络。

第四,此时会弹出常规选项卡,点击高级,在弹出来的对话框中我们去掉自动跃点的勾选,自己任意设置成任意数字,20 40都行,点击确定,这样我们就完成了一个网络适配器的更改。

 

第五,我们需要进行第二个网络适配器的更改,和上面的步骤一样,接口跃点数一定要设置成和第一个适配器的跃点数一样的数字,否则就不会网络叠加的成功。

此时,完成是配置的设置之后,我们就可以进行网络速度的测试了,很多软件均集成了这个功能,如360安全卫士,以前我的网速最大下载速度是500k左右,进行网络的叠加使用后就变成了1M下载,很强悍吧!

为什么非要跃点数设置成一样的呢?传输过程中需要经过多个网络,每个被经过的网络设备点叫做一个跃点,地址就是它的ip,跃点数是经过了多少个跃点的累加器,为了防止无用的数据包在网上流散。将跃点数设置成一样的数值,系统会认定为这是同一个网络,所以两个网络会合并为一个网络供我们使用。

=========================================================

命令行模式,查看 修改 效果前后 图

然后进入命令模式,输入route print 回车查看IP的跃点数,这做是为了寻找两者的差值以达到平衡
最后进入网卡修改跃点数

最后再route print一次两者跃点数相同就可以了,叠加成功,测速,下载,在线电影均有效。

三、双WAN口路由器或两个路由器操作

这里讲个三网叠加的 :

  1. 设置路由器C拨号,lan IP与路由器A、B同一网段PC端设置网关:顺序为路由器C、A、B,

  2. 看看速度,牛X,迅雷下载稳定3.2M/S

    遗憾的是手机端设置不了多个网关,不过10M宽带也够用了

 


参考:

双路由器实现宽带叠加 https://jingyan.baidu.com/article/1974b289a238d6f4b1f7743c.html
有线+无线叠加教程 http://tieba.baidu.com/p/2589595477
win8.1有线+无线同时上叠加上网设置 http://tieba.baidu.com/p/3309314007

网络原理-计算机网络详解-上网内部流程分析

首先,先读 计算机网络-整体认知把握 作为基础入门。

一、网络模型中各层的命名规范

如数据链路层(二层),一般称为帧(Frame),比如以太帧。
而 ATM(Asynchronous Transport Mode)一般称为信元(Cell)。
ATM 是欧洲人发明的,IP 是美国人发明的,两者竞争网络层的老大,最后 IP 胜出,成为当仁不让的网络层霸主。ATM 只好委身于 IP 的「淫威」之下,充当数据链路层协议。

那么网络层(三层)则使用包(Packet)的概念,比如 IP 包。

传输层有 TCP、UDP,TCP 称为报文段或段(Segment),而 UDP 则称为用户数据报或者UDP报文(Datagram)

应用层(七层)则一律使用应用层数据(Data)。

但往往也没有那么严格,经常有人用 TCP 包、UDP 包,也不会引起混淆,但还是希望各位同学能够专业化、规范化使用名称,养成一个良好习惯。


二、本地网创建过程

弄个路由器,弄个光纤猫,超五类网线,拨号上网就行了。

网线接好后,物理层就配好了,以太网速率自协商也完成了。
数据链路层也就是以太网帧。

1、设置内网IP

(1)配置路由器

用一根网线连路由器和pc,登录浏览器访问路由器的设置页面。然后修改网关IP和子网掩码,然后设置PPPOE,自动拨号上网。
比如
网关IP:192.168.1.129
子网掩码:255.255.255.128
那么路由器的网络地址为:192.168.1.128 广播地址为192.168.1.255

参看 网络层之子网划分与超网

(2)配置主机IP

配置主机IP有两种方法:

方法一:登录主机,设置静态IP。

方法二:DHCP,动态获取IP,需要在路由器里面开启DHCP服务。

2、DHCP协议详解

动态主机配置协议,英文 DHCP,是英文 Dynamic Host Configuration Protocol 的缩写,属于应用层协议,使用UDP协议工作。

DHCP运行分为四个基本过程,分别为请求IP租约、提供IP租约、选择IP租约和确认IP租约。客户在获得了一个IP地址以后,就可以发送一个ARP请求来避免由于DHCP服务器地址池重叠而引发的IP冲突。

1.DHCP发现(DISCOVER)—— 请求IP租约

电脑的操作系统安装了 TCP/IP 协议栈,这个协议栈其中包含一个 DHCP 客户端进程,这个客户端进程会广播一个发现服务器的报文,格式为 UDP 封装,目的端口号为 68,源端口号为 67;

大白话:DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCPdiscover发现信息来寻找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

客户也可以申请它使用的最后一个IP地址(在下面的例子里为192.168.1.100)。如果该客户所在的网络中此IP仍然可用,服务器就可以准许该申请。否则,就要看该服务器是授权的还是非授权的。授权服务器会拒绝请求,使得客户立刻申请一个新的IP。非授权服务器仅仅忽略掉请求,导致一个客户端请求的超时,于是客户端就会放弃此请求而去申请一个新的IP地址。

2.DHCP提供(OFFER)——提供IP租约

当DHCP服务器收到一个来自客户的IP租约请求时,它会提供一个IP租约。DHCP为客户保留一个IP地址,然后通过网络单播一个DHCPOFFER消息给客户。该消息包含客户的MAC地址、服务器提供的IP地址、子网掩码、租期以及提供IP的DHCP服务器的IP。并以单播方式发给客户端,目的端口号为 67,源端口号为 68 ;

服务器基于在CHADDR字段指定的客户硬件地址来检查配置。这里的服务器,192.168.1.1,将IP地址指定于YIADDR字段。,

3.DHCP请求(REQUEST)——选择IP租约

当客户PC收到一个IP租约提供时,它必须告诉所有其他的DHCP服务器它已经接受了一个租约提供。因此,该客户会发送一个DHCPREQUEST消息,其中包含提供租约的服务器的IP。当其他DHCP服务器收到了该消息后,它们会收回所有可能已提供给客户的租约。然后它们把曾经给客户保留的那个地址重新放回到可用地址池中,这样,它们就可以为其他计算机分配这个地址。任意数量的DHCP服务器都可以响应同一个IP租约请求,但是每一个客户网卡只能接受一个租约提供。

4.DHCP确认(Acknowledge,ACK)——确认IP租约

当DHCP服务器收到来自客户的REQUEST消息后,它就开始了配置过程的最后阶段。这个响应阶段以单播方式发送一个DHCPACK包给客户。这个包包含租期和客户可能请求的其他所有配置信息。
客户端接收到服务器的确认,会尝试将获得的 IP 参数配置到 TCP/IP 协议栈,还会尝试 ARP 广播请求自己的 IP 所对应的 MAC 地址,如果没有收到任何回复,说明这个 IP 地址在广播域里是唯一的,不会引起 IP 地址冲突,可以完成配置工作。

以上 DHCP 能够正常工作,有一个前提条件,那就是客户端与服务器在一个广播域内,一个广播域意味着一个网段,换句话说,一个网段需要一个 DHCP 服务器,这个对于拥有成百上千网段的大型网络来说,则需要成百上千的 DHCP 服务器,这显然不现实。

⬇️⬇️⬇️   其他过程补充如下:⬇️⬇️⬇️

5.重新登录 (DHCPrequest)
    以后DHCP客户机每次重新登录网络时,就不需要再发送DHCPdiscover发现信息了,而是直接发送包含前一次所
分配的IP地址的DHCPrequest请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP
地址,并回答一个DHCPack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分
配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCPnack否认信息。当原来的DHCP客户机收到此
DHCPnack否认信息后,它就必须重新发送DHCPdiscover发现信息来请求新的IP地址。

6.更新租约
    DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如
果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会
自动向DHCP服务器发送更新其IP租约的信息。

7.获取配置参数(DHCPINFORM)
   如果客户通过别的手段获得了网络地址,它可以使用DHCPINFORM请求获得其它配置参数,服务器接收
到DHCPINFORM包,并建立一个DHCPACK消息,在其中包括一些合适客户的配置参数,只是不包括分配网络
地址,检查现有的绑定,在信息中不填充'yiaddr'字段或租用时间参数。服务器取得DHCPINFORM包内的
'ciaddr'地址,而返回DHCPACK包。

5、DHCP中继问题

以上 DHCP 能够正常工作,有一个前提条件,那就是客户端与服务器在一个广播域内【毕竟发的是255.255.255.255广播帧】,一个广播域意味着一个网段,换句话说,一个网段需要一个 DHCP 服务器,这个对于拥有成百上千网段的大型网络来说,则需要成百上千的 DHCP 服务器,这显然不现实。
有没有现实一点的解决方案呢?比如在一个企业网只需要一台 DHCP 服务器?
问题就来了,客户端与服务器不在一个网段,客户端如何通过广播发现服务器呢?要知道,广播报文无法跨越不同网段!
这个其实不难,只是需要一个角色来协助客户端与服务器发现彼此,这个角色名字叫 DHCP 中继代理。

* DHCP 中继代理(DHCP Relay Agent)

设想是这样的,每个网段都配置一个 DHCP 中继代理,DHCP 中继预先静态配置 DHCP 服务器的 IP 地址,DHCP 中继代理自然可以接收到本网段的客户端 DHCP 广播报文,然后将广播报文修改成单播报文,目的 IP 地址为 DHCP 服务器,源 IP 地址为代理自己的,然后单播发送给服务器,服务器的回复自然也是单播发给代理,代理再将服务器的回复以单播的方式发给客户端。
通俗地说,DHCP 中继代理就是让客户端与服务器相互发现彼此的中介结构。
下面我们举一个例子来说明。
小明打开电脑,运行于后台的 DHCP 客户端,帮助小明拿到了 10.1.1.2/24 这个地址,小美拿到了 10.1.1.3/24 这个地址,小丽却拿到了 10.1.2.2/24 这个地址。请问,小明、小美在一个网段,为何小丽却在另外一个网段,这是如何做到的?
谜底就是:小明、小美在一个广播域,在这个广播域里还有他们的网关,地址是 10.1.1.1/24,已经静态配置好了,网关充当 DHCP 中继代理的角色。除了以上介绍的将接收到的 DHCP 客户端,发现服务器的广播,转换成单播以外,还在 DHCP 报文内部填写了一个字段:「中继代理=10.1.1.1」,这样服务器就可以依据中继代理的地址,找到网段 10.1.1 地址池,然后找出空闲的地址就可以分配给小明、小美了。
同样的原理,小丽的 DHCP 广播被网关(10.1.2.1/24)接收,做了以下的工作:

* 广播修改成单播,源地址为网关的地址 10.1.2.1,目的地址为 DHCP 服务器地址 10.10.10.10
* 填写 DHCP 报文中继代理字段(Gateway),这里为 Gateway = 10.1.2.1
* 重新计算 UDP 校验和

然后发送出去,到达服务器,服务器依据中继代理字段,找到另外一个地址池 10.1.2,接着就可以从空闲地址里分一个 10.1.2.2 给小丽了,然后单播回复网关 10.1.2.1,剩下的步骤可以参考上面的标准流程的四个步骤  –>【请求IP租约、提供IP租约、选择IP租约和确认IP租约】
=====================================================

假设小明、小美、他们的网关、小丽、小丽的网关连在一个交换机上,也没有配置任何虚拟局域网(VLAN)来分隔广播域,以上五者工作在一个广播域,看看 DHCP 能否正常工作?
小明的电脑发一个 DHCP 广播,用于发现广播域里的服务器,广播域里没有 DHCP 服务器,以上五者都会接收小明的广播,小明的网关、小丽的网关自然也会接收到。
于是小明网关、小丽网关都会做中继代理,填上自己的 IP 地址,到达服务器,服务器会分配两个 IP 地址,一个是 10.1.1.x,另外一个是 10.1.2.x,那小明的电脑接受哪一个呢?当然谁先到用谁的!
小明的电脑使用哪个网段地址,完全取决于哪个网关反应快,动作麻利,这种不可预测性的解决方案,不能满足企业网的安全要求。
企业网对于一个员工使用哪一个网段有严格的要求,一个网段意味着不同的权限,所以一个员工要使用真正属于他的那个网段。

综上,企业网络管理,就会采用VLAN 用来隔离广播域,对自动获取IP进行 子网分段 和权限控制 。
=====================================================

6、DHCP与RARP的区别

RARP在功能上有点类似于DHCP协议,确切的说DHCP是BOOTP协议的升级,而BOOTP在某种意义上又是RARP协议的升级。BOOTP和RARP的区别在于RARP是在数据链路层实现的,而BOOTP实在应用层实现的,当然作为BOOTP的升级版DHCP也是在应用层实现的。
这种实现层面的差别也从RARP和BOOTP/DHCP的报文封装格式的差别上体现出来了,RARP直接封装在以太网帧中,协议类型置为0x0800以标识这个报文是ARP/RARP报文,BOOTP/DHCP报文是直接封装在UDP报文中,作为UDP的数据段出现的。
从功能上说,RARP只能实现简单的从MAC地址到IP地址的查询工作,RARP server上的MAC地址和IP地址是必须事先静态配置好的。但DHCP却可以实现除静态分配外的动态IP地址分配以及IP地址租期管理等等相对复杂的功能。

=========================================================

1)RARP可以满足主机IP地址配置的部分要求,但是不能完全满足
包括但不限于以下配置:
网络掩码,网关地址,静态路由,DNS服务器,以及私有的,公有的option功能。

2)RARP是二层协议,无法穿透子网,DHCP可以穿透子网。
好吧,那你会说有ARP代理,也可以辅助穿透子网,但是还是不好用。
因为:
ARP/RARP只能对地址进行识别,无法进行地址的统一规划和分配。
如果在一个子网内,需要对地址进行统一规划,分配和管理,以及租约,续租的管理。
必须要有一个服务器来集中管理。
因此有了bootp,有了DHCP。

我就知道还会有人说,为何不像DR,BDR路由器选举那样在用户计算机中产生一个集中管理的服务器,那是因为ARP/RARP是一个非常轻量级的协议,它设计的本意就不是这个。

另外,最重要的,用户计算机会当机,选举出来的服务器不稳定。

2.5)为何不修改ARP/RARP支持DHCP的特性?
DHCP的协议的工作本质,是动态主机配置协议,不仅仅包含IP地址配置。
TCP/IP网络的优点就是“分层”,协议各司其职。
ARP/RARP负责IP-MAC地址间的互相解析,DHCP负责管理IP层的配置。
因为,修改ARP/RARP支持DHCP,违反网络设计分层的理念。
应该去增强ARP/RARP,而不是去合并DHCP。
所以有了后来IPv6的ND。

3)既然如此为何IPv6会回归到ND(邻居发现协议),DHCPv6协同分配?
因为搞协议的人,逐渐发现,网络中有很多轻量级客户端,不需要进行统一管理,因此发明了ND,也就是增强版的ARP/RARP,它充分满足了没有DHCP服务器的情况下,在IPv6网络分配IP地址,路由前缀自动生成,快速上网的需求。


三、网络通信

大白话核心总结:

当生成完IP包,准备网络通信时,就需要判断目标主机和本机是否同网段。

如果本机和目标主机属于同一网段,

就查询本机的arp缓存表,如果存在目标主机mac地址,就直接读取,并生成两层的mac帧。如果本机的arp缓存表,没有目标主机的mac地址,那么就向本网段发送arp广播【arp请求广播只存在于本网段】,然后目标主机会发回arp单播应答给本机。这样目标主机就知道了,目标主机的mac地址了,并且将目标主机mac地址,放入本机arp缓存表。然后,本机三层ip包,封装成二层mac帧,发送给目标主机了。

如果本机和目标主机 是不同网段。

首先查找本机路由表,匹配和目标主机最接近的网段号。【依据本机路由表只记录本机网段的路由,所以匹配的结果是 发给默认网关】当决定IP数据包要发给默认网关时,此时检查本机arp缓存表,查询是否有网关的mac地址。如果有封装成mac帧,直接发给路由。如果没有记录网关mac地址,就发送arp广播请求,来获取网关mac地址。然后再将ip数据包组装成mac帧,发送给网关。

网关收到mac帧后,检查ip包和mac帧,发现mac地址与ip地址不匹配,不是真正发给自己的 ip包,于是查询路由表,找一个最长匹配的网络段的路由,重新组装mac帧发往下一个路由器(后面就是不断重复前面网关收到mac帧的操作发我下一个路由或目标主机)或者目标主机。【重新组装的mac帧,目标IP和源ip都不变,目标mac为下一跳的mac地址,源mac为当前网关】最终,经过几跳后,目标主机收到了mac帧。

1、访问相同网段

举例:ping 同一网段的主机。ping的协议介绍看这里

小明访问小美的电脑:比如 ping  10.1.1.3

(1)先判断 小美电脑 10.1.1.3  是否和 小明的电脑 10.1.1.2在同一个网段。

首先用小明的子网掩码  255.255.255.0 去 和 小明的IP 相与:计算出小明主机网络的网络号,即该网段的网络地址和广播地址【10.1.1.0   ,10.1.1.255】网络地址和广播地址直接的主机都属于同一网段。

然后对比目标地址:10.1.1.3  发现属于同网段。

(2)当生成三层IP包后,需要知道目标主机的mac 地址,来生成二层 mac帧。

首先查找本机的 arp缓存表,如果有,就直接读取,然后封装成mac帧,直接发给目标主机。

关于arp缓存表和路由表,查看这里

如果本机的arp缓存表,没有查到。就发送 arp广播请求【arp广播只存在于本网段】。

本机电脑用哪个网络接口发送arp广播请求呢?我们先了解一下本机路由表。

按照前面提到的子网划分博文,以上四条路由它们代表的网段号分别是:
127
10.1.1.2
10.1.1
0
用小美的网络号 10.1.1 与以上四条一一匹配,匹配到第三条,对应的接口为 Eth0。
于是,从接口 Eth0 发送 ARP 广播,ARP 广播在广播域里蔓延,小美的电脑也在同一个广播域可以接收到此 ARP 广播,广播请求 10.1.1.3 的硬件 MAC 地址,于是小美的电脑通过点对点单播 ARP 回复 10.1.1.2,自己的 MAC 是 MACxm,小明的电脑接收到此回复,将 10.1.1.3 / MACxm 保存在 ARP 缓存里,时间为 20—30 分钟不等,以备下次使用。

然后,本机三层ip包,封装成二层mac帧,发送给目标主机了。依照以上类似的步骤,Ping 的回包就到达本机的电脑,然后 Ping 程序软件显示,Ping 包被反弹回来,以及最大、最小、平均的来回延迟时间 RTT(Round Trip Time)。

2、访问不同网段

如果本机和目标主机 是不同网段。

首先查找本机路由表,匹配和目标主机最接近的网段号。【依据本机路由表只记录本机网段的路由,所以匹配的结果是 发给默认网关】当决定IP数据包要发给默认网关时,此时检查本机arp缓存表,查询是否有网关的mac地址。如果有封装成mac帧,直接发给路由。如果没有记录网关mac地址,就发送arp广播请求,来获取网关mac地址。然后再将ip数据包组装成mac帧,发送给网关。

网关收到mac帧后,检查ip包和mac帧,发现mac地址与ip地址不匹配,不是真正发给自己的 ip包,于是查询路由表,找一个最长匹配的网络段的路由,重新组装mac帧发往下一个路由器(后面就是不断重复前面网关收到mac帧的操作发我下一个路由或目标主机)或者目标主机。【重新组装的mac帧,目标IP和源ip都不变,目标mac为下一跳的mac地址,源mac为当前网关】最终,经过几跳后,目标主机收到了mac帧。

3、访问互联网

记录上网时,网络信息流处理过程

第一步:域名解析

互联网上网络层通信都是 IP数据包,所以小明的电脑与 百度服务器的通信也是 IP 包。既然是 IP 包,则需要 百度 服务器的 IP 地址,小明只告诉浏览器,自己想访问的服务器的域名是 HTTP://www.baidu.com,浏览器爽快地对小明说:没有关系,我会帮你解析出服务器的 IP 地址。

浏览器通知DNS程序(进程),解析www.baidu.com 的IP。

DNS域名解析过程如下:
1)DNS 进程先检查自己的程序缓存(Cache),如果有「www.baidu.com」所对应的 IP,则直接告诉浏览器。如果缓存没有找到,进入下一步;
2)检查本地 Host 文件,看看有没有,有则告诉浏览器。如果 Host 没有找到,进入下一步;
3)检查本地的 DNS 服务器配置,得到 DNS Server = 10.10.10.10,发个消息给它,让 DNS 服务器帮助查找。
此消息为 UDP 格式,目的 IP=10.10.10.10,小明电脑发现和自己不在一个网段,于是使用前面提到的不同网段的通信,将 IP 包发给 DNS Server = 10.10.10.10;
4)DNS Server (10.10.10.10)在自己的缓存里也没有发现,于是向互联网的上级DNS Server (8.8.8.8)发送协查请求;
DNS Server (8.8.8.8)发现了匹配项:HTTP://www.baidu.com 61.135.169.125,于是将协查结果返回给小明公司 DNS 服务器(10.10.10.10),然后再返回到小明电脑(10.1.1.2)DNS 进程。
DNS 进程气喘吁吁对浏览器说:大哥,这是您要的东西(HTTP://www.baidu.com 61.135.169.125)。

第二步:浏览器 HTTP 格式打包
浏览器将小明访问服务器 HTTP://www.baidu.com 的请求打包成 HTTP 格式,然后将打包好的 HTTP 告诉 TCP 进程(程序),同时告诉 TCP 进程的还有 HTTP://www.baidu.com 的 IP(61.135.169.125)。
TCP 进程属于低调、稳健的老司机,心想,如果将浏览器发来的 IP 地址 + HTTP 直接发给 IP 进程,最后会产生一个 IP 包,但最终这个 IP 包是死是活,自己却无法知道。也许 IP 包遭遇了线路硬件故障被丢弃,或网络路径拥堵被丢弃,或者服务器压根就没有开机,最终这个 IP 包消失得无踪无影。老司机犯愁地自言自语:那可怎么办才好呢?不远处 IP 进程听到了:臣妾也不知道啊!
最终老司机想出了一个办法,先不发 HTTP,先要确保自己的 IP 包(没有任何用户数据)可以到达服务器,并且服务器的 IP 包也可以返回,这样做的好处是:
一方面,可以保证双向的路径(路由)是畅通的,没有防火墙或访问列表的阻挡;
另一方面,如果 IP 包可以返回,说明服务器是正常工作的。这样老司机的所有担忧就都一一化解了。
这个方法是如何工作的呢?

第三步:HTTP 触发 TCP 进程三次握手连接
小明 TCP 司机:老大,有空吗?想和您唠唠,听到请回答!
服务器 TCP 老司机:小明,听得到,你能听到我吗?
小明 TCP 司机:听得到!
既然双方都可以听到对方(发送 IP 包到对方,并从对方接收 IP 包),那么就可以将小明的 HTTP,使用这个三次握手建立的 TCP 连接发送出去。但是,莫急,TCP 三次握手本身也会使用 IP 进程(程序)来完成发送,由于小明电脑与服务器不在一个网段,所以是三次不同网段的通信,上文详细阐述过整个过程,不再赘述。
在 IP 进程的眼里看,三次握手就是三个 IP 包(暂不考虑超时重传)的交互,还没有传输浏览器的 HTTP 之前,已经花费了来回三个 IP 包的代价。
此时,TCP 老司机是如何传输真正的 HTTP 的呢?

第四步:TCP 传输 HTTP
这个不难,只要使用 TCP 头将 HTTP 打包起来,包的格式为 TCP + HTTP,发给 IP 进程就好了。那么,在 IP 进程眼里,只是一个 IP 包而已,IP 包的格式为 IP + TCP + HTTP。那怎么知道对方是否接收到这个 IP 包呢?
TCP 确认收货机制
对方发一个确认,喊一嗓子:IP 包已收到,那么小明 TCP 进程就放心了,喃喃自语道:收到就好……
这里还有一个问题,小明 TCP 进程如何知道是哪个 IP 包被对方确认收货?
大家都有网购经验,卖家发货时,会在外包装上打上一个序列号,当买家确认收货时(确认产品序列号),这样卖家就知道某件产品已经安全无误地到达买家手中。
TCP 将每个字节标记机制
同样的原理可以用在 IP 网络通信中。技术来源于生活,而高于生活。为了保证可靠传输,用序列号标记一下 IP 包,标记在什么地方呢?
TCP 头有一个 Sequence Number,它就是序列号,就是为了实现这个目的的,比如小明的 TCP 进程要传输 1000 字节数据,初始序列号从 1 开始,那么 Sequence Number 设置为 1,然后 TCP 把这 1000 个字节打包,然后层层地封装、传输,并最终到达服务器 TCP 进程。
TCP 确认收货方法
服务器如何确认呢?
TCP 有一个字段是专门干这个的,确认收货号 Acknowledge Number,那么这里这个 Acknowledge Number 应该是多少呢?是 1001,为什么是 1001,难道这个和一千零一夜有关?
No!
1001 是告诉对方,从初始序列号 1 开始的 1000 个字节已经成功接收,准备好接收序列号从 1001 开始的数据了,这个应该很好理解吧?
小明 TCP 进程接收到此确认收货,就安心等待服务器将 HTTP://www.baidu.com 的页面发送过来了。
这个过程一个数据、一个确认收货,一共两个 IP 包。

第五步:服务器将自己的网页回传
服务器将自己的主页封装成 HTTP 格式,为了方便表达,假定主页只需要一个 TCP 就可以传输,此过程和第四步相似,即服务器 TCP 进程发给小明电脑一个 IP 包(包含网页),小明电脑回复一个收货确认(没有任何数据,只有 IP + TCP),那么一共两个 IP 包。
简而言之,TCP 的可靠传输机制:己方数据发送,对方确认,就这么简单。
第六步:释放 TCP 连接
小明浏览器将接收到的网页输出到屏幕上,任务就基本完成了。为什么说基本完成,而不说完全完成?因为还需要将之前建立的 TCP 连接断开,有同学会疑惑,为何要释放 TCP 连接?
因为数据已经传输完毕,TCP 连接依然活得好好的,但 TCP 连接会占用资源,比如会占用 TCP 端口资源、内存资源,既然不用了,就释放出来给有需要的应用程序使用。

* 通俗解释 TCP 关闭连接

TCP 连接可以看成两个水管,一个进水管,一个出水管。
从小明 TCP 进程来看,自己发数据用的是出水管,而接收服务器的数据使用进水管,释放连接意味着将两个水管都关闭。
如果小明没有数据要发给服务器,那可以放心地关闭出水管,但不能关闭进水管,因为进水管也许还有水,或者对方还需要继续运水过来,小明贸然关闭进水管不妥,可能会造成数据丢失。
所以进水管还是让对方来关闭比较恰当,因为对方会真正知道到底还有没有水要运输!
关闭 TCP 连接的步骤:
1)小明 TCP 进程:老大,我没有水要运了,准备关闭我的出水管了,收到请确认!
2)服务器 TCP 进程:小明,你的出水管里的水已经接收完毕,可以放心关闭,确认完毕!一旦小明接收到确认,出水管就完成关闭,不能再用出水管运水了。
此时,假设服务器也没有水要运给小明了,所以决定关闭服务器的出水管。(小明的进水管)
3)服务器 TCP 进程:小明,我也没有水要运了,准备关闭我的出水管了,收到请确认!
4)小明 TCP 进程:老大,你的出水管里的水已经接收完毕,可以放心关闭,确认完毕!
一旦服务器接收到确认,出水管(小明的进水管)就完成关闭,不能再用出水管运水了,服务器 TCP 进程释放资源。
小明 TCP 进程发出去的确认,自己无从知道是否对方已经接收到,除非对方超时重传关闭出水管的消息,小明启动一个定时器等待,如果超时以内没有接收到任何重传的消息,说明对方接收到自己的确认,那就彻底关闭 TCP 连接,释放所有资源;而如果接收到对方超时重传,自己再确认,然后再等待,直到最终确认对方接收到自己的确认。
这里不考虑超时重传,为了关闭 TCP 连接,一共使用了四个 IP 包。那么整个通信过程一共使用多少个 IP 包呢?
小明举起了手:车教练,一共是十一个!
车教练循循善诱:十一个是怎么来的?
小明:建立连接是三个,双向通信是四个,释放连接是四个。
车教练:回答完全正确,小明,考试合格,可以开车上路了……


参考:
https://blog.csdn.net/u013485792/article/details/50731538
http://www.qingpingshan.com/m/view.php?aid=215832

网络原理-网络拓扑之NAT

一、NAT含义


大白话:NAT就是将内网地址 翻译成外网地址。可以是一对一(静态转换),多对多(动态转换),多对一(端口多路复用)
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。

二、NAT分类


NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。

1、静态转换Static Nat

静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。

2、动态转换Dynamic Nat

动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。

3、端口多路复用(Port address Translation)

 端口多路复用是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。

也被称为NAPT【(Network Address Port Translation),即网络端口地址转换】、“多对一”的NAT、地址超载(address overloading)。

三、ALG(Application Level Gateway)


即应用程序级网关技术:
在静态转换和动态转换中,内网中的一个ip都会被转换成外网的一个ip;所以数据流要改ip层和mac地址层。上面的网络层不需要修改。
在端口转换中,内网的一个应用请求,会被转换到外网的另一个端口作为请求。这样外网的一个ip地址,可以利用不同的端口完成来自不同的内网ip的请求。此时需要修改mac层,ip层和传输层。

但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。例如:对于FTP协议的PORT/PASV命令、DNS协议的 “A” 和 “PTR” queries命令和部分ICMP消息类型等都需要相应的ALG来支持。
如果协议数据报文中不包含地址信息,则很容易利用传统的NAT技术来完成透明的地址转换功能,通常我们使用的如下应用就可以直接利用传统的NAT技术:HTTP、TELNET、FINGER、NTP、NFS、ARCHIE、RLOGIN、RSH、RCP等。

四、NAT超时介绍


因为 IP v4 的 IP 数量有限,运营商分配给手机终端的 IP 是运营商内网的 IP,手机要连接 Internet,就需要通过运营商的网关做一个网络地址转换(Network Address Translation,NAT)。简单的说运营商的网关需要维护一个外网 IP、端口到内网 IP、端口的对应关系,以确保内网的手机可以跟 Internet 的服务器通讯。
大部分移动无线网络运营商都在链路一段时间没有数据通讯时,会淘汰 NAT 表中的对应项,造成链路中断。
长连接心跳间隔必须要小于NAT超时时间(aging-time),如果超过aging-time不做心跳,TCP长连接链路就会中断,Server就无法发送Push给手机,只能等到客户端下次心跳失败后,重建连接才能取到消息。


参考:
端口映射 和 nat 区别不是 太大
http://blog.sina.com.cn/s/blog_4988d99a0102wt97.html
NAT超时介绍
https://blog.csdn.net/hbjixieyuan/article/details/55048881
nat 教程 https://wenku.baidu.com/view/34b016673169a4517623a33e.html

网络原理-网络拓扑之两台电脑直连的问题

两台PC直连,设置不同网段的ip,能ping通吗?

首先:两台pc直连,设置相同网段IP 是可以ping通的。

如果不同网段:
pc1———-1.1.1.1/24
pc2———-2.2.2.2/24

两台电脑直连且不再同一网段默认是ping不通的,首先要理解ping的原理。

PC1在ping之前先检查目的IP与本机IP是否属于同一网段。

【大白话就是查询路由表(pc也有路由表),发现当前路由表中没有去往目的网段的路由,因为pc1只有1.1.1.0/24,没有2.2.2.0/24的路由】

如果属于,就在自己的ARP表里查询是否有目的IP的MAC地址,如果有,封装好以后把ping包发出去(我管你收不收得到,我发了在说),如果没有,就发ARP查询。查询到目的MAC以后再封装发送。如果不属于同一网段,就只能找网关帮忙了,啥?网关也没有?不好意思,直接把包丢弃了- -我压根懒得发。。。如果有网关,先查ARP表有没有网关MAC,如果有就封装好发走,如果没有就ARP查询,楼主的情况,因为PC2与PC1不在同一网段,PC2在收到PC1的ARP请求后,发现目的IP不但不是给我的,而且与我也根本不在同一网段(网关与本机IP需要指定为同一网段),我丢得比谁都快。。。,所以PC1连网关的MAC都得不到,ping包都还没准备呢就胎死腹中了。最后ping的结果request timed out。

下面的互指对方IP为网关是可行的,但仅限于真机能实现,CPT和GNS3都无法模拟。

不同网段主机也是可以让它们ping通的
pc1———-1.1.1.1/24
pc2———-2.2.2.2/24
解决办法是互指对方地址为网关

gw 2.2.2.2 gw 1.1.1.1
默认网关就是一条默认路由,有路由就能发包,一发包就需要源mac和目的mac的封装。这种方法只能在pc上做,这时候会发ARP,查询对端地址的mac,最后就通了,我拿真实pc做过。

 

 

参考:

http://tieba.baidu.com/p/1424368917?pid=31989408832&cid=0#31989408832

https://blog.csdn.net/dog250/article/details/68951615

 

网络原理-路由器AP、中继、桥接、Client等模式比较

现在的路由大多数已经开始支持多种网络连接模式,常见的有有AP(接入点)模式、Router(无线路由)模式、Repeater(中继)模式、Bridge(桥接)模式、 Client(客户端)模式;

 

AP(接入点)模式


大白话:就是一个带有无线功能的二层交换机【也有人说是带有无线功能的hub】但是我感觉,路由器的功能很强大,hub都淘汰了,AP应该属于待无线的二层交换机。

接入端用网线连接LAN口,输出端可以是LAN口,也可以是无线;WAN端口空闲。

所以,AP和上一层的网络 属于同一个网段内,路由器不需要开启DHCP,但需自行设置路由器IP。【可以不设置,路由器向该网段主路由器即DHCP服务器发送请求,然后自行设置,但为了便于管理AP路由器,自行设置该路由器IP,方便访问和管理】

所以路由器AP模式下,接入端的网线必须能上网才能使用。

 

 

Router(无线路由)模式


在Router(无线路由)模式下,路由器就相当于一台普通的无线宽带路由器;平时我们使用的都是这种模式。需要连接ADSL Modem(猫)或者光猫等设备来进行配置。

一般家里用的宽带拨号上网就是这个模式,路由器WAN端口连接猫,LAN端口和无线网络连接需要上网的设备。

这个模式下,路由器提供DHCP服务器功能【给本地局域网设备分配IP】,PPPOE拨号功能【提供拨号上网认证功能】

 

Bridge(桥接)模式


 

 

Bridge(桥接)模式,路由器会通过无线的方式与一台可以上网的无线路由器建立连接,用来放大可以上网的无线路由器上的无线信号;

注意:放大后的无线信号的名称和原来的无线路由器的无线信号名称不一样。

大白话:桥接模式下,路由器就像一台有无线功能的二层交换机,网络号和上层路由器一样属于同一个网络。【如上图中 123路由器 和 上层 abc 路由器 属于同一个网络段】   

AP模式和桥接模式本质上是一样的,主要区别就是接入端不同,一个用网线接入该路由器的LAN口,一个用无线接入该路由器。

桥接模式下的路由器不需要DHCP,【可以设置IP,方便自己登陆管理路由器】。不设置的话路由器会自动向上级路由器请求分配IP,因为IP地址你不知道,所以无法用浏览器   访问绑定了   路由器管理界面   的正确IP地址  。

 

Repeater(中继)模式


 

Repeater(中继)模式下,路由器会通过无线的方式与一台可以上网的无线路由器建立连接,用来放大可以上网的无线路由器上的无线信号

注意:放大后的无线信号的名称和原来的无线路由器的无线信号名称一致。

大白话:用无线接人中继模式下的路由器,输出端包括LAN端口和无线网。中继模式的路由器和上层的路由器属于两个不同的网段,中继模式的路由器有自己的DHCP和子网。

中继模式和路由模式差不多,区别就是没有PPPOE拨号,接入方式为无线,不是WAN端口。

 

Client(客户端)模式


客户端模式下的路由器相当于一块无线网卡,用来接收其它无线路由器上的无线信号;电脑只能够通过网线连接到 客户端模式下的路由器上使用。

大白话:就像笔记本电脑上的无线网卡那样工作,仅连接其它的无线网络,而不发射自己的无线网络信号。对于无线路由器来说,这种模式相当于启用了一个无线的WAN口,且下面的电脑只能通过有线方式接到此设备。
该模式下无线路由器仍然提供DHCP及NAT功能,内部四个LAN口组成的单独IP地址段局域网,通过无线路由器上自己的网关,连上外部主网络。

 

客户端桥接(Client Bridge)模式


和“客户端”模式一样,相当于启用了一个无线的WAN口,且下面的电脑只能通过有线方式接到此设备。不过,内部的LAN口组成的局域网和连接上的无线网段处于相同的IP地址段。内部的DHCP请求也会被转发到主无线网络上。

 

 

参考:
https://www.jianshu.com/p/b4091fb430ab
https://www.cnblogs.com/pengdonglin137/p/3485974.html
http://service.tp-link.com.cn/detail_article_458.html
 

网络原理-计算机网络详解-网络分类子网划分及超网

网络分类,子网划分,网络号与超网

网络分类:传统的 ABCDE网络分类,规定的是在同一个网络中,有几个主机号。其实每一个主机号都有公网IP,相当于不同网络中的主机可以用ip直接访问。本质上来讲,所有的主机都处于同一个网络中,只是人为的划分了ABCDE网络。

大白话:网络掩码只代表网络号的位长,需要主机ip相与才能确定网络号。

无论子网还是超网,都有一个网络地址和广播地址。

家里路由器 子网掩码 255.255.255.128  路由器ip 192.168.1.129  。网络位比基本网络位24多一位。 可以用 192.168.1.129/25 表示路由器IP。192.168.1.128/25 表示 网络地址。192.168.1.255/25 是广播地址。网络段号也叫网络段:就是从网络地址-广播地址(因为可以计算,就简单用网络地址表示网络段 即用192.168.1.128/25表示)

大白话:其实一个ip就代表一台主机的意思,至于 掩码 就是用来确定这台主机属于那个子网的。比如x.x.x.x./32 就是说 该主机 自己单独一个网。这样一来,掩码的实际用途就是对内网主机私有ip的网络划分。尽管内网的主机ip有好多个,但是采用NAT技术可以使用少量的公网IP,来对外网进行访问。

至于因特网,它上面的每一台主机地位都相等,每一谁是谁的内网一说。所以因特网上面的主机ip都应该是x.x.x.x/32 

当然内网可以采用 多条宽带叠加上网:

1、买多WAN口的路由器,内网分配给手机或电脑就一个ip。相当于内网可以有对个公网IP出入口。
2、电脑同时连接无线和有线,电脑同时具有无线IP和有线IP且两个不相同。还要设置跃点数相同。

平时上网的时候,只会用一个ip,下载的时候多进程 ,会用两个IP 下载。

1、网络分类与保留地址

在主机或路由器中存放的IP地址(IPv4)都是32位的二进制代码。它包含了网络号(net-id)和主机号(host-id)两个独立的信息段。网络号用了标识主机或路由器所连接到的网络,主机号用来标识该主机或路由器。

为了提高可读性,每8位二进制数用一个十进制数(0~255)表示,并以小数点分隔。这种标记IP地址的方法称为“点分十进制记法”,IP地址的网络号在左边,主机号在右边。

根据固定的网络号和主机号位数的不同,IP地址分成了五类:A类、B类、C类、D类和E类。其中最常用的是A类、B类和C类。

1. A类地址
⑴ A类地址第1字节为网络地址,其它3个字节为主机地址。另外第1个字节的最高位固定为0。
⑵ A类地址范围:1.0.0.1到126.255.255.254。
⑶ A类地址中的私有地址和保留地址:
①10.0.0.0到10.255.255.255是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。
② 127.0.0.0到127.255.255.255是保留地址,用做循环测试用的。

最大网络数127个(1~126是可用的,127作为本地软件环回测试本主机之用)
每一个A类网络中最大主机数是1 677 214(即224-2)个。减去2个的原因是去掉一个主机号全0的地址(网络地址)和主机号全1的地址(广播地址)

2. B类地址
⑴ B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。另外第1个字节的前两位固定为10。
⑵ B类地址范围:128.0.0.1到191.255.255.254。
⑶ B类地址的私有地址和保留地址
① 172.16.0.0到172.31.255.255是私有地址
  ②169.254.0.0到169.254.255.255是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器,这时你将会从169.254.0.0到169.254.255.255中临得获得一个IP地址。【在mac 电脑中,用 netstat -r 查看路由表时,发现有 169.254 网段,现在明白了 】最大网络数16384个,每一个B类网络中最大的主机数是65534(216-2)个

3. C类地址
⑴C类地址第1字节、第2字节和第3个字节为网络地址,第4个个字节为主机地址。另外第1个字节的前三位固定为110。
⑵ C类地址范围:192.0.0.1到223.255.255.254。
⑶ C类地址中的私有地址:192.168.0.0到192.168.255.255是私有地址。
最大网络数2 097 152, 每一个C类网络中最大的主机数254(28-2)个

4.D 类地址的网络号为1110,用于多播(一对多通讯)。E 类地址的网络号为1111,保留以后使用。

广播地址分为两种:直接广播地址和有限广播地址 有限广播地址也称为本地广播地址,TCP/IP协议规定32比特全为1的IP地址(255.255.255.255)用于本网广播。 在主机不知道本机所处的网络时(如主机的启动过程中),只能采用有限广播方式,用于从网络IP地址服务器处获得一个IP地址。

该地址用于主机配置过程中IP数据报的目的地址。此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。【需要进一步去了解上网信息流全过程】

当广播地址包含一个有效的网络号和主机号,技术上就称为直接广播地址。


2、子网划分

采用借位的方法,从主机最高位开始借位变为新的子网络,剩余部分仍然为主机位,使本来应当属于主机号的部分改变为网络号,这样就实现了划分子网的目的。借位使得IP地址的结构分为3部分:网络位、子网位和主机位。

网络位            +    主机位      ——>网络位+子网位     +    主机位

假设某公司有一个C类地址202.110.1.0,现将主机字段的前3位作为子网号,后5位作为主机号,这样该公司最多可划分8(23)个子网,每个子网有30(25-2)个主机地址可以分配。

子网数=2x个(X=借位数)

                 主机数=2y-2个(Y=主机位)

3、网络掩码

子网掩码(subnet mask)又叫网络掩码地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址主机地址两部分。
子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
网络掩码最长可以和IP地址一样长,32bit位或四个字节长。
比如DNS服务器8.8.8.8/32掩码就是32位,其网段号为10.10.10.10,主机号没有,那么这个网段就这一台主机,所以有没有主机号就无足轻重。
网络掩码最短是多少?
0位,比如路由表 中的 缺省路由 0.0.0.0/0 ,这条路由代表所有IP网段。
所以对应的网段号长短介于0-32位之间。路由器,按照最长匹配原则,主机会优先32位长的路由,来匹配IP包中的目的IP 地址。
大白话讲网络掩码:
网络掩码就是:  全是1的N位长,N位长就是用来表示 掩码的位数。后面用零补充到
32位。
根据网络掩码的位长,匹配 取出对应ip的位数,后面全补零,就是网络号了。其实就是将掩码与ip相与,获得网络号的意思。该网络号-左边最长的标准网络号(8位,16位,24位)剩余的部分=子网络号。
即:网络号=标准网络号+子网络号(有时后子网络号不存在)
一般掩码数8位,16位,24位,32位:这种是刚好 占据了1个,2个,3个,4个字节。
占了4个字节的网络掩码 没有主机号,只代表 一个主机 占了一个 IP 节点。
有主机号的ip节点,就代表一个ip出口,里面有内网,内网主机共享了一个对外ip节点。
其他那种,不是整个字节的:
就称为子网掩码好了,例如:
定义子网掩码的步骤为:
A、确定哪些组地址归我们使用。比如我们申请到的网络号为 “210.73.a.b”,该网络地址为c类IP地址,网络标识为“210.73.a”,主机标识为“b”。
B、根据我们所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。比如我们需要12个子网,将来可能需要16个。用第四个字节的前四位确定子网掩码。前四位都置为“1”,即第四个字节为“11110000”,这个数我们暂且称作新的二进制子网掩码。
C、把对应初始网络的各个位都置为“1”,即前三个字节都置为“1”,则子网掩码的间断二进制形式为:“11111111.11111111.11111111.11110000” 。
D、把这个数转化为间断十进制形式为:“255.255.255.240” 。
核心解释就是:子网掩码 计算时 x.x.x.x/y
y要掩盖住前面的(8,16,24其中的一个,看看和哪个比较接近就掩住,未掩住的剩下的几位,就是 子网号。子网号 每一位可以取0或1,就可以分割成 2^(未遮掩未数)个子网啦   )

四、超网

超网(supernetting),也称无类别域间路由选择(CIDR)。子网就是 将256个主机细划分成多个子网。超网就是将 多个 256个主机的子网,合并成一个大网。

1、首先 判断 是什么类型的网络(根据给定的IP地址),A类,B类,C类。这样做可以确定基本的网络位。

2、接下来判断 是子网还是 超网,根据掩码计算出的 网络位 和 基本网络位,进行比较。如果 网络位大于 基本位,那就是子网。超出的位数X,代表 2^x的子网数目。如果 网络位 小于基本位,那就代表是超网。超网只代表 一个大网络。缺少的位数+基本主机位 = 整个主机位 可以占用的位数 。

1.1.0.0/24  一个子网 可以容纳 256个主机

1.1.1.0/24  一个子网可以容纳256 个主机

将两个网络合并,可以用超网表示:

1.1.0.0/23 【这里应该是24-23,第三个字节是被合并的子网数,只有一位,可以表示0或1,刚好就是00000001.00000001.00000000.X 和00000001.00000001.00000001.X,第三个字节的最后一位表示合并子网数,上面的X就代表每个被合并的子网的主机有256个】

超网的合并需要 连续的子网。

========================================================

 在配置ACL时碰到这样一个地址范围:59.39.80.0-59.39.127.0,如何划分超网才使ACL条目最少呢?
 59.39.80.0转化为2进制为:
00111011.00100111.01010000.00000000
↑取全0之前位数为网络地址位,即59.39.80.0/20[59.39.80.0-59.39.95.255]得到一个超网
然后余下的地址以59.39.96.0开始,
59.39.96.0转化为2进制为:
00111011.00100111.01100000.00000000
↑取全0之前位数为网络地址位,即59.39.96.0/19[59.39.96.0-59.39.127.255],全部覆盖此地址池.
一共得到两条ACL,分别为:59.39.80.0/20、59.39.96.0/19

 

参考:
https://jingyan.baidu.com/article/ae97a646d936ddbbfd461d02.html
https://www.cnblogs.com/RzCong/p/5458962.html

网络原理-计算机网络详解-网络层概述

网络主要 分为:

1、IP网络(TCP/IP 网络协议)

2、NetWare网络( IPX/SPX网络协议)   目前已经停止维护了,废弃了。

3、X.25网络,网络层采用分组级协议(PacketlevelProtocol,PLP)

根据现实环境,本文只介绍IP网络的协议


一、上网信息流程分析

看这里的博文

二、IP协议

网络之间互连的协议(IP)是Internet Protocol的外语缩写, 中文缩写为“网协”.
网络之间互连的协议也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。IP地址具有唯一性,根据用户性质的不同,可以分为5类。另外,IP还有进入防护,知识产权,指针寄存器等含义。

大白话:我们常说的IP就是 IP地址。tcp/ip 网络模型 中的网络层用的就是IP数据包。

版本号(Version):长度4比特。标识目前采用的IP协议的版本号。一般的值为0100(IPv4),IPv6的值(0110)

首部长度(Header Length)占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为首部固定长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。也就是说可选字段长度可以是4字节,8字节等。

区分类型(Type of Service):长度8比特。这个子段可以拆分成两个部分:Precedence和TOS。TOS目前不太使用。而Precedence则用于QOS应用。(TOS字段的详细描述RFC 1340 1349)

IP包总长(Total Length):长度16比特。IP包最大长度65535字节。包括首部长度和数据部分长度。【以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的. 这个1500字节被称为链路层的MTU(最大传输单元).
但这并不是指链路层的长度被限制在1500字节,其实这这个MTU指的是链路层的数据区。并不包括链路层的首部和尾部的18个字节。所以事实上,这个1500字节就是网络层IP数据报的长度限制】

生存时间(TTL):长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于故障而导致IP包在网络中不停被转发。

协议(Protocol):长度8比特。标识了上层所使用的协议。指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。

首部校验和(Header Checksum):长度16位,由于IP包头是变长的,所以提供一个头部校验来保证IP包头中信息的正确性。因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。

起源和目标地址(Source and Destination Addresses):这两个地段都是32比特。标识了这个IP包的起源和目标地址。

可选项(Options):该字段由起源设备根据需要改写。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。某些选项项目只需要1个字节,它只包括1个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。新的IP版本IPv6就将IP数据报的首部长度做成固定的。【经过抓包分析,如果ip包装载的是 udp 和 tcp ,那么ip头部不会添加可选项】

目前,这些可选项定义如下:
(1)安全和处理限制(用于军事领域)
(2)记录路径(Record route)(当IP包离开每个路由器的时候记录路由器的出站接口的IP地址)
(3)时间戳(Time Stamp)(让每个路由器都记下IP数据报经过每一个路由器的IP地址和当地时间)
(4)宽松的源站路由(Loose Source Route)(为数据报指定一系列必须经过的IP地址)
(5)严格的源站路由(Strict Source Route)(与宽松的源站路由类似,但是要求只能经过指定的这些地址,不能经过其他的地址) 这些选项很少被使用,并非所有主机和路由器都支持这些选项。

标识符(Identifier):长度16比特。在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。该字段和Flags和Fragment Offest字段联合使用,对大的上层数据报进行分段(fragment)操作。

标记(Flags):长度3比特。该字段第一位不使用。第二位是DF位,DF位设为1时表明路由器不能对该上层数据报分段。如果一个上层数据报无法在不分段的情况下进行转发,则路由器会丢弃该上层数据报并返回一个错误信息。第三位是MF位,当路由器对一个上层数据报分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1。

片偏移(Fragment Offset):长度13比特,片偏移的单位为 8 字节。该字段对包含分段的上层数据的IP包赋予序号。由于IP包在网络上传送的时候不一定能按顺序到达,这个字段保证了目标路由器在接受到IP包之后能够还原分段的上层数据报。到某个包含分段的上层数据报的IP包在传送是丢失,则整个一系列包含分段的上层数据的IP包都会被要求重传。

三、与 IP 协议配套使用的还有三个协议:

  • 地址解析协议 ARP(Address Resolution Protocol)
  • 网际控制报文协议 ICMP(Internet Control Message Protocol)
  • 网际组管理协议 IGMP(Internet Group Management Protocol)

网络原理-计算机网络详解-网络层之ICMP和ping

ICMP协议 (Internet控制报文协议)

1、ICMP协议概述

通常被认为是IP层的组成部分,一般被IP层或更高层(TCP、UDP)使用。
ICMP报文是在IP数据报内部被传输的。如图:

 

ICMP报文的格式如下:

报文的前4个字节都一样: 8bit类型,8bit代码,16bit检验和。

16bit检验和,算法和计算IP首部检验和一样,ICMP检验和要覆盖整个报文,包括首部和数据。
ICMP报文有不同的报文类型,不同类型由这个8bit的类型和8bit的代码共同决定。一个类型下可能有多个代码。
比如: 类型0表示回显应答(ping应答);类型1表示目的不可达,其中代码0表示网络不可达,代码1表示主机不可达,代码2表示协议不可达,代码3表示端口不可达等等…

报文也分为查询类型还是差错类型。因为有时要对差错报文进行特殊处理,比如对ICMP差错报文进行响应时就不会再生成一个ICMP差错报文…
当发生的是差错报文时,报文始终包含导致产生ICMP差错报文的原IP首部和数据部分的前8个字节(比如传输层的UDP或者TCP,这包含了端口号)。这里的原IP首部中的协议字段和前8个字节的端口号,可以判断出是哪个协议和哪个用户进程。
除了上述的ICMP差错报文不会再产生ICMP差错报文,一般目的地址是广播的数据报不会再产生ICMP差错报文了,这样防止广播风暴…

ICMP地址掩码请求与应答
ICMP时间戳请求与应答
ICMP端口不可达差错:
如果说报文发送到目的主机的未监听的端口,那么目的主机就会返回一个端口不可达的ICMP差错报文。traceroute就利用了这一点。

 

可以看出ICMP报文的数据部分,包含了原IP的首部和IP数据部分的前8个字节(这里就是UDP首部)。

2、ICMP之ping

ping程序是由Mike Muuss编写,目的是为了测试一个主机是否能到达。相当于潜艇的声呐一样,给对方发送测试信息,等待对方是否响应返回。

该程序的原理就是向目的主机发送一个请求回显类型(ICMP众多类型的一个,类型是8,代码是0)的ICMP报文,并等待返回ICMP回显应答(ICMP众多类型的一个,类型是0,代码是0)。
一般来说,如果ping不通主机,就表示不能访问那台机器。不过随着Internet安全意识提高,比如现在的路由器和防火墙已经可以提供访问控制列表了,ping不通也不一定是访问不了主机了…

ping程序ICMP回显请求和回显应答的报文格式如下:

Unix系统在实现ping程序时,标识符字段置成发送进程的ID号,这样一台机器启用多个ping的时候,当本机接到应答报文时,就能识别出是哪个ping实例发出的。
ping返回每个序列号,ttl,time…序列号是每发送一个新的回显请求就加1,起始是0。ttl就是过了几个路由(ping局域网内的机器发现ttl就不会减少)。time就是计算的往返时间,发送的时候在数据部分记录下发送时间,收到的时间减去这个发送时间。
ping的时候,往往会发现第一个回来的报文比别的要用的往返时间长,这个多出去的时候就可能是arp寻找mac地址…

ping程序也提供了查看IP记录路由选项的.在IP首部中,还记得有个选项的字段吧~这些个ip记录就放在这个字段里。每经过一个路由,就把这个路由出口的ip(注意这里规范是出口地址),回显应答报文回到源端时仍然会记录下每个路由的出口地址。
IP首部最长是60个字节,减去固定的20字节长度,剩下40个字节。记录路由IP的这个类型项、长度项、记录ip位置的指针各占1个字节,这样存放各个路由ip就只剩下37个字节,一个ip4个字节,因此最多只能记录9个路由…
IP首部的选项还可以记录IP时间戳。这个类似于IP记录路由选项。

3、ICMP之Traceroute

traceroute程序–可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由情况。

ping程序中也提供了查看IP记录路由选项,为啥还要再搞一个traceroute咧?主要原因还是因为IP首部选项能存储的ip数量太少了,最多9个。如果只考虑去和回的一个方向,那么最多只能存储4-5个路由,这在现在的互联网规模来看显然是不太满足的。
traceroute几个核心知识:利用TTL通过路由减1,直到变为1或者0时(路由不会传送TTL为0的包),路由就会发送超时类型的ICMP报文通知源端主机。利用UDP发送一般不常见的端口号给目的主机,当真正到达目的主机时,目的主机会发送一个端口不可达错误的ICMP报文(在未到达时,是路由返回的超时类型的ICMP报文,需要辨识开)。源端主机根据这个确认是否到达。TTL开始是1,逐渐递增。

一个细节:对于每个TTL值,都会发送三个包。每接到一个报文,就计算并打印出来往返时间。如果5秒钟内一个包没收到,就打印一个*号,并发送下一份数据报。

ICMP超时报文格式如下:

 

IP源站选路选项:
通常IP路由是动态的,每个路由都要判断下一站转发给谁。源站选路:就是由发送者指定路由。采用类似Traceroute程序的工具来发现实际的路由。
一般分为严格和宽松的两种。严格的源站,是由发送端确切指明每个路由,如果发现指定的路由不在这个连接的路由上,那么就会发送“源站路由失败”的ICMP报文。
宽松的:发送端指明一个路由的IP地址清单,每两个IP路由之间可以通过其他路由器。
这里指定的路由和IP记录路由选项是一样的,都是利用IP首部的选项字段,格式也很类似。

 

 


参考自:

http://www.cnblogs.com/firstForEver/p/5345900.html

网络原理-计算机网络详解-数据链路层之以太网

网络层 包括两种结构:

数据报与虚电路
https://blog.csdn.net/lovecc_orange/article/details/79237256

一、以太网帧结构

常见的以太网帧结构有:IEEE 802.3 和 DIX Ethernet V2

下面是 DIX Ethernet V2

802.3 又细分为 不同的 以太网 帧。

但主要就是 将上图的类型改为 长度 了,其他就是 将数据部分 做了一点拆分,其他变化不大。

802.3 以太网帧结构【来自维基百科】
前导码 帧开始符 MAC 目标地址 MAC 源地址 802.1Q 标签 (可选) 以太类型 负载 冗余校验 帧间距
10101010 7个octet 10101011 1个octet 6 octets 6 octets (4 octets) 2 octets 46–1500 octets 4 octets 12 octets
64–1522 octets
72–1530 octets
84–1542 octets

Ethernet II
以太 II 帧 (也称作DIX以太网,是以这个设计的主要成员,DEC,Intel和Xerox的名字命名的。[1]),把紧接在目标和源MAC地址后面的这个两字节定义为以太网帧数据类型字段。

例如,一个0x0800的以太类型说明这个帧包含的是IPv4数据报。同样的,一个0x0806的以太类型说明这个帧是一个ARP帧,0x8100说明这是一个IEEE 802.1Q帧,而0x86DD说明这是一个IPv6帧。

当这个工业界的标准通过正式的IEEE标准化过程后,在802.3标准中以太类型字段变成了一个(数据)长度字段。(最初的以太包通过包括他们的帧来确定它们的长度,而不是以一个明确的数值。)但是包的接收层仍需知道如何解析包,因此标准要求将IEEE802.2头跟在长度字段后面,定义包的类型。多年之后,802.3x-1997标准,一个802.3标准的后继版本,正式允许两种类型的数据包同时存在。实际上,两种数据包都被广泛使用,而最初的以太数据包在以太局域网中被广泛应用,因为他的简便和低开销。

为了允许一些使用以太II版本的数据报和一些使用802.3封装的最初版本的数据包能够在同一个以太网段使用,以太类型值必须大于等于1536(0x0600)。这个值比802.3数据包的最大长度1500byte (0x05DC)要更大。因此如果这个字段的值大于等于1536,则这个帧是以太II帧,而那个字段是类型字段。否则(小于1500而大于46字节),他是一个IEEE 802.3帧,而那个字段是长度字段。1500~1536(不包含)的数值未定义。因为网络环境 MTU选择是1500【即以太网帧最大负载是1500字节】,所以我们上网用的以太网帧 应该是 802.3帧。

=======================================================

标准的以太网帧,我们经常说的以太网帧长度是从图中 目标MAC地址开始,FCS结束。网卡对网络层数据的操作是加以太网帧头、以太网帧尾FCS,很显然上层需要提供目的MAC地址,否则接口无从完成以太网帧的封装。这需要IP层需要事先完成和ARP的交互,解析出目的IP对应的目的MAC,这显然不能由网卡来完成。

网卡对物理层接收到的二进制流成帧处理,校验FCS,去掉以太网帧头,把载荷Payload (中文指以太网帧内的数据)放在接收缓存,等待网络层取走。

标准的以太网帧最大可以发送长度1518字节,指的就是这个。去掉以太网头14个字节,再去掉尾部的校验和FCS 4个字节,留给上层协议也就是(1518-14-4)=1500个字节,这个就是MTU的由来。上层协议加黑的原因是要引起大家的注意,这个上层协议如果是IP,那么就是IP MTU,如果是MPLS,就是MPLS MTU,如果是IPv6,那就是IPv6 MTU。

类型: 以太网协议

网卡用来分辨封装的是什么协议,然后再通知不同的协议模块来取走数据。

Payload: 载荷(就是指以太网帧中的数据)

这个允许负荷的最大长度对应的就是负荷的最大传输单元,即MTU,标准的以太网帧,允许的最大负荷长度为1500字节,所以如果上层协议为IPv4,那就是IPv4 MTU=1500,所以经常看到主机的MTU为1500字节。

FCS: 校验码

为了防止在传输过程中发生错误,数据发送方的网卡会计算一个校验码,覆盖整个以太网帧,并放在以太网帧尾部,发送出去,接收网卡需要对其进行校验,来决定是否接收。而如果不校验,一个错误的帧可能要到TCP、UDP才能被发现出来,这样的话会浪费很多CPU资源。CPU会说:屁大点的事都搞不定,还要劳烦朕,可以去自宫了。而如果网卡来进行校验,错了就默默地丢弃,不惊动高层,高层肯定偷偷乐开了花。

IP层能发现IP包的损坏吗?

IP头的校验码只覆盖IP头,保证关键信息如目的IP在传输过程没有差错,可以到达目的地,至于里面封装内容则由目的地主机负责校验,可以减少路由器的处理时间,提高转发效率。

二、以太网特点

CSMA/CD可归结为四句话
发前先侦听,空闲即发送, 边发边检测,冲突时退避。

CSMA/CD解决的是,介质占用问题。
而全双工倾向解决的是,两端同时发送数据的碰撞问题。
具体内容可以查看介质访问控制 文章

为了通信的简便 以太网采取了两种重要的措施

  • 采用较为灵活的无连接的工作方式,即不必先建立连接就可以直接发送数据。
  • 以太网对发送的数据帧不进行编号,也不要求对方发回确认。
    • 这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的。

以太网提供的服务

  • 以太网提供的服务是不可靠的交付,即尽最大努力的交付。
  • 当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。差错的纠正由高层来决定。
  • 如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送。

三、以太网的差错控制和流量控制

3.1差错控制

以太网的数据链路层的FCS检查是针对整个帧进行检查的。

IP帧的校验码只覆盖IP头,【16位首部校验和,可以查看ip报头】保证关键信息如目的IP在传输过程没有差错,可以到达目的地,至于里面封装内容则由目的地主机负责校验,可以减少路由器的处理时间,提高转发效率。所以IP层不能发现IP包的损坏。

所以以太网的差错重传,只能靠传输层的tcp/udp 进行控制了。因为数据链路层 和 ip层 差错重传都 不管。

3.2流量控制

以太网不需要确认帧(碰撞检测:CSMA/CD) 无线网有确认帧(碰撞检测:CSMA/CA)。
有确认帧的,可以使用窗口滑动协议进行流量控制。

当通过交换机一个端口的流量过大,超过了它的处理能力时,就会发生端口阻塞。
网络拥塞一般是由于线速不匹配(如100M向10M端口发送数据)和突发的集中传输而产生的,它可能导致这几种情况:延时增加、丢包、重传增加,网络资源不能有效利用。
流量控制的作用是防止在出现阻塞的情况下丢帧。

在半双工方式下,流量控制是通过反压(backpressure)技术实现,模拟产生碰撞,使得信息源降低发送速度。
有两种方法可以达到这一目的:交换机可以强行制造一次与服务器的冲突,使得服务器退避;或者,交换机通过插入一次“载波检测”使得服务器的端口保持繁忙,这样就能使服务器感觉到交换机要发送数据一样。利用这两种方法,服务器都会在一段时间内暂停发送,从而允许交换机去处理积聚在它的缓冲区中的数据。

在全双工方式下,IEEE802.3 x标准定义了在全双工环境中实现流量控制的方法。交换机产生一个”PAUSE”MAC控制帧,”PAUSE”MAC控制帧使用一个保留的组播地址:01-80-C2-00-00-01,将它发送给正在发送的站,发送站接收到该帧后,就会暂停或停止发送。PAUSE帧利用了一个保留的组播地址,它不会被网桥和交换机所转发,这样,PAUSE帧不会产生附加信息量。
在全双工环境中,服务器和交换机之间的连接是一个无碰撞的发送和接收通道。由于没有碰撞检测,且不允许交换机通过产生一次冲突而使得服务器停止发送

以太网pause帧 格式  【资料不全,大致整理如下】

目标mac 6字节 源mac  6字节 length/type 2字节 mac control opcode 2字节 mac control parameters 保留域 FCS

4字节

四、以太网CSMA/CD中的重传功能

1、以太网是没有差错控制中的重传功能的,以太网帧只有FCS(覆盖整个以太网帧,并放在以太网帧尾部)【大白话,计算帧头到帧尾前的数据,输出FCS放于帧尾处】

2、但是以太网每发完一帧,一定要把已经发送的帧暂时保留一下。如果在争用期内检测出发生了碰撞,那么还要在推迟一段时间后再把这个帧重传一次。

===================================================

五、PPPOE

PPPOE 就是  PPP over Ethernet

PPPoE报文的格式就是在以太网帧中携带PPP报文,如图所示

PPPoE报文的格式就是在以太网帧中携带PPP报文,如图所示。

各个字段解释如下:

Destination_address域:一个以太网单播目的地址或者以太网广播地址(0xffffffff)。对于Discovery数据包来说,该域的值是单播或者广播地址,PPPoE Client寻找PPPoE Server的过程使用广播地址,确认PPPoE Server后使用单播地址。对于Session阶段来说,该域必须是Discovery阶段已确定的通信对方的单播地址。Source_address域:源设备的以太网MAC地址。

Ether_type:设置为0x8863(Discovery阶段或拆链阶段)或者0x8864(Session阶段)。

Ver域:4bits,PPPoE版本号,值为0x1。 Type域:4bits,PPPoE类型,值为0x1。  Code域:8bits,PPPoE报文类型。Code域为0x00,表示会话数据。Code域为0x09,表示PADI报文;Code域为0x07,表示PADO或PADT报文;Code域为0x19,表示PADR报文;Code域为0x65,表示PADS报文。报文的具体情况请参见附录部分。Session_ID域:16bits,对于一个给定的PPP会话,该值是一个固定值,并且与以太网Source_address和Destination_address一起实际地定义了一个PPP会话。值0xffff为将来的使用保留,不允许使用。   Length域:16bits,定义PPPoE的Payload域长度。不包括以太网头部和PPPoE头部的长度。数据域,有时也称之为净载荷域,在PPPOE的不同阶段该域内的数据内容会有很大的不同。在PPPOE的发现阶段时,该域内会填充一些Tag(标记);而在PPPOE的会话阶段,该域则携带的是标准的点对点协议包


六、以太网答疑

为什么以太网有最短/最长帧长度的要求?

总线型以太网半双工,碰撞检测所致长度要求。后来的星型以太网,全双工模式,长度可能就不受限制了。在全双工模式下,不会有冲突域、专用的交换机端口可用于全双工节点、主机的网卡和交换机端口必须能够运行在全双工模式下。

全双工以太网适用于:
1交换机到pc主机的连接。
2交换机到交换机的连接
3pc到pc的连接(使用交叉电缆
4交换机到路由器的连接(使用交叉电缆)
5路由器到路由器的连接(使用交叉电缆)
6路由器到主机pc的连接(使用交叉电缆)

全双工模式下,为了允许一些使用以太II版本的数据报和一些使用802.3封装的最初版本的数据包能够在同一个以太网段使用,以太类型值必须大于等于1536(0x0600)。这个值比802.3数据包的最大长度1500byte (0x05DC)要更大。

因此如果这个字段的值大于等于1536,则这个帧是以太II帧,而那个字段是类型字段。否则(小于1500而大于46字节),他是一个IEEE 802.3帧,而那个字段是长度字段。1500~1536(不包含)的数值未定义。因为网络环境 MTU选择是1500【即以太网帧最大负载是1500字节】,所以我们上网用的以太网帧 应该是 802.3帧。

以太网帧长度上下限
标准以太网帧长度下限为:64 字节
标准以太网帧长度上限为:1518 字节

最早的以太网工作方式:载波多路复用/冲突检测CSMA/CD,因为网络是共享的,即任何一个节点发送数据之前,先要侦听线路上是否有数据在传输,如果有,需要等待,如果线路可用,才可以发送。

假设A发出第一个bit位,到达B,而B也正在传输第一个bit位,于是产生冲突,冲突信号得让A在完成最后一个bit位之前到达A,这个一来一回的时间间隙slot time是57.6μs.

在10Mbps的网络中,在57.6μs的时间内,能够传输576个bit,所以要求以太网帧最小长度为576个bits,从而让最极端的碰撞都能够被检测到。这个576bit换算一下就是72个字节,去掉8个字节的前导符和帧开始符,以太网帧的最小长度为64字节。

如果说以太网帧的最小长度64byte是由CSMA/CD限制所致,那最大长度1500byte又是处于什么考虑的呢?

IP头total length为两个byte,理论上IP packet可以有65535 byte,加上Ethernet Frame头和尾,可以有65535 +14 + 4 = 65553 byte。如果在10Mbps以太网上,将会占用共享链路长达50ms,这将严重影响其它主机的通信,特别是对延迟敏感的应用是无法接受的。

由于线路质量差而引起的丢包,发生在大包的概率也比小包概率大得多,所以大包在丢包率较高的线路上不是一个好的选择。

但是如果选择一个比较小的长度,传输效率又不高,拿TCP应用来说,如果选择以太网长度为218byte,TCP payload = 218 – Ethernet Header -IP Header – TCP Header=218-18 – 20-20= 160 byte

那有效传输效率=160/218= 73%

而如果以太网长度为1518,那有效传输效率=1460/1518=96%

通过比较,选择较大的帧长度,有效传输效率更高,而更大的帧长度同时也会造成上述的问题,于是最终选择一个折衷的长度:1518 byte ! 对应的IP packet 就是 1500 byte,这就是最大传输单元MTU的由来。

MRU的由来(最大接收单元)

最早的以太网是通过Hub或集线器来工作的,在任意时刻只能有一台主机发送,这种共享方式发送效率很低,而现代高速交换机则让每个连接交换机的主机工作在独占模式,带宽独享,可以同时收发,而且现在早已不是早期的10Mbps的带宽,而是1000M、10000M,即使发送大包也不会影响别的主机,影响的只是交换机的接收和发送队列,既然发送大包效率要比小包效率搞,而且特定的应用也有发大包的需求,比如NFS文件系统,那为什么不把接口MTU提高一些,再高一些呢?这是一个好主意,于是网卡、交换机、路由器网络接口可以实现更大的MTU,可以达到>9000字节的大小,我们称这种远大于标准以太帧尺寸的帧为巨型帧Jumbo Frame 。

于是网络接口提供可以修改MTU的配置命令,比如缺省为1500,可以修改为1508以支持QinQ,或者1512以支持802.1q Mpls label,这样既可以支持终端用户标准1500 字节IP packet,又可以避免分片。

有一点需要说明,二层交换机的接口,我们可以看成一块普通的网卡,网卡工作在数据链路层,所以分片不是它的职责,如果一个帧需要从交换机一个接口发送出去,而帧的长度>接口MTU,怎么办?丢弃!会发什么消息告诉源主机吧?不会的,默默地丢,当什么否没有发生,这种情况最难以排查,如果traceroute可以看到端对端使通的,而发送数据就是会失败。所以切记,一台交换机要保证接口MTU的一致性。如果在一个VLAN上、或整个交换机都采用同样的MTU,就不会发生上述情况。而如果入接口是9000字节,而出接口是1500,就会发生上述问题。

如果一条物理链路的两端MTU不一致,则会发生什么情况,比如一侧是1500,一侧是9000,1500一侧发出来的数据肯定没有问题,但是如果从9000侧发给1500呢?数据也背默默地丢了。为什么呢?我们来谈另外一个很少提及的词汇:MRU,最大接收单元。

最大接收单元MRU

我们一直谈的最大传输单元MTU是关于出方向的流量处理,而MRU恰恰相反,是关于入方向的流量处理。

一般情况下MTU = MRU,比如9000侧的数据到达1500,由于9000>MRU ,所以直接默默丢弃。

所以在配置链路时,要确保两侧的设备MTU要匹配,无论各家厂商对MTU理解如何、实现如何,一定要保证两端匹配,即各自允许在以太网线上发送、接收的数据流,即以太网帧的最大长度一样

为什么无线局域网上发送数据帧后要对方必须发回确认帧,而以太网就不需要对方发回确认

CSMA/CD媒体访问控制方法的工作原理,可以概括如下:
先听后说,边听边说;
一旦冲突,立即停说;
等待时机,然后再说;

CSMA/CD协议解决了如何在有线以太网上检测和避免当两个或两个以上的网络设备需要同时进行数据传输时网络上的冲突。其工作原理可以总结为先听后说,边听边说;一旦冲突,立即停说;等待时机,然后再说。但其并不适合无线局域网,在无线局域网中,无线电波传输距离受限,不是所有的节点都能够都能监听到信号;而且,无线网卡工作在半双工模式下,设备无法一边接收数据信号,一边传送数据信号。另一方面,无线带宽本就不高,一旦发生碰撞,重新发送数据,会降低吞吐量。

为此,在802.11中对CSMA/CD进行了一些修改,采用了新的协议CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance),即,载波监听多路访问/冲突避免机制,利用ACK信号来避免冲突的发生,也就是说,只有当STA收到网络上返回的ACK信号后才确认送出的数据已经正确到达目的地址。
CSMA/CA协议
为了尽量避免碰撞,802.11标准规定,所有的STA在完成帧的发送后,必须在等待一段很短的时间才能发送下一帧,这段时间叫做帧间间隔IFS。帧间间隔的长短取决于该站要发送的帧的类型。高优先级的帧需要等待的时间较短,因此可以优先获得发送权,但低优先级帧就必须等待较长的时间。若低优先级帧还没来得及发送而其他高优先级帧已发送到媒体,则媒体变为忙态因而低优先级帧就只能再推迟发送了。这样就减少了发生碰撞的机会。至于各种帧间间隔的具体长度,这取决于使用的物理层特性。
SIFS,即短(Short)帧间间隔。SIFT是最短的帧间间隔,用来分隔开属于一次对话的各帧。在这段时间内,一个STA应当能够从发送方式切换到接收方式。使用SIFS的帧类型有:ACK帧、CTS帧、由过长的MAC帧分片后的数据帧,以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧。
PIFS,即点协调功能帧间间隔(比SIFS长),是为了在开始使用PCF方式时(在PCF方式下使用,没有争用)优先获得接入到媒体中。PIFS的长度是SIPS加一个时隙时间(slot time)的长度。时隙的长度是这样确定的:在一个基本服务集BSS内,当某个站在一个时隙开始时接入到信道时,那么在下一个时隙开始时,其它站就都能检测出信道以转变为忙态。
DIFS,即分布协调功能帧间间隔(最长IFS),在DCF方式中用来发送数据帧和管理帧。DIFS的长度比PIFS再多一个时隙长度。
为了尽量减少碰撞的机会,802.11标准采用了一种叫做虚拟载波监听地的机制,这就是让源站把它要占用的信道时间(包括目的站发回确认帧所需时间)写入到所发送的数据帧中,(即在首部中的“持续时间”字段中写入需要占用信道时间,以微秒为单位,一直到目的站把帧确认完为止),以便使其他所有的站在这一段时间都不要发送数据。“虚拟载波监听”的意思是其他各站并没有监听信道,而是由于这些站都知道了源站正在用信道才不发送数据。这种好像是其他站都监听了信道。 当站点检测到正在通信中传送的帧“持续时间”字段时,就调整自己的网络分配向量NAV。NAV指出了信道处于忙状态的持续时间。信道处于忙状态就表示:或者是由于物理层的载波监听检测到信道忙,或者是由于MAC层的虚拟载波监听机制指出了信道忙。
CSMA/CA工作原理
(1)首先检测信道是否有STA在使用,如果检测出信道空闲,则等待DIFS时间后,才送出数据。
 (2)目的STA如果正确收到此帧,则经过SIFS时间间隔后,向源STA发送确认帧ACK。
 (3)源STA收到ACK帧,确定数据正确传输,在经历DIFS时间间隔后,会出现一段空闲时间,叫做争用窗口,表明会出现各STA争用信道的情况。
如果检测信道时发现信道正在使用,STA使用CSMA/CA协议的退避算法。冻结退避计时器。只要信道空闲,退避计时器就进行倒计时。当退避计时器减少到零时,STA就发送帧并等待确认。如果没有收到ACK帧,必须重传次帧。

参考:

https://zhuanlan.zhihu.com/p/21318925

https://blog.csdn.net/u011531613/article/details/59038866

https://blog.csdn.net/violet_echo_0908/article/details/51897628