TCP最主要的特点
- TCP是面向连接的运输层协议,即使用TCP前,必须先建立TCP连接。
- 每条TCP只能有两个端点,每条TCP只能是点对点的(一对一)。
- TCP提供可靠交付的服务,通过TCP连接传送的数据无差错、不丢失、不重复、并且按序到达。
- TCP提供全双工通信,TCP允许通信双方的应用进程在任何时候都能发送数据,TCP连接的两端都没有发送缓存和接收缓存。
- 面向字节流,TCP中的"流"指的是流入到进程或从进程流出的字节序列。面向字节流的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
TCP链接的端点叫套接字(socket)或插口,根据RFC 793的定义,端口号拼接到IP地址即构成了套接字(IP地址:端口号),同一个IP地址可以有多个不同的TCP连接。
可靠传输工作的原理
- 停止等待协议:全双工通信的双方既是发送方也是接收方,停止等待协议就是每发送玩一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。
- 超时重传:每发送完一个分组时设置一个超时计时器,如果在超时计时器到期前收到了对方的确认,就撤销已设置的超时计时器,没有收到确认则重传前面发送过的分组。
注意:
- 必须暂时保留已发送的分组的副本(超时重传时使用)
- 分组和确认分组都必须进行编号,这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没收到确认
- 超时计时器的设置的重传时间应当比数据分组传输的平均往返时间更长一些,如果重传时间设置的很长,通信效率会很低;而太短则会产生不必要的重传,浪费网络资源
- 对重复的确认的处理是收到后就丢弃,什么也不做。自动重复请求ARQ(Automatic Repeat reQuest):接收方不需要发送请求发送方重传某个出错的分组。