TCP协议通过哪些差错检验和纠正方法来保证传输的可靠性
TCP提供一种面向连接的、可靠的字节流服务。 面向连接:意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。TCP通过下列方式来提供可靠性:1、应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。(将数据截断为合理的长度)2、当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 (超时重发)3、当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒 。 (对于收到的请求,给出确认响应)(之所以推迟,可能是要对包做完整校验)4、 TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。(校验出包有错,丢弃报文段,不给出响应,TCP发送数据端,超时时会重发数据)5、既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。(对失序数据进行重新排序,然后才交给应用层)6、既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。(对于重复数据,能够丢弃重复数据)7、TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。(TCP可以进行流量控制,防止较快主机致使较慢主机的缓冲区溢出)TCP使用的流量控制协议是可变大小的滑动窗口协议。字节流服务::两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。我们将这称为字节流服务(bytestreamservice)。TCP对字节流的内容不作任何解释:: TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。

TCP检验和怎么计算,16位二进制数,怎么从高16位加到低16位,请问这个计算过程,谢谢
TCP校验和是一个端到端的校验和,由发送端计算,然后由接收端验证。其目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到校验和有差错,则TCP段会被直接丢弃。TCP校验和覆盖TCP首部和TCP数据,而IP首部中的校验和只覆盖IP的首部,不覆盖IP数据报中的任何数据。TCP的校验和是必需的,而UDP的校验和是可选的。TCP和UDP计算校验和时,都要加上一个12字节的伪首部。伪首部共有12字节,包含如下信息:源IP地址、目的IP地址、保留字节(置0)、传输层协议号(TCP是6)、TCP报文长度(报头+数据)。伪首部是为了增加TCP校验和的检错能力:如检查TCP报文是否收错了(目的IP地址)、传输层协议是否选对了(传输层协议号)等。首先,把伪首部、TCP报头、TCP数据分为16位的字,如果总长度为奇数个字节,则在最后增添一个位都为0的字节。把TCP报头中的校验和字段置为0(否则就陷入鸡生蛋还是蛋生鸡的问题)。其次,用反码相加法累加所有的16位字(进位也要累加)。最后,对计算结果取反,作为TCP的校验和。实现基于2.6.18、x86_64。csum_tcpudp_nofold()按4字节累加伪首部到sum中。[java] view plaincopystatic inline unsigned long csum_tcpudp_nofold (unsigned long saddr, unsigned long daddr,unsigned short len, unsigned short proto,unsigned int sum){asm("addl %1, %0n" /* 累加daddr */"adcl %2, %0n" /* 累加saddr */"adcl %3, %0n" /* 累加len(2字节), proto, 0*/"adcl $0, %0n" /*加上进位 */: "=r" (sum): "g" (daddr), "g" (saddr), "g" ((ntohs(len) << 16) + proto*256), "0" (sum));return sum;}csum_tcpudp_magic()产生最终的校验和。首先,按4字节累加伪首部到sum中。其次,累加sum的低16位、sum的高16位,并且对累加的结果取反。最后,截取sum的高16位,作为校验和。[java] view plaincopystatic inline unsigned short int csum_tcpudp_magic(unsigned long saddr, unsigned long daddr,unsigned short len, unsigned short proto,unsigned int sum){return csum_fold(csum_tcpudp_nofold(saddr, daddr, len, proto, sum));}static inline unsigned int csum_fold(unsigned int sum){__asm__("addl %1, %0n""adcl 0xffff, %0": "=r" (sum): "r" (sum << 16), "0" (sum & 0xffff0000)/* 将sum的低16位,作为寄存器1的高16位,寄存器1的低16位补0。* 将sum的高16位,作为寄存器0的高16位,寄存器0的低16位补0。* 这样,addl %1, %0就累加了sum的高16位和低16位。** 还要考虑进位。如果有进位,adcl 0xfff, %0为:0x1 + 0xffff + %0,寄存器0的高16位加1。* 如果没有进位,adcl 0xffff, %0为:0xffff + %0,对寄存器0的高16位无影响。*/);return (~sum) >> 16; /* 对sum取反,返回它的高16位,作为最终的校验和 */}发送校验[java] view plaincopy#define CHECKSUM_NONE 0 /* 需要由传输层自己计算校验和 */#define CHECKSUM_HW 1 /* 由硬件计算报头和首部的校验和 */#define CHECKSUM_UNNECESSARY 2 /* 表示不需要校验,或者已经成功校验了 */#define CHECKSUM_PARTIAL CHECKSUM_HW#define CHECKSUM_COMPLETE CHECKSUM_HW@tcp_transmit_skb()icsk->icsk_af_ops->send_check(sk, skb->len, skb); /* 计算校验和 */[java] view plaincopyvoid tcp_v4_send_check(struct sock *sk, int len, struct sk_buff *skb){struct inet_sock *inet = inet_sk(sk);struct tcphdr *th = skb->h.th;if (skb->ip_summed == CHECKSUM_HW) {/* 只计算伪首部,TCP报头和TCP数据的累加由硬件完成 */th->check = ~tcp_v4_check(th, len, inet->saddr, inet->daddr, 0);skb->csum = offsetof(struct tcphdr, check); /* 校验和值在TCP首部的偏移 */} else {/* tcp_v4_check累加伪首部,获取最终的校验和。* csum_partial累加TCP报头。* 那么skb->csum应该是TCP数据部分的累加,这是在从用户空间复制时顺便累加的。*/th->check = tcp_v4_check(th, len, inet->saddr, inet->daddr,csum_partial((char *)th, th->doff << 2, skb->csum));}}[java] view plaincopyunsigned csum_partial(const unsigned char *buff, unsigned len, unsigned sum){return add32_with_carry(do_csum(buff, len), sum);}static inline unsigned add32_with_carry(unsigned a, unsigned b){asm("addl %2, %0nt""adcl $0, %0": "=r" (a): "0" (a), "r" (b));return a;}do_csum()用于计算一段内存的校验和,这里用于累加TCP报头。具体计算时用到一些技巧:1. 反码累加时,按16位、32位、64位来累加的效果是一样的。2. 使用内存对齐,减少内存操作的次数。[java] view plaincopystatic __force_inline unsigned do_csum(const unsigned char *buff, unsigned len){unsigned odd, count;unsigned long result = 0;if (unlikely(len == 0))return result;/* 使起始地址为XXX0,接下来可按2字节对齐 */odd = 1 & (unsigned long) buff;if (unlikely(odd)) {result = *buff << 8; /* 因为机器是小端的 */len--;buff++;}count = len >> 1; /* nr of 16-bit words,这里可能余下1字节未算,最后会处理*/if (count) {/* 使起始地址为XX00,接下来可按4字节对齐 */if (2 & (unsigned long) buff) {result += *(unsigned short *)buff;count--;len -= 2;buff += 2;}count >>= 1; /* nr of 32-bit words,这里可能余下2字节未算,最后会处理 */if (count) {unsigned long zero;unsigned count64;/* 使起始地址为X000,接下来可按8字节对齐 */if (4 & (unsigned long)buff) {result += *(unsigned int *)buff;count--;len -= 4;buff += 4;}count >>= 1; /* nr of 64-bit words,这里可能余下4字节未算,最后会处理*//* main loop using 64byte blocks */zero = 0;count64 = count >> 3; /* 64字节的块数,这里可能余下56字节未算,最后会处理 */while (count64) { /* 反码累加所有的64字节块 */asm ("addq 0*8(%[src]), %[res]nt" /* b、w、l、q分别对应8、16、32、64位操作 */"addq 1*8(%[src]), %[res]nt" /* [src]为指定寄存器的别名,效果应该等同于0、1等 */"adcq 2*8(%[src]), %[res]nt""adcq 3*8(%[src]), %[res]nt""adcq 4*8(%[src]), %[res]nt""adcq 5*8(%[src]), %[res]nt""adcq 6*8(%[src]), %[res]nt""adcq 7*8(%[src]), %[res]nt""adcq %[zero], %[res]": [res] "=r" (result): [src] "r" (buff), [zero] "r" (zero), "[res]" (result));buff += 64;count64--;}/* 从这里开始,反序处理之前可能漏算的字节 *//* last upto 7 8byte blocks,前面按8个8字节做计算单位,所以最多可能剩下7个8字节 */count %= 8;while (count) {asm ("addq %1, %0nt""adcq %2, %0n": "=r" (result): "m" (*(unsigned long *)buff), "r" (zero), "0" (result));--count;buff += 8;}/* 带进位累加result的高32位和低32位 */result = add32_with_carry(result>>32, result&0xffffffff);/* 之前始按8字节对齐,可能有4字节剩下 */if (len & 4) {result += *(unsigned int *) buff;buff += 4;}}/* 更早前按4字节对齐,可能有2字节剩下 */if (len & 2) {result += *(unsigned short *) buff;buff += 2;}}/* 最早之前按2字节对齐,可能有1字节剩下 */if (len & 1)result += *buff;/* 再次带进位累加result的高32位和低32位 */result = add32_with_carry(result>>32, result & 0xffffffff);/* 这里涉及到一个技巧,用于处理初始地址为奇数的情况 */if (unlikely(odd)) {result = from32to16(result); /* 累加到result的低16位 *//* result为:0 0 a b* 然后交换a和b,result变为:0 0 b a*/result = ((result >> 8) & 0xff) | ((result & oxff) << 8);}return result; /* 返回result的低32位 */}[java] view plaincopystatic inline unsigned short from32to16(unsigned a){unsigned short b = a >> 16;asm ("addw %w2, %w0nt""adcw $0, %w0n": "=r" (b): "0" (b), "r" (a));return b;}csum_partial_copy_from_user()用于拷贝用户空间数据到内核空间,同时计算用户数据的校验和,结果保存到skb->csum中(X86_64)。[java] view plaincopy/*** csum_partial_copy_from_user - Copy and checksum from user space.* @src: source address (user space)* @dst: destination address* @len: number of bytes to be copied.* @isum: initial sum that is added into the result (32bit unfolded)* @errp: set to -EFAULT for an bad source address.** Returns an 32bit unfolded checksum of the buffer.* src and dst are best aligned to 64bits.*/unsigned int csum_partial_copy_from_user(const unsigned char __user *src,unsigned char *dst, int len, unsigned int isum, int *errp){might_sleep();*errp = 0;if (likely(access_ok(VERIFY_READ, src, len))) {/* Why 6, not 7? To handle odd addresses aligned we would need to do considerable* complications to fix the checksum which is defined as an 16bit accumulator. The fix* alignment code is primarily for performance compatibility with 32bit and that will handle* odd addresses slowly too.* 处理X010、X100、X110的起始地址。不处理X001,因为这会使复杂度大增加。*/if (unlikely((unsigned long)src & 6)) {while (((unsigned long)src & 6) && len >= 2) {__u16 val16;*errp = __get_user(val16, (__u16 __user *)src);if (*errp)return isum;*(__u16 *)dst = val16;isum = add32_with_carry(isum, val16);src += 2;dst += 2;len -= 2;}}/* 计算函数是用纯汇编实现的,应该是因为效率吧 */isum = csum_parial_copy_generic((__force void *)src, dst, len, isum, errp, NULL);if (likely(*errp == 0))return isum; /* 成功 */}*errp = -EFAULT;memset(dst, 0, len);return isum;}上述的实现比较复杂,来看下最简单的csum_partial_copy_from_user()实现(um)。[java] view plaincopyunsigned int csum_partial_copy_from_user(const unsigned char *src,unsigned char *dst, int len, int sum,int *err_ptr){if (copy_from_user(dst, src, len)) { /* 拷贝用户空间数据到内核空间 */*err_ptr = -EFAULT; /* bad address */return (-1);}return csum_partial(dst, len, sum); /* 计算用户数据的校验和,会存到skb->csum中 */}

tcp 硬件校验和ipv4选择关闭?
操作步骤如下:1、点击开始,点击运行,输入devmgmt.msc,点击确定;2、点击展开网络适配器,双击要设置的网卡;3、点击高级选项卡,左侧点击硬件校验的选项,右侧值修改为关闭,最后点击确定即可。崔根筋搭错 | 网络推广员 | 发布于2017-11-22举报| 评论0 0自动关闭 Gigabit (省电) 进入省电操作模式,驱动程序可藉由网络线的插拔自动关闭Gigabit联接模式。. 选项 说明 关闭 关闭自动关闭Gigabit联接(默认值) 重新联接, 电池 当使用电池时,网络线插拔时,自动关闭Gigabit联接模式 重新联接, 电池或 AC 网络线插拔时,自动关闭Gigabit联接模式 注意: RTL8101E、RTL8102E及RTL8139系列网络卡为10/100 Mbps,所以并不支持Gigabit的联接速度。 自动关闭 PCIe (省电) 设置此选项可进入网络控制器省电模式设置此选项可进入网路卡省电模式 选项 说明 关闭 关闭自动关闭PCIe (省电) 开启, 电池 当使用电池且网络线未插入时,自动关闭PCIe连接 开启, 电池或 AC 当使用电池或AC且网络线未插入时,自动关闭PCIe连接 自动关闭 PHY (省电) 设置此选项可进入网络控制器省电模式 选项 说明 关闭 关闭自动关闭PHY (省电) 开启, 电池 当使用电池且网络线未插入时,自动关闭PHY连接 开启, 电池或 AC 当使用电池或AC且网络线未插入时,自动关闭PHY连接 流控制 允许暂时停止传输数据包以适应接收端速度 选项 说明 开启 开启流控制 (默认值) 关闭 关闭流控制 据说开流控制会导致掉线,关掉吧 中断调整 根据网络的流量状况,动态调整发起处理器中断的频率 选项 说明 开启 开启中断调整合适化 (默认值) 关闭 关闭中断调整合适化 关吧 IPv4 硬件校验和 设置硬件加速IPv4校验和 选项 说明 关闭 关闭硬件加速IPv4校验和 Rx & Tx 开启 启用硬件加速接收端和传输端IPv4校验和(默认值) Rx 开启 启用硬件加速接收端IPv4校验和 Tx 开启 启用硬件加速传输端IPv4校验和 据说很多程序因为网卡校验和问题造成连接问题,关吧,话说校验还是cpu来吧,关。 802.1Q/1p 虚拟网络标签 IEEE 802.1Q帧信息用以表示每一个帧的优先级和其所属的虚拟局域网,设置这个选项可以启用硬件加速优先级帧传输和加入虚拟局域网识别标签。 选项 说明 开启 启用优先级传输和虚拟局域网 关闭 禁用优先级传输和虚拟局域网 (默认值) 大量传送减负 (IPv4) 设置网络控制器硬件加速IPv4数据包切割功能 选项 说明 开启 开启IPv4大量传送减负 (默认值) 关闭 关闭IPv4大量传送减负 大量传送减负是用网卡硬件分割TCP数据包,但其实只有关闭它才可以发挥网卡的真正性能,cpu占用率会提升,但不明显。网络处理速度会快一些。 这个一定要关,比如xp mode和win7主机局域网传文件慢就是这个造成的 大量传送减负 (IPv6) 设置网络控制器硬件加速IPv6数据包切割功能 选项 说明 开启 开启IPv6大量传送减负 (默认值) 关闭 关闭IPv6大量传送减负 这个一定要关,比如xp mode和win7主机局域网传文件慢就是这个造成的 巨型帧 Ethernet的数据最大传输单元定义为1500字节,数据长度大于1500字节封包即称为巨型帧,此选项可以调整Ethernet封包内所带数据的长度 选项 说明 2KB 最大传输单元 设置巨型帧为2K字节 3KB 最大传输单元 设置巨型帧为3K字节 4KB 最大传输单元 设置巨型帧为4K字节 5KB 最大传输单元 设置巨型帧为5K字节 6KB 最大传输单元 设置巨型帧为6K字节 7KB 最大传输单元 设置巨型帧为7K字节 8KB 最大传输单元 设置巨型帧为8K字节 9KB 最大传输单元 设置巨型帧为9K字节 关闭 禁用巨型帧(默认值) 注意: 启用巨型帧选项,网络控制器另一端所连接的网络设备也需支持巨型帧 关吧,网卡支持巨型帧但路由器不支持巨型帧白搭。 网络地址 改变网络控制器MAC地址 默认值:不存在 优先级和VLAN IEEE 802.1Q数据包信息用以表示每一个数据包的优先级和其所属的虚拟局域网,设置这个选项可以启用硬件加速优先级数据包传输或加入虚拟局域网识别标志 选项 说明 优先级 & VLAN 关闭 关闭优先级传输和虚拟局域网 优先级 & VLAN 开启 开启优先级传输和虚拟局域网 (默认值) 优先级开启 开机优先级传输 VLAN 开启 开启虚拟局域网硬件标志功能 接收端缓冲区 设置接收端缓冲区 选项 范围 缓冲区大小 1~512 (默认值:512) 开最大。 接收端调整 接收端调整(Received Side Scaling, RSS)是一种动态指派多核心处理器接收数据包的负载均衡机制,借由调整多核心处理器处理接收数据包以达到多核心系统的处理器负载均衡。 选项 说明 开启 开启接收端调整 (默认值) 关闭 关闭接收端调整 注意: RTL8168C及RTL8102E系列网络控制器才支持接收端调整。 关机网络唤醒 设置关机后可从网络唤醒 选项 说明 开启 开机关机后网络唤醒 关闭 关闭关机后网络唤醒(默认值) 连接速度/双工模式 切换连接速度和双工模式 选项 说明 自动侦测 自动侦测连接网络的连接速度和双工模式(默认值) 10Mbps半双工 设置为 10Mbps半双工连接模式 10Mbps全双工 设置为 10Mbps全双工连接模式 100Mbps半双工 设置为 100Mbps半双工连接模式 100Mbps全双工 设置为100Mbps全双工连接模式 1000Mbps全双工 设置为1000Mbps全双工连接模式 (*) 注意: RTL8101E、RTL8102E及RTL8139系列网络控制器为10/100 Mbps,所以并不支持1000 Mbps的连接速度。 TCP 硬件校验和 (IPv4) 设置硬件加速TCP校验和 (IPv4) 选项 说明 关闭 关闭硬件加速TCP校验和(IPv4) Rx & Tx 开启 启用硬件加速接收端及传输端TCP校验和(IPv4)(默认值) Rx 开启 启用硬件加速接收端TCP校验和(IPv4) Tx 开启 启用硬件加速传输端TCP校验和 (IPv4) 据说很多程序因为网卡校验和问题造成连接问题,关吧,话说校验还是cpu来吧,关。 TCP 硬件校验和 (IPv6) 设置硬件加速TCP校验和 (IPv6) 选项 说明 关闭 关闭硬件加速TCP校验和(IPv6) Rx & Tx 开启 启用硬件加速接收端及传输端TCP校验和(IPv6)(默认值) Rx 开启 启用硬件加速接收端TCP校验和(IPv6) Tx 开启 启用硬件加速传输端TCP校验和(IPv6) 据说很多程序因为网卡校验和问题造成连接问题,关吧,话说校验还是cpu来吧,关。 传送缓冲区 设置传送缓冲区 选项 范围 缓冲区大小 1~128 (默认值:128) 最大 UDP 硬件校验和 (IPv4) 设置硬件加速UDP校验和 (IPv4) 选项 说明 关闭 关闭硬件加速UDP校验和(IPv4) Rx & Tx 开启 启用硬件加速接收端及传输端UDP校验和(IPv4)(默认值) Rx 开启 启用硬件加速接收端UDP校验和(IPv4) Tx 开启 启用硬件加速传输端UDP校验和(IPv4) 据说很多程序因为网卡校验和问题造成连接问题,关吧,话说校验还是cpu来吧,关。 UDP 硬件校验和 (IPv6) 设置硬件加速UDP校验和 (IPv6) 选项 说明 关闭 关闭硬件加速UDP校验和(IPv6) Rx & Tx 开启 启用硬件加速接收端及传输端UDP校验和(IPv6)(默认值) Rx 开启 启用硬件加速接收端UDP校验和(IPv6) Tx 开启 启用硬件加速传输端UDP校验和(IPv6)
操作步骤如下:1、点击开始,点击运行,输入devmgmt.msc,点击确定;2、点击展开网络适配器,双击要设置的网卡;3、点击高级选项卡,左侧点击硬件校验的选项,右侧值修改为关闭,最后点击确定即可。
1-进入系统以后,打开控制面板找到设备管理器图标进入:找到网卡如下:2-选择右键属性打开:如下点击高级找到默认是tcp 硬件校验和ipv4 右边值默认:RX TX开启的,3-点击下拉选择关闭,最后确定就是关闭。
自动关闭 Gigabit (省电) 进入省电操作模式,驱动程序可藉由网络线的插拔自动关闭Gigabit联接模式。. 选项说明 关闭关闭自动关闭Gigabit联接(默认值) 重新联接, 电池当使用电池时,网络线插拔时,自动关闭Gigabit联接模式 重新联接, 电池或 AC 网络线插拔时,自动关闭Gigabit联接模式 注意: RTL8101E、RTL8102E及RTL8139系列网络卡为10/100 Mbps,所以并不支持Gigabit的联接速度。 自动关闭 PCIe (省电) 设置此选项可进入网络控制器省电模式设置此选项可进入网路卡省电模式 选项说明 关闭关闭自动关闭PCIe (省电) 开启, 电池当使用电池且网络线未插入时,自动关闭PCIe连接 开启, 电池或 AC当使用电池或AC且网络线未插入时,自动关闭PCIe连接 自动关闭 PHY (省电) 设置此选项可进入网络控制器省电模式 选项说明 关闭关闭自动关闭PHY (省电) 开启, 电池当使用电池且网络线未插入时,自动关闭PHY连接 开启, 电池或 AC当使用电池或AC且网络线未插入时,自动关闭PHY连接 流控制 允许暂时停止传输数据包以适应接收端速度 选项说明 开启开启流控制 (默认值) 关闭关闭流控制 据说开流控制会导致掉线,关掉吧 中断调整 根据网络的流量状况,动态调整发起处理器中断的频率 选项说明 开启开启中断调整合适化 (默认值) 关闭关闭中断调整合适化 关吧IPv4 硬件校验和 设置硬件加速IPv4校验和 选项说明 关闭关闭硬件加速IPv4校验和 Rx & Tx 开启启用硬件加速接收端和传输端IPv4校验和(默认值) Rx 开启启用硬件加速接收端IPv4校验和 Tx 开启启用硬件加速传输端IPv4校验和 据说很多程序因为网卡校验和问题造成连接问题,关吧,话说校验还是cpu来吧,关。 802.1Q/1p 虚拟网络标签 IEEE 802.1Q帧信息用以表示每一个帧的优先级和其所属的虚拟局域网,设置这个选项可以启用硬件加速优先级帧传输和加入虚拟局域网识别标签。 选项说明 开启启用优先级传输和虚拟局域网 关闭禁用优先级传输和虚拟局域网 (默认值) 大量传送减负 (IPv4) 设置网络控制器硬件加速IPv4数据包切割功能 选项说明 开启开启IPv4大量传送减负 (默认值) 关闭关闭IPv4大量传送减负 大量传送减负是用网卡硬件分割TCP数据包,但其实只有关闭它才可以发挥网卡的真正性能,cpu占用率会提升,但不明显。网络处理速度会快一些。 这个一定要关,比如xp mode和win7主机局域网传文件慢就是这个造成的 大量传送减负 (IPv6) 设置网络控制器硬件加速IPv6数据包切割功能 选项说明 开启开启IPv6大量传送减负 (默认值) 关闭关闭IPv6大量传送减负 这个一定要关,比如xp mode和win7主机局域网传文件慢就是这个造成的巨型帧 Ethernet的数据最大传输单元定义为1500字节,数据长度大于1500字节封包即称为巨型帧,此选项可以调整Ethernet封包内所带数据的长度 选项说明 2KB 最大传输单元设置巨型帧为2K字节 3KB 最大传输单元设置巨型帧为3K字节 4KB 最大传输单元设置巨型帧为4K字节 5KB 最大传输单元设置巨型帧为5K字节 6KB 最大传输单元设置巨型帧为6K字节 7KB 最大传输单元设置巨型帧为7K字节 8KB 最大传输单元设置巨型帧为8K字节 9KB 最大传输单元设置巨型帧为9K字节 关闭禁用巨型帧(默认值) 注意: 启用巨型帧选项,网络控制器另一端所连接的网络设备也需支持巨型帧 关吧,网卡支持巨型帧但路由器不支持巨型帧白搭。 网络地址 改变网络控制器MAC地址 默认值:不存在 优先级和VLAN IEEE 802.1Q数据包信息用以表示每一个数据包的优先级和其所属的虚拟局域网,设置这个选项可以启用硬件加速优先级数据包传输或加入虚拟局域网识别标志 选项说明 优先级 & VLAN 关闭关闭优先级传输和虚拟局域网 优先级 & VLAN 开启开启优先级传输和虚拟局域网 (默认值) 优先级开启开机优先级传输 VLAN 开启开启虚拟局域网硬件标志功能 接收端缓冲区 设置接收端缓冲区 选项范围 缓冲区大小1~512 (默认值:512) 开最大。 接收端调整 接收端调整(Received Side Scaling, RSS)是一种动态指派多核心处理器接收数据包的负载均衡机制,借由调整多核心处理器处理接收数据包以达到多核心系统的处理器负载均衡。 选项说明 开启开启接收端调整 (默认值) 关闭关闭接收端调整 注意: RTL8168C及RTL8102E系列网络控制器才支持接收端调整。 关机网络唤醒 设置关机后可从网络唤醒 选项说明 开启开机关机后网络唤醒 关闭关闭关机后网络唤醒(默认值) 连接速度/双工模式 切换连接速度和双工模式 选项说明 自动侦测自动侦测连接网络的连接速度和双工模式(默认值) 10Mbps半双工设置为 10Mbps半双工连接模式 10Mbps全双工设置为 10Mbps全双工连接模式 100Mbps半双工设置为 100Mbps半双工连接模式 100Mbps全双工设置为100Mbps全双工连接模式 1000Mbps全双工设置为1000Mbps全双工连接模式 (*) 注意: RTL8101E、RTL8102E及RTL8139系列网络控制器为10/100 Mbps,所以并不支持1000 Mbps的连接速度。 TCP 硬件校验和 (IPv4) 设置硬件加速TCP校验和 (IPv4) 选项说明 关闭关闭硬件加速TCP校验和(IPv4) Rx & Tx 开启启用硬件加速接收端及传输端TCP校验和(IPv4)(默认值) Rx 开启启用硬件加速接收端TCP校验和(IPv4) Tx 开启启用硬件加速传输端TCP校验和 (IPv4) 据说很多程序因为网卡校验和问题造成连接问题,关吧,话说校验还是cpu来吧,关。 TCP 硬件校验和 (IPv6) 设置硬件加速TCP校验和 (IPv6) 选项说明 关闭关闭硬件加速TCP校验和(IPv6) Rx & Tx 开启启用硬件加速接收端及传输端TCP校验和(IPv6)(默认值) Rx 开启启用硬件加速接收端TCP校验和(IPv6) Tx 开启启用硬件加速传输端TCP校验和(IPv6) 据说很多程序因为网卡校验和问题造成连接问题,关吧,话说校验还是cpu来吧,关。 传送缓冲区 设置传送缓冲区 选项范围 缓冲区大小1~128 (默认值:128) 最大 UDP 硬件校验和 (IPv4) 设置硬件加速UDP校验和 (IPv4) 选项说明 关闭关闭硬件加速UDP校验和(IPv4) Rx & Tx 开启启用硬件加速接收端及传输端UDP校验和(IPv4)(默认值) Rx 开启启用硬件加速接收端UDP校验和(IPv4) Tx 开启启用硬件加速传输端UDP校验和(IPv4) 据说很多程序因为网卡校验和问题造成连接问题,关吧,话说校验还是cpu来吧,关。 UDP 硬件校验和 (IPv6) 设置硬件加速UDP校验和 (IPv6) 选项说明 关闭关闭硬件加速UDP校验和(IPv6) Rx & Tx 开启启用硬件加速接收端及传输端UDP校验和(IPv6)(默认值) Rx 开启启用硬件加速接收端UDP校验和(IPv6) Tx 开启启用硬件加速传输端UDP校验和(IPv6)
TCP 硬件校验和 (IPv4) 设置硬件加速TCP校验和 (IPv4) 选项说明关闭关闭硬件加速TCP校验和(IPv4)Rx & Tx 开启启用硬件加速接收端及传输端TCP校验和(IPv4)(默认值)Rx 开启启用硬件加速接收端TCP校验和(IPv4)Tx 开启启用硬件加速传输端TCP校验和 (IPv4) 据说很多程序因为网卡校验和问题造成连接问题,关吧,话说校验还是cpu来吧,关。

tcp/ip数据需要校验吗
首先,IP、ICMP、UDP和TCP报文头部都有校验和字段,大小都是16bit,算法也基本一样: 在发送数据时,为了计算数据包的校验和。应该按如下步骤: (1)把校验和字段置为0; (2)把需校验的数据看成以16位为单位的数字组成,依次进行二进制反码求和; (3)把得到的结果存入校验和字段中。 在接收数据时,计算数据包的校验和相对简单,按如下步骤: (1)把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段; (2)检查计算出的校验和的结果是否为0; (3)如果等于0,说明被整除,校验是和正确。否则,校验和就是错误的,协议栈要抛弃这个数据包。 虽然上面四种报文的校验和算法一样,但在作用范围存在不同:IP校验和只校验20字节的IP报头;而ICMP校验和覆盖整个报文(ICMP报头+ICMP数据);UDP和TCP校验和不仅覆盖整个报文,而且还有12字节的IP伪首部,包括源IP地址(4字节)、目的IP地址(4字节)、协议(2字节,第一字节补0)和TCP/UDP包长(2字节)。另外UDP、TCP数据报的长度可以为奇数字节,所以在计算校验和时需要在最后增加填充字节0(注意,填

TCP协议中校验和错误是什么意思?
信号传输过程中出错了,导致发送方发送的校验和跟接受方计算出的校验和不一致,从而出现错误

本文由 在线网速测试 整理编辑,转载请注明出处。