Chapter 3 Transport Layer A note on the

























































![GBN: 发送方FSM rdt_send(data) 初始化 L base=1 nextseqnum=1 if (nextseqnum < base+N) { //若有可用的序号 sndpkt[nextseqnum] GBN: 发送方FSM rdt_send(data) 初始化 L base=1 nextseqnum=1 if (nextseqnum < base+N) { //若有可用的序号 sndpkt[nextseqnum]](https://slidetodoc.com/presentation_image_h/8416e24b9deffe3011b49018262ba8c4/image-58.jpg)







![Selective repeat: dilemma Example: r 序号空间: [0, 3] r 窗口大小=3 r 接收方误将重发的分组 当作新分组(重发分组 序号落在了当前接收窗 Selective repeat: dilemma Example: r 序号空间: [0, 3] r 窗口大小=3 r 接收方误将重发的分组 当作新分组(重发分组 序号落在了当前接收窗](https://slidetodoc.com/presentation_image_h/8416e24b9deffe3011b49018262ba8c4/image-66.jpg)












































































- Slides: 142
Chapter 3 Transport Layer A note on the use of these ppt slides: We’re making these slides freely available to all (faculty, students, readers). They’re in Power. Point form so you see the animations; and can add, modify, and delete slides (including this one) and slide content to suit your needs. They obviously represent a lot of work on our part. In return for use, we only ask the following: v If you use these slides (e. g. , in a class) that you mention their source (after all, we’d like people to use our book!) v If you post any slides on a www site, that you note that they are adapted from (or perhaps identical to) our slides, and note our copyright of this material. Thanks and enjoy! JFK/KWR Computer Networking: A Top Down Approach 6 th edition Jim Kurose, Keith Ross Addison-Wesley March 2012 All material copyright 1996 -2012 J. F Kurose and K. W. Ross, All Rights Reserved Transport Layer 3 -1
Chapter 3 outline r 3. 1 Transport-layer services r 3. 2 Multiplexing and demultiplexing r 3. 3 Connectionless transport: UDP r 3. 4 Principles of reliable data transfer r 3. 5 Connection-oriented transport: TCP m m segment structure reliable data transfer flow control connection management r 3. 6 Principles of congestion control r 3. 7 TCP congestion control Transport Layer 3 -3
传输服务和网络服务 network data link physical t or r 传输层可以提供的服务: m 保证可靠、按序的交付:TCP m 不保证可靠、按序的交付:UDP network data link physicalnetwork sp an tr m 延迟保证 带宽保证 network data link physical nd -e nd m network data link physical e al r 传输层不能提供的服务: application transport network data link physical c gi lo r 网络层提供尽力而为的服务: m 网络层尽最大努力在主机间交付 分组,但不提供任何承诺 m 具体来说,不保证交付,不保证 按序交付,不保证数据完整,不 保证延迟,不保证带宽,…… network data link physical Transport Layer application transport network data link physical 3 -6
Chapter 3 outline r 3. 1 Transport-layer services r 3. 2 Multiplexing and demultiplexing r 3. 3 Connectionless transport: UDP r 3. 4 Principles of reliable data transfer r 3. 5 Connection-oriented transport: TCP m m segment structure reliable data transfer flow control connection management r 3. 6 Principles of congestion control r 3. 7 TCP congestion control Transport Layer 3 -7
UDP多路分解: �例 Datagram. Socket my. Socket 2 = new Datagram. Socket (9157); Datagram. Socket server. Socket = new Datagram. Socket (6428); application Datagram. Socket my. Socket 1 = new Datagram. Socket (5775); P 1 application P 3 transport network link physical source port: 6428 dest port: 9157 source port: 9157 dest port: 6428 P 4 physical source port: ? dest port: ? Transport Layer 3 -13
TCP多路分解: �例 threaded server application P 3 transport network application P 4 transport network link physical server: IP address B source IP, port: B, 80 dest IP, port: A, 9157 source IP, port: A, 9157 dest IP, port: B, 80 P 3 P 2 link host: IP address A application physical source IP, port: C, 5775 dest IP, port: B, 80 host: IP address C source IP, port: C, 9157 dest IP, port: B, 80 Transport Layer 3 -16
Chapter 3 outline r 3. 1 Transport-layer services r 3. 2 Multiplexing and demultiplexing r 3. 3 Connectionless transport: UDP r 3. 4 Principles of reliable data transfer r 3. 5 Connection-oriented transport: TCP m m segment structure reliable data transfer flow control connection management r 3. 6 Principles of congestion control r 3. 7 TCP congestion control Transport Layer 3 -18
Internet checksum: example: add two 16 -bit integers 1 1 0 0 1 1 1 0 1 0 1 wraparound 1 1 0 1 1 sum 1 1 0 1 1 0 0 checksum 1 0 0 0 0 1 1 Note: when adding numbers, a carryout from the most significant bit needs to be added to the result Transport Layer 3 -22
Chapter 3 outline r 3. 1 Transport-layer services r 3. 2 Multiplexing and demultiplexing r 3. 3 Connectionless transport: UDP r 3. 4 Principles of reliable data transfer r 3. 5 Connection-oriented transport: TCP m m segment structure reliable data transfer flow control connection management r 3. 6 Principles of congestion control r 3. 7 TCP congestion control Transport Layer 3 -26
getting started 我们将: r 增量地开发可靠数据传输协议(rdt)的发送方和 接收方 r 只考虑单向数据传输,但控制信息可以双向传输 r 使用有限状态机(FSM)来描述发送方和接收方 event causing state transition actions taken on state transition state: when in this “state” next state uniquely determined by next event state 1 event actions state 2 Transport Layer 3 -31
rdt 2. 0: FSM specification rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && is. NAK(rcvpkt) 等待上 等待 层调用 反馈 udt_send(sndpkt) rdt_rcv(rcvpkt) && is. ACK(rcvpkt) L receiver rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) 等待下 层调用 sender • 发送方FSM中增加了一个状态:等待反馈 • 发送方依据收到的确认类型决定采取什么动作 • 接收方根据收到的分组正确与否采取不同的动作 rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) udt_send(ACK) Transport Layer 3 -34
rdt 2. 0: operation with no errors rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && is. NAK(rcvpkt) Wait for call from ACK or udt_send(sndpkt) above NAK rdt_rcv(rcvpkt) && is. ACK(rcvpkt) L rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) udt_send(ACK) Transport Layer 3 -35
rdt 2. 0: error scenario rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && is. NAK(rcvpkt) Wait for call from ACK or udt_send(sndpkt) above NAK rdt_rcv(rcvpkt) && is. ACK(rcvpkt) L rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) udt_send(ACK) Transport Layer 3 -36
rdt 2. 1: 发送方,处理出错的ACK/NAK rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && 收到ACK,转移状态 rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt) Wait for call 0 from above rdt_rcv(rcvpkt) 收到ACK,转 && notcorrupt(rcvpkt) 移状态 && is. ACK(rcvpkt) L rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || is. NAK(rcvpkt) ) udt_send(sndpkt) Wait for ACK or NAK 0 收到出错的 分组或NAK, 重发分组 L Wait for ACK or NAK 1 Wait for call 1 from above rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) 收到出错的分组或 NAK,重发分组 Transport Layer 3 -38
rdt 2. 1: 接收方,处理出错的ACK/NAK rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) 正确收到序号为 0的分组, && has_seq 0(rcvpkt) 发送ACK,转移状态 收到出错的分组,发送NAK rdt_rcv(rcvpkt) && (corrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) 正确收到序号为 1的分组 (冗余),发送ACK sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) Wait for 0 from below rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq 1(rcvpkt) 收到出错的分组,发送NAK Wait for 1 from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq 1(rcvpkt) extract(rcvpkt, data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) 正确收到序号为 1的分组,发送ACK 转移状态 rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq 0(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) 正确收到序号为 0的分组 (冗余),发送ACK Transport Layer 3 -40
rdt 2. 2: sender, receiver fragments rdt_send(data) 不是期待的ACK 0, sndpkt = make_pkt(0, data, checksum) 重发当前分组 udt_send(sndpkt) rdt_rcv(rcvpkt) && Wait for call 0 from above 不是期待接收的序号为 0的分组,重发ACK 1 rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq 1(rcvpkt)) udt_send(sndpkt) Wait for 0 from below ( corrupt(rcvpkt) || is. ACK(rcvpkt, 1) ) udt_send(sndpkt) Wait for ACK 0 sender FSM fragment rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt, 0) receiver FSM fragment L 收到期待的ACK 0,转 移到下一个状态 rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq 1(rcvpkt) extract(rcvpkt, data) 正确收到序号为 1的分组,发送ACK 1 deliver_data(data) sndpkt = make_pkt(ACK 1, chksum) Transport Layer 3 -43 udt_send(sndpkt)
rdt 3. 0 sender 在等待上层 调用时,对 收到的分组 rdt_rcv(rcvpkt) 不处理 L 是期待的 ACK 1, 终止定时 器,转移 状态 不是期待的ACK 0, 不做处理 rdt_send(data) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || is. ACK(rcvpkt, 1) ) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer Wait for ACK 0 Wait for call 0 from above rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt, 1) udt_send(sndpkt) start_timer timeout 超时重传 udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && is. ACK(rcvpkt, 0) stop_timer timeout 超时重传 L Wait for ACK 1 rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || is. ACK(rcvpkt, 0) ) L 不是期待的ACK 1, 不做处理 Wait for call 1 from above rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer 是期待的 ACK 0, 终止定时 器,转移 状态 rdt_rcv(rcvpkt) L 在等待上层 调用时,对 收到的分组 不处理 Transport Layer 3 -46
rdt 3. 0 in action Transport Layer 3 -48
rdt 3. 0 in action Transport Layer 3 -49
rdt 3. 0:停-等协议 sender receiver first packet bit transmitted, t = 0 last packet bit transmitted, t = L / R RTT first packet bit arrives last packet bit arrives, send ACK arrives, send next packet, t = RTT + L / R Transport Layer 3 -51
rdt 3. 0的性能 rdt 3. 0是一个正确的协议,但性能不佳! r example: 1 Gbps link, 30 ms RTT, 1 KB packet: Ttransmit = m m m L (packet length in bits) 8 kb/pkt = = 8 microsec R (transmission rate, bps) 10**9 b/sec U sender: utilization – fraction of time sender busy sending 1 KB pkt every 30 msec -> 33 k. B/sec thruput over 1 Gbps link network protocol limits use of physical resources! Transport Layer 3 -52
流水线:提高链路利用率 sender receiver first packet bit transmitted, t = 0 last bit transmitted, t = L / R RTT first packet bit arrives last packet bit arrives, send ACK last bit of 2 nd packet arrives, send ACK last bit of 3 rd packet arrives, send ACK arrives, send next packet, t = RTT + L / R Increase utilization by a factor of 3! Transport Layer 3 -53
GBN: 接收方FSM default udt_send(sndpkt) L 初始化 expectedseqnum=1 sndpkt = make_pkt (0, ACK, chksum) Wait rdt_rcv(rcvpkt) 收到预期序号的分组 && notcurrupt(rcvpkt) && hasseqnum(rcvpkt, expectedseqnum) extract(rcvpkt, data) deliver_data(data) sndpkt = make_pkt(expectedseqnum, ACK, chksum) udt_send(sndpkt) expectedseqnum++ //预期序号加 1 r 只使用ACK: m 仅对正确收到的、序号连续的一系列分组中的最高序号进行确 认(累积确认的要求) r 收到失序的分组: 丢弃(不在接收端缓存),意味着接收方只能按顺序接收分组 m 重发前一次的ack(已正确收到、序号连续的一系列分组中的 最高序号) m Transport Layer 3 -56
GBN: 发送方FSM rdt_send(data) 初始化 L base=1 nextseqnum=1 if (nextseqnum < base+N) { //若有可用的序号 sndpkt[nextseqnum] = make_pkt(nextseqnum, data, chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) //若发送窗口原来为空 start_timer //对基序号分组启动一个定时器 nextseqnum++ } else //若发送窗口满(没有可用的序号) refuse_data(data) Wait rdt_rcv(rcvpkt) && corrupt(rcvpkt) L 收到出错的分组, 不做处理 timeout 超时后,重传从基序 start_timer 号开始的所有分组 udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) … udt_send(sndpkt[nextseqnum-1]) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base = getacknum(rcvpkt)+1 //更新基序号(滑动窗口) If (base == nextseqnum) // 若发送窗口变为空,终止定时器 stop_timer else start_timer //对基序号分组启动定时器 Transport Layer 3 -58
GBN in action sender window (N=4) 012345678 012345678 sender send pkt 0 send pkt 1 send pkt 2 send pkt 3 (wait) rcv ack 0, send pkt 4 rcv ack 1, send pkt 5 ignore duplicate ACK 012345678 pkt 2 timeout send pkt 2 send pkt 3 send pkt 4 send pkt 5 receiver Xloss receive pkt 0, send ack 0 receive pkt 1, send ack 1 receive pkt 3, discard, (re)send ack 1 receive pkt 4, discard, (re)send ack 1 receive pkt 5, discard, (re)send ack 1 rcv pkt 2, deliver, send ack 2 rcv pkt 3, deliver, send ack 3 rcv pkt 4, deliver, send ack 4 rcv pkt 5, deliver, send ack 5 Transport Layer 3 -59
Selective repeat in action sender window (N=4) 012345678 012345678 sender send pkt 0 send pkt 1 send pkt 2 send pkt 3 (wait) receiver Xloss rcv ack 0, send pkt 4 rcv ack 1, send pkt 5 record ack 3 arrived 012345678 pkt 2 timeout send pkt 2 record ack 4 arrived receive pkt 0, send ack 0 receive pkt 1, send ack 1 receive pkt 3, buffer, send ack 3 receive pkt 4, buffer, send ack 4 receive pkt 5, buffer, send ack 5 rcv pkt 2; deliver pkt 2, pkt 3, pkt 4, pkt 5; send ack 2 Q: what happens when ack 2 arrives? Transport Layer 3 -65
Selective repeat: dilemma Example: r 序号空间: [0, 3] r 窗口大小=3 r 接收方误将重发的分组 当作新分组(重发分组 序号落在了当前接收窗 口中) 0123012 pkt 0 0123012 pkt 1 0123012 pkt 2 0123012 X X timeout retransmit pkt 0 X 0123012 pkt 0 0123012 will accept packet with seq number 0 Q: 窗口大小和序号空间大 小应当具有什么关系? Transport Layer 3 -66
Chapter 3 outline r 3. 1 Transport-layer services r 3. 2 Multiplexing and demultiplexing r 3. 3 Connectionless transport: UDP r 3. 4 Principles of reliable data transfer r 3. 5 Connection-oriented transport: TCP m m segment structure reliable data transfer flow control connection management r 3. 6 Principles of congestion control r 3. 7 TCP congestion control Transport Layer 3 -69
3. 5. 2 TCP报文段结构 32 bits URG: urgent data (generally not used) ACK: ACK # valid PSH: push data now (generally not used) RST, SYN, FIN: connection estab (setup, teardown commands) Internet checksum (as in UDP) source port # dest port # sequence number 字节序号,而非 报文段的序号 acknowledgement number head not UA P R S F len used checksum Receive window Urg data pnter 接收端还可以 接收的字节数 Options (variable length) application data (variable length) Transport Layer 3 -71
序号和确�序号 序号: r 报文段中第一个数据字节 的序号 确认序号: 发送端发出的报文段 source port # dest port # sequence number acknowledgement number rwnd checksum urg pointer window size N r 使用累积确认,指出期望 从对方接收的下一个字节 的序号 Q: 接收方如何处理失序的 报文段? A: TCP规范未涉及,留给实 现者考虑 sender sequence number space sent ACKed sent, not- usable not yet ACKed but not usable yet sent (“inflight”) 到达发送方的报文段 source port # dest port # sequence number acknowledgement number rwnd A checksum urg pointer Transport Layer 3 -73
序号和确�序号 Host B Host A User types ‘C’ host ACKs receipt of echoed ‘C’ Seq=42, ACK=79, data = ‘C’ Seq=79, ACK=43, data = ‘C’ host ACKs receipt of ‘C’, echoes back ‘C’ Seq=43, ACK=80 simple telnet scenario Transport Layer 3 -74
Example RTT estimation: Transport Layer 3 -76
设置超时值 r Sample. RTT 与 Estimated. RTT的偏差估计: Dev. RTT = (1 - )*Dev. RTT + *|Sample. RTT-Estimated. RTT| (typically, = 0. 25) 设置超时值: Timeout. Interval = Estimated. RTT + 4*Dev. RTT Transport Layer 3 -78
Chapter 3 outline r 3. 1 Transport-layer services r 3. 2 Multiplexing and demultiplexing r 3. 3 Connectionless transport: UDP r 3. 4 Principles of reliable data transfer r 3. 5 Connection-oriented transport: TCP m m segment structure reliable data transfer flow control connection management r 3. 6 Principles of congestion control r 3. 7 TCP congestion control Transport Layer 3 -79
TCP sender (simplified) data received from application above L Next. Seq. Num = Initial. Seq. Num Send. Base = Initial. Seq. Num wait for event create segment, seq. #: Next. Seq. Num pass segment to IP (i. e. , “send”) Next. Seq. Num = Next. Seq. Num + length(data) if (timer currently not running) start timer timeout retransmit not-yet-acked segment with smallest seq. # start timer ACK received, with ACK field value y if (y > Send. Base) { Send. Base = y /* Send. Base– 1: last cumulatively ACKed byte */ if (there are currently not-yet-acked segments) start timer else stop timer } Transport Layer 3 -83
TCP: 重传场景 Host B Host A Send. Base=92 X ACK=100 Seq=92, 8 bytes of data timeout Seq=92, 8 bytes of data Seq=100, 20 bytes of data ACK=100 ACK=120 Seq=92, 8 bytes of data ACK=100 Send. Base=100 Seq=92, 8 bytes of data Send. Base=120 ACK=120 Send. Base=120 ACK丢失 过早超时 Transport Layer 3 -84
TCP: 重传场景 Host B Host A Seq=92, 8 bytes of data timeout Seq=100, 20 bytes of data X ACK=100 ACK=120 Seq=120, 15 bytes of data TCP协议在减少重传方 面的设计: r 利用流水式发送和累积确 认,可避免重发某些丢失 了ACK的报文段 r 只使用一个重传定时器, 可避免超时值过小时大量 报文段的重发 cumulative ACK Transport Layer 3 -85
快速重�:�例 Host B Host A Seq=92, 8 bytes of data Seq=100, 20 bytes of data X timeout ACK=100 Seq=100, 20 bytes of data fast retransmit after sender receipt of triple duplicate ACK Transport Layer 3 -92
快速重传算法 event: ACK received, with ACK field value of y if (y > Send. Base) { //收到更新的确认号 Send. Base = y if (there are currently not-yet-acknowledged segments) start timer } else { //收到重复的ACK increment count of dup ACKs received for y if (count of dup ACKs received for y = 3) { resend segment with sequence number y } a duplicate ACK for already ACKed segment fast retransmit Transport Layer 3 -93
Chapter 3 outline r 3. 1 Transport-layer services r 3. 2 Multiplexing and demultiplexing r 3. 3 Connectionless transport: UDP r 3. 4 Principles of reliable data transfer r 3. 5 Connection-oriented transport: TCP m m segment structure reliable data transfer flow control connection management r 3. 6 Principles of congestion control r 3. 7 TCP congestion control Transport Layer 3 -98
TCP Flow control: how it works r 接收方将Rcv. Window放在 报头中,向发送方通告 接收缓存的可用空间 r 发送方限制未确认的字 r 接收缓存中的可用空间称为 接收窗口(Rcv. Window) Rcv. Window = Rcv. Buffer-[Last. Byte. Rcvd Last. Byte. Read] 节数不超过接收窗口的 大小,即: Last. Byte. Sent-Last. Byte. Acked ≦ Rcv. Window Transport Layer 3 -100
Chapter 3 outline r 3. 1 Transport-layer services r 3. 2 Multiplexing and demultiplexing r 3. 3 Connectionless transport: UDP r 3. 4 Principles of reliable data transfer r 3. 5 Connection-oriented transport: TCP m m segment structure reliable data transfer flow control connection management r 3. 6 Principles of congestion control r 3. 7 TCP congestion control Transport Layer 3 -108
3. 5. 6 连接管理 r 建立连接要确定两件事: 双方都同意建立连接(知晓另一方想建立连接) m 初始化连接参数(序号,MSS等) m application connection state: ESTAB connection variables: seq # client-to-server-to-client rcv. Buffer size at server, client network Socket client. Socket = new. Socket("hostname", "port number"); application connection state: ESTAB connection Variables: seq # client-to-server-to-client rcv. Buffer size at server, client network Socket connection. Socket = welcome. Socket. accept(); Transport Layer 3 -109
Agreeing to establish a connection 2 -way handshake: Let’s talk ESTAB OK 问题: 在网络中 2次握手 总是可行的吗? ESTAB r 在一个不可靠的网络 中,会有一些意外发 生,比如: m 包传输延迟变化很大 choose x ESTAB m 存在重传的报文段 req_conn(x) acc_conn(x) ESTAB m 存在报文重排序 Transport Layer 3 -110
2次握手失败的情形 choose x retransmit req_conn(x) ESTAB client terminates req_conn(x) choose x ESTAB acc_conn(x) retransmit req_conn(x) ESTAB req_conn(x) connection x completes retransmit data(x+1) server forgets x ESTAB half open connection! (no client!) client terminates req_conn(x) ESTAB acc_conn(x) data(x+1) connection x completes req_conn(x) data(x+1) accept data(x+1) server forgets x ESTAB accept data(x+1) Transport Layer 3 -111
TCP三次握手 client state LISTEN SYNSENT server state 选择起始序号 x 发送TCP SYN msg 收到SYNACK(x) 表明服务器在线; ESTAB 发送ACK ,确认y; 这个报文段可以携带数据 LISTEN SYNbit=1, Seq=x SYNbit=1, Seq=y ACKbit=1; ACKnum=x+1 选择起始序号 y 发送TCP SYNACK msg, 确认 x SYN RCVD ACKbit=1, ACKnum=y+1 收到ACK(y) 确认客户在线 ESTAB Transport Layer 3 -112
关�TCP�接 client state server state ESTAB client. Socket. close() FIN_WAIT_1 不能发送, 但仍可接收 FIN_WAIT_2 FINbit=1, seq=x ACKbit=1; ACKnum=x+1 仍可发送 FINbit=1, seq=y 不能发送 CLOSE_WAIT 等待服务器关闭 TIMED_WAIT timed wait for 2*max segment lifetime LAST_ACK ACKbit=1; ACKnum=y+1 CLOSED Transport Layer 3 -116
客户/服务器经历的TCP状态序列 TCP server lifecycle TCP client lifecycle Transport Layer 3 -117
Chapter 3 outline r 3. 1 Transport-layer services r 3. 2 Multiplexing and demultiplexing r 3. 3 Connectionless transport: UDP r 3. 4 Principles of reliable data transfer r 3. 5 Connection-oriented transport: TCP m m segment structure reliable data transfer flow control connection management r 3. 6 Principles of congestion control r 3. 7 TCP congestion control Transport Layer 3 -121
Chapter 3 outline r 3. 1 Transport-layer services r 3. 2 Multiplexing and demultiplexing r 3. 3 Connectionless transport: UDP r 3. 4 Principles of reliable data transfer r 3. 5 Connection-oriented transport: TCP m m segment structure reliable data transfer flow control connection management r 3. 6 Principles of congestion control r 3. 7 TCP congestion control Transport Layer 3 -125
总结 r 当Cong. Win < Threshold时,发送方处于慢启动阶段, 拥塞窗口指数增长. r 当Cong. Win >= Threshold时,发送方处于拥塞避免阶 段, 拥塞窗口线性增长. r 当收到 3个冗余ACK 时, Threshold = Cong. Win/2, Cong. Win = Threshold. r 当超时发生时, Threshold = Cong. Win/2 , Cong. Win =1 MSS. Transport Layer 3 -133
TCP发送端的事件与动作 State Event TCP Sender Action Commentary 慢启� (SS) 收到新的确 � Cong. Win = Cong. Win + MSS, If (Cong. Win > Threshold) set state to “Congestion Avoidance” 每�� 一个RTT, Cong. Win加倍 � 塞避免 (CA) 收到新的确 认 Cong. Win = Cong. Win+MSS * (MSS/Cong. Win) 每�� 一个RTT, Cong. Win增加一个MSS SS or CA 收到 3个重 复的确� Threshold = Cong. Win/2, Cong. Win = Threshold, Set state to “Congestion Avoidance” Cong. Win减半,然后� 性 增� SS or CA 超时 Threshold = Cong. Win/2, Cong. Win = 1 MSS, Set state to “Slow Start” Cong. Win降� 一个MSS, � 入慢启� SS or CA 收到一个重 复的确认 �� 收到的重复确� 数 Cong. Win 和 Threshold 都 不� Transport Layer 3 -134
TCP吞吐量 TCP的平均吞吐量是多少?(忽略慢启动阶段) r 令W=发生丢包时的Cong. Win,此时 throughput = W/RTT r 发生丢包后调整 Cong. Win=W/2,此时 throughput=W/2 RTT r 假设在TCP连接的生命期内,RTT 和 W几乎不 变,则:Average throughout=0. 75 W/RTT Transport Layer 3 -135
TCP Futures: TCP over “long, fat pipes” r Example: 1500 byte segments, 100 ms RTT, want 10 Gbps throughput r 根据平均吞吐量公式,平均拥塞窗口(0. 75 W)= 83, 333 报文段 r 吞吐量与丢包率L的关系: r ➜ L = 2·10 -10 Wow r 针对高速网络需要新的TCP拥塞控制算法 Transport Layer 3 -136
TCP的公平性 公平性目标: 如果K条TCP连接共享某条带宽为R 的瓶颈链路,每条连接具有平均速度R/K。 TCP connection 1 TCP connection 2 bottleneck router capacity R Transport Layer 3 -137
为什么TCP是公平的? 两条竞争的连接(各种参数相同)共享带宽为R的链路: r addative increase gives slope of 1, as throughout increases r multiplicative decreases throughput proportionally equal bandwidth share Connection 2 throughput R B C A Connection 1 throughput R Transport Layer 3 -138
Chapter 3: Summary r 传输服务原理: m 多路复用,多路分解 m 可靠数据传输 m 流量控制 m 拥塞控制 r Internet中的传输服务: m UDP m TCP Next: r leaving the network “edge” (application, transport layers) r into the network “core” Transport Layer 3 -140














































































































































