使用TCP / IP协议,在客户端和服务器之间建立连接,客户端发送到服务器的数据包是否始终按照它们发送的顺序接收?
例如,如果客户端发送3个数据包A,B和C,服务器将始终首先接收A,然后是B和C,或者服务器是否可以先接收C,然后是A和B ?
答案 0 :(得分:5)
在IP级别,数据包可能以任何顺序到达(如果它们到达)。在TCP级别,数据流保证在两端以相同方式排序。
这意味着是的,服务器将始终接收A然后接收B然后接收C 。只要您使用TCP。
答案 1 :(得分:3)
TCP是一种传输协议,它通过在底层IP网络上以IP数据包发送数据来传输数据。 TCP负责确保数据的正确传输,包括对到达的数据包进行排序,重新请求丢失的数据包以及丢弃重复的数据。
TCP本身不会向用户公开任何“数据包”的概念;数据被分成IP分组的事实是“over IP”实现的细节。不同的实现,例如TCP-over-bicycle-courier可能采用完全不同的方案。
答案 2 :(得分:3)
使用TCP时,目标应用程序以与源应用程序发送的顺序相同的顺序接收数据。
有关详细信息,请参阅以下内容:
http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Data_transfer
答案 3 :(得分:2)
通过TCP套接字在应用程序端以不同顺序接收数据是不可能的。
可能会发生操作系统的网络层以不同的顺序接收数据包,但TCP要求上层按顺序获取数据。操作系统的角色是再次询问未接收的碎片等并组装这些碎片。所以,你不必担心。
另一方面,UDP没有提供这样的保证。答案 4 :(得分:0)
服务器(作为机器的物理网卡)可能以任何顺序接收它们。您的操作系统可能会再次以任何顺序接收它们 - 这主要是(但不是总体而言)是物理接收的顺序。您的客户端应用程序保证以正确的顺序接收它们,这是TCP的属性
答案 5 :(得分:0)
通常,数据包的接收顺序与传输顺序相同。但网络可能会丢弃或重新排序数据包。例如,数据包可能采用不同的路由并且无序到达。数据包可能会丢失甚至在网络上重复。 TCP实现负责重传丢失的数据包,确认接收的数据包,忽略重复的数据包,所有这些都是为了在接收器处准确地重建传输的字节流。
在应用程序级别,您发送字节流并接收字节流。无论网络上的数据包发生了什么,TCP都会尽力确保接收到的字节流与发送的字节流相同。