开始新对话

未解决

此帖子已超过 5 年

507259

2014年8月10日 18:00

网络基本功系列:细说网络那些事儿(3月26日更新)

网络基本功(一):细说网络传输

转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese image001.gif

介绍

常言道:欲练神功,必先练好基本功。之前做了一个关于IP路由,默认网关和掩码的问答贴,做完这个帖子觉得如果对网络知识点做一个系统的阐述,应该会很有帮助。


本系列文章着重于讲解网络管理实际应用中常常涉及的重要知识点,尽量以实用为主。准备写的几个章节暂时有(可能会有增减):



更多信息


首先来看一个例子:


示例:网络服务器向客户端传送数据的过程:

在详细阐述网络传输过程之前,先来看一个最常见的例子,下图显示了一个网络服务器向客户端传送数据的完整过程:

image002.jpg

     1.     需要传送的数据是网络服务器的HTML页面。

     2.     应用协议HTTP报文头添加到HTML数据之前。报文头信息包括:服务器所使用的HTTP版本,以及表明它包含发给网络客户端信息的状态编码。

     3.     HTTP应用层协议将HTML格式的网页数据发送给传输层。TCP传输层用于管理网络服务器和客户端之间的会话。

     4.     IP信息添加到TCP信息之前。IP指定适当的源和目的IP地址。这些信息就构成了IP报文。

     5.     以太网协议添加到IP报文的两端之后,就形成了数据链路帧。上述帧发送至通向网络客户端的路径上的最近一个路由器。路由器移除以太网信息,观察IP报文,判定最佳路径,将报文插入一个新的帧,并发送至目标路径上下一个相邻路由器。每一个路由器在转发之前都移除并添加新的数据链路层信息。

     6.     数据通过互联网络传输,互联网络包含媒介和中间设备。

     7.     客户端接收到包含数据的数据链路帧,处理各层协议头,之后以添加时相反的顺序移除协议头。首先处理并移除以太网信息,之后是IP协议信息,接下来TCP信息,最后是HTTP信息。

     8.     之后,将网页信息传递给客户端网页浏览器软件。

数据封装:

消息要在网络中传输,必须对它进行编码,以特定的格式进行封装,同时需要适当地封装以足够的控制地址信息,以使它能够从发送方移动到接收方。

消息大小

理论上,视频或邮件信息是能够以大块非中断型流从网络源地址传送到目的地址,但这也意味着同一时刻同一网络其他设备就无法收发消息。这种大型数据流会造成显著延时。并且,如果传输过程中连接断开,整个数据流都会丢失需要全部重传。因此更好的方法是将数据流分割segmentation)为较小的,便于管理的片段,能够带来两点好处:

·         发送较小片段,网络上同时可有多个会话交错进行。这种在网络上将不同会话片段交错进行的过程称为多路传输(multiplexing

·         分割可提高网络通讯的可靠性。各消息片段从源地址到目的地址无需经过相同路径,如果一条路径被堵塞或断开,其余消息可从替换路径到达目的地址。如果部分消息到不了目的地址,那只需重传丢失部分。

通过对片段打上标签的方式来保证顺序以及在接收时重组。

image003.jpg

协议数据单元(Protocol Data Unit, PDU

应用层数据在传输过程中沿着协议栈传递,每一层协议都会向其中添加信息。这就是封装的过程。

数据片段在各层网络结构中采用的形式就称为协议数据单元(PDU。封装过程中,下一层对从上一层收到的PDU进行封装。在处理的每一个阶段PDU都有不同的名字来反应它的功能。

image004.jpg

PDU按照TCP/IP协议的命名规范:

·         数据(Data:应用层PDU的常用术语

·         分段(Segment):传输层PDU

·         帧(Frame):网络层PDU

·         比特(Bits):在介质上物理传输数据所使用的PDU

封装

封装是指在传输之前为数据添加额外的协议头信息的过程。在绝大多数数据通信过程中,源数据在传输前都会封装以数层协议。在网络上发送消息时,主机上的协议栈从上至下进行操作。

以网络服务器为例,HTTP应用层协议发送HTML格式网页数据到传输层,应用层数据被分成TCP分段。各TCP分段被打上标签,称为头(header),表明接收方哪一个进程应当接收此消息。同时也包含使得接收方能够按照原有的格式来重组数据的信息。

传输层将网页HTML数据封装成分段并发送至网络层,执行IP层协议。整个TCP分段封装成IP报文,也就是再添上IP头标签。IP头包括源和目的IP地址,以及发送报文到目的地址所必须的信息。

之后,IP报文发送到接入层,封装以帧头和帧尾。每个帧头都包含源和目的物理地址。物理地址唯一指定了本地网络上的设备。帧尾包含差错校正信息。最后,由服务器网卡将比特编码传输给介质。   

解封装

接收主机以相反的方式进行操作称为解封装。解封装是接收设备移除一层或多层协议头的过程。数据在协议栈中向上移动直到终端应用层伴随着解封装。

访问本地资源:

访问本地网络资源需要两种类型的地址:网络层地址和数据链路层地址。网络层和数据链路层负责将数据从发送设备传输至接收设备。两层协议都有源和目的地址,但两种地址的目的不同

示例:客户端PC1FTP在同一IP网络的通信

image005.jpg

网络地址

网络层地址或IP地址包含两个部分:网络前缀和主机。路由器使用网络前缀部分将报文转发给适当的网络。最后一个路由器使用主机部分将报文发送给目标设备。同一本地网络中,网络前缀部分是相同的,只有主机设备地址部分不同。

IP地址:发送设备,即客户端PC1IP地址:192.168.1.110

目的IP地址:接收设备,即FTP服务器:192.168.1.9

数据链路地址

数据链路地址的目的是在同一网络中将数据链路帧从一个网络接口发送至另一个网络接口。以太网LAN和无线网LAN是两种不同物理介质的网络示例,分别有自己的数据链路协议。

IP报文的发送方和接收方位于同一网络,数据链路帧直接发送到接收设备。以太网上数据链路地址就是以太网MAC地址。MAC地址是物理植入网卡的48比特地址。

MAC地址:发送IP报文的PC1以太网卡MAC地址,AA-AA-AA-AA-AA-AA

目的MAC地址:当发送设备与接收设备位于同一网络,即为接收设备的数据链路地址。本例中,FTP MAC地址:CC-CC-CC-CC-CC-CC

源和目的MAC地址添加到以太网帧中。

image006.jpg

MACIP地址

发送方必须知道接收方的物理和逻辑地址。发送方主机能够以多种方式学习到接收方的IP地址:比如域名系统(Domain Name System, DNS),或通过应用手动输入,如用户指定FTP地址。

以太网MAC地址是怎么识别的呢?发送方主机使用地址解析协议(Address Resolution Protocol, ARP)以检测本地网络的所有MAC地址。如下图所示,发送主机在整个LAN发送ARP请求消息,这是一条广播消息。ARP请求包含目标设备的IP地址,LAN上的每一个设备都会检查该ARP请求,看看是否包含它自身的IP地址。只有符合该IP地址的设备才会发送ARP响应。ARP响应包含ARP请求中IP地址相对应的MAC地址。

image007.jpg

访问远程资源:

默认网关

当主机发送消息到远端网络,必须使用路由器,也称为默认网关。默认网关就是位于发送主机同一网络上的路由器的接口IP地址。有一点很重要:本地网络上的所有主机都能够配置自己的默认网关地址。如果该主机的TCP/IP设置中没有配置默认网关地址,或指定了错误的默认网关地址,则远端网络消息无法被送达

如下图所示,LAN上的主机PC 1使用IP地址为192.168.1.1R1作为默认网关,如果PDU的目的地址位于另一个网络,则主机将PDU发送至路由器上的默认网关。

image008.jpg

与远端网络设备通讯

下图显示了客户端主机PC 1与远端IP网络服务器进行通讯的网络层地址与数据链路层地址:

image009.jpg

网络地址

当报文的发送方与接收方位于不同网络,源和目的IP地址将会代表不同网络上的主机

IP地址:发送设备即客户端主机PC 1IP地址:192.168.1.110

目的IP地址:接收设备即网络服务器的IP地址:172.16.1.99

数据链路地址

当报文的发送方与接收方位于不同网络,以太网数据链路帧无法直接被发送到目的主机。以太网帧必须先发送给路由器或默认网关。本例中,默认网关是R1R1的接口IP地址与PC 1属于同一网络,因此PC 1能够直接达到路由器。

MAC地址:发送设备即PC 1MAC地址,PC1的以太网接口MAC地址为:AA-AA-AA-AA-AA-AA

目的MAC地址:当报文的发送方与接收方位于不同网络,这一值为路由器或默认网关的以太网MAC地址。本例中,即R1的以太网接口MAC地址,即:11-11-11-11-11-11

IP报文封装成的以太网帧先被传输至R1R1再转发给目的地址即网络服务器。R1可以转发给另一个路由器,如果目的服务器所在网路连接至R1,则直接发送给服务器。

发送设备如何确定路由器的MAC地址?每一个设备通过自己的TCP/IP设置中的默认网关地址得知路由器的IP地址。之后,它通过ARP来得知默认网关的MAC地址,该MAC地址随后添加到帧中。

             

13 消息

2014年8月18日 00:00

竟然还麻烦你和你的朋友做了实验,真是谢谢~~~

我也是突然想到了这个问题。

之后我也搜了一下,网上有个文章(某文库)讲了如何将交换机相连的两个不同网段的机器互通,方法是将那两台机器的网关都设为自己。这样互Ping时就会直接广播ARP。

据此,我可以假设现在有网关G1和PC1一个网段,网关G2和PC2一个网段,他们都连在同一个交换机上。PC1 Ping PC2时,不是一个网段将消息发送给网关,网关收到后发送一个ARP广播,之后找到PC2。类似的过程PC2找到PC1。这个过程不知道有没有问题。

1.2K 消息

2014年8月18日 02:00

之后我也搜了一下,网上有个文章(某文库)讲了如何将交换机相连的两个不同网段的机器互通,方法是将那两台机器的网关都设为自己。这样互Ping时就会直接广播ARP。

的确是的,默认网关设成自己,设成对方都是能ping的通的。

2 消息

2014年8月18日 17:00

首先非常感谢分享,特别是图片啊,不知道楼主怎么弄的,自己制作的么??

其次吐槽一下,这个页面真是不习惯阿,弄了好久才完成注册并可以开始回复...

讲的内容很基础,挺实用。

希望接下来讲解的时候,能有相关的例子(ps:不是说现在没例子),只是希望能一直有一些例子帮助理解;

另外就是希望最后可以跟一些具体的技术,或者实际场景挂钩,譬如说使用lvs,haproxy,nginx之类的4层和7层负载均衡的时候,包的流向又是变化如何之类的...或者说可以发起一些类似问答之类的,让热心网友提问自己一些关于网络的疑问,这样可以一起进步....

1.2K 消息

2014年8月18日 17:00

据此,我可以假设现在有网关G1和PC1一个网段,网关G2和PC2一个网段,他们都连在同一个交换机上。PC1 Ping PC2时,不是一个网段将消息发送给网关,网关收到后发送一个ARP广播,之后找到PC2。类似的过程PC2找到PC1。这个过程不知道有没有问题。

这个问题真的好考验基本功...

这个命题能够成立的前提条件是"网关收到后发送一个ARP广播",我认为是不行的。

PC 1向PC 2发起通信时,判断与PC 2与自己不在同一网段,这时候把消息发给G1,由G1进行转发。如果PC 1的ARP表中没有G1的MAC,则发送ARP,G1收到ARP之后,返回自己的MAC地址,而不会转发ARP到交换机。所以,PC 1的ARP表中只会有G1的MAC地址,而不会有远端PC 2的MAC地址。之后G1要实现跨网段的数据通信,需是根据目的IP地址的网络号与子网号,选择最佳出口对IP分组进行转发。

1.2K 消息

2014年8月18日 18:00

撇除网关的功能不谈,“网关收到后发送一个ARP广播,之后找到PC2。”这一段无法成立。

13 消息

2014年8月18日 18:00

之后G1要实现跨网段的数据通信,需是根据目的IP地址的网络号与子网号,选择最佳出口对IP分组进行转发。

哦,那就是说,G1收到PC1访问PC2的请求后会选择与PC2同网段的出口寻找PC2,而我的问题中没有这个设定,所以G1找不到PC2,最后PC1不能与PC2通信。

我这样理解对吗?

1.2K 消息

2014年8月18日 18:00

非常感谢~

例子这方面的确是少了一点~~限于篇幅总是想把道理讲详细一点,以后改进!

另外就是希望最后可以跟一些具体的技术,或者实际场景挂钩,譬如说使用lvs,haproxy,nginx之类的4层和7层负载均衡的时候,包的流向又是变化如何之类的...

这些好像不基础了。。。。不过也可能我以前做的比较底层这些不太专长~不过包的流向,流控,负载均衡这方面可以写出一些。

网友提问其实一直以来欢迎大家提问,@NaNi_Z 的问题举的一些例子就很帮助理解基础概念。之后看看有没有经典的面试题大家一起讨论~

2 消息

2014年8月18日 18:00

嗯嗯,回复得很快呀,赞一个。

提出跟实际挂钩,只是个人觉得很多人这些知识可能懂了,但是在实际工作中无法应用,或者说遇到网络问题的时候,无法利用

自己的知识去分析;不过这个要实现还是有点难度,楼主看自己的时间安排之类了。

嗯,关于提问的,我评论还没看,有空了再细细品味一下。

多谢回复。

在 2014-08-19 09:18:51,"Zhang,Jiawen" 写道:

|

|

ECN

|

|

网络基本功系列:细说网络那些事儿(8月18日更新)

reply from Zhang,Jiawen in 存储系统 - View the full discussion

非常感谢~

例子这方面的确是少了一点~~限于篇幅总是想把道理讲详细一点,以后改进!

另外就是希望最后可以跟一些具体的技术,或者实际场景挂钩,譬如说使用lvs,haproxy,nginx之类的4层和7层负载均衡的时候,包的流向又是变化如何之类的...

这些好像不基础了。。。。不过也可能我以前做的比较底层这些不太专长~不过包的流向,流控,负载均衡这方面可以写出一些。

网友提问其实一直以来欢迎大家提问,@NaNi_Z 的问题举的一些例子就很帮助理解基础概念。之后看看有没有经典的面试题大家一起讨论~

Reply to this message by replying to this email, or go to the message on ECN

Start a new discussion in 存储系统 by email or at ECN

Following 网络基本功系列:细说网络那些事儿(8月18日更新) in these streams: Inbox

|

|

1.2K 消息

2014年8月18日 19:00

呵呵,会尽量向实际应用靠拢!

13 消息

2014年8月18日 23:00

嗯知道了,多谢你的回复,期待后续文章~~~

1.2K 消息

2014年8月19日 00:00

多谢你提问,唔该晒。

1.2K 消息

2014年8月24日 18:00

网络基本功(三):细说VLANTrunk

转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese image001.gif

介绍

网络性能是影响业务效率的一个重要因素。将大型广播域分段是提高网络性能的方法之一。路由器能够将广播包阻隔在一个接口上,但是,路由器的LAN接口数量有限,它的主要功能是在网络间传输数据,而不是对终端设备提供网络接入。访问LAN的功能还是由接入层交换机来实现。与三层交换机相类似,通过在二层交换机上创建VLAN来减少广播域。现代交换机就是通过VLAN来构造的,因此在某种程度上,学习交换机就是学习VLAN

更多信息

问题的产生:

上一节已经讲过广播域的概念:即广播帧传播覆盖的范围。如下图所示,当网络上的所有设备在广播域产生大量的广播以及多播帧,就会与数据流竞争带宽。这是由网络管理数据流组成,如:ARPDHCPSTP等。如下图所示,假设PC 1产生ARPWindows登录,DHCP等请求:

image002.jpg

这些广播帧到达交换机1之后,遍历整个网络并到达所有节点直至路由器。随着网络节点增加,开销的总数也在增长,直至影响交换机性能。通过实施VLAN断开广播域将数据流隔离开来,能够解决这一问题。

什么是VLAN

VLANvirtual local area network)是一组与位置无关的逻辑端口VLAN就相当于一个独立的三层网络VLAN的成员无需局限于同一交换机的顺序或偶数端口。下图显示了一个常规的部署,左边这张图节点连接到交换机,交换机连接到路由器。所有的节点都位于同一IP网络,因为他们都连接到路由器同一接口。

image003.jpg

图中没有显示的是,缺省情况下,所有节点实际上都是同一VLAN。因此,这种拓扑接口可看作是基于同一VLAN的,如上面右图所示。例如,Cisco设备默认VLANVLAN 1,也称为管理VLAN。默认配置下包含所有的端口,体现在源地址表(source address tableSAT)中。该表用于交换机按照目的MAC地址将帧转发至合适的二层端口。引入VLAN之后,源地址表按照VLAN将端口与MAC地址相对应起来,从而使得交换机能够做出更多高级转发决策。下图显示了show mac address tableshow vlan命令的显示输出。所有端口(FA0/1 – FA0/24)都在VLAN 1

image004.jpg

另一种常用的拓扑结构是两个交换机被一个路由器分离开来,如下图所示。这种情况下,每台交换机各连接一组节点。每个交换机上的各节点共享一个IP地址域,这里有两个网段:192.168.1.0192.168.2.0

image005.jpg

注意到两台交换机的VLAN相同。非本地网络数据流必须经过路由器转发。路由器不会转发二层单播,多播以及广播帧。这种拓扑逻辑在两个地方类似于多VLAN:同一VLAN下的节点共享一个通用地址域,非本地数据流(对应多VLAN情况不同VLAN的节点)需通过路由器转发。在一台交换机上添加一个VLAN,去掉另一台交换机的话,结构如下所示:

image006.jpg

每一个VLAN相当于一个独立的三层IP网络,因此,192.168.1.0上的节点试图与192.168.2.0上的节点通信时,不同VLAN通信必须通过路由器即使所有设备都连接到同一交换机。二层单播,多播和广播数据只会在同一VLAN内转发及泛洪,因此VLAN 1产生的数据不会为VLAN 2节点所见。只有交换机能看得到VLAN,节点和路由器都感觉不到VLAN的存在。添加了路由决策之后,可以利用3层的功能来实现更多的安全设定,更多流量以及负载均衡。

VLAN的作用:

安全性:每一个分组的敏感数据需要与网络其他部分隔离开,减少保密信息遭到破坏的可能性。如下图所示,VLAN 10上的教职工主机完全与学生和访客数据隔离。

image007.jpg

节约成本:无需昂贵的网络升级,并且带宽及上行链路利用率更加有效。

性能提高:将二层网络划分成多个逻辑工作组(广播域)减少网络间不必要的数据流并提升性能。

缩小广播域:减少一个广播域上的设备数量。如上图所示:网络上有六台主机但有三个广播域:教职工,学生,访客。

提升IT管理效率:网络需求相似的用户共享同一VLAN,从而网络管理更为简单。当添加一个新的交换机,在指定端口VLAN时,所有策略和步骤已配置好。

简化项目和应用管理VLAN将用户和网络设备汇集起来,以支持不同的业务或地理位置需求。

每一个VLAN对应于一个IP网络,因此,部署VLAN的时候必须结合考虑网络地址层级的实现情况。

交换机间VLAN

多交换机的情况下,VLAN是怎么工作的呢?下图所示的这种情况,两个交换机VLAN相同,都是默认VLAN 1,即两个交换机之间的联系同在VLAN 1之内。路由器是所有节点的出口。

这时单播,多播和广播数据自由传输,所有节点属于同一IP地址。这时节点之间的通信不会有问题,因为交换机的SAT显示它们在同一VLAN

image008.jpg

而下面这种连接方式就会有问题。由于VLAN在连接端口的主机之间创建了三层边界,它们将无法通信。

image009.png

仔细看上图,这里有很多问题。第一,所有主机都在同一IP网,尽管连接到不同的VLAN。第二,路由器在VLAN 1,因此与所有节点隔离。最后,两台交换机通过不同的VLAN互连。每一点都会造成通信阻碍,合在一起,网络各元素之间会完全无法通信。

交换机用满或同一管理单元物理上彼此分离的情形是很常见的。这种情况下,VLAN需要通过trunk延伸至相邻交换机。trunk能够连接交换机,在网络间传载VLAN信息。如下图所示:

image010.png

对之前的拓扑的改进包括:

·         PC 1PC 2分配到192.168.1.0网段以及VLAN 2

·         PC 3PC 4分配到192.168.2.0网段以及VLAN 3

·         路由器接口连接到VLAN 2VLAN 3

·         交换机间通过trunk线互连。

注意到trunk端口出现在VLAN 1,他们没有用字母T来标识。trunk在任何VLAN都没有成员。现在VLAN跨越多交换机,同一VLAN下的节点可以物理上位于任何地方。

什么是Trunk

Trunk是在两个网络设备之间承载多于一种VLAN的端到端的连接,将VLAN延伸至整个网络。没有VLAN TrunkVLAN也不会非常有用。VLAN Trunk允许VLAN数据流在交换机间传输,所以设备在同一VLAN,但连接到不同交换机,能够不通过路由器来进行通信。

一个VLAN trunk不属于某一特定VLAN,而是交换机和路由器间多个VLAN的通道。如下图所示,交换机S1S2,以及S1S3之间的链路,配置为传输从VLAN10,20,30以及90的数据流。该网络没有VLAN trunk就无法工作。

image011.jpg

当安装好trunk线之后,帧在trunk线传输是就可以使用trunk协议来修改以太网帧。这也意味着交换机端口有不止一种操作模式。缺省情况下,所有端口都称为接入端口。当一个端口用于交换机间互连传输VLAN信息时,这种端口模式改变为trunk,节点也路由器通常不知道VLAN的存在并使用标准以太网帧或“untagged”帧。trunk线能够使用“tagged”帧来标记VLAN或优先级。

因此,在trunk端口,运行trunk协议来允许帧中包含trunk信息。如下图所示:

image012.jpg

PC 1在经过路由表处理后向PC 2发送数据流。这两个节点在同一VLAN但不同交换机。步骤如下:

·         以太网帧离开PC 1到达Switch 1

·         Switch 1SAT表明目的地是trunk线的另一端。

·         Switch 1使用trunk协议在以太网帧中添加VLAN id

·         新帧离开Switch 1trunk端口被Switch 2接收。

·         Switch 2读取trunk id并解析trunk协议。

·         源帧按照Switch 2SAT转发至目的地(端口4)。

VLAN tag如下图所示,包含类型域,优先级域,CFICanonical Format Indicator)指示MAC数据域,VLAN ID

image013.jpg

13 消息

2014年8月26日 00:00

感谢你的分享

照例我又来提问了

关于trunk我可以这么理解吗?

trunk将端口较少的两个交换机连接成一个端口较多的交换机,使得VLAN中可以接入的机器更多。

另外,关于VLAN我的理解是

带有VLAN功能的交换机仍然属于二层设备,交换机上对VLAN的划分实际上是对交换机上端口的划分,属于不同VLAN的端口间不能通信而无关这些端口连接的机器是否在一个网段上。

1.2K 消息

2014年8月26日 01:00

关于trunk我可以这么理解吗?

trunk将端口较少的两个交换机连接成一个端口较多的交换机,使得VLAN中可以接入的机器更多。

欢迎

trunk主要目的是为了交换机之间能够方便传递多个VLAN的信息,(通过打上标签来判断信息属于哪个VLAN),将VLAN延伸至整个网络,也可以认为使得接入的机器更多。

Capture.PNG.png

另外,关于VLAN我的理解是

带有VLAN功能的交换机仍然属于二层设备,交换机上对VLAN的划分实际上是对交换机上端口的划分,属于不同VLAN的端口间不能通信而无关这些端口连接的机器是否在一个网段上。

是的,即使同一台交换机不同的VLAN端口,也无法通信。

1.2K 消息

2014年8月26日 02:00

谢谢一直以来的支持~

找不到事件!

Top