本文共 1704 字,大约阅读时间需要 5 分钟。
UDP是面向数据报的简单传输层协议,不需要建立服务器与客户端的连接就能传输数据报,数据报是指从发送方到接收方的一个信息单元。正因为不需要建立连接所以它不能及时的返回传输状态,也不能确定数据是否到达发送方。
UDP头部的结构:TCP是面向连接的协议,因此数据传输之前必须先建立连接,通过连接来传输数据,当数据传输完成后断开连接,因此TCP相比UDP可以保证数据的可靠稳定。
TCP头部的结构:如果需要在应用程序使用UDP时,那么进程可以创建一个Internet域内的SOCK_DGRAM类型的套接字。每次用此套接字发送数据时必须制定目的地址的IP地址和端口号。用此套接字介绍数据时,接收的数据保中包含源ipd地址和端口号。
UDP不能保证数据的可靠传输,如果想要实现这个功能,则必须在应用程序中实现UDP发送的是UDP数据报,因此每个数据报都有一个长度值。可以从UDP的头部结构中能看出。而TCP是字节协议,没有长度限制UDP没有传输过程中的流量控制,传输数据只根据发送发的速率,不管接收方的缓冲区大小。由于UDP不面向连接,因此同一个套接字可以向不同目标发送数据报,同样,一个套接字也可以介绍不同发送方的数据与UDP相比,TCP采用了确定机制,超时重传机制和流量控制机制
确定机制:TCP接收方接收到数据后需要向发送发反馈确认信息。如果发送方没有收到确认的信息则重新发送数据。反馈信息的TCP头部用到了32位确认序列号和ACK。TCP的确认信号是对已接收的连续序号最后一个字节确认,其值为希望下次接收的序列号。例如接收到序列号为100,大小100的数据,则发送的确定序列号为201,在比如201在发送时候出错了,此时的确认信号仍然为201,则需要再次发送。
超时重传机制:TCP发送方在发送数据过后并没有把数据删除,仍然把数据保留在发送缓冲区,直到接收到确认后才删除。如果在一段时间内没有收到确认信号,则重新发送一个数据包,如此循环,直到收到确认,或者到达一定限制后,放弃发送数据。返回对方不可达。流量控制机制:TCP接收方能够告诉发送发自己还能接收多大的数据量,称为通告窗口。窗口可以动态标识还能接收多少空间的数据,从而保证不会溢出。16位的窗口大小就是用来表示接收方TCP缓冲区还有多少空间。转载于:https://blog.51cto.com/13219187/2049207