网络通讯

网关:缓存

你们都知道,从一个 房间走到另外一个房间,必然要通过一扇门。一样,从一个网络向另外一个网络发送信
网关 网关
息,也必须通过一道“ 关口”,这道关口就是网关。 顾名思义,网关( Gateway[1]   就是一个网络链接到另外一个网络的“关口”。也就是网络 关卡
网关(Gateway)又称网间链接器、协议转换器。默认网关在 网络层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不一样的网络互连。网关的结构也和 路由器相似,不一样的是互连层。网关既能够用于 广域网互连,也能够用于 局域网互连 [1]   。
【说明:因为历史的缘由,许多有关TCP/IP的文献曾经把网络层使用的路由器称为网关,在今天不少局域网采用都是路由来接入网络,所以一般指的网关就是路由器的IP!】 [2]  
OSI中,网关有两种:一种是面向链接的网关,一种是无链接的网关。当两个 子网之间有必定距离时,每每将一个网关分红两半,中间用一条链路链接起来,咱们称之为半网关。
按照不一样的分类标准,网关也有不少种。 TCP/IP协议里的网关是最经常使用的,在这里咱们所讲的“网关”均指TCP/IP协议下的网关。
那么网关究竟是什么呢?网关实质上是一个网络通向其余网络的 IP地址。好比有网络A和网络B,网络A的 IP地址范围为“192.168.1.1~192. 168.1.254”, 子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。 在没有路由器的状况下,两个网络之间是不能进行TCP/IP通讯的,即便是两个网络链接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)断定两个网络中的主机处在不一样的网络里。而要实现这两个网络之间的通讯,则必须经过网关。若是网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它本身的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络A向网络B转发数据包的过程。
因此说,只有设置好网关的IP地址,TCP/IP协议才能实现不一样网络之间的相互通讯。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具备路由功能的设备的IP地址,具备路由功能的设备有路由器、启用了路由协议的服务器(实质上至关于一台路由器)、代理服务器(也至关于一台路由器)。
 
 
网络通讯流程:
对于主机B的IP地址这时主机A也应该知道,要否则它就不清楚本身将要和谁通讯,当有了本身的IP地址,MAC地址以及主机B的IP地址后,主机A在数据包中能够正确地写上源IP地址,目标IP地址,接下来的工做就是写入本身的MAC地址(即源MAC),最后还必须正确写入目标主机B的MAC地址,可这时主机A才发现本身根本没有目标主机B的MAC地址,那该怎么办呢?这时主机A就经过比较上面已经封装好的源IP和目标IP,经过子网掩码计算一下,发现源IP和目标IP刚好在同一个IP网络内,那么它想要获得目标主机B的MAC地址就有办法了,首先主机A就向本网段发过一个ARP请求,这个ARP请求包中包括主机A的源IP地址,源MAC地址,目标主机B的IP地址,而目标MAC地址为广播MAC地址(所有为F),由于咱们要找的就是目标MAC,因此这里用广播MAC地址,又由于是以太网,因此整个局域网的全部主机都能收到这个请求MAC地址的数据包,固然主机B也能收到,所以在主机B收到此ARP请求后,当即构建一个包括本身的MAC地址的ARP回应包,回应给主机A,当主机A收到这个ARP回应后,终于完成了找寻目标MAC的重大任务,从而把目标主机B的MAC地址正确封装进上面还未封装结束的正准备发给主机B的数据包,在这时,源IP和源MAC以及目标IP和目标MAC都已正确存在于数据包中,那么这里主机A向网络内发出这些数据包,由于目标地址在本网段,因此本网段全部主机都能收到这个数据包(这是以太网的特性),最后只有真正的目标主机B可以打开这些数据包,在此,同网段两台主机之间的通讯就此圆满结束!在这里应该注意另一个问题,由于主机A要寻找的目标主机B在同一网络,因此主机A可以经过ARP获得目标主机B的MAC地址,从而完成通讯,当主机A在封装数据包时检测到目标主机并不在本网段,在这时,数据包不能把目标主机的MAC地址顺利封装进去,那么就用到另外一种方法,那就是网关,主机A在准备发向主机B的数据中,封装好本身的IP地址和MAC地址,同时也封装好目标主机B的IP地址,数据包封装到这里,主机A就利用上面获得同网段目标主机B的方法去请求获得网关的MAC地址,一样也是用ARP去广播,由于网关必须和本机在同一网段,理所固然,网关可以收到这个ARP请求并能正确回应给主机A,这时主机A在数据包中封装好本身的IP地址和MAC地址,同时也 封装好目标主机B的IP地址和网关的MAC地址,把数据包从网卡发出去,由于目标MAC是网关的,因此网关收到这个数据包后,发现目标MAC是本身,而目标IP倒是别人,因此它不能够再往上打开这个数据包,它要作的工做就是把这些数据包发给下一跳路由器(若是网关自身就是一台路由器的话),若是网关是一台普通PC,那么它就发给路由器,让路由器把这些数据包正确传输到远程目标网络,到达远程网络后,它们的网关再将数据包发给数据包中的目标IP,即源主机A苦苦寻找的目标主机B,从而真正结束不一样网络之间的通讯,回应的数据包也是用一样的方法到达目的地,在这里,还须要注意的是,当网关把数据包发给下一跳路由器时,这个数据包必须由网关把目标MAC改为下一跳路由器的MAC地址(经过ARP获得),不然下一跳路由器收到目标MAC不是本身的数据包,会丢弃不予理睬,下一跳路由器再发给下一跳路由器一样要把目标MAC地址改成下一跳路由器的MAC地址再发出去!
 
非同一网段的主机不能直接通讯的缘由:
来看你的问题,环境以下,咱们来用一个ping命令的过程来解释:
一个交换机,连两个电脑A和B,A和B不在一个网段,他们的IP分别是192.168.1.2,255.255.255.0,B是 192.168.2.1,255.255.255.0,网关也能够设也能够不设,但其实你设了也是个假的网关,由于在你的环境里面只有一个交换机,并无路由器,对吗?

A ping B:
1.Ping命令会构建一个固定格式的ICMP请求数据包,而后由ICMP协议将这个数据包连同IP地址“192.168.2.1”一块儿交给IP层协议.
2.IP协议会查看目的IP地址是否和源IP在同一网段,若是在同一网段就直接查找ARP缓存,查找目的MAC,若是目的IP地址是否和源IP不在同一网段,那么就将数据包发送到网关.
3.按照前面的描述,在A电脑上有两种状况,1是没设网关 2是设了一个假的网关,那么若是没设的话,数据包到这一步就丢弃了,目的IP和源IP不在一个网段并且A没有网关,那么就没法发送.若是A设网关了的话,接着往走.
4.假设A电脑设定的网关是192.168.1.1,那么IP协议知道了目的IP,可是不知道目的MAC,因此会查找A电脑的ARP缓存,看里面有没有目的MAC,很遗憾,确定没有,由于环境里并无这个网关设备存在.因此A会发一个ARP广播到192.168.1.X整个网段,来查找IP是192.168.1.1 的MAC,固然,物理上就不存在192.168.1.1这个设备,天然就没有设备来响应这个ARP广播,因此最终IP协议没法知道目的MAC,就没法将数据包往下一个层数据链路层传递.

回到最开始,仍是那句话:IOS一共七层, 发送数据的过程是从上到下,也就是从应用层一直到物理层,接收数据是从下至上.
 
网关和主机必须在同一网段内吗?不用
1 二者在同一网段,就会直接把包发向目标IP,这时要作:

        1.1 查本地arp缓存,看看是否有IP和Mac的对应表.

              1.1.1 有,直接向网络上发包,包中包括原mac及目标mac。

               1.1.2 没有,则向网络发arp广播,用来查找与目标IP对应的mac地址(ARP发送的是广播数据,电缆上的每一个以太网接口都要接收广播的数据帧)

                         1.1.2.1 若是查到了,则向网络发包。

                         1.1.2.2 没查到,则不通信。

2 二者不在同一网段,则把目标地址转为网关地址(也就是平时说的向网关发包),而后查找本地arp缓存,继续1.1 。

由此能够看出,源主机和网关的通信过程当中,并不会检查二者是否是同一网段,而是直接去查arp缓存或者发送ARP广播。因此是可能通信的。
 
为何同时须要IP地址和MAC地址

主要缘由有如下几点:安全

(1)IP地址的分配是根据网络的拓朴结构,而不是根据谁制造了网络设置。若将高效的路由选择方案创建在设备制造商的基础上而不是网络所处的拓扑位置基础上,这种方案是不可行的。服务器

(2)当存在一个附加层的地址寻址时,设备更易于移动和维修。例如,若是一个以太网卡坏了,能够被更换,而无须取得一个新的IP地址。若是一个IP主机从一个网络移到另外一个网络,能够给它一个新的IP地址,而无须换一个新的网卡。网络

(3)方便数据传输。不管是局域网,仍是广域网中的计算机之间的通讯,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另外一个节点,最终传送到目的节点。数据包在这些节点之间的移动都是由ARP协议负责将IP地址映射到MAC地址上来完成的。网站

 

目的mac地址是如何获得的?url

TCP/IP里面是用的ARP协议。好比新建了一个内网,若是一台机器A找机器B,封装FRAME时(OSI的第二层用的数据格式),要封装对方的MAC,开始时A不知道B的MAC,只知道IP,它就发一个ARP包,源IP是本身的,目的IP是B的,源MAC是本身的,目的MAC是广播的。而后这个请求包在内网内被广播,当其余机器接到这个包时,用目的IP和本身的IP比较,不是的话就丢弃。B接到时,发现IP与本身的同样,就答应这个包的请求,把本身的MAC送给A。若是B是其余子网的机器,那么路由器会判断出B是其余子网,而后路由器把本身的MAC返回给A,A之后再给B发包时,目的MAC封装的是路由器的。spa

路由转发过程:.net

当主机A发向主机B的数据流在网络层封装成IP数据包,IP数据包的首部包含了源地址和目标地址。主机A会用本机配置的24位IP网络掩码255.255.255.0与目标地址进行与运算,得出目标网络地址与本机的网络地址是否是在同一个网段中。若是不是将IP数据包转发到网关。代理

在发往网关前主机A还会经过ARP的请求得到默认网关的MAC地址。在主机A数据链路层IP数据包封装成以太网数据帧,而后才发住到网关……也就是路由器上的一个端口。htm

当网关路由器接收到以太网数据帧时,发现数据帧中的目标MAC地址是本身的某一个端口的物理地址,这时路由器会把以太网数据帧的封装去掉。路由器认为这个IP数据包是要经过本身进行转发,接着它就在匹配路由表。匹配到路由项后,它就将包发往下一条地址。

路由器转发数据包就是这样,因此它始终是不会改IP地址的。只会改MAC.

当有数据包传到路由器时,路由器首先将其的目的地址与路由表进行对比,若是是本地网络,将不会进行转发到外网络,而是直接转发给本地网内的目的主机;可是若是目的地址经路由表对比,发现不是在本网中,有nat就将改变源地址的IP(原源地址的Ip地址改成了路由器的IP地址),路由器将数据包转发到相应的端口,进行通讯。

 
 
NAT:
NAT不只能解决了lP地址不足的问题,并且还可以有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
1.宽带分享:这是 NAT 主机的最大功能。
2.安全防御:NAT 以内的 PC 联机到 Internet 上面时,他所显示的 IP 是 NAT 主机的公共 IP,因此 Client 端的 PC 固然就具备必定程度的安全了,外界在进行 portscan(端口扫描) 的时候,就侦测不到源Client 端的 PC 。
 
端口映射:
端口映射分为动态和静态。动态端口映射:内网中的一台电脑要访问网站,会向NAT网关发送数据包,包头中包括对方网站IP、端口和本机IP、端口,NAT网关会把本机IP、端口替换成本身的公网IP、一个未使用的端口,而且会记下这个映射关系,为之后转发数据包使用。而后再把数据发给网站,网站收到数据后作出反应,发送数据到NAT网关的那个未使用的端口,而后NAT网关将数据转发给内网中的那台电脑,实现内网和公网的通信.当链接关闭时,NAT网关会释放分配给这条链接的端口,以便之后的链接能够继续使用。
动态端口映射其实也就是NAT网关的工做方式。
静态端口映射::就是在NAT网关上开放一个固定的端口,而后设定此端口收到的数据要转发给内网哪一个IP和端口,无论有没有链接,这个映射关系都会一直存在。就可让公网主动访问内网的一台电脑。
 
 原理
2.1 地址转换
NAT的基本工做原理是,当私有网主机和公共网主机通讯的IP包通过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。
以下图所示,NAT网关有2个网络端口,其中公共网络端口的IP地址是统一分配的公共 IP,为202.20.65.5;私有网络端口的IP地址是保留地址,为192.168.1.1。私有网中的主机192.168.1.2向公共网中的主机202.20.65.4发送了1个IP包(Dst=202.20.65.4,Src=192.168.1.2)。

 

当IP包通过NAT网关时,NAT Gateway会将IP包的源IP转换为NAT Gateway的公共IP并转发到公共网,此时IP包(Dst=202.20.65.4,Src=202.20.65.5)中已经不含任何私有网IP的信息。因为IP包的源IP已经被转换成NAT Gateway的公共IP,Web Server发出的响应IP包(Dst= 202.20.65.5,Src=202.20.65.4)将被发送到NAT Gateway。
这时,NAT Gateway会将IP包的目的IP转换成私有网中主机的IP,而后将IP包(Des=192.168.1.2,Src=202.20.65.4)转发到私有网。对于通讯双方而言,这种地址的转换过程是彻底透明的。转换示意图以下。

 

若是内网主机发出的请求包未通过NAT,那么当Web Server收到请求包,回复的响应包中的目的地址就是私网IP地址,在Internet上没法正确送达,致使链接失败。
2.2 链接跟踪
在上述过程当中,NAT Gateway在收到响应包后,就须要判断将数据包转发给谁。此时若是子网内仅有少许客户机,能够用静态NAT手工指定;但若是内网有多台客户机,而且各自访问不一样网站,这时候就须要链接跟踪(connection track)。以下图所示:

 

在NAT Gateway收到客户机发来的请求包后,作源地址转换,而且将该链接记录保存下来,当NAT Gateway收到服务器来的响应包后,查找Track Table,肯定转发目标,作目的地址转换,转发给客户机。
2.3 端口转换
以上述客户机访问服务器为例,当仅有一台客户机访问服务器时,NAT Gateway只须更改数据包的源IP或目的IP便可正常通信。可是若是Client A和Client B同时访问Web Server,那么当NAT Gateway收到响应包的时候,就没法判断将数据包转发给哪台客户机,以下图所示。

此时,NAT Gateway会在Connection Track中加入端口信息加以区分。若是两客户机访问同一服务器的源端口不一样,那么在Track Table里加入端口信息便可区分,若是源端口正好相同,那么在时行SNAT和DNAT的同时对源端口也要作相应的转换,以下图所示。

 

 

 
动态域名解析:
动态域名解析服务,是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次链接网络的时候,客户端程序就会经过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务程序负责提供DNS服务并实现动态域名解析。就是说DDNS捕获用户每次变化的IP地址,而后将其与域名相对应,这样域名就能够始终解析到非固定IP的服务器上,互联网用户经过本地的域名服务器得到网站域名的IP地址,从而能够访问网站的服务。
相关文章
相关标签/搜索