
为什么用路由器能共享上网? 20
那么假如外部发IP数据报进来,目的地只是一个IP,路由怎么知道是发给哪台电脑呢,怎么转发给正确的电脑? 展开
因为有NAT转换(网络地址转换),家用小路由器包含了这个功能。
由于IPv4地址耗尽的原因,不可能给每个电脑配置一个IPv4的地址,所以产生了内部地址和公网地址的概念。公网地址由各服务商共同负责管理和协调,内部(私网)地址则由用户自己建立管理。
服务商通常只分配一个或少量IP地址给用户,而用户如果只有一台电脑,那么配上isp给的地址就可以上网了。但如果用户电脑数量大于isp给的ip地址个数,则只能先建立一个内部网络,然后通过地址转换机制将isp分配的有限地址共享给内部网络中的所有电脑。
内部网络的地址可以随便用,只要不与isp提供的地址冲突即可。为了方便使用,ip地址协议中专门预留出3个地址段作为保留地址(也可称私网地址)给用户使用:10.0.0.0/8;172.16.0.0/12;192.168.0.0/16,这些地址不会被任意服务商认可(不被路由),也就是公网上不会出现这些地址,用户可以放心使用而不必担心冲突问题。
网络协议是一个分层协议,在osi中被定义为七层协议,而TCP/IP协议主要涉及1至四层协议,其数据包中包含了网络二到四层协议对象。最外层就是二层协议,即通过mac地址进行局部网络目标的确定,可以看成是终端互联。接下来就是第三层,即通过IP地址进行网络目标确定,可以看成是网际互连。然后就是第四层,即通过TCP端口进行目标进程的确定,也就是数据包和计算机中某个程序之间的通道,可以看成是进程(程序)互联。
注意以上三者的关系:终端互联使得数据包进入网络(接入),通过mac地址询问目标,若目标在本网中存在则数据包完成本次网络传送。若目标不存在则采用第三层,用IP地址进入网际互联,询问目标(路由)。若IP目标存在则通过一些列路由器将数据包发送到目标所对应的网络中,到达目标网络后,传输又回到第二层的(接入)互联,最终将数据包交给IP地址所对应的MAC地址所对应的终端。
整个网络传输过程中不必涉及第四层,第四层的作用是计算机终端中的一个进程要访问网络中另一个终端中的预知进程的通道。比如标准web服务采用的是TCP-80端口,当一个用户终端要访问百度时,首先要组织好一个包含目标ip地址为百度且目标端口为80的数据包,该数据包中的源地址当然就是用户本机IP地址,源端口则是本机中尚未被使用的(动态)端口。这样的数据包发送到百度后,百度服务器能够响应时,会产生一个以百度IP地址和80端口为源,以用户数据包中的源地址和源端口为目标地址和目标端口的数据包进行响应。
动态NAT服务则是利用第四层的特点为大量不被公网认可的私网地址进行服务。其方法是:
将内部向外请求的数据包中源地址和源端口保留在NAT服务器中,并分配一个(动态)端口与其对应,并用该端口和公网地址替代数据包中的源地址和源端口;
当响应返回时再根据响应包中的目标端口来确定原来保留在NAT服务中的地址和端口,并替换回去。
当访问完成后(会话结束),NAT服务删除为该会话保留的地址和端口对应关系。
这也就是为什么每个内部网络用户都能上网,但公网地址是同一个的道理。
以上过程可以看出,网络传输是有方向的,也就是所谓的数据连结(会话)是由谁发起的。显然以上过程只适合用于由内部向外部的访问连结。如果在一个内部网络中建立了一个web服务,并希望外部网络能够访问,则必须预先建立由外而内的通道。因为外部网络无法知道(也不必知道)内部服务的地址,NAT服务中也不会有这个服务的地址和端口预存(没有内部发起的访问)。预建这种通道的方法在NAT中有两种方式:
静态地址映射。当isp分配给用户的IP地址超过一个时,可以用其中的一个直接映射到内部服务器地址上。此时该服务器中的所有服务(TCP端口)对外响应。
静态端口映射。当只有一个公网IP地址时,可以在NAT服务上预先建立一个内部地址和端口映射项。这个预建和上面动态中的保留不同,动态保留项会随着会话完毕而消失,而这个则是永久性的,这样就给外部向内部的访问保留了一个通道。这种方式只提供了一个TCP端口,也就是服务器中只有一个服务可以响应外部请求。如果存在其他需要向外提供的服务,则必须一一建立对应的端口映射。
因为你在看《计算机网络》所以多说了一点儿。
假如传输使用的不是TCP或UDP,是另外的协议,这种没有协议没有端口号的说法,那使用路由是不是就无法传送这种IP包数据了?
不是。这类协议在进入网络时都被“封装”在TCP/IP协议中,所以数据包中依然有TCP端口号的位置(包头格式固定),换句话说,这类协议在那个类型的网络中跑,就会“封装”到那个网络的基本支持协议中,像vpn、IPSec等都属于这类协议。当安装这类协议支持的服务时,如果是跑TCP/IP网络则都会有一个填写端口的选项,比如gre(IP47)的默认端口就是1723。

2024-09-30 广告
假如传输使用的不是TCP或UDP,是另外的协议,这种没有协议没有端口号的说法,那使用路由是不是就无法传送这种IP包数据了?
嗯,是的,碰上ipsec就会,所以需要基于udp的穿越。
你跟他们的回答本质上不同,可以说说谁是对的吗?
假如传输使用的不是TCP或UDP,是另外的协议,这种没有协议没有端口号的说法,那使用路由是不是就无法传送这种IP包数据了?
还有一种叫DMZ 专门用做特殊用途的,DMZ就是把一个主机直接映射的外网上也就是说 通过设置 你可以在外网直接访问这个主机,不需要设置端口号和协议
假如传输使用的不是TCP或UDP,是另外的协议,这种没有协议没有端口号的说法,那使用路由是不是就无法传送这种IP包数据了?