Chinaunix

标题: 请问:UDP和TCP包中的数据在什么地方 [打印本页]

作者: netdoger    时间: 2009-05-13 15:47
标题: 请问:UDP和TCP包中的数据在什么地方
我取出了IP包,并判断出该包为UDP或TCP包,我想问:UPD包头的长度是8个字节,TCP的包头是28个字节码?
我知道IP包头是20个字节,那么
是不是UDP中的数据是从第29 个开始,TCP中的数据是从49个自己开始取呢?
另外:这是数据要转换成主机顺序吗?如果要,是用ntohs还是用ntohl呢?
还有有汉字怎么办?
作者: xinglp    时间: 2009-05-13 15:49
汉字是内容了
作者: llxxtnt    时间: 2009-05-13 16:46
udp头长8byte
ip头长在ip头中定义,最短20byte
tcp头长在tcp头中定义,最短也是20byte
作者: netdoger    时间: 2009-05-13 16:52
标题: 回复 #3 llxxtnt 的帖子
能具体说说吗?另:它们是需要转换成主机顺序吗
作者: llxxtnt    时间: 2009-05-13 17:07
对,要转换成主机字节序

具体见rfc791和rfc793
作者: netdoger    时间: 2009-05-13 17:16
标题: 回复 #5 llxxtnt 的帖子
都是英文的,你能简单说下吗?就是说用哪个函数转换,是ntohs还是ntohl呢?
作者: net_robber    时间: 2009-05-13 17:40
ntohs=network to host short
htons=host to network short
作者: llxxtnt    时间: 2009-05-13 18:41
标题: 回复 #6 netdoger 的帖子
我又仔细的看了一下,貌似不需要转字节序
定义包头长度的字段是4bit
我记得那两个文档上有图,比较一目了然,你直接看那个图就好了
这个说是说不清楚的

[ 本帖最后由 llxxtnt 于 2009-5-13 18:42 编辑 ]
作者: netdoger    时间: 2009-05-13 18:50
标题: 回复 #8 llxxtnt 的帖子
这些协议有中文版的吗?如有,在哪里可以查到
作者: gawk    时间: 2009-05-13 19:51
上网搜一下,我记得以前我有中文版的
作者: bittertea    时间: 2009-05-15 00:15
实际数据是否转换为主机字节序 完全取决于你(应用)协议的设计,  一般基于二进制的应用协议(也包括TCP/UDP/IP)中如果协议数据内包含长度的话, 如TLV那种格式, 都是把包中的长度转换为网络字节序的(big-endian),  即最高有效位先传输,  以便我们在数据接收不完全的情况下能计算(估算)出实际长度(范围),  不过如果你不对二进制的实际长度进行字节序转换就拷贝到数据包中, 那就跟你的主机字节序相关了, 如intel x86是little-endian, 服务器专用CPU 如sparc, 安腾一般都是bigendian的




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2