Rdt1.O:经可靠信道的可靠传输 口底层信道非常可靠 o无比特差错 0无分组丢失 口装发送方、接收方的单独FSM: 。发送方将数据发向底层信道 O接收方从底层信道读取数据 YWait for rdt_send(data) YWait for rdt_rcv(packet) call from call from extract(packet,data) above packet make_pkt(data) below deliver data(data) udt_send(packet) 发送方 接收方 运输层 26
运输层 26 Rdt1.0: 经可靠信道的可靠传输 底层信道非常可靠 无比特差错 无分组丢失 装发送方、接收方的单独FSM: 发送方将数据发向底层信道 接收方从底层信道读取数据 Wait for call from above packet = make_pkt(data) udt_send(packet) rdt_send(data) extract (packet,data) deliver_data(data) Wait for call from below rdt_rcv(packet) 发送方 接收方
第3章要点 ▣3.1运输层服务 ▣3.5面向连接的传输: 口3.2复用与分解 TCP 。报文段结构 口3.3无连接传输:UDP 。可靠数据传输 口3.4可靠数据传输的原则 O流量控制 o rdtl 。连接管理 o rdt2 ▣3.6拥塞控制的原则 o rdt3 口3.7TCP拥塞控制 。流水线协议 o机制 OTCP吞吐量 oTCP公平性 。时延模型 运输层 27
运输层 27 第3章 要点 3.1 运输层服务 3.2 复用与分解 3.3 无连接传输: UDP 3.4 可靠数据传输的原则 rdt1 rdt2 rdt3 流水线协议 3.5 面向连接的传输: TCP 报文段结构 可靠数据传输 流量控制 连接管理 3.6 拥塞控制的原则 3.7 TCP拥塞控制 机制 TCP吞吐量 TCP公平性 时延模型
Rdt2.0:具有比特差错的信道 underlying channel may flip bits in packet o checksum to detect bit errors the question:how to recover from errors: o acknowledgements (ACKs):receiver explicitly tells sender that pkt received OK o negative acknowledgements (NAKs):receiver explicitly tells sender that pkt had errors sender retransmits pkt on receipt of NAK new mechanisms in rdt2.0 (beyond rdt1.0): o error detection o receiver feedback:control msgs (ACK.NAK)rcvr->sender 运输层 28
运输层 28 Rdt2.0: 具有比特差错的信道 underlying channel may flip bits in packet checksum to detect bit errors the question: how to recover from errors: acknowledgements (ACKs): receiver explicitly tells sender that pkt received OK negative acknowledgements (NAKs): receiver explicitly tells sender that pkt had errors sender retransmits pkt on receipt of NAK new mechanisms in rdt2.0 (beyond rdt1.0): error detection receiver feedback: control msgs (ACK,NAK) rcvr->sender
rdt2.0:FSM规格参数 rdt_send(data) snkpkt make_pkt(data,checksum) 接收方 udt_send(sndpkt) rdt_rcv(rcvpkt)&& 等待来自 等待ACN isNAK(rcvpkt) rdt_rcv(rcvpkt)&& 上面的调用 或NAK udt_send(sndpkt) corrupt(rcvpkt) udt send(NAK) rdt_rcv(rcvpkt)&&isACK(rcvpkt) 等待来目 Λ 下面的调用 发送方 rdt_rcv(rcvpkt)&& notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) 运输层 29
运输层 29 rdt2.0: FSM规格参数 等待来自 上面的调用 snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) 等待ACK 或NAK 等待来自 下面的调用 发送方 接收方 rdt_send(data) L
rdt2.0:无差错时的操作 rdt send(data) snkpkt make_pkt(data,checksum) udt send(sndpkt) rdt_rcv(rcvpkt)&& 等待来自 等待 isNAK(rcvpkt) rdt rcv(rcvpkt)&& 上面的调用 ACK或 udt_send(sndpkt) corrupt(rcvpkt) NAK udt_send(NAK) rdt_rcv(rcvpkt)&&isACK(rcvpkt) 等待来目 下面的调用 rdt_rcv(rcvpkt)&& notcorrupt(rcvpkt) extract(rcvpkt,data) deliver data(data) udt_send(ACK) 运输层 30
运输层 30 rdt2.0: 无差错时的操作 等待来自 上面的调用 snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) 等待 ACK 或 NAK 等待来自 下面的调用 rdt_send(data) L