两者优势

既然TCP和UDP同时存在于传输层,那么各自都有不可取代的优势。首先,两都都可以根据端口号正确选择对应的应用程序(多路复用)。TCP提供的是可靠性连接,带有错误恢复,有序数据传输和数据分段,避免拥塞。而UDP报头数据比TCP少,在传输过程中开销少,并且不会像TCP一样进行避免拥塞,而减慢传输效率。

TCP报头

源端口 目标端口
序列号
确认数
偏移量 保留 代码位 窗口
校验和 紧急标志

第行4字节,共20字节,TCP字段(L4PDU、数据段)

多路复用

计算机会运行很多软件,同时会发送很多数据,而接收回来的数据TCP和UDP多路复用让计算机知道将数据交给哪个应用。是基于socket实现的,而socket由3部分组成:IP地址、端口号、传输协议,这样的组合可以完成唯一定位。客户方发送时,端口动态分配1024以后,服务端口号必须已知,侦听连接客户端请求。

TCP

三次握手

TCP连接指的是两个套接字之间的连接。通过 客户向服务发送SYN。服务向客户发送SYN,ACK。客户向服务发送ACK。完成连接。由于IP地址记录在IP报头,所以TCP报头只记录端口号即可。

SYN:同步化序列号。ACK:指目前接收的确认值,附带滑动窗口大小。

终止连接:ACK,FIN。ACK,ACK,FIN。ACK。第二步骤发送的第一条ACK为告知客户,已经收到,防止多次发送。统称为面向连接。而UDP则无连接。

面向连接:需要在传输数据之前交换消息或需要在两个端点间预先设立关联协议

无连接:不需要交换消息或不需要在终端之间预先设定关联的协议

TCP错误确认

客户向服务发送数据 1000字节,序列号0 1000字节,序列号1000 1000字节,序列号2000 1000字节,序列号3000如果服务端回复无数据,确认值4000,那么客户就发送下一组。如果服务回复无数据,确认值2000,表明接收了2000字节,所以发送序列号为2000的那组,以完成数据错误恢复。错误时,客户会等待,并不会发送下一组,启动一个计时器。

滑动窗口(Slice Window)

TCP使用窗口概念实现了流量控制。应用在待解决和待确认状态的数据。是接收主机告知发送主机可以接收多少数据,然后发送主机根据实际进行加减速发送。而接收主机是根据是否丢数据段或者网络堵塞现象来进行判断。

UDP

为应用程序提供服务,使它们能够交换消息。提供无连接,不使用窗口技术,不对数据排序,也不把大数据分成小数据。但是实现了数据传输和多路复用。所以开销低。但是需要容忍数据丢失,或者有恢复丢失数据的程序机制。

UDP报头

源端口 目标端口
长度 校验和

每行4字节,共8字节