1 TCP
1.1 TCP概述
(1)点对点:一个发送方,一个接收方;(2)可靠地、按序的字节流;
(3)流水线机制---TCP拥塞控制和流量控制机制设置窗口尺寸;(4)发送方/接收方缓存;
(5)全双工(full-duplex)---统一连接中能够传输双向数据流;
(6)面向连接:
a、通信双方在发送数据之前必须建立连接;b、连接状态只在连接的两端中维护、在沿途结点中并不维护状态;c、TCP连接包括:两台主机上的缓存、连接状态变量、socket等;
(7)流量控制机制;
1.2 TCP段结构
1.3 TCP:序列号和ACK
1.4 TCP可靠数据传输
1、TCP可靠数据传输概述
2、TCP RTT(定时器超时时间设置)和超时
(1) SampleRTT:测量从段发出去到收到ACK的时间---忽略重传
(2) SampleRTT变化:测量多个SampleRTT,求平均值,形成RTT的估计值EstimateedRTT
3、TCP发送方事件
4、TCP重传示例
5、TCP ACK生成
6、快速重传机制
(1)问题:TCP的实现中,如果发生超时,超时时间间隔将重新设置,即将超时时间间隔加倍,导致其很大;-----导致重发丢失的分组之前要等待很长时间
(2)分析:通过 ACK检测分组丢失---Sender会背靠背的发送多个分组,如果某个分组丢失,可能会引发多个重复的ACK;
(3)解决:如果Sender收到对同一数据的3个ACK,则假定该数据之后的段已经丢失----快速重传:在定时器超市之前即进行重传;
1.5 TCP流量控制(flow control)---速度匹配机制
(1)接收方为TCP连接分配buffer;(2)上层应用可能处理buffer中的数据速度较慢;
流量控制: 发送方不会传输的太多、太快以至于淹没接收方(buffer溢出)
假设:TCP receiver丢失乱序的segments,
a、Receiver通过在Segment的头部字段将RcvWindow告诉Sender;
b、Sender限制自己已经发送的但还未收到ACK的数据不超过接收方的空闲RcvWindow尺寸;
1.6 TCP连接管理
TCP sender(发送方)和receiver(接收方)在传输数据前需要建立连接;
1、初始化TCP变量:(1)Seq.#;(2)Buffer和流量控制信息;
2、Client(客户端):连接发起者:Socket clientSocket = new Socket("hostname","port number");
3、Server(服务器):等待客户连接请求:Socket connectionSocket = welcomeSocket.accept();
三次握手---Three way handshake
Step 1:client host sends TCP SYN segment to server;(specifies initial seq#,no data)注释:客户端向主机发送一个SYN报文段,不携带数据,将SYN标志位置1,表示建立连接,传递初始序列号;
Step 2:server host receives SYN,replies with SYNACK segment;(server allocates buffers,specifies server initial seq.#)注释:主机收到SYN报文段,答复SYNACK报文段,服务器会分配缓存为这个连接,选择自己服务器的初始报文段;
Step 3:client receives SYNACK,replies with ACK segment,which may contain data;注释:客户机收到SYNACK,会答复一个ACK报文段,标志位不置1,这个会携带数据;
TCP连接管理:建立
TCP连接管理:关闭-----segment报文段
1.7 拥塞控制原理
1、拥塞(Congestion)
(1)非正式定义:"太多发送主机发送了太多数据或者发送速度太快,以至于网络无法处理"
(2)表现:分组丢失(路由器缓存溢出);分组延迟过大(在路由器缓存中排队)
(3)拥塞控制VS流量控制
2、拥塞的成因和代价
(1)路由器有无限缓存---时延无限大
(2)一个路由器---有限buffers,Sender重传分组
(3)四个发送方,多跳,超时/重传
3、拥塞控制的方法
a、端到端拥塞控制:
(1)网络层不需要显示的提供支持;(2)端系统通过观察loss、delay网络行为判断是否发生拥塞;(3)TCP采取这种方法;
b、网络辅助的拥塞控制:
(1)路由器向发送方显式地反馈网络拥塞信息;(2)简单的拥塞指示(1bit):SNA,DECbit,TCP/IP ECN,ATM;(3)指示发送方应该采取何种速率;
4、案例:ATM ABR拥塞控制
1.8 TCP拥塞控制的基本原理
(1)加性增---乘性减:AIMD(Additive Increase,Multiplicative Decrease)
原理:逐渐增加发送速率,谨慎探测可用带宽,知道发生los;
AIMD---Additive Increase:每个RTT将CongWin增大一个MSS---拥塞避免(MSS最大段的长度)
AIMD---Multiplicative Decrease:发生loss后将CongWin减半;
(2) TCP慢启动:SS
a、TCP连接建立时,CongWin=1;例如MSS=500byte,RTT=200msec,初始速率=20kbps;
b、可用带宽可能远远高于初始速率:希望快速增长
c、原理:当连接开始时,指数性增长;
d、指数性增长:每个RTT将CongWin翻倍,收到每个ACK进行操作;
e、初始速率很慢,但是快速攀升;
(3)Threshold变量
(4) Loss事件的处理
a、3个重复的ACKs:CongWin切到一半,然后线性增长
b、Timeout事件:CongWin直接设为1个MSS,然后指数增长,达到threshold后,再线性增长;
注:3个重复的ACKs表示网络还能够传输一些segments;timeout事件表明拥塞更为严重;
(5)TCP拥塞控制:总结
6、TCP拥塞控制算法
1.9 TCP性能分析
2.0 传输层总结