使用TCUDP协议校验的数据是?干活,需要校验位吗

144 条评论分享收藏感谢收起academic.research.microsoft.com/Paper/22436.aspx单纯的size + data可能导致传输数据的错误,而且不一定能发现那么size + data + check呢?不要##吼不吼啊?确实可以,但是我举几个最简单的例子,你考虑一下size出现偏差的情况。看你程序的结构和具体情况吧,有几种结果,比如你做了判断,发现size && MAX_SIZE,然后你切断连接然后等客户端重连…… 比如你没做判断,就在那傻等,对面也在等你,然后你有个timeout然后切断重连…… 或者是个实时性和可靠性都有一些要求的应用,比如游戏之类的,你啥都不知道在那狂吃后面的数据,当然多吃一个都不行啊,回不来了,吃完发现check过不了,然后玩家一看duang地回档掉线重连了…… 。加个##的话,出了错误一方面好发现,另一方面能控制一下损失…… 但是你仔细一想,这样搞也有点麻烦啊,到底合不合算呀…… 所以,除了简单地加个##,然后处理一下会遇到的别的麻烦事之外,也有别的搞法,算法上做处理或者是别的设计之类的……不过这些额…… 你可以去看看那些比较成熟的协议是怎么干的嘛,毕竟是具体要求的情况才有得分析才有意义,我就不在这里废话了。也就是说,如果你什么别的都不做,在一些情况下,单纯的 size + data 的做法不一定那么适用就这么简单啦。你总要有一些办法来防止各种各样的问题。用他的话总结来说一个协议的命运啊,不仅要看自身的设计,还要考虑到历史的行程。赞同 71 条评论分享收藏感谢收起tcp接口对接中16进制报文中需要一个CRC,怎么计算呢
[问题点数:40分,结帖人lig125]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
匿名用户不能发表回复!|
其他相关推荐&>&TCP_IP协议的校验和计算源码
TCP_IP协议的校验和计算源码
上传大小:469B
TCP_IP协议的校验和计算源代码
TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。
综合评分:4
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有12条
我也是醉了,我要TCP,你弄个什么玩意,Ip放这里。
很好用,测试成功了。
看样子很好用,学校实验要用,我试试_(:з」∠)_
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
TCP_IP协议的校验和计算源码
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*投诉人姓名:
*投诉人联系方式:
*版权证明:
*详细原因:
TCP_IP协议的校验和计算源码下次自动登录
现在的位置:
& 综合 & 正文
IP、ICMP、UDP、TCP 校验和算法
以前看计算机网络相关的书,每次看到IP或者UDP报头校验和时,都一瞥而过,以为相当简单,不就是16bit数据的相加吗。最近在研究《TCP/IP详解 卷1:协议》这本书,看到校验和是16bit字的二进制反码和(晕,以前都没注意原来是反码和,看来以前看书不仔细啊!罪过,罪过~~),觉得很奇怪,为什么会用反码和,而不是直接求和呢?(因为我认为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(注意,填充字节只是为了计算校验和,可以不被传送)。
这里还要提一点,UDP的校验和是可选的,当校验和字段为0时,表明该UDP报文未使用校验和,接收方就不需要校验和检查了!那如果UDP校验和的计算结果是0时怎么办呢?书上有这么一句话:“如果校验和的计算结果为0,则存入的值为全1(65535),这在二进制反码计算中是等效的。”
讲了这么多,那这个校验和到底是怎么算的呢?
1. 什么是二进制反码求和
对一个无符号的数,先求其反码,然后从低位到高位,按位相加,有溢出则向高位进1(跟一般的二进制加法规则一样),若最高位有进位,则向最低位进1。
首先这里的反码好像跟我们以前学的有符号数的反码不一样(即正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各位取反),这里不分正负数,直接每个位都取反!
上面加粗的那句是跟我们一般的加法规则不太一样的地方:最高位有进位,则向最低位进1。确实有些疑惑,为什么要这样做呢?仔细分析一下(为了方便说明,以 4bit二进制反码求和举例),上面的这种操作,使得在发生加法进位溢出时,溢出的值并不是10000,而是1111。也即是当相加结果满1111时溢出,这样也可以说明为什么都表示0了(你同样可以发现,任何数与这两个数做二进制反码求和运算结果都是原数,这恰好符合数0的加法意义)。
下面再举例两种二进制反码求和的运算:
原码加法运算
反码加法运算
3(0011)+ 5(0101)= 8(1000)
3(1100)+
5(1010)=
8(1000)+ 9(1001)= 1(0001)
8(0111)+
9(0110)=
从上面两个例子可以看出,当加法未发生溢出时,原码与反码加法运算结果一样;当有溢出时,结果就不一样了,原码是满10000溢出,而反码是满1111溢 出,所以相差正好是1。举例只是为了形象地观察二进制反码求和的运算规则,至于为什么要定义这样的规则以及该运算规则还存在其它什么特性,可能就需要涉及
代数理论的东西的了(呜呜~~数学理论没学好啊,只能从表面上分析分析)。
另外关于二进制反码求和运算需要说明的一点是,先取反后相加与先相加后取反,得到的结果是一样的!(事实上我们的编程算法里,几乎都是先相加后取反。)
2. 校验和算法的实现
讲了什么是二进制反码求和,那么校验和的算法实现就简单多了。废话少说,直接上代码:
USHORT checksum(USHORT *buffer,int size)
unsigned long cksum=0;
while(size&1)
cksum+=*buffer++;
size-=sizeof(USHORT);
cksum+=*(UCHAR *)
while (cksum&&16)
cksum=(cksum&&16)+(cksum & 0xffff);
return (USHORT) (~cksum);
buffer是指向需校验数据缓存区的指针,size是需校验数据的总长度(字节为单位)
4~13行代码对数据按16bit累加求和,由于最高位的进位需要加在最低位上,所以cksum必须是32bit的unsigned long型,高16bit用于保存累加过程中的进位;另外代码10~13行是对size为奇数情况的处理!
14~16行代码的作用是将cksum高16bit的值加到低16bit上,即把累加中最高位的进位加到最低位上。这里使用了while循环,判断cksum高16bit是否非零,因为第16行代码执行的时候,仍可能向cksum的高16bit进位。
有些地方是通过下面两条代码实现的:
cksum = (cksum && 16) + (cksum & 0xffff); cksum += (cksum &&16);
这里只进行了两次相加,即可保证相加后cksum的高16位为0,两种方式的效果一样。事实上,上面的循环也最多执行两次!
17行代码即对16bit数据累加的结果取反,得到二进制反码求和的结果,然后函数返回该值。
3. 为什么使用二进制反码求和呢?
好了,最后一个问题,为什么要使用二进制反码来计算校验和呢,而不是直接使用原码或者补码?
这个问题我想了很久,由于水平有限实在弄不明白,于是在百度上一阵狂搜,什么都没有(不知道是百度不给力,还是大家都不关注这个问题呢?)。果断换google,敲了3个关键词:why
checksum tcp,嘿嘿 结果第二篇就是我想要的文章了!!!
先把链接给大家吧:
这篇文章主要介绍二进制反码求和()与补码求和()的区别,另外还说明了在TCP/IP校验和中使用反码求和的优点。
上面是原文的一部分,说明在TCP/IP校验和中使用反码求和的一些优点:
不依赖系统是大端还是小端。 即无论你是发送方计算或者接收方检查校验和时,都不需要调用htons
或者 ntohs,直接通过上面第2节的算法就可以得到正确的结果。这个问题你可以自己举个例子,用反码求和时,交换16位数的字节顺序,得到的结果相同,只是字节顺序相应地也交换了;而如果使用原码或者补码求和,得到的结果可能就不相同!
b. 计算和验证校验和比较简单,快速。说 实话,这个没怎么看明白,感觉在校验和计算方面,原码或者补码求和反而更简单一些(从C语言角度),在校验和验证上面,通过一样的算法判断结果是否为全
0,确实要方便一些,所以可能从综合考虑确实反码求和要简便一些。另外,IP报文在传输过程中,路由器经常只修改TTL字段(减1),此时路由器转发该报 文时可以直接增加它的校验和,而不需要对IP整个首部进行重新计算。当然,可能从汇编语言的角度看,反码求和还有很多高效的地方,这里就不在深入追究 了~~~
结 语:本来一个不怎么注意的地方,深入探究一下竟然发现这么多东西。学习算法其实没有必要抱着《算法导论》一页一页地啃(嘿嘿,哥也有一本哦),我更喜欢从 TCP/IP协议或LInux内核原理中去探究算法以及实现思想,这样反倒更有趣,而且这里面的一些算法和思想相当经典,慢慢体会,必然受益匪浅!
【上篇】【下篇】您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
tcp协议位于什么层.doc 31页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
tcp协议位于什么层
你可能关注的文档:
··········
··········
tcp协议位于什么层
篇一:第五章:传输层复习题(答案)
第五章:传输层习题集
1.传输层的基本概念:
在 OSI 模型中,提供端到端传输功能的层次是( C )
A.物理层 B .数据链路层 C .传输层 D .应用层
TCP 的主要功能是( B )
A .进行数据分组 B .保证可靠传输 C .确定数据传输路径 D .提高传输速度
3. (90)TCP/IP 模型分为四层,最高两层是应用层、 运输
4. (90)传输层使高层用户看到的就是好像在两个运输层实体之间有一条端
通信通路。
5. (90)运输层位于数据链路层上方(F)
6. (90)传输层是属于网络功能部分,而不是用户功能部分(F)
2.端口的概念:
7. (90)应用层的各种进程通过(B)实现与传输实体的交互
8. (60)传输层与应用层的接口上所设置的端口是一个多少位的地址(B)
A 8位B 16位
9. (90)熟知端口的范围是(C)
A 0~100 B 20~199
10. (90)以下端口为熟知端口的是(C)
11. (90)TCP/IP 网络中,物理地址与网络接口
层有关,逻辑地址与网
际 层有关,端口地址和运输层有关。
12. (90)UDP和TCP都使用了与应用层接口处的端口
与上层的应用进程进
13. (90)在TCP连接中,主动发起连接建立的进程是 客户
14. (90)在TCP连接中,被动等待连接的进程是 服务器
15. (90)一些专门分配给最常用的端口叫
熟知端口 。
16. (60)TCP使用
,而不仅仅是端口来标识一个通信抽象。
17. (20)一个连接由两个端点来标识,这样的端点叫
18. (20)现在常使用
应用编程接口作为传输层与应用层
19. (60)主机中的进程发起一个TCP连接,其源端口可以重复(F)
20. (60)传输层上的连接为了避免通信混乱,所有的端口都不能重复使用(F)
21. (60)解释socket的含义?
答 在传输层的连接中,由两个进程的IP地址和端口组成一个端点,这样的端点叫socket。
22. (20)运输层中,现在较为流行的API有两类,一类是Berkeley socket,另一
类是运输层接口TLI。
3.UDP的特点:
23. (90)传输层上实现不可靠传输的协议是 B
24. (90)欲传输一个短报文,TCP和UDP哪个更快( B )
A.TCP B.UDP C.两个都快
D.不能比较
25. (90)TCP和UDP哪个效率高( B )
A.TCP B.UDPC.两个一样 D.不能比较
26. (90)下述的哪一种协议是不属于TCP/IP模型的协议( D )
A.TCPB.UDP C.ICMP
27. (90)TCP/IP的运输层定义了两个协议,一个是面向连接的协议,称为TCP
。另一个是无连接的协议,称为 UDP协议
28. (90)在TCP/IP层次模型中与OSI参考模型第四层(运输层)相对应的主要协
议有__TCP__和_UDP___,其中后者提供无连接的不可靠传输服务。
29. (60)UDP协议在IP协议的数据报服务的之上增加了 端口
30. (90)UDP是一种可靠、高效的传输协议(F)
31. (60)简要说明TCP与UDP之间的相同与不同点
答 相同点:同处运输层,基于接口;不同点:连接方式,确认重传机制
32. (60)TCP协议与UDP协议各有什么特点?各用在什么情况下?
答 TCP提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接,提供可靠的连接。用于对数据可靠性要求较高的情况;UDP在传送数据之前不需要先建立连接,提供不可靠交付。用于实时要求比较高的情况下
4.*UDP的数据格式:
33. (60)UDP 协议校验的数据是 A
A 首部+伪首部
C 首部+数据
D 伪首部+数据
34. (60)UDP中伪首部的传递方向 C
A 向下传递
B 向上传递
C 既不向下也不向上传递
D 上下两个方向都传递
35. (60)UDP中伪首部中的IP地址内容和编排顺序是 C
A 源IP地址
正在加载中,请稍后...

我要回帖

更多关于 没有合伙协议干活了 的文章

 

随机推荐