您的位置:首页 > 理论基础 > 计算机网络

网络基础之几个基础问题(整理)

2012-09-07 20:19 295 查看
几个网络基础问题的理解,并进行整理。

1、为什么以太网要规定60字节和1514的最小包和最大包?

2、为什么ethernet II没有长度字段?

3、为什么TFTP用UDP实现的效率反而不如用TCP实现的FTP效率高?

4、为什么UDP通讯的源端口和目的端口经常是相同的数字?

5、为何很多UDP应用的数据包最大都是512字节?


第一题的解答

以太网是无连接的,不可靠的服务,采用尽力传输的机制。以太网CSMA/CD我就不多讲了,我相信大家都了解这个原理。

以太网是不可靠的,这意味着它并不知道对方有没有收到自己发出的数据包,但如果他发出的数据包发生错误,他会进行重传。以太网的错误主要是发生碰撞,碰撞是指两台机器同时监听到网络是空闲的,同时发送数据,就会发生碰撞,碰撞对于以太网来说是正常的。

我们来看一下,假设A检测到网络是空闲的,开始发数据包,尽力传输,当数据包还没有到达B时,B也监测到网络是空闲的,开始发数据包,这时就会发生碰撞,B首先发现发生碰撞,开始发送碰撞信号,所谓碰撞信号,就是连续的01010101或者10101010,十六进制就是55或AA。这个碰撞信号会返回到A,如果碰撞信号到达A时,A还没有发完这个数据包,A就知道这个数据包发生了错误,就会重传这个数据包。但如果碰撞信号会返回到A时,数据包已经发完,则A不会重传这个数据包。

我们先看一下,以太网为什么要设计这样的重传机制。
首先,以太网不想采用连接机制,因为会降低效率,但他又想有一定的重传机制,因为以太网的重传是微秒级,而传输层的重传,如TCP的重传达到毫秒级,应用层的重传更达到秒级,我们可以看到越底层的重传,速度越快,所以对于以太网错误,以太网必须有重传机制。

要保证以太网的重传,必须保证A收到碰撞信号的时候,数据包没有传完,要实现这一要求,A和B之间的距离很关键,也就是说信号在A和B之间传输的来回时间必须控制在一定范围之内。IEEE定义了这个标准,一个碰撞域内,最远的两台机器之间的round-trip time 要小于512bit time.(来回时间小于512位时,所谓位时就是传输一个比特需要的时间)。这也是我们常说的一个碰撞域的直径。

512个位时,也就是64字节的传输时间,如果以太网数据包大于或等于64个字节,就能保证碰撞信号到达A的时候,数据包还没有传完。

这就是为什么以太网要最小64个字节,同样,在正常的情况下,碰撞信号应该出现在64个字节之内,这是正常的以太网碰撞,如果碰撞信号出现在64个字节之后,叫 late collision。这是不正常的。
以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步吗+1字节帧开始定界符+6字节的目的MAC+6字节的源MAC+2字节的帧类型+1500+4字节的FCS。

按照上述,最大帧应该是1526字节,但是实际上我们抓包得到的最大帧是1514字节,为什么不是1526字节呢?原因是当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和错,就丢弃此帧。如果校验和正确,就判断帧的目的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,就将帧交“设备驱动程序”做进一步处理。这时我们的抓包软件才能抓到数据,因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据,其最大值是6+6+2+1500=1514。

第二题解答

Ethernet II使用了类型字段,而非长度,此时协议类型既然已经知道了,当然可以根据协议类型来取走相应字段即可,同时还可以去掉繁琐的LLC、SNAP,何乐不为?另外,看到15楼解释说“另外,高层协议必须表示数据长度“,这并没有规定,比如arp就没有长度字段。实际上,大家可以想一下,当链路层知道自己封装的是什么协议,它直接送到上层对应的协议模块,上层协议自然知道哪些字段有用,而没用的部分,自然是填充内容,不作处理即可。所以,不使用长度,而用类型字段,是没有任何问题的。

第三题解答

这个和TFTP的实现有关TFTP是为了实现一种简单的文件传输而不重视效率

它在实现的时候报文的大小限制在512Bytes以内

另外它在发送接收采用的停止等待技术,也就是你发一个报文过去,对方要回应之后你才能发下一个。所以它的传输效率远远低于TCP实现的FTP
我认为研发tftp的初衷是实现简单,他使用了停止,等待的半双工协议,而且他的数据报大小都是512byte,显然不如使用tcp的ftp来的灵活和高效.还有一个次要原因,就是在假如不太可靠的网络上面通信,tcp比udp工作的更好.
tftp协议一次传输512字节,并且有应答报文,还有包编号,相比udp,对丢包的处理能力大大增强了,当然也就大大减小损失了传输效率。所以这里不能用“因为udp效率比tcp高,所以tftp效率比ftp高“这种类推思路来思考问题!

最初的TFTP协议,规定序号字段仅16bit,每个报文长度不超过512字节,自己算算是不是可能支持100M的文件传输?(答案:很多TFTP服务器限制在16MB,比如CISCO设备自己带的TFTP
server、GNU tftp server。如果序号用无符号整数,最大也就32MB而已)

当然后来也有改进的TFTP可以支持比较大的文件传输,比如通过扩大报文的最大长度等方法,来支持更大一些的文件传输;又比如一些实现中,将大文件切割成32MB的n块。不过不是所有的TFTP server/client支持这些情况。

最后要说的是,由于它的运作机制,TFTP无论如何也不是一种快速可靠地传输大文件的工具

第四题解答

为什么UDP通讯的源端口和目的端口经常是相同的数字?

在UDP中,源端口是可选参数,如果没有的话就插入0value来代替这个地方,所以可以是相同的,所以可能在某些程序中为了方便就写成一样的(猜测,本人不是做程序开发的,呵呵),但是“经常是相同”到未必,看是什么程序了(RFC768),而且很多应用也可以根据目的IP地址,源IP地址和源端口号来过滤送往一个给定UDP端口号的数据

第五题解答

为何很多UDP应用的数据包最大都是512字节?

所有的主机必须能够重新组合最多为576字节的数据报,但实际上是应该能够重新组合与系统接口的MTU规格相同的数据报(RFC1122),因为TCP可以把数据分片,所以这个规定不会影响TCP;由于TCP/IP内核实现的限制,在UDP程序在设计中,应用程序数据被限制成512字节或更小。

/article/10231065.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: