问答题 为什么说UDP是面向报文的,而TCP是面向字节流的?
【正确答案】
【答案解析】[答案要点]
发送方UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。接收方UDP对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流,并不知道字节流的含义。TCP不保证接收方应用程序收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。
在报文流中,网络保持对报文边界的跟踪;而在字节流中,网络不做这样的跟踪。
例如,一个进程向运输层写了512B,稍后又写了另外512B,那么接收方共读了1024B。对于报文流,接收方将得到两个报文,每个报文512B;而对于字节流,报文边界不被识别。接收方把全部的1024B当做一个整体,在此已经体现不出原先有两个不同的报文的事实。