|
|
发表于 2011-6-20 13:35:31
|
显示全部楼层
9# haiwanxue
还需要请教一下,由选择确认导致的重传,与超时导致的重传,在TCP的后续处理上应该有很大的不同吧。
比如涉及到的TCP的慢启动等导致的TCP窗口变化,从而影响TCP传输性能。
希望hai工能给予详细 ...
long_323 发表于 2011-6-20 10:06 
SACK和超时重传主要的区别在于前者改进了工作效率和资源利用。
早期的TCP版本没有设计SACK这个TCP选项
但后来的实际经验发现,如果使用SACK方式工作,与传统的超时、快速重传等方式比较,具有明显的实用性
举个例子,假设在协商的窗口范围,服务器端连续向客户端发生了10个数据包
由于网络或网络设备原因,导致第4个数据包丢失
客户端收到了其他的9个报文
早期的处理方式,一般是客户端连续发生3个重复确认(快速重传)
服务器端在收到数据包后,则开始从第4个报文重新发送
当然包括后面的第5——10个都要重传
使用SACK方式,客户端则会将接收到的9个报文保存在对应缓冲区
(其向应用层只能提交前3个报文)
这时 客户端向服务器端发送SACK
该报文告诉服务器,除了第4个数据包外,其他的都已经接收到了
这时 Server只需将第4个报文重传即可
之后Server如果接收到Client对第10个报文的Ack
则其TCBs(Transmission Control Blocks)进行新的控制信息
Client与Server需要要支持SACK,需在连接建立时协商
关于滑动窗口可能引发的TCP重传等现象中
慢启动一般是不会引发性能问题,因为Client每次宣告的窗口都在不断增大
Server也会根据对方的接收窗口发送数据
但在数据平稳传输过程中
如果接收方由于性能等问题,Window Size突然变小
而Server端尚未得知,却又按照之前的窗口大小发送了报文
这会带来一定的问题,也算一个高级话题
如果有人感兴趣,大家可以一起讨论 |
|