tcp报文验效的算法,是什么,是不是要定义什么伪头部来算?IP的,和ICMP的我晓得
tcp 是有伪首部的 32位 源ip32位 的目的ip8位的保留(即全0) 8位的协议16位的 TCP 总长度再有 tcp首部 和 tcp数据 来计算 和IP icmp 算法一样
很多种的,明白吧,原理很简单,你随便就可以把你的入侵手法改成什么名字的,现在入侵都是手工了,现在发展的速度相当的快,而且工作室也很多。每天都会出很多新东西,如果你是爱好网络的朋友,就经常注意百度就行了,百度是最好的老师

TCP拥塞控制算法之NewReno和SACK
改进原因分析TCP Reno 提出的快速恢复算法提高了丢失报文后的吞吐量和顽健性,但是:仅考虑了每次拥塞发生时只丢失一个报文的情形。实际网络中,一旦发生拥塞,路由器会丢弃大量的报文,即一次拥塞中丢失多个报文的情形很普遍。下图是Reno算法中快速恢复状态和拥塞避免状态之间的相互转换:所以,网络在一次拥塞中丢弃了多个报文,被TCP Reno错误地分析为传输中发生了多次拥塞。过度的窗口减小导致了传输超时的发生。因此为了提高一次拥塞中丢弃多个报文情形下TCP的性能,必须使TCP终端减少盲目削减发送窗口的行为。New Reno:基于Reno算法的改进NewReno TCP在Reno TCP的基础上对快速恢复算法进行修改,只有一个数据包丢失的情况下,其机制和Reno是一样的;当同时有多个包丢失时就显示出了它的优势。Reno快速恢复算法中发送方收到一个新的ACK就退出快速恢复状态,New Reno算法中只有当所有报文都被应答后才退出快速恢复状态。NewReno TCP添加了恢复应答判断功能,以增强TCP终端通过ACK报文信息分析报文传输状况的能力。使TCP终端可以把一次拥塞丢失多个报文的情形与多次拥塞的情形区分开来,进而在每一次拥塞发生后拥塞窗口仅减半一次,从而提高了TCP的顽健性和吞吐量。两个概念:部分应答(PACK)、恢复应答(RACK)记TCP发送端恢复阶段中接收到的ACK报文(非冗余ACK)为ACKx,记在接收到ACKx时TCP终端已发出的序列号(SN)最大的报文是PKTy,如果ACKx不是PKTy的应答报文,则称报文ACKx为部分应答(Partial ACK,简称PACK);若ACKx恰好是PKTy的应答报文则称报文ACKx为恢复应答(Recovery ACK,简称RACK)。举例来理解:如果4、5、6号包丢了,现在只重传4,只收到了4的ACK,后面的5、6没有确认,这就是部分应答Partial ACK。如果收到了6的ACK,则是恢复应答Recovery ACK。TCP发送端接收到恢复应答表明:经过重传,TCP终端发送的所有报文都已经被接收端正确接收,网络已经从拥塞中恢复。NewReno发送端在收到第一个Partial ACK时,并不会立即结束Fast-recovery,而会持续地重送Partial ACK之后的数据包,直到将所有遗失的数据包重送后才结束Fast-recovery。收到一个Partial ACK时,重传定时器就复位。这使得NewReno的发送端在网络有大量数据包遗失时不需等待Timeout就能更正此错误,减少大量数据包遗失对传输效果造成的影响。NewReno大约每一个RTT时间可重传一个丢失的数据包,如果一个发送窗口有M个数据包丢失,TCP NewReno的快速恢复阶段将持续M个RTT。改进的快速恢复算法具体步骤:快速恢复是基于数据包守恒的原则,即同一时刻能在网络中传输的数据包是恒定的,只有当旧数据包离开网络后,才能发送新数据包进入网络。一个重复ACK不仅意味着有一个包丢失了,还表示有发送的数据包离开了网络,已经在接收区的缓冲区中,不再占用网络资源,于是将拥塞窗口加一个数据包大小。Reno和NewReno算法仍存在的问题?虽然NewReno可以解决大量数据包遗失的问题,但是NewReno在每个RTT时间只能一个数据包遗失的错误。为了更有效地处理大量数据包遗失的问题,另一个解决方法就是让传送端知道哪些已经被接收端收到,但用此方法必须同时修改传送端和接收端的传送机制。缺乏SACK算法时发送端只能选择两种恢复策略:TCP SACK在TCP Reno基础上增加了:当一个窗口内有多个数据包丢失时:减少了时延,提高了网络吞吐量,使更快地从拥塞状态恢复。SACK中加入了一个SACK选项(TCP option field),允许接收端在返回Duplicate ACK时,将已经收到的数据区段(连续收到的数据范围)返回给发送端,数据区段与数据区段之间的间隔就是接收端没有收到的数据。发送端就知道哪些数据包已经收到,哪些该重传,因此SACK的发送端可以在一个RTT时间内重传多个数据包。整个TCP选项长度不超过40字节,实际最多不超过4组边界值。通过一个wireshark示例来说明接收端的SACK行为:上图中ACK确认序列号为12421,SACK的块左边界值为13801,SACK的块右边界值为15181。明确了这三个参数的数值,我们基本上就可以计算出被丢弃的数据报的序列号和长度了。通过上图所示的带有SACK的数据报文,我们可以知道被丢弃的数据报文的TCP序列号为12422,其数据长度为13801-12421=1380B。改进的快速恢复算法:【参考文献】:吴文红,李向丽.TCP拥塞控制机制定量性能分析.计算机工程与应用.2008,44(18)孙伟,温涛,冯自勤,郭权.基于TCP NewReno的稳态吞吐量分析模型.计算机研究与发展.2010陈琳,双雪芹.TCP网络拥塞控制算法比较研究.长江大学学报.2010,3许豫飞,TCP拥塞控制算法集齐性能评估.北京邮电大学.2005,3刘拥民,年晓红.对SACK拥塞控制算法的研究.信息技术.2003,9焦程波,窦睿彧,兰巨龙.无线网络中选择性重传机制性能分析与改进.计算机应用研究.2007.3James F.Kurose,Keith W.Ross,Computer Networking A Top-Down Approach Sixth Edition.机械工业出版社原文: https://blog.csdn.net/m0_38068229/article/details/80417503

常见的tcp拥塞控制有哪几种算法
慢启动:最初的TCP在连接建立成功后会向网络中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此新建立的连接不能够一开始就大量发送数据包,而只能根据网络情况逐步增加每次发送的数据量,以避免上述现象的发生。具体来说,当新建连接时,cwnd初始化为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加1个MSS大小。这样cwnd的值就随着网络往返时间(Round Trip Time,RTT)呈指数级增长,事实上,慢启动的速度一点也不慢,只是它的起点比较低一点而已。我们可以简单计算下: 开始 ---> cwnd = 1经过1个RTT后 ---> cwnd = 2*1 = 2经过2个RTT后 ---> cwnd = 2*2= 4经过3个RTT后 ---> cwnd = 4*2 = 8如果带宽为W,那么经过RTT*log2W时间就可以占满带宽。拥塞避免:从慢启动可以看到,cwnd可以很快的增长上来,从而最大程度利用网络带宽资源,但是cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段。对于大多数TCP实现来说,ssthresh的值是65536(同样以字节计算)。拥塞避免的主要思想是加法增大,也就是cwnd的值不再指数级往上升,开始加法增加。此时当窗口中所有的报文段都被确认时,cwnd的大小加1,cwnd的值就随着RTT开始线性增加,这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值。上面讨论的两个机制都是没有检测到拥塞的情况下的行为,那么当发现拥塞了cwnd又该怎样去调整呢?首先来看TCP是如何确定网络进入了拥塞状态的,TCP认为网络拥塞的主要依据是它重传了一个报文段。上面提到过,TCP对每一个报文段都有一个定时器,称为重传定时器(RTO),当RTO超时且还没有得到数据确认,那么TCP就会对该报文段进行重传,当发生超时时,那么出现拥塞的可能性就很大,某个报文段可能在网络中某处丢失,并且后续的报文段也没有了消息,在这种情况下,TCP反应比较“强烈”:1.把ssthresh降低为cwnd值的一半2.把cwnd重新设置为13.重新进入慢启动过程。从整体上来讲,TCP拥塞控制窗口变化的原则是AIMD原则,即加法增大、乘法减小。可以看出TCP的该原则可以较好地保证流之间的公平性,因为一旦出现丢包,那么立即减半退避,可以给其他新建的流留有足够的空间,从而保证整个的公平性。其实TCP还有一种情况会进行重传:那就是收到3个相同的ACK。TCP在收到乱序到达包时就会立即发送ACK,TCP利用3个相同的ACK来判定数据包的丢失,此时进行快速重传,快速重传做的事情有:1.把ssthresh设置为cwnd的一半2.把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3)3.重新进入拥塞避免阶段。后来的“快速恢复”算法是在上述的“快速重传”算法后添加的,当收到3个重复ACK时,TCP最后进入的不是拥塞避免阶段,而是快速恢复阶段。快速重传和快速恢复算法一般同时使用。快速恢复的思想是“数据包守恒”原则,即同一个时刻在网络中的数据包数量是恒定的,只有当“老”数据包离开了网络后,才能向网络中发送一个“新”的数据包,如果发送方收到一个重复的ACK,那么根据TCP的ACK机制就表明有一个数据包离开了网络,于是cwnd加1。如果能够严格按照该原则那么网络中很少会发生拥塞,事实上拥塞控制的目的也就在修正违反该原则的地方。具体来说快速恢复的主要步骤是:1.当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络。2.再收到重复的ACK时,拥塞窗口增加1。3.当收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。快速重传算法首次出现在4.3BSD的Tahoe版本,快速恢复首次出现在4.3BSD的Reno版本,也称之为Reno版的TCP拥塞控制算法。可以看出Reno的快速重传算法是针对一个包的重传情况的,然而在实际中,一个重传超时可能导致许多的数据包的重传,因此当多个数据包从一个数据窗口中丢失时并且触发快速重传和快速恢复算法时,问题就产生了。因此NewReno出现了,它在Reno快速恢复的基础上稍加了修改,可以恢复一个窗口内多个包丢失的情况。具体来讲就是:Reno在收到一个新的数据的ACK时就退出了快速恢复状态了,而NewReno需要收到该窗口内所有数据包的确认后才会退出快速恢复状态,从而更一步提高吞吐量。 SACK就是改变TCP的确认机制,最初的TCP只确认当前已连续收到的数据,SACK则把乱序等信息会全部告诉对方,从而减少数据发送方重传的盲目性。比如说序号1,2,3,5,7的数据收到了,那么普通的ACK只会确认序列号4,而SACK会把当前的5,7已经收到的信息在SACK选项里面告知对端,从而提高性能,当使用SACK的时候,NewReno算法可以不使用,因为SACK本身携带的信息就可以使得发送方有足够的信息来知道需要重传哪些包,而不需要重传哪些包。
为 了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制。最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由“慢启动(Slow start)”和“拥塞避免(Congestion avoidance)”组成,后来TCP Reno版本中又针对性的加入了“快速重传(Fast retransmit)”、“快速恢复(Fast Recovery)”算法,再后来在TCP NewReno中又对“快速恢复”算法进行了改进,近些年又出现了选择性应答( selective acknowledgement,SACK)算法,还有其他方面的大大小小的改进,成为网络研究的一个热点。TCP的拥塞控制主要原理依赖于一个拥塞窗口(cwnd)来控制,在之前我们还讨论过TCP还有一个对端通告的接收窗口(rwnd)用于流量控制。窗口值的大小就代表能够发送出去的但还没有收到ACK的最大数据报文段,显然窗口越大那么数据发送的速度也就越快,但是也有越可能使得网络出现拥塞,如果窗口值为1,那么就简化为一个停等协议,每发送一个数据,都要等到对方的确认才能发送第二个数据包,显然数据传输效率低下。TCP的拥塞控制算法就是要在这两者之间权衡,选取最好的cwnd值,从而使得网络吞吐量最大化且不产生拥塞。由于需要考虑拥塞控制和流量控制两个方面的内容,因此TCP的真正的发送窗口=min(rwnd, cwnd)。但是rwnd是由对端确定的,网络环境对其没有影响,所以在考虑拥塞的时候我们一般不考虑rwnd的值,我们暂时只讨论如何确定cwnd值的大小。关于cwnd的单位,在TCP中是以字节来做单位的,我们假设TCP每次传输都是按照MSS大小来发送数据的,因此你可以认为cwnd按照数据包个数来做单位也可以理解,所以有时我们说cwnd增加1也就是相当于字节数增加1个MSS大小。慢启动:最初的TCP在连接建立成功后会向网络中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此新建立的连接不能够一开始就大量发送数据包,而只能根据网络情况逐步增加每次发送的数据量,以避免上述现象的发生。具体来说,当新建连接时,cwnd初始化为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加1个MSS大小。这样cwnd的值就随着网络往返时间(Round Trip Time,RTT)呈指数级增长,事实上,慢启动的速度一点也不慢,只是它的起点比较低一点而已。我们可以简单计算下:开始 ---> cwnd = 1经过1个RTT后 ---> cwnd = 2*1 = 2经过2个RTT后 ---> cwnd = 2*2= 4经过3个RTT后 ---> cwnd = 4*2 = 8如果带宽为W,那么经过RTT*log2W时间就可以占满带宽。拥塞避免:从慢启动可以看到,cwnd可以很快的增长上来,从而最大程度利用网络带宽资源,但是cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段。对于大多数TCP实现来说,ssthresh的值是65536(同样以字节计算)。拥塞避免的主要思想是加法增大,也就是cwnd的值不再指数级往上升,开始加法增加。此时当窗口中所有的报文段都被确认时,cwnd的大小加1,cwnd的值就随着RTT开始线性增加,这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值。上面讨论的两个机制都是没有检测到拥塞的情况下的行为,那么当发现拥塞了cwnd又该怎样去调整呢?首先来看TCP是如何确定网络进入了拥塞状态的,TCP认为网络拥塞的主要依据是它重传了一个报文段。上面提到过,TCP对每一个报文段都有一个定时器,称为重传定时器(RTO),当RTO超时且还没有得到数据确认,那么TCP就会对该报文段进行重传,当发生超时时,那么出现拥塞的可能性就很大,某个报文段可能在网络中某处丢失,并且后续的报文段也没有了消息,在这种情况下,TCP反应比较“强烈”:1.把ssthresh降低为cwnd值的一半2.把cwnd重新设置为13.重新进入慢启动过程。从整体上来讲,TCP拥塞控制窗口变化的原则是AIMD原则,即加法增大、乘法减小。可以看出TCP的该原则可以较好地保证流之间的公平性,因为一旦出现丢包,那么立即减半退避,可以给其他新建的流留有足够的空间,从而保证整个的公平性。其实TCP还有一种情况会进行重传:那就是收到3个相同的ACK。TCP在收到乱序到达包时就会立即发送ACK,TCP利用3个相同的ACK来判定数据包的丢失,此时进行快速重传,快速重传做的事情有:1.把ssthresh设置为cwnd的一半2.把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3)3.重新进入拥塞避免阶段。后来的“快速恢复”算法是在上述的“快速重传”算法后添加的,当收到3个重复ACK时,TCP最后进入的不是拥塞避免阶段,而是快速恢复阶段。快速重传和快速恢复算法一般同时使用。快速恢复的思想是“数据包守恒”原则,即同一个时刻在网络中的数据包数量是恒定的,只有当“老”数据包离开了网络后,才能向网络中发送一个“新”的数据包,如果发送方收到一个重复的ACK,那么根据TCP的ACK机制就表明有一个数据包离开了网络,于是cwnd加1。如果能够严格按照该原则那么网络中很少会发生拥塞,事实上拥塞控制的目的也就在修正违反该原则的地方。具体来说快速恢复的主要步骤是:1.当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络。2.再收到重复的ACK时,拥塞窗口增加1。3.当收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。快速重传算法首次出现在4.3BSD的Tahoe版本,快速恢复首次出现在4.3BSD的Reno版本,也称之为Reno版的TCP拥塞控制算法。可以看出Reno的快速重传算法是针对一个包的重传情况的,然而在实际中,一个重传超时可能导致许多的数据包的重传,因此当多个数据包从一个数据窗口中丢失时并且触发快速重传和快速恢复算法时,问题就产生了。因此NewReno出现了,它在Reno快速恢复的基础上稍加了修改,可以恢复一个窗口内多个包丢失的情况。具体来讲就是:Reno在收到一个新的数据的ACK时就退出了快速恢复状态了,而NewReno需要收到该窗口内所有数据包的确认后才会退出快速恢复状态,从而更一步提高吞吐量。SACK就是改变TCP的确认机制,最初的TCP只确认当前已连续收到的数据,SACK则把乱序等信息会全部告诉对方,从而减少数据发送方重传的盲目性。比如说序号1,2,3,5,7的数据收到了,那么普通的ACK只会确认序列号4,而SACK会把当前的5,7已经收到的信息在SACK选项里面告知对端,从而提高性能,当使用SACK的时候,NewReno算法可以不使用,因为SACK本身携带的信息就可以使得发送方有足够的信息来知道需要重传哪些包,而不需要重传 哪些包。

简述tcp 的aimd 算法 14,路有器有哪三种交换结构,各有什么特点 15,以太网是如
要正确理解交换机的工作原理以及其优越性,就不能不提到交换机的一些主流交换技术,正是在这些交换技术基础上,交换机才实现了比集线器更好地性能,为此本篇介绍几个主流的交换技术,随后在本篇最后将介绍交换机选购时的一些注意事项,帮助大家正确选购。 一、交换机的交换方式目前交换机在传送源和目的端口的数据包时通常采用直通式交换、存储转发式和碎片隔离方式三种数据包交换方式,下面分别简述。>1、直通交换方式采用直通交换方式的以太网交换机可以理解为在各端口间是纵横交*的线路矩阵电话交换机。它在输入端口检测到一个数据包时,检查该包的包头,获取包的目的地址,启动内部的动态查找表转换成相应的输出端口,在输入与输出交*处接通,把数据包直通到相应的端口,实现交换功能。由于它只检查数据包的包头(通常只检查14个字节),不需要存储,所以切入方式具有延迟小,交换速度快的优点(所谓延迟(Latency)是指数据包进入一个网络设备到离开该设备所花的时间)。它的缺点主要有三个方面:一是因为数据包内容并没有被以太网交换机保存下来,所以无法检查所传送的数据包是否有误,不能提供错误检测能力;第二,由于没有缓存,不能将具有不同速率的输入/输出端口直接接通,而且容易丢包。如果要连到高速网络上,如提供快速以太网(100BASE-T)、fddi或atm连接,就不能简单地将输入/输出端口“接通”,因为输入/输出端口间有速度上的差异,必须提供缓存;第三,当以太网交换机的端口增加时,交换矩阵变得越来越复杂,实现起来就越困难。2、存储转发方式存储转发(Store and Forward)是计算机网络领域使用得最为广泛的技术之一,以太网交换机的控制器先将输入端口到来的数据包缓存起来,先检查数据包是否正确,并过滤掉冲突包错误。确定包正确后,取出目的地址,通过查找表找到想要发送的输出端口地址,然后将该包发送出去。正因如此,存储转发方式在数据处理时延时大,这是它的不足,但是它可以对进入交换机的数据包进行错误检测,并且能支持不同速度的输入/输出端口间的交换,可有效地改善网络性能。它的另一优点就是这种交换方式支持不同速度端口间的转换,保持高速端口和低速端口间协同工作。实现的办法是将10Mbps低速包存储起来,再通过100Mbps速率转发到端口上。3、碎片隔离式(Fragment Free)这是介于直通式和存储转发式之间的一种解决方案。它在转发前先检查数据包的长度是否够64个字节(512 bit),如果小于64字节,说明是假包(或称残帧),则丢弃该包;如果大于64字节,则发送该包。该方式的数据处理速度比存储转发方式快,但比直通式慢,但由于能够避免残帧的转发,所以被广泛应用于低档交换机中。使用这类交换技术的交换机一般是使用了一种特殊的缓存。这种缓存是一种先进先出的fifo(First In First Out),比特从一端进入然后再以同样的顺序从另一端出来。当帧被接收时,它被保存在fifo中。如果帧以小于512比特的长度结束,那么fifo中的内容(残帧)就会被丢弃。因此,不存在普通直通转发交换机存在的残帧转发问题,是一个非常好的解决方案。数据包在转发之前将被缓存保存下来,从而确保碰撞碎片不通过网络传播,能够在很大程度上提高网络传输效率。二、主流堆栈交换技术通过我们前面的介绍已经知道,按交换机工作在OSI/RM堆栈协议层来分的话,目前的交换机主要有第二层、第三层和第四层交换机,它们都有其对应的主流交换技术,下面分别予以介绍。1、第二层交换技术90年代初,在网络系统集成模式中大量引入了局域网交换机。局域网交换机是一种第二层网络设备,交换机在操作过程中不断地收集资料去建立它本身的地址表,这个表相当简单,主要标明某个mac地址是在哪个端口上被发现的。当交换机接收到一个数据封包时,它检查该封包的目的mac地址,核对一下自己的地址表以决定从哪个端口发送出去。而不是象集线器那样,任何一个发送方数据都会出现在集线器的所有端口上(不管是否为你所需)。这时的交换机因为其只能工作在OSI/RM的第二层,所以也就称之为第二层交换机,所采用的技术也就称之为“第二层交换技术”。“第二层交换”是指OSI第二层或称mac层的交换。第二层交换机的引入,使得网络站点间可独享带宽,消除了无谓的碰撞检测和出错重发,提高了传输效率,在交换机中可并行的维护几个独立的、互不影响的通信进程。在交换网络环境下,用户信息只在源节点与目的节点之间进行传送,其他节点是不可见的。但有一点例外,当某一节点在网上发送广播或多目广播时,或某一节点发送了一个交换机不认识的mac地址封包时,交换机上的所有节点都将收到这一广播信息。整个交换环境构成一个大的广播域。也就是说第二层交换机仍可能存在“广播风暴”,广播风暴会使网络的效率大打折扣,但出现情况的情形的比率比起集线器来说要少许多。第二层交换仍存在“广播风暴”的弱点,同时,使用第二层交换并不能给路由器的功能带来什么进步。这样的结果是,第二层交换只能在本地不含任何路由器的工作组中取得性能的提高。在使用第二层交换的工作组之间,通过路由器的端到端性能会因为路由器阻塞而掉包,从而导致实质上的性能下降。正因如此,其于路由方式的第三交换技术顺应时代的需要而产生了。2.第三层交换技术在网络系统集成的技术中,直接面向用户的第一层接口和第二层交换技术方面已得到令人满意的答案。但是,作为网络核心、起到网间互连作用的路由器技术却没有质的突破。传统的路由器基于软件,协议复杂,与局域网速度相比,其数据传输的效率较低。但同时它又作为网段(子网,虚拟网)互连的枢纽,这就使传统的路由器技术面临严峻的挑战。随着Internet、Intranet的迅猛发展和B/S(浏览器/服务器)计算模式的广泛应用,跨地域、跨网络的业务急剧增长,业界和用户深感传统的路由器在网络中的瓶颈效应,改进传统的路由技术已迫在眉睫。在这种情况下,一种新的路由技术应运而生,这就是第三层交换技术。说它是路由器,因为它可操作在网络协议的第三层,是一种路由理解设备并可起到路由决定的作用;说它是交换器,是因为它的速度极快,几乎达到第二层交换的速度。一个具有第三层交换功能的设备是一个带有第三层路由功能的第二层交换机,但它是二者的有机结合,并不是简单的把路由器设备的硬件及软件简单地叠加在局域网交换机上。从硬件的实现上看,目前,第二层交换机的接口模块都是通过高速背板/总线(速率可高达几十Gbit/s)交换数据的。在第三层交换机中,与路由器有关的第三层路由硬件模块也插接在高速背板/总线上,这种方式使得路由模块可以与需要路由的其他模块间高速的交换数据,从而突破了传统的外接路由器接口速率的限制(10Mbit/s——100Mbit/s)。在软件方面,第三层交换机也有重大的举措,它将传统的基于软件的路由器软件进行了界定。目前基于第三层交换技术的第三层交换机得到了广泛的应用,并得到了用户一致的赞同。3、第四层交换虽然第三层交换技术使得用户可在工作组之间获得无失真的100Mbps、1000Mbps的数据交换速率。但这一切还得有一个先决条件,那就是只有当用户和服务器本身都能跟上网络中的带宽增长,包的传输可以达到系统的极限,即达到cpu能够处理的最大速度,才是真正的成功。目前的主要问题在于提高服务器的能力,因为越来越多功能强大的工作站连到Ethernet交换的桌面上,用户桌面的能力并没有得到充分的发挥。如果服务器容量能够满足需求,问题解决起来就相当简单。不幸的是,即使是最简单的对称多处理服务器的cpu升级也需要大量的时间,而且需要冗长繁杂的计划和管理。当一个网络的基础结构建立在G比特速率的第二层和第三层交换上,有高速WAN接入,服务器问题就将成为随之而来的瓶颈。也就是说如果服务器速度跟不上,即使是具有最快速交换的网络也不能完全确保端到端的性能。可以想像高优先权的业务在这种QoS使能的网络中会因服务器中低优先权的业务队列而阻塞。在更糟的情况下,服务器甚至会丧失循环处理业务的能力。在这样的需求背景下,第四层交换技术也就设计产生了,基于服务器设计的第四层交换扩展了服务器、第二层、第三层交换的性能和业务流的管理功能。第四层交换功能就像是虚IP,直接指向物理服务器。它传输的业务服从的协议多种多样,有http、ftp、nfs、Telnet或其他协议。这些业务在物理服务器基础上,需要复杂的载量平衡算法。在IP世界,业务类型由终端TCP或UDP端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCP和UDP端口共同决定。在第四层交换中为每个供搜寻使用的服务器组设立虚IP地址(VIP),每组服务器支持某种应用。在域名服务器(dns)中存储的每个应用服务器地址是VIP,而不是真实的服务器地址。当某用户申请应用时,一个带有目标服务器组的VIP连接请求(例如一个TCPSYN包)发给服务器交换机。服务器交换机在组中选取最好的服务器,将终端地址中的VIP用实际服务器的IP取代,并将连接请求传给服务器。这样,同一区间所有的包由服务器交换机进行映射,在用户和同一服务器间进行传输。第四层交换技术的优点主要体现在以下几个方面:(1)、从操作方面来看,第四层交换是稳固的,因为它将包控制在从源端到目的端的区间中。(2)、另一方面,路由器或第三层交换技术,只针对单一的包进行处理,不清楚上一个包从哪来、也不知道下一个包的情况。它们只是检测包报头中的TCP端口数字,根据应用建立优先级队列。路由器根据链路和网络可用的节点决定包的路由。(3)、第四层交换使用第三层和第四层信息包的报头信息,根据应用区间识别业务流,将整个区间段的业务流分配到合适的应用服务器进行处理。每个开放的区间与特定的服务器相关,为跟踪服务器,第四层交换使用多个服务器支持的特殊应用,随着服务器的增加而增强网络的整体性能。同时,第四层交换通过减少对任何特定服务器的依赖性而提高应用的可*性。(4)、第四层交换也要求端到端QoS,提高第二层和第三层交换中一包接一包QoS传输的能力。例如,从级别高用户来的业务或重要应用的网络业务流,可以分配给最快的I/O系统和cpu,而普通的业务就分配给性能较差的机器。以上介绍了一些基本的第二层、第三层和第四层交换技术,其实还有许多复杂、先进的交换技术,在此就不作详细介绍了。同时要注意,以上所介绍的这些交换技术并不是只能单独存在,也许它们结合使用更具有优势,例如第二层、第三层和第四层交换在校园网络中可以有很好的应用。第二层交换机连接用户和网络,在子网中指引业务流,第三层交换机或路由器将包从一个子网传到另一个子网,第四层交换机将包传到终端服务器。三、交换机的选购交换机虽然目前有进入到桌面的趋势,但是对于一些比较高档的交换来说一般只有在较大型的局域网中存在,而且由于交换机历来在人们心中的神秘性决定了在交换机的选购方面多数情况下是商家说了算。在交换机的选购方面要注意的事项比较多,不再是像集线器一样那么几个简单的参数就可决定的。下面所列的是在交换机选购时要注意的几个主要方面。1.转发方式数据包的转发方式在前面已经介绍过,主要分为“直通式转发”(现为准直通式转发)和“存储式转发”。由于不同的转发方式适应于不同的网络环境,因此,应当根据自己的需要作出相应的选择。直通式由于只检查数据包的包头,不需要存储,所以切入方式具有延迟小,交换速度快的优点。但同时它又具有以以上所介绍的三个缺点。存储转发方式在数据处理时延时大,但它可以对进入交换机的数据包进行错误检测,并且能支持不同速度的输入/输出端口间的交换,有效地改善网络性能。同时这种交换方式支持不同速度端口间的转换,保持高速端口和低速端口间协同工作。低端交换机通常只拥有一种转发模式,或是存储转发模式,或是直通模式,往往只有中高端产品才兼具两种转发模式,并具有智能转换功能,可根据通信状况自动切换转发模式。通常情况下,如果网络对数据的传输速率要求不是太高,可选择存储转发式交换机;如果网络对数据的传输速率要求较高,可选择直通转发式交换机。2.延时交换机的延时(Latency)也称延迟时间,是指从交换机接收到数据包到开始向目的端口发送数据包之间的时间间隔。这主要受所采用的转发技术等因素的影响,延时越小,数据的传输速率越快,网络的效率也就越高。特别是对于多媒体网络而言,较大的数据延迟,往往导致多媒体的短暂中断,所以交换机的延迟时间越小越好,同时要注意的中,延时越小的交换机价格也就越贵。3.管理功能交换机的管理功能(Management)是指交换机如何控制用户访问交换机,以及系统管理人员通过软件对交换机的可管理程度如何。如果需要以上配置和管理,则须选择网管型交换机,否则只需选择非网管型的。目前几乎所有中、高档交换机都是可网管的,一般来说所有的厂商都会随机提供一份本公司开发的交换机管理软件,所有的交换机都能被第三方管理软件所管理。低档的交换机来通常不具有网管功能,属“傻瓜”型的,只需接上电源、插好网线即可正常工作。网管型价格要贵许多。4.mac地址数通常前面的介绍,我们知道交换机之所以能够直接对目的节点发送数据包,而不是像集线器一样以广播方式对所有节点发送数据包,最关键的技术就是交换机可以识别连在网络上的节点的网卡mac地址,形成一个mac地址表。这个mac地址表存放于交换机的缓存中,并记住这些地址,这样一来当需要向目的地址发送数据时,交换机就可在mac地址表中查找这个mac地址的节点位置,然后直接向这个位置的节点发送。但是不同档次的交换机每个端口所能够支持的mac数量不同。在交换机的每个端口,都需要足够的缓存来记忆这些mac地址,所以Buffer容量的大小就决定了相应交换机所能记忆的mac地址数多少。通常交换机只要能够记忆1024个mac地址基本上就可以了,而一般的交换机通常都能做到这一点,所以如果对网络规模不是很大的情况下,这参数无需太多考虑。当然越是高档的交换机能记住的mac地址数就越多,这在选择时要视所连网络的规模而定了。5.背板带宽现在越来越多的100M交换到桌面方案是以实现VOD(视频点播)为目的,如果您有同样需求,在选购交换器时应注意交换机背板带宽,当然是越宽越好,它将为您的交换器在高负荷下提供高速交换。由于所有端口间的通讯都需要通过背板完成,所以背板所能够提供的带宽就成为端口间并发通讯时的总带宽。带宽越大,能够给各通讯端口提供的可用带宽越大,数据交换速度越快;带宽越小,则能够给各通讯端口提供的可用带宽越小,数据交换速度也就越慢。因此,在端口带宽、延迟时间相同的情况下,背板带宽越大,交换机的传输速率则越快。6.端口交换机也与集线器一样,也有端口带宽之分,但这里所指的带宽与集线器的端口带宽不一样,因为这里交换机上所指的端口带宽是独享的,而集线器上端口的带宽是共享的。交换机的端口带宽目前主要包括10M、100M和1000M三种,但就这三种带宽又有不同的组合形式,以满足不同类型网络的需要。最常见的组合形式包括n*100M+m*10M、n*10/100M、n*1000M+m*100M和n*1000M四种。n*100M+m*10M就是在一个交换机上同时有“n”个100Mbps带宽的端口和“m”个10Mbps带宽的端口,这“n+m”就是交换机的端口总和。当然这“n”与“m”可以是相同的,也可以是不同的,一般来说这“n”数要远比“m”数小。这种组合的交换机既可以作为小型廉价网络的中心节点,也可以用于大、中型网络中的工作组交换机。因为它也具有100Mbps带宽的端口,适合于大型网络的连接,100M端口一般用于服务器或主干网段的连接,或者用于级联至另一台交换机,10M端口则用于直接连接工作站计算机,从而实现不同交换机端口之间的高速连接,并满足网络内所有计算机对服务器高速连接的需求。该类交换机的最大特点就是价格低廉,且基本能够满足网络的所有需求。n*10/100M,这种组合的交换机相比前面那种又要先进一些,因为它的每个端口都可以自适应地达到10Mbps或100Mbps的带宽,这比固定几个100Mbps带宽的交换机当然是方便许多,在性能方面也肯定要好许多。目前这种组合方式的交换机是当前市场上的主流产品,能够自动适应10Mbps或100Mbps的速率,可以无缝连接以太网和快速以太网。该类型的交换机既可以作为工作组交换机直接连接客户机,实现100Mbps到桌面的高速交换,也可以作为小型网络中心节点。当直接连接至计算机时,在全双工状态下收发各占100Mbps带宽,从而能够实现200Mbps的带宽。当与n*100M+m*10M类型的交换机连接时,为连接至不同端口的交换机提供较快链路,满足多个端口间同时传输数据的需要。n*1000M+m*100M与上面所介绍的“n*100M+m*10M”组合形式的交换组合方式类似,只不过这里所指的带宽是“1000Mbps 与100Mbps”带宽,而不是“10Mbps与100Mbps”带宽的。这种端口配置的含义也是这种交换机同时具有n个1000Mbps带宽的端口和m个100Mbps带宽的端口,这里的“n+m”也一般是交换机的端口总数,但一般来说“n”值要远小于“m”值。目前这种配置的交换机已经逐渐由中心交换机和骨干交换机,慢慢地向大中型网络普及。也可作为小型网络中的中心交换机或骨干交换机,对上可直接连接至服务器,对下可连接各组交换机。千兆的带宽不仅能够很好地解决多用户对服务器突发性地访问问题,消除了服务器的瓶颈问题,而且还能够很好地解决高速交换机之间的互联问题,消除了级联端口的带宽瓶颈。当然这种交换机目前来说对于中、小型的单位来说还是有点贵。n*1000M,这种交换机是目前很先进的一种,当然价格也是很贵的,因为它提供了全部都是1000Mbps的端口带宽,这种交换机目前一般是充当在大中型网络中心交换机或骨干交换机的角色。在中、小型企业单位局域网中一般来说还是很产见的,因为它实在太贵了,而且对于中、小型个、事业单位的局域网也根本用不上这1000Mbps的带宽。7.光纤解决方案 最后要谈一点就是光纤的选择了,如果你的布线中必须选用光纤,则在您的交换机选择方案中可以有以下三种方案:其一选择具有光纤接口的交换机;另外还可以在模块结构的交换机中加装光纤模块;最后一种就是加装光纤与双绞线的转发器。第一种性能最好,但不够灵活,而且价格较贵;第二种方案具有较强的灵活配置能力,性能也较好,但价格最贵;最后一种方案价格最便宜,但性能受影响较大。

分析tcp协议原理
原理四个主要方面:一、tcp协议之连接建立、断开二、tcp协议之超时重传三、tcp协议之窗口管理四、tcp协议之拥塞控制TCP是一种面向有连接的协议,也就是说必须确认对方存在时才能发送数据而TCP通过检验和、序列号、确认应答、重发控制、连接管理、窗口控制等机制来实现可靠传输。1. 目的:TCP三次握手是客户端和服务器总共发三个数据包,通过三个数据包来确认主动发送能力和被动接收能力是否正常。2. 实质:通过指定的四元组(源地址、源端口、目标地址、目标端口)来建立TCP连接,同步双方各自发送序列号seq和确认号ACK,同时也会交换窗口大小信息三次握手过程的实现方式就是交换序列号seq。随便在网上找个地址,如果通过域名想看ip地址,可以ping下看连接。① 192.168.3.7发送[SYN]报文段至222.169.228.146,告知序列号x为0。② 222.169.228.146发送[SYN,ACK]报文段至192.168.3.7,告知序列号y为0,确认号ACK为x+1=1。③192.168.3.7发送[ACK]报文段至222.169.228.146,告知确认号ACK为y+1=1。报文段中的其他参数:MSS=1460:允许从对方接收到的最大报文段,图中为1460字节(指承载的数据,不包含报文段的头部)。win=8192:滑动窗口的大小为8192字节。SACK_PERM=1:开启选择确认。为什么会使用SACK:tcp确认方式不是一段报文段一确认,而是采用累积确认方式。服务器接收到的报文段无序所以序列号也是不连续,服务器的接收队列会出现空洞情况。为了解决空洞,提前了解当前空洞,应对丢失遗漏,采取重传。提前了解方式就是通过SACK选项信息,SACK信息包含接收方已经成功接收的数据块的序列号范围。而SACK_PERM字段为1表明,选择开启了SACK功能。网络层可能会出现丢失、重复、乱序的问题,tcp是提供可靠的数据传输服务的,为了保证数据的正确性,tcp协议会重传它认为的已经丢失的包。重传两种机制:一种基于时间重传,一种基于确认报文段提供的信息重传。RTT:数据完全发送完(完成最后一个比特推送到数据链路上)到收到确认信号的时间(往返时间)。RTO:重传超时时间(tcp发送数据时设置一个计时器,当计时器超时没有收到数据确认信息,引发超时而重传,判断的标准就是RTO)。思考:发送序列号为1、2、3、4这4个报文段,但是出现了序列号2报文段丢失,怎么办?发送端接收到seq1的确认报文(ACK=2)后,等待seq=2的确认报文。接收端当收到序列号为3的报文(2已丢失),发送ack为4的确认报文,发送端正等待ack为2的确认报文,面对跳跃的报文,那么发送端会一直等待,直到超出指定时间,重传报文2。为什么不跳跃确认呢?tcp是累积确认方式,如果确认报文3,那么意味着报文1和报文2都已经成功接收。超时处理方式:思考:上面计时器是以时间为标准重传,那么可以通过确认报文的次数来决定重传。发送端接收到seq1的确认报文(ACK=2)后,等待seq=2的确认报文。接收端收到报文3、4、5,但是没收到报文2,那么接收端发送三个ACK为2的确认报文,发送端收到这个三个确认报文,重传报文2。思考:如果快速重传中丢失包的地方很多(报文2,报文,7,报文9,报文30,报文300....),那么需要从头到尾都重传,这很蛋疼?思考:SACK重传对于接收到重复数据段怎样运作没有明确规定,通过DSACK重传可以让发送方知道哪些数据被重复接收了,而且明确是什么原因造成的。发送端没有收到100-199的ACK包,超过指定时间,重传报文。接收端都已经收到200-299的发送报文了,又来100-199是重复报文。再向发送端发送一个ACK报文,设置SACK 100-199,告知发送端,已经收到了100-199包,只是回应ACK包丢失。发送端发送包100-199,由于网络延迟,一直没有达到接收端。接收端连续发送三个ACK 200确认报文,触发快速重传,发送端收到了ACK 500的确认报文,表明之前的报文都已经交付成功。接收端又收到了延迟的报文100-199,再次向发送端发送一个SACK 100-199的ACK 500报文。发送端发现这是重复报文,判断为网络延迟造成的。计时器重传:根据超时,重传。快速重传:根据接收三次相同ACK报文,重传。选择确认重传:根据接收端提供的SACK信息,重传。DSACK重传:根据重复报文,明确丢失ACK报文还是网络延迟。Category1:已发送且已确认(已经收到ACK报文的数据)。Category2:已发送但未收到确认。Category3:即将发送。Category4:窗口移动前都不能发送。可用窗口:46-51字节。发送窗口:32-51字节。RCV.NXT:左边界RCV.WND:接收窗口RCV.NXT+RCV.WND:右边界接收端接收到序列号小于左边界,那么被认为重复数据而被丢弃。接收端接收到序列号大于右边界,那么被认为超出处理范围,丢弃。注意:tcp协议为累积ACK结构,只有当达到数据序列号等于左边界时,数据才不会被丢弃。如果窗口更新ACK丢失,对于发送端,窗口左边界右移,已发送数据得到ACK确认之后,左右边界距离减小,发送端窗口会减小,当左右边界相等时,称为零窗口。零窗口之后:接收端发送窗口更新能会发生窗口更新ACK丢失。<>解释:TCP是通过接收端的通告窗口来实现流量控制的,通告窗口指示了接收端可接收的数据量。当窗口值变为0时,可以有效阻止发送端继续发送,直到窗口大小恢复为非零值。当接收端重新获得可用空间时,会给发送端传输一个窗口更新告知其可继续发送数据。这样的窗口更新通常都不包含数据(纯ACK),接收端向发送端发送的窗口更新ACK可能丢失。结果双方处于等待状态,发生死锁。解决方案:发送端会采用一个持续计时器间歇性地查询接收端,看其窗口是否已增长。触发窗口探测,强制要求接收端返回ACK。发送几次探测,窗口大小还是0,那么断开连接。出现SWS的情况:① 接收端通告窗口太小。② 发送端发送的数据太小。解决方案:① 针对接收端:不应通告小窗口值[RFC1122]描述:在窗口可增至一个全长的报文段(接收端MSS)或者接收端缓存空间的一半(取两者中较小值)之前,不能通告比当前窗口更大的窗口值。标准:min(MSS , 缓存空间/2)。② 针对发送端:不应发送小的报文至少满足以下其一:(1)可以发送MSS字节的报文。window size >= MSS或者 数据大小>=MSS(2)数据段长度>=接收端通告过的最大窗口值的一半,才可以发送。收到之前发送的数据的ack回包,再发送数据,否则一直攒数据。(3) -1 没有未经确认的在传数据或者-2 连接禁用Nagle算法。tcp基于ACK数据包中的通告窗口大小字段实现了流量控制。当网络大规模通信负载而瘫痪,默认网络进入拥塞状态,减缓tcp的传输。发送方和接收方被要求承担超负荷的通信任务时,采取降低发送速率或者最终丢弃部分数据的方法。反映网络传输能力的变量称为拥塞窗口(cwnd)。通告窗口(awnd)。发送窗口swnd=min(cwnd,awnd)目的:tcp在用拥塞避免算法探寻更多可用带宽之前得到cwnd值,帮助tcp建立ACK时钟。[RFC5681] :在传输初始阶段,由于未知网络传输能力,需要缓慢探测可用传输资源,防止短时间内大量数据注入导致拥塞。慢启动算法针对这一问题而设计。在数据传输之初或者重传计时器检测到丢包后,需要执行慢启动。拥塞窗口值:每收到一个ACK值,cwnd扩充一倍。所以假设没有丢包且每个数据包都有相应ACK值,在k轮后swnd=,成指数增长。SMSS是发送方的最大段大小。慢启动阶段,cwnd会指数增长,很快,帮助确立一个慢启动阙值(ssthresh)。有了阙值,tcp会进入拥塞避免阶段,cwnd每次增长值近似于成功传输的数据段大小,成线性增长。实现公式:cwnd+=SMSS*SMSS/cwnd刚建立连接使用慢启动算法,初始窗口为4,收到一次ACK后,cwnd变为8,再收到一次ACK后,cwnd变为16,依次继续,32、64,达到阙值ssthresh为64。开始使用拥塞避免算法,设置ssthresh为ssthresh/2,值为32。重新从初始窗口4,线性递增到ssthresh=32。当cwnd < ssthresh时,使用慢启动算法当cwnd > ssthresh时,使用拥塞避免算法应用快速恢复算法时机:启动快速重传且正常未失序ACK段达到之前。启动快速恢复算法。实现过程:① 将ssthresh设置为1/2 cwnd,将cwnd设置为ssthresh+3*SMSS。② 每接收一个重复ACK,cwnd值暂时增加1 SMSS。③当接收到新数据ACK后,将cwnd设置为ssthresh。参考:<>

本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/45019.html。