IP层需要解决两个问题:
通过多路复用,区分不同应用程序的数据包
通过可靠传输,修复错误
两个主要协议:用户数据包协议(UDP)、传输控制协议(TCP),UDP用端口多路复用,解决问题一。TCP可以同时解决这两个问题。
TCP
TCP工作原理
每个TCP数据包都有一个序列号,接收方通过序列号排序,和发现丢失数据包。
序列号不是整数,使用计数器。新序列号 = 旧序列号 + 数据包长度
初始序列号随机
不锁步通信,无需等待响应一口气发送多个数据包。某一时刻发送方希望同时传输的最大数据量叫做TCP窗口(window)的大小
接收方的TCP可以通过控制发送方的窗口大小来减缓或暂停连接,即流量控制(flow control)
如果包被丢弃,TCP会假定网络很拥挤,会减少发送量。对于无线网这种噪声很大的环境来说,TCP是个灾难。
何时使用TCP
几乎所有情况下。
例外:
如果客户端只需向服务器发送单个较小请求,并且请求完成后无需通信,不需长连接,此时使用TCP大材小用了。
TCP建立连接至少三个包(SYN, SYN-ACK, ACK),结束连接三或四个包(FIN,FIN-ACK,ACK)。这样单个请求至少6个包。
如果短时间内发送许多单独请求,可以用TCP。这时建立连接的开销可以被平均掉。
当丢包发生时,如果应用程序有比TCP重传更聪明的做法时。比如音频信号,一直重传丢失的1秒数据毫无必要。
TCP套