2009-09-22 27 views
1

我正在从一台PC发送数据包到其他。我正在使用python套接字socket.socket(socket.AF_INET, socket.SOCK_DGRAM )。我们是否需要注意接收数据包的顺序? 在ISO-OSI模型层下的传输层处理所有数据包通信。程序中是否存在所有ISO-OSI图层?或者其中一些出现在操作系统中? 在本地主机上,我按顺序获取所有数据包。 它会对互联网有什么影响吗?Python套接字编程和ISO-OSI模型

+0

为什么AF_INET?为什么限制自己使用旧的IPv4标准?更好地解决地址中的名称并使用AF_INET或AF_INET6,具体取决于您获得的地址。 – bortzmeyer 2009-09-22 09:28:05

回答

2

要回答你的问题直接,如果你使用SOCK_STREAM,那么你实际上是使用TCP,这是确实照顾分组排序和完整性,为您的传输层的实现。所以这听起来就是你想要使用的。 SOCK_DGRAM实际上是UDP,它不会为您处理任何完整性。

我们是否需要注意接收数据包的顺序?在ISO-OSI模型层下的传输层处理所有数据包通信。程序中是否存在所有ISO-OSI图层?

只是为了澄清这件事,在ISO-OSI模型中,传输层把手从一台计算机发送一个分组与其他下面的所有图层,并且不“理解”的概念,数据包排序(它不适用于它们)。

在该模型中,存在另一个层(会话层,传输层以上),其是负责定义会话行为。正是在这个层面上,决定是否采取措施防止重新排序,确保完整性等等。

在现代世界中,ISO-OSI模型更多的是一种理想化的模板,而不是实际的模型。 TCP/IP是几乎无处不在的实际实现。

在TCP/IP中,传输层是具有确定是否有任何会话的行为或不的角色之一。

4

SOCK_DGRAM意味着你要通过UDP发送数据包 - 没有秩序的保证,没有接待保障,没有缺少重复的保证。 SOCK_STREAM意味着TCP - 没有数据包边界保证,但(除非连接丢失;-)保证订单,接收和不重复。 TCP/IP,赢得的每一个心脏和灵魂住practitioned并取得互联网发生的组网模型,是符合ISO/OSI - 在绘图桌设计的,从来没有真正在现实获奖标准世界。

因为她生活和呼吸的互联网一直是TCP/IP。不要依赖在低延迟本地网络上进行的测试,就像在现实世界中会发生什么样的代表一样。欢迎来到现实世界,BTW,祝你好运(你需要一些!)。