Click here to load reader
Upload
lucine
View
172
Download
2
Embed Size (px)
DESCRIPTION
实验四 - 传输层参考答案. 计算机学院教学实验中心 2006-6-10. 总览:动静结合. TCP 协议的理解 静: TCP 报文格式,首部各字段; 动:协议运行的各种机制 连接建立、释放 传输管理:定时器管理即超时与重传机制 流量控制:滑动窗口机制 拥塞控制:慢启动、拥塞避免、快重传、快恢复 糊涂窗口综合症避免:发送端 Nagle 算法、接收端推迟确认技术. 数据传输要点 ( 兼解疑 ). TCP 是全双工的,即 TCP 每端既可发送数据也可接收数据。每个 TCP 连接中都有两条数据 “ 流 ” , - PowerPoint PPT Presentation
Citation preview
-2006-6-10
TCPTCPNagle
()TCPTCPTCP
TCP ()
TCPTCPTCPTCP
1PCA(C)PCB(S)SYNSYN+ACKSYNC/SServerClient TCP
TCPW.Richard Stevens TCP/IP 20004
24TCPFlags SYNACK Flags FINACK
3--MSS(Option)
Maximum Segment Size +--------+--------+---------+--------+ |00000010|00000100| max seg size | +--------+--------+---------+--------+ Kind=2 Length=4Maximum Segment Size Option Data: 16 bits02 04 05 b4
3(MTU) 1500: 46AST
35MSS = MTU IP TCP =1500 - 20 - 20 = 1460 --3TCP --5,3IPTCP=( IP(16 bits) - IP(4 bits)*4 - TCP(4 bits)*4 )IPTCP32bits(4bytes)
tcpsndwnddata.txt,
3 4 5
0 1 2 3 4 5 6 7 8 9 n-1 n
3 4 5 6 7 8
= min[cwnd, rwnd]
0 1 2 3 4 5 6 7 8 9 n-1 n
3 4 5 6 7 8 9 n-1
rwnd
3 4 5
6(1)
0 1 2 3 4 5 6 7 8 9 n-1 n
0 1
= min[cwnd, rwnd] = 2*MSS
2*MSS
0 1 2 3 4 5 6 7 8 9 n-1 n
0 1
= min[cwnd, rwnd] = 2*MSS
0 1 2 3 4 5 6 7 8 9 n-1 n
2 3 4
= min[cwnd, rwnd] = 3*MSS
3*MSS
0 1 2 3 4 5 6 7 8 9 n-1 n
2 3 4
= min[cwnd, rwnd] = 3*MSS
4
0 1 2 3 4 5 6 7 8 9 n-1 n
4 5 6 7
= min[cwnd, rwnd] = 4*MSS
3*MSS
0 1 2 3 4 5 6 7 8 9 n-1 n
4 5 6 7
= min[cwnd, rwnd] = 4*MSS
6 7
0 1 2 3 4 5 6 7 8 9 n-1 n
6 7 8 9
= min[cwnd, rwnd] = 5*MSS
3*MSS
6(3) 6(3)DATAACK
6(3)DATADATADATA
3 4 5
0 1 2 3 4 5 6 7 8 9 n-1 n
3 4 5 6 7 8 9 n-1
rwnd
3 4 5 6
0 1 2 3 4 5 6 7 8 9 n-1 n
3 4 5 6 7 8 9 n-1
rwnd
6(3)ACKACKACK
3 4 5
0 1 2 3 4 5 6 7 8 9 n-1 n
3 4 5 6 7 8
= min[cwnd, rwnd] = 6*MSS
5
0 1 2 3 4 5 6 7 8 9 n-1 n
5 6 7 8 9 n-1
= min[cwnd, rwnd] = 7*MSS
ACKACKACKDATADATADATA6553565535ACKcwndrwnd = + min [ cwnd , rwnd ]
6(2)
6(2)1/2
0 1 2
0 1 2 3 4 5 6 7 8 9 n-1 n
rwnd = 65535
3 4 5
6 7 8 9 n-1
0 1 2 3 4
0 1 2 3 4 5 6 7 8 9 n-1 n
rwnd = 65535
5 6 7
8 9 n-1 n
6(2)2/2
9 n-1
0 1 2 3 4 5 6 7 8 9 n-1 n
rwnd = 5000
0 1 2 3 4 5 6 7 8
n
0 1 2 3 4 5 6 7 8 9 n-1 n
rwnd = 0
6(2)6553565535
X1
6(4)6(2)
n n+1 n+2 n+3 n+4 n+5 n+6 n+7 n+8 n+9 2n-1 2n
n n+1 n+2 n+3
rwnd = 5840
6(4)
0 1 2 3 4 5 6 7 8 9 n-1 n
0 1 2 3 4 5 6 7 8
rwnd = 65535
7Keep-AliveKeep-Alive
11(1)
NagleMSSNagleNagle
11(2)X>=1*MSS
PPT
8(1)sthread=65535snd_cwnd=2RFC2581snd_cwnd*1460< ssthread snd_wnd = min [ cwnd , rwnd ]rcv_wnd=65535snd_cwnd*1460=2920snd_wnd = min [snd_cwnd , rcv_wnd] = snd_cwnd*1460=2920snd_wnd_right = snd_wnd_left + snd_wnd
8(2)ssthread=65535ACKsnd_cwnd1snd_cwnd*1460< ssthreadACKsnd_cwnd1MSSRTT
8(2) 2DATA3DATAsnd_wndDATA1ACK2DATAACKsnd_wnd2DATAACKcwnd1cwndrwndsnd_wndcwndsnd_wnd11DATA3DATA
8(2)2DATA3DATA 2DATAACK
--snd_wnd = min [snd_cwnd , rcv_wnd] = 2*MSSsnd&noAck_data = 0*MSSuseable_wnd = 2*MSS1MSS
0 1 2 3 4 5 6 7 8 9 n-1 n
0 1
= min[cwnd, rwnd] = 2*MSS
2*MSS
--12DATAsnd_wnd = 2*MSS snd&noAck_data = 2*MSSuseable_wnd = 0*MSS1ACKsnd_wnd = snd_wnd_old + 1*MSS = 3*MSS snd&noAck_data = snd&noAck_data_old 2*MSS = 0*MSSuseable_wnd = 1*MSS + 2*MSS = 3*MSS
0 1 2 3 4 5 6 7 8 9 n-1 n
0 1
= min[cwnd, rwnd] = 2*MSS
0 1 2 3 4 5 6 7 8 9 n-1 n
2 3 4
= min[cwnd, rwnd] = 3*MSS
3*MSS
--23DATAsnd_wnd = 3*MSS snd&noAck_data = 3*MSSuseable_wnd = 0*MSS1ACKsnd_wnd = snd_wnd_old + 1*MSS = 4*MSS snd&noAck_data = snd&noAck_data_old 2*MSS = 1*MSSuseable_wnd = 1*MSS + 2*MSS = 3*MSS
0 1 2 3 4 5 6 7 8 9 n-1 n
2 3 4
= min[cwnd, rwnd] = 3*MSS
4
0 1 2 3 4 5 6 7 8 9 n-1 n
4 5 6 7
= min[cwnd, rwnd] = 4*MSS
3*MSS
--33DATAsnd_wnd = 4*MSS snd&noAck_data = 4*MSSuseable_wnd = 0*MSS1ACKsnd_wnd = snd_wnd_old + 1*MSS = 5*MSS snd&noAck_data = snd&noAck_data_old 2*MSS = 2*MSSuseable_wnd = 1*MSS + 2*MSS = 3*MSS
0 1 2 3 4 5 6 7 8 9 n-1 n
4 5 6 7
= min[cwnd, rwnd] = 4*MSS
6 7
0 1 2 3 4 5 6 7 8 9 n-1 n
6 7 8 9
= min[cwnd, rwnd] = 5*MSS
3*MSS
--43DATAsnd_wnd = 5*MSS snd&noAck_data = 5*MSSuseable_wnd = 0*MSS1ACKsnd_wnd = snd_wnd_old + 1*MSS = 6*MSS snd&noAck_data = snd&noAck_data_old 2*MSS = 3*MSSuseable_wnd = 1*MSS + 2*MSS = 3*MSS
--n3DATAsnd_wnd = (n+1)*MSS snd&noAck_data = (n+1)*MSSuseable_wnd = 0*MSS1ACKsnd_wnd = snd_wnd_old + 1*MSS = (n+2)*MSS snd&noAck_data = snd&noAck_data_old 2*MSS = (n-1)*MSSuseable_wnd = 1*MSS + 2*MSS = 3*MSS
8(3)Xssthread=max(cwnd/22*MSS)RFC2001cwnd=1 ssthreadcwndACK1snd_cwnd*1460 ssthread
9RTO KarnRTO = 2 * RTO_old
9(1)RTORTTRTTACKDATAACKKarn
9(2)RTO1RTO2RTTRTTACKRTTRTOKarnRTTACKACKACKRTTRTOKarnRTTRTT
9RFC1122RTTRTORTT=0RTO=3Linux10SRTT=0RTO=300RTO20012020 12000LinuxRTT808
10ACKACKDATAACK
10(1)X5X6X7
10(2)ACKssthread=max(cwnd/22*MSS)RFC2001cwnd= min [cwnd , + + 3]RTTRTOACKRTTRTO
10(3)ssthreadcwnd= min [cwnd , + + 3]ACKACKssthreadcwndRTTSMSS*SMSS/cwndsnd_cwnd*1460> ssthread
4.2 TCPTCP ACKTCP
TCP
shutdown()
3 4 5
0 1 2 3 4 5 6 7 8 9 n-1 n
3 4 5 6 7 8
= min[cwnd, rwnd]
0 1 2 3 4 5 6 7 8 9 n-1 n
3 4 5 6 7 8 9 n-1
rwnd
3 4 5
63DATAACK65535TCP