首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应否将tcp/udp数据字段转换为网络字节顺序

应否将tcp/udp数据字段转换为网络字节顺序
EN

Stack Overflow用户
提问于 2013-03-21 17:11:17
回答 3查看 3.3K关注 0票数 1

如果机器A和机器B相互通信,但它们的主机字节顺序不同,那么在网络编程中,在发送端,tcp/udp数据字段应该转换为网络字节顺序吗?谢谢!

EN

回答 3

Stack Overflow用户

发布于 2013-03-22 17:48:12

除非您遵循预先存在的规范,否则始终使用网络字节顺序 (又名“大端”)是最安全的:

  • 您需要指定一些字节顺序;您不能仅仅发送二进制数据并希望接收方能够解决它。
  • 由于大端数据是互联网的一个标准,所以有许多工具可以转换为或从主机字节顺序转换。您必须编写自己的工具,才能在主机和小终端之间进行转换。

传统的反对观点是“世界上所有的一个VAX”(或者说今天的x86),它是一个小终端,所以网络字节顺序对数据征收了性能税。也许这在二三十年前是一个有效的论点,但今天肯定不是。您的处理器转换数据所需的时间是跨网络移动该数据所需时间的极小部分。

票数 3
EN

Stack Overflow用户

发布于 2013-03-22 20:41:44

当然,在许多情况下,这是推荐的。为了解释原因,让我们看一个例子:

  1. 您有一个程序,该程序接受32位无符号int,将其放入数据包并发送到另一个主机。
  2. 另一个主机将数据从数据包中取出,并将其存储为32位无符号int。
  3. 发送主机是大端,接收主机是小端。

如果上述示例中的发送主机发送号码1024,则该号码存储在发送主机的计算机上,为0x00000400。如果接收主机在接收这些字节时不更改字节顺序,并将0x00000400存储在内存中,则这将被解释为与1024完全不同的数字。十进制数1024的小末梢表示形式是0x00040000。在一台小终端机器上,0x00000400是小数262,144。

转换为网络字节顺序允许程序依赖于数据的标准编码,以避免混乱,就像我们在上面的例子中看到的那样。接收端的函数将从网络字节顺序转换为它所使用的任何字节顺序,这是容易获得和简单使用的。

票数 0
EN

Stack Overflow用户

发布于 2013-03-22 09:49:38

TCP内置了重新排序接收的数据包的机制.UDP没有,我不知道你所说的“不同的主机字节顺序”是什么意思,但是它接收数据包时有字节级的错误,那就是第二层角色来重新传输这样的数据包。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15553890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档