TCP简述
- 每一条TCP只有两个端点(无法形成广播)
- 可靠交付
- 全双工
- 面向字节流(TCP把应用层交付的数据看作为无结构的字节流)
- 将建立连接的两端抽象成一条连接,但物理上仍然借助网络上多个router的网络层链路层物理层一次次的传送实现。
套接字
定义套接字(socket)为IP地址 + “:” + 端口号。这里区分socket和其他领域的socket的含义。
TCP实现的可靠传输
停止等待协议
在真实的可靠传输中不使用停等协议(利用率过低)。
停等协议的含义是发送方发送一个数据包,要等到接收到接收方的确认才会发送下一个数据包。
无差错情况
出现差错
确认包丢失
确认包迟到
信道利用率
- RTT:往返时间。
- T d T_d Td:发送分组数据的时间。
- T a T_a Ta:发送确认分组的时间。
信道利用率应该为总时间(往返+发送确认+发送有效)内有效时间的占比。即: U = T d T d + R T T + T a U=\frac {T_d} {T_d + RTT + T_a} U=Td+RTT+TaTd
连续ARQ协议
发送方维持一个发送窗口,在窗口中的数据可以直接发送,不需要等待确认。
ARQ协议规定,发送方每收到一个ack,就把发送窗口向前移动到ACK之后的位置(因为接受方使用的是累积确认)。
- 累积确认:接收方会发送自己按序到达的最后一个分组的ACK包
因此,接收方不必对中间某个确认包的丢失进行重传,因为累积确认的效果,一旦一个较大序号的ACK被接收到,则表示这个包之前的包都已经成功收到。
但同时累积确认也有缺陷,例如发送方传送了5个包,但是第3个包丢失了。这时根据累积确认,接收方只能传送前两个包的ACK(按序到达的最后一个)。在接收到第2个包ACK的发送方不知道后面3个包是否到达,就会将后3个包全部进行重传。这也叫Go-back-N。