综合讨论区

最后回复者 03-06-2022 未解决
发表问题
495785

网络基本功系列:细说网络那些事儿(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地址随后添加到帧中。

             

回复数 (234)
2441

是的,还有Packet,即数据包。

另外如果是OSI模型的话,PDU和很多层都相关:

  1. 物理层(一层)PDU指数据位(Bit)
  2. 数据链路层(二层)PDU指数据帧(Frame)
  3. 网络层(三层)PDU指数据包(Packet)
  4. 传输层(四层)PDU指数据段(Segment)
  5. 第五层以上为数据(Data)
青铜
青铜
2441

您好,经常看你的网络基本功分享,非常赞。最近在看《TCP/IP 详解第二版》中 TCP/IP 部分,发现重传检测机制写得很晦涩难懂,原因是接收端出现包失序、ACK 丢失、包重复时,发送端重传相应的包给接收端,接收端对重传的包进行确认时确认报文中的 TSER 字段取的是哪一个已接收报文的 TSV?这一点书中并没有详解,但是书里面描述的检测算法又非常依赖于 TSER 的具体取值。

不知道您是否可以分享哈这方面的知识,非常期待!我的邮箱:88413945@qq.com

2442

具体实现可能是让驱动厂商来决定吧,很多时候RFC里就是定义一下概念,比如关于TSER和TSV的部分参考RFC1323:

https://www.ietf.org/rfc/rfc1323.txt

TCP Timestamps Option (TSopt):

  Kind: 8

  Length: 10 bytes

  +-------+-------+---------------------+---------------------+
  |Kind=8 | 10 | TS Value (TSval) |TS Echo Reply (TSecr)|
  +-------+-------+---------------------+---------------------+
  1 1 4 4

  The Timestamps option carries two four-byte timestamp fields.
  The Timestamp Value field (TSval) contains the current value of
  the timestamp clock of the TCP sending the option.

  The Timestamp Echo Reply field (TSecr) is only valid if the ACK
  bit is set in the TCP header; if it is valid, it echos a times-
  tamp value that was sent by the remote TCP in the TSval field
  of a Timestamps option. When TSecr is not valid, its value
  must be zero. The TSecr value will generally be from the most
  recent Timestamp option that was received; however, there are
  exceptions that are explained below.

青铜
青铜
2182

你的帖子太赞了,我想打印出来认真拜读,并希望能跟你讨论问题,但是貌似不能直接打印,你有啥好办法没?我邮箱461502515@qq.com

青铜
青铜
2158

这帖子太好了!

最新解决方案
杰出贡献者