开始新对话

未解决

此帖子已超过 5 年

507254

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地址随后添加到帧中。

             

6 消息

2014年12月4日 01:00

源ip是网关的ip。举个例子。

我现在要与8.8.8.8通信。我的ip是192.168.1.2,网关内部ip是192.168.1.1(这是私有地址),外部ip是9.9.9.9(这是共有地址,能在Internet上通信的)

数据先到达网关,网关会分配一些端口给你并记住这些端口是与你对应的。之后网关把源ip修改为9.9.9.9。正常与8.8.8.8通信,这步相信你已经了解了。网关收到8.8.8.8的信息以后,把目的地址改成192.168.1.2,送给你就好了(这一步是根据之前分配给你的端口来确定的)。

说的概念化一点应该就是网关会维护一直内部机器ip与网关端口的对应表,其实你可以把网关内部的机器类比成普通服务器上的程序。数据包到达你的机器,可是你的机器如何知道把数据包送给谁呢?通过的是端口,那么网关的作用也是类似的~

9 消息

2014年12月4日 01:00

谢谢解答。

比如,局域内有一台机器,内网IP是192.168.1.2, 现在它访问了一个公网上的网站,网站服务器需要返回网页给这台机器

当网站服务器收到这台机器的请求的IP包时,

IP包内源IP是什么,如果是局域网的内网IP的话,就是192.168.1.2,

那网站服务器是如何返回数据给这个192.168.1.2的呢,没办法路由

如果不是192.168.1.2,那又是什么IP, 而当服务器返回数据给那个IP,最终数据又是如何到达192.168.1.2的?

6 消息

2014年12月4日 02:00

没事 不谢~

1.2K 消息

2014年12月4日 18:00

我审题不仔细了谢谢xidianlz~

118 消息

2014年12月7日 23:00

O,太完整的学习教程咯.

2 消息

2014年12月9日 06:00

第一部分中PDU一节,其中网络层PDU应该为数据包packet吧

2 消息

2014年12月9日 06:00

第一部分中ARP解析过程的配图应该为 if your ip address is 10.10.0.3 plrase tell 10.10.0.1

1.2K 消息

2014年12月16日 17:00

网络基本功(十七):细说tcpdump的妙用(上)

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

介绍

tcpdump命令最初设计用于观察TCP/IP性能问题,它是一个用于截取网络分组,并输出分组内容的工具。tcpdump可以将网络中传送的数据包的报文头完全截获下来提供分析,它支持针对网络层、协议、主机、网络或端口的过滤,并提供and, or, not等逻辑语句来帮助用户去掉无用的信息。


更多信息

使用tcpdump:

Unix命令tee通常用来允许用户查看并记录Unix会话的输出。使用tcpdump结合tee加上-l选项来实现,命令格式如下:

bsd1# tcpdump -l  | tee outfile

另一种方式是通过-w选项直接将抓取数据写入文件中。之后通过tcpdump -r选项来读取。抓取数据可以输入:

bsd1# tcpdump -w rawfile

然后将raw文件转化成text文件:

bsd1# tcpdump -r rawfile   > textfile


tcpdump选项:

tcpdump选项可划分为四大类型:控制tcpdump程序行为,控制数据怎样显示,控制显示什么数据,以及过滤命令。

控制程序行为

这一类命令行选项影响程序行为,包括数据收集的方式。之前已介绍了两个例子:-r-w-w选项允许用户将输出重定向到一个文件,之后可通过-r选项将捕获数据显示出来。

如果用户知道需要捕获的报文数量或对于数量有一个上限,可使用-c选项。则当达到该数量时程序自动终止,而无需使用kill命令或Ctrl-C。下例中,收集到100个报文之后tcpdump终止:

bsd1# tcpdump -c100

如果用户在多余一个网络接口上运行tcpdump,用户可以通过-i选项指定接口。在不确定的情况下,可使用ifconfig –a来检查哪一个接口可用及对应哪一个网络。例如,一台机器有两个C级接口,xl0接口IP地址 205.153.63.238xl1接口IP地址205.153.61.178。要捕捉205.153.61.0网络的数据流,使用以下命令:


bsd1# tcpdump -i xl1

没有指定接口时,tcpdump默认为最低编号接口。



-p选项将网卡接口设置为非混杂模式。这一选项理论上将限制为捕获接口上的正常数据流——来自或发往主机,多播数据,以及广播数据。


-s选项控制数据的截取长度。通常,tcpdump默认为一最大字节数量并只会从单一报文中截取到该数量长度。实际字节数取决于操作系统的设备驱动。通过默认值来截取合适的报文头,而舍弃不必要的报文数据。


如果用户需截取更多数据,通过-s选项来指定字节数。也可以用-s来减少截取字节数。对于少于或等于200字节的报文,以下命令会截取完整报文:
bsd1# tcpdump -s200

更长的报文会被缩短为200字节。


控制信息如何显示

-a-n-N-f选项决定了地址信息是如何显示的。-a选项强制将网络地址显示为名称,-n阻止将地址显示为名字,-N阻止将域名转换。-f选项阻止远端名称解析。下例中,从sloan.lander.edu (205.153.63.30) ing远程站点,分别不加选项,-a-n-N-f。(选项-c1限制抓取1个报文)

bsd1# tcpdump -c1 host 192.31.7.130

tcpdump: listening on xl0

14:16:35.897342 sloan.lander.edu > cio-sys.cisco.com: icmp: echo request

bsd1# tcpdump -c1 -a host 192.31.7.130

tcpdump: listening on xl0

14:16:14.567917 sloan.lander.edu > cio-sys.cisco.com: icmp: echo request

bsd1# tcpdump -c1 -n host 192.31.7.130

tcpdump: listening on xl0

14:17:09.737597 205.153.63.30 > 192.31.7.130: icmp: echo request

bsd1# tcpdump -c1 -N host 192.31.7.130

tcpdump: listening on xl0

14:17:28.891045 sloan > cio-sys: icmp: echo request

bsd1# tcpdump -c1 -f host 192.31.7.130

tcpdump: listening on xl0

14:17:49.274907 sloan.lander.edu > 192.31.7.130: icmp: echo request

默认为-a选项。

-t-tt选项控制时间戳的打印。-t选项不显示时间戳而-tt选项显示无格式的时间戳。以下命令显示了tcpdump命令无选项,-t选项,-tt选项的同一报文:

12:36:54.772066 sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF)

sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF)

934303014.772066 sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF)


控制显示什么数据

可以通过-v-vv选项来打印更多详细信息。例如,-v选项将会打印TTL字段。要显示较少信息,使用-q,或quiet选项。一下为同一报文分别使用-q选项,无选项,-v选项,和-vv选项的输出。

12:36:54.772066 sloan.lander.edu.1174 > 205.153.63.238.telnet: tcp 0 (DF)

12:36:54.772066 sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF)

12:36:54.772066 sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF) (ttl 128, id 45836)

12:36:54.772066 sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF) (ttl 128, id 45836)


-e选项用于显示链路层头信息。上例中-e选项的输出为:

12:36:54.772066 0:10:5a:a1:e9:8 0:10:5a:e3:37:c ip 60:

sloan.lander.edu.1174 > 205.153.63.238.telnet: . ack 3259091394 win 8647 (DF)

0:10:5a:a1:e9:8sloan.lander.edu3Com卡的以太网地址,0:10:5a:e3:37:c205.153.63.2383Com卡的以太网地址。


-x选项将报文以十六进制形式dump出来,排除了链路层报文头。-x-vv选项报文显示如下:

13:57:12.719718 bsd1.lander.edu.1657 > 205.153.60.5.domain: 11587+ A? www.microsoft.com. (35) (ttl 64, id 41353)

                         4500 003f a189 0000 4011 c43a cd99 3db2

                         cd99 3c05 0679 0035 002b 06d9 2d43 0100

                         0001 0000 0000 0000 0377 7777 096d 6963

                         726f 736f 6674 0363 6f6d 0000 0100 01

(未完待续)


参考

Network Troubleshooting Tools

             

7 消息

2014年12月20日 23:00

楼主讲的很详细,谢谢!

7 消息

2014年12月20日 23:00

请问基于存储转发交换方式是如何做到不同网速网络的联通的?这一点我不是太理解哦,麻烦楼主解答一下

7 消息

2014年12月20日 23:00

我才看到第二篇,楼主讲的都很好,但是我也有同样的建议,希望楼主和现在的主流服务器等网络工具相结合,这样对于focus在不同领悟的亲们都有更直接的认识

7 消息

2014年12月21日 03:00

总结的好犀利

7 消息

2014年12月21日 18:00

请问一下,这里的交换机port和我们平时写一个网络应用时要监听的port是否一样?我们平时使用一些软件如apache的80,就是这个用途吧?包括NAT需要用到的port也是一个概念?

1.2K 消息

2014年12月21日 19:00

请问基于存储转发交换方式是如何做到不同网速网络的联通的?这一点我不是太理解哦,麻烦楼主解答一下

存储转发的一大优点就是这种交换方式支持不同速度端口间的转换,保持高速端口和低速端口间协同工作。实现的办法是将10Mbps低速包存储起来,再通过100Mbps速率转发到端口上。 

现在也有直通转发——存储转发的自适应方式。

7 消息

2014年12月21日 20:00

哦,理解了,谢谢楼主解答!

楼主从事的工作应该偏重底层吧,我这种程序员感觉你讲的知识很深入,但是又很容易理解。再次谢谢啦!

找不到事件!

Top