昨天遭遇了使用远程桌面连接Windows Server
2008时通过IP地址连接服务器时,显示“由于数据加密错误,这个会话将结束。请重新连接到远程计算机”的错误。
当该错误出现后,远程桌面连接会立即断开,但当我使用机器名进行连接时却没有这样的问题,一直感到很奇怪。昨天借解决Hyper-v网络性能低下的问题之际发现了两个源自相同的网卡驱动程序IPv4
Large send
offload配置,只要从网卡驱动程序属性的高级选项卡将这个选项禁用即可实现正常连接。那么,这个功能是干什么用的呢?
原来,Large send offload分为两个版本,version 1 (LSOV1)和version 2 (LSOV2)
。
通过使用LSOV1,TCP/IP传输可以卸载对于IPv4较大TCP数据包(最多64K)的分段(segmentation)负载。LSOV2接口是对LSOV1的一个增强版本,它支持IPv6,IPv4,并且对于较大TCP数据包的分段支持可以超过64K。
所以,根据名称来判断,IPv4 Large send offload是LSOV1的版本。
===================================我是懒惰的分隔线================================
发现问题的过程很简单,当我Ping服务器名称时,得到了下面的结果:
看起来有些奇怪,实际上现在的Ping使用的是IPv6的Ping,而不是IPv4下的Ping,也就是说现在所看到的Ping的结果,是通过IPv6协议得到的结果。为了确认这一点,我使用Microsoft
Network Monitor进行了数据包抓取,当使用IP地址连接时,得到以下数据包示例
Frame:
+ Ethernet: Etype = Internet IP (IPv4)
+ Ipv4: Next Protocol = TCP, Packet ID = 15510, Total IP Length =
154
+ Tcp: Flags=...PA..., SrcPort=63136, DstPort=MS WBT Server(3389),
Len=114, Seq=1243821551 - 1243821665, Ack=554923188, Win=64221
(scale factor not found)
RDP:
而当使用机器名进行连接时,得到以下数据包示例
Frame:
+ Ethernet: Etype = Internet IP (IPv4)
+ Ipv4: Next Protocol = IPv6 over IPv4, Packet ID = 17291, Total IP
Length = 192
+ Ipv6: Next Protocol = TCP, Payload Length = 132
+ Tcp: Flags=...PA..., SrcPort=63210, DstPort=MS WBT Server(3389),
Len=112, Seq=526046828 - 526046940, Ack=2299961791, Win=16465
(scale factor not found)
RDP:
虽然帧类型还是IPv4但它这际上封装的是IPv6数据包,估计IPv4 Large send
offload不会应用在这种数据包上,所以就能正常连接服务器了。
说白了,并非出现了不可思议的情况,而是因为使用了另一种数据传输方式所以绕过了会出错的处理途径。