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