Bài giảng Mạng máy tính - Chương 3: Tầng giao vận (transport layer) - Trần Quang Diệu

Một số so sánh TCP/UDP Có liên kết, lưu trữ trạng thái liên kết (quản lý liên kết). Điểm-điểm Có độ trễ (delay): thiết lập, quản lý liên kết, luồng, nghẽn Segment header lớn (20 bytes) Bị giới hạn tốc độ truyền (congestion control) Không liên kết, không lưu trữ trạng thái. Điểm-điểm, quảng bá. Độ trễ thấp. Segment header nhỏ (8 bytes) Không giới hạn tốc độ truyền.

ppt98 trang | Chia sẻ: thucuc2301 | Lượt xem: 656 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Mạng máy tính - Chương 3: Tầng giao vận (transport layer) - Trần Quang Diệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 3. Tầng giao vận (transport layer)Quang Dieu Tran, PhDFaculty of Information TechnologyUniversity of Communication and Transport (Branch in Ho Chi Minh City)Email: dieutq@gmail.comWebsite: sites.google.com/sites/tranlecturesChương 3. Giao thức tầng giao vận (transport layer)2Chương 3. Giao thức tầng giao vận (transport layer)3Ch3. The Transport LayerTransport Layer Services & Principles.Multiplexing/Demultiplexing.Connectionless Transport (UDP).Principles of Reliable Data Transfer (RDT).Connection-oriented Transport (TCP).Congestion Control.Sử dụng TCP hay UDPChương 3. Giao thức tầng giao vận (transport layer)4Transport Layer Services & PrinciplesCung cấp phương tiện truyền thông logic (logical communication) giữa các applications.PDUsapplication: messages.transport: segments (đoạn).Các msg từ tầng application gửi xuống được chia nhỏ thành các đoạn (segments).Transport protocol được thực thi tại các trạm cuối (end system).applicationtransportnetworkdata linkphysicalapplicationtransportnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicallogical end-end transportChương 3. Giao thức tầng giao vận (transport layer)5Transport & Network layersNetwork layer:Truyền thông logic giữa các trạm làm việc (host).PDUs = packets (gói).IP (Internet Protocol) là giao thức truyền không tin cậy.Transport layer:Tạo phương thức truyền thông logic giữa các ứng dụng (application/process).Nhận các gói tin từ tầng Network gửi lên.Household analogy:12 kids sending letters to 12 kidsprocesses = kidsapp messages = letters in envelopeshosts = housestransport protocol = Ann and Billnetwork-layer protocol = postal serviceChương 3. Giao thức tầng giao vận (transport layer)6Transport ProtocolsTCP (Transmission Control Protocol)Connection-oriented (có liên kết).Flow control (điều khiển luồng).Congestion control (điều khiển chống nghẽn mạng). reliable transport protocol (tin cậy)UDP (User Datagram Protocol)Connectionless.Không có kiểm soát luồng và kiểm soát nghẽn mạng. unreliable transport protocol.Chương 3. Giao thức tầng giao vận (transport layer)7Ch3. The Transport LayerTransport Layer Services & Principles.Multiplexing/Demultiplexing.Connectionless Transport (UDP).Principles of Reliable Data Transfer (RDT).Connection-oriented Transport (TCP).Congestion Control.Sử dụng TCP hay UDPChương 3. Giao thức tầng giao vận (transport layer)8Multiplexing/demultiplexing (mux/demux)Multiplexing (dồn kênh): Các msgs từ các apps (P1, P2) được chia nhỏ và đóng gói thành các segments (thêm header)  dồn kênh diễn ra ở sending hostsDemultiplexing (phân kênh): Các segments nhận được được gửi tới apps tương ứng (P3, P4)  phân kênh diễn ra ở receiving hostsapplicationtransportnetworkMP2applicationtransportnetworkreceiverHtHnsegmentsegmentMapplicationtransportnetworkP1MMMP3P4segmentheaderapplication-layerdatasendersenderChương 3. Giao thức tầng giao vận (transport layer)9Dồn và chia kênh thế nào?source port number: ứng dụng gửi dữ liệu.destination port number: ứng dụng nhận dữ liệu.Port number:0-1023: well-known port number (đã được giữ cho các apps phổ biến).1024 – 65535.source port #dest port #32 bitsapplicationdata (message)other header fieldsTCP/UDP segment formatChương 3. Giao thức tầng giao vận (transport layer)10Mux/demux: Ví dụhost Aserver Bsource port: xdest. port: 23source port:23dest. port: xport use: simple telnet appWeb clienthost AWebserver BWeb clienthost CSource IP: CDest IP: Bsource port: xdest. port: 80Source IP: CDest IP: Bsource port: ydest. port: 80port use: Web serverSource IP: ADest IP: Bsource port: xdest. port: 80Chương 3. Giao thức tầng giao vận (transport layer)11Ch3. The Transport LayerTransport Layer Services & Principles.Multiplexing/Demultiplexing.Connectionless Transport (UDP).Principles of Reliable Data Transfer (RDT).Connection-oriented Transport (TCP).Congestion Control.Sử dụng TCP hay UDPChương 3. Giao thức tầng giao vận (transport layer)12Connectionless Transport (UDP).User Datagram Protocol [RFC 768]“no frill”, “bare bones” Internet transport protocol.chỉ cần những thủ tục cơ bản nhất.thông tin điều khiển cũng chỉ cần cơ bản nhất.“best effort” service: dữ liệu có thể mất mát, sai sót nhưng luôn “cố gắng hết sức” để giảm thiểu.Connectionless:Không có cơ chế bắt tay (handshaking): thiết lập  truyền dữ liệu  kết thúc.Không nắm giữ trạng thái.Các segments được xử lý độc lập với nhau.Chương 3. Giao thức tầng giao vận (transport layer)13UDP: Segment structuresource port.dest port.length.application data.checksum: mã kiểm tra lỗi (phục vụ cho cơ chế nhận biết lỗi – error detection)source port #dest port #32 bitsApplicationdata (message)UDP segment formatlengthchecksumLength, inbytes of UDPsegment,includingheaderChương 3. Giao thức tầng giao vận (transport layer)14UDP segment - exampleReceiver’s MAC addressSender’s MAC addressType of upper layer’s protocol( 0x0800 = IP )Chương 3. Giao thức tầng giao vận (transport layer)15UDP segment – example (cnt.)IP’s HeaderChương 3. Giao thức tầng giao vận (transport layer)16UDP segment – example (cnt.)UDP’s headerChương 3. Giao thức tầng giao vận (transport layer)17UDP segment – example (cnt.)Data of applicaton layerChương 3. Giao thức tầng giao vận (transport layer)18UDP checksumMã kiểm tra phục vụ cho cơ chế nhận biết lỗi.Sender:Coi segment như chuỗi các số nguyên 16-bit.checksum = số bù một (1’s complement) của tổng các số nguyên đó.Receiver:Tính toán checksum của segment nhận được.So sánh với checksum chứa trong trường checksum của segment nhận được  nếu sai khác tức là có lỗi.Chương 3. Giao thức tầng giao vận (transport layer)19UDP checksum: examplePhép cộng các số 16-bit liên tiếp là phép cộng có nhớ.Kiểm tra checksum: Lấy tổng các số 16-bit (có nhớ) cộng với checksum: Kết quả là 1111 1111 1111 1111 thì không có lỗi, nếu khác là có lỗi.1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 01 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 11 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 11 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 01 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1wraparoundsumchecksum(bù 1)Chương 3. Giao thức tầng giao vận (transport layer)20Ch3. The Transport LayerTransport Layer Services & Principles.Multiplexing/Demultiplexing.Connectionless Transport (UDP).Principles of Reliable Data Transfer (RDT).Connection-oriented Transport (TCP).Congestion Control.Sử dụng TCP hay UDPChương 3. Giao thức tầng giao vận (transport layer)21Principles of Reliable Data Transfer (RDT)Truyền dữ liệu tin cậy là vấn đề vô cùng quan trọng (top 10 list of important networking topics).Cần thiết đối với app, transport, datalink layer.Chương 3. Giao thức tầng giao vận (transport layer)22RDTsendsidereceivesiderdt_send(): called from above, (e.g., by app.). Passed data to deliver to receiver upper layerudt_send(): called by rdt,to transfer packet over unreliable channel to receiverrdt_rcv(): called when packet arrives on rcv-side of channeldeliver_data(): called by rdt to deliver data to upperChương 3. Giao thức tầng giao vận (transport layer)23Finite State Machine (FSM)state1state2event causing state transitionactions taken on state transitionstate: when in this “state” next state uniquely determined by next eventeventactionsChương 3. Giao thức tầng giao vận (transport layer)24RDT1.0: reliable data transfer over reliable channelTầng dưới:Không có lỗi.Không mất mát dữ liệu (gói tin).Sender gửi dữ liệu xuống tầng dưới.Receiver nhận dữ liệu gửi từ tầng dưới lên.Wait for call from abovepacket = make_pkt(data)udt_send(packet)rdt_send(data)extract (packet,data)deliver_data(data)Wait for call from belowrdt_rcv(packet)senderreceiverChương 3. Giao thức tầng giao vận (transport layer)25RDT2.0: channel with bit errorsTầng dưới có thể có lỗi bit (0   1)UDP checksum có khả năng phát hiện lỗi bit.Khắc phục lỗi (error recover) thế nào?acknowledgements (ACKs): receiver thông báo đã nhận gói dữ liệu tốt (không có lỗi).negative acknowledgements (NAKs): receiver thông báo gói dữ liệu nhận được có lỗi.Nếu nhận được NAK, sender cần gửi lại gói tin bị lỗi.human scenarios using ACKs, NAKs? (telephone talking!)rdt2.0 so với rdt1.0:error detectionreceiver feedback: control msgs (ACK,NAK) rcvr->sender.Chương 3. Giao thức tầng giao vận (transport layer)26RDT2.0: FSM specificationWait for call from abovesnkpkt = 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)Wait for ACK or NAKWait for call from belowsenderreceiverrdt_send(data)LChương 3. Giao thức tầng giao vận (transport layer)27RDT2.0: operation with no errorsWait for call from abovesnkpkt = 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)Wait for ACK or NAKWait for call from belowrdt_send(data)LChương 3. Giao thức tầng giao vận (transport layer)28RDT2.0: error scenarioWait for call from abovesnkpkt = 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)Wait for ACK or NAKWait for call from belowrdt_send(data)LChương 3. Giao thức tầng giao vận (transport layer)29RDT2.0: problemsNếu ACK, NAK bị lỗi?Sender không biết kết quả gửi gói tin thế nào.Cũng chẳng thể gửi lại gói tin vì có thể gây hiện tượng lặp gói tin.Giải pháp:Sender truyền lại nếu như ACK/NAK bị lỗi.Kiểm soát lặp gói tin (duplicate handling)Thêm vào gói tin trường số thứ tự (sequence number).Căn cứ vào số thứ tự gói tin, receiver bỏ qua những gói tin bị lặp. Sender sẽ không gửi gói tin tiếp theo nếu như chưa chắc chắn receiver nhận được gói trước đó (stop and wait protocol).Chương 3. Giao thức tầng giao vận (transport layer)30RDT2.1: sender, handles garbled ACK/NAKsWait for call 0 from abovesndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)rdt_send(data)Wait for ACK or NAK 0udt_send(sndpkt)rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isNAK(rcvpkt) )sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)rdt_send(data)rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt)rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isNAK(rcvpkt) )rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) Wait for call 1 from aboveWait for ACK or NAK 1LLChương 3. Giao thức tầng giao vận (transport layer)31RDT2.1: receiver, handles garbled ACK/NAKsWait for 0 from belowsndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt)rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)Wait for 1 from belowrdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)rdt_rcv(rcvpkt) && (corrupt(rcvpkt)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt)rdt_rcv(rcvpkt) && (corrupt(rcvpkt)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)Chương 3. Giao thức tầng giao vận (transport layer)32RDT2.2: a NAK-free protocolWait for call 0 from abovesndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)rdt_send(data)udt_send(sndpkt)rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) )rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) Wait for ACK0sender FSMfragmentWait for 0 from belowrdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK1, chksum)udt_send(sndpkt)rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq1(rcvpkt))udt_send(sndpkt)receiver FSMfragmentLChương 3. Giao thức tầng giao vận (transport layer)33RDT3.0: channels with errors and lossTầng dưới:Có thể có lỗi.Có thể gây mất mát gói tin.Giải pháp:Sender truyền lại gói tin nếu như chờ ACK một thời gian nhất định nào đó mà không thấy (cần countdown timer).Nếu ACK hay gói tin chỉ bị chậm thôi?truyền lại sẽ gây ra hiện tượng lặp gói tin.cần sequence number.Chương 3. Giao thức tầng giao vận (transport layer)34RDT3.0 sendersndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)start_timerrdt_send(data)Wait for ACK0rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,1) )Wait for call 1 from abovesndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)start_timerrdt_send(data)rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,0) )rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1) stop_timerstop_timerudt_send(sndpkt)start_timertimeoutudt_send(sndpkt)start_timertimeoutrdt_rcv(rcvpkt)Wait for call 0from aboveWait for ACK1Lrdt_rcv(rcvpkt)LLLChương 3. Giao thức tầng giao vận (transport layer)35RDT3.0 in actionChương 3. Giao thức tầng giao vận (transport layer)36RDT3.0 in action (cont)Chương 3. Giao thức tầng giao vận (transport layer)37Hiệu suất của RDT3.0 Giả sử có đường truyền giữa 2 host với các thông số sau:Bandwidth: 1 Gbps (109 bits per second)Propagation delay: 15 ms Size of packet: 1KBtransmit=8kb/pkt109 b/sec= 8 microsecU sender: utilization – fraction of time sender busy sending1KB trong 30msec -> 33KB/sec effective throught put over 1 Gbps linknetwork protocol limits use of physical resources!L (packet length in bits)R (transmission rate, bps)=TChương 3. Giao thức tầng giao vận (transport layer)38RDT3.0 stop-and-wait operationfirst packet bit transmitted, t = 0senderreceiverRTT first packet bit arrivesACK arrives, send next packet, t = RTT + L / Rlast packet bit transmitted, t = L / Rlast packet bit arrives, send ACKChương 3. Giao thức tầng giao vận (transport layer)39Tăng hiệu suất đường truyền - Pipelined protocolsPipelining: Gửi liên tục nhiều packets rồi đợi ACKSố thứ tự gói tin (sequence numbers) tăng đều và duy nhấtSử dụng bộ nhớ đệm tại Sender và ReceiverCó 2 phương án xử lý khi gặp lỗi: go-Back-N Selective repeatChương 3. Giao thức tầng giao vận (transport layer)40Tăng hiệu suất đường truyền - Pipelined protocolsfirst packet bit transmitted, t = 0senderreceiverRTT last bit transmitted, t = L / Rfirst packet bit arriveslast packet bit arrives, send ACKACK arrives, send next packet, t = RTT + L / Rlast bit of 2nd packet arrives, send ACKlast bit of 3rd packet arrives, send ACKIncrease utilizationby a factor of 3!Chương 3. Giao thức tầng giao vận (transport layer)41Go-Back-NSender:Sử dụng k-bit ở header để lưu sequence numberCửa sổ trượt cho phép chứa N packets chưa được báo ACK.Nếu nhận ACK(n): Mọi packet có số hiệu tới n-1 đã gửi thành côngCần giám sát thời gian timeout cho mỗi packet đang gửi đi (in-flight packet)timeout(n): Gửi lại packet n và các packet có seq # lớn hơn trong windowChương 3. Giao thức tầng giao vận (transport layer)42GBN in actionChương 3. Giao thức tầng giao vận (transport layer)43Waitstart_timerudt_send(sndpkt[base])udt_send(sndpkt[base+1])udt_send(sndpkt[nextseqnum-1])timeoutrdt_send(data) if (nextseqnum no receiver buffering!Re-ACK pkt with highest in-order seq #Waitudt_send(sndpkt)defaultrdt_rcv(rcvpkt) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum++expectedseqnum=1sndpkt = make_pkt(expectedseqnum,ACK,chksum)LChương 3. Giao thức tầng giao vận (transport layer)45Selective Repeat (SR)Receiver gửi ACK cho từng packet tới đíchLưu trữ packets vào buffers (nếu cần thiết) để chuyển lên layer phía trênSender gửi lại những packet không nhận được ACK sau khoảng timeoutCần cơ chế định thời timeout cho từng packet (chưa được ACK)Sender windowN consecutive seq #’sagain limits seq #s of sent, unACKed pktsChương 3. Giao thức tầng giao vận (transport layer)46Selective repeat: sender, receiver windowsChương 3. Giao thức tầng giao vận (transport layer)47data from above :Nếu STT tiếp theo nằm trong cửa sổ→gửi gói tin timeout(n):gửi lại gói n, restart timerACK(n) in [sendbase,sendbase+N]:đánh dấu gói n đã nhận đượcnếu n là gói chưa ACK nhỏ nhất, tăng cửa sổ lên STT chưa ACK tiếp theo senderpkt n in [rcvbase, rcvbase+N-1]send ACK(n)out-of-order: bufferin-order: deliver (also deliver buffered, in-order pkts), advance window to next not-yet-received pktpkt n in [rcvbase-N,rcvbase-1]ACK(n)otherwise: ignore receiverSelective repeatChương 3. Giao thức tầng giao vận (transport layer)48Selective repeat in actionChương 3. Giao thức tầng giao vận (transport layer)49Transport Layer3-49Selective repeat: rắc rối khi window size quá lớnExample: seq #’s: 0, 1, 2, 3window size=3receiver sees no difference in two scenarios!incorrectly passes duplicate data as new in (a)Q: what relationship between seq # size and window size?Yes, windows size= (total number /2)0,1,2,3 => widwowsize=4/2=2Chương 3. Giao thức tầng giao vận (transport layer)50Ch3. The Transport LayerTransport Layer Services & Principles.Multiplexing/Demultiplexing.Connectionless Transport (UDP).Principles of Reliable Data Transfer (RDT).Connection-oriented Transport (TCP).Congestion Control.Sử dụng TCP hay UDPChương 3. Giao thức tầng giao vận (transport layer)51TCP OverviewTransmission Control Protocol [RFCs: 793,1122, 1323, 2018, 2581]Point-to-point: 1 sender, 1 receiver.Giao thức tin cậy (reliable).Kiểm soát luồng (flow control).Kiểm soát nghẽn mạng (congestion control).full duplex: Gửi & Nhận trên cùng một liên kết.send/receive buffersChương 3. Giao thức tầng giao vận (transport layer)52TCP segment structuresource port #dest port #32 bitsapplicationdata (variable length)sequence numberacknowledgement numberrcvr window sizeptr urgent datachecksumFSRPAUheadlennotusedOptions (variable length)URG: urgent data (generally not used)ACK: ACK #validPSH: push data toapp immediately (generally not used)RST, SYN, FIN:connection estab(setup, teardowncommands)# bytes rcvr willingto acceptcountingby bytes of data(not segments!)Internetchecksum(as in UDP)Header length (by 32-bit word)Chương 3. Giao thức tầng giao vận (transport layer)53TCP sequence number and ACKsSeq. #’s:byte stream “number” of first byte in segment’s dataACKs:seq # of next byte expected from other sidecumulative ACKQ: how receiver handles out-of-order segmentsA: TCP spec doesn’t say, - up to implementorHost AHost BSeq=42, ACK=79, data = ‘C’Seq=79, ACK=43, data = ‘C’Seq=43, ACK=80Usertypes‘C’host ACKsreceipt of echoed‘C’host ACKsreceipt of‘C’, echoesback ‘C’timesimple telnet scenarioChương 3. Giao thức tầng giao vận (transport layer)54bangtqh@utc2.edu.vnTCP segment – example (cnt.)Receiver’s MAC addressSender’s MAC addressType of network layer’s protocol( 0x0800 = IP )Chương 3. Giao thức tầng giao vận (transport layer)55TCP segment – example (cnt.)IP’s HeaderChương 3. Giao thức tầng giao vận (transport layer)56Flags (00010000)TCP segment – example (cnt.)TCP’s HeaderSrc’s port # (2467)Dst’s port # (80)Sequence numberACK numberHeader’s length(0xa0 = 40 bytes)Wnd’s sizeChương 3. Giao thức tầng giao vận (transport layer)57TCP segment – example (cnt.)TCP’s HeaderCheck sumPointer urgent dataChương 3. Giao thức tầng giao vận (transport layer)58TCP segment – example (cnt.)TCP’s HeaderTCP’s Options(20 bytes)TCP Round Trip Time and TimeoutQ: Làm sao thiết lập giá trị TCP timeout?Lớn hơn RTTNhưng RTT thay đổi thì sao?Nếu đặt Timeout quá nhỏ: → tình trạng ACK đến trễn hơn Timeout Nếu vậy không nhất thiết phải truyền lạiNếu đặt quá lớn: Phản hồi với segmet bị rớt chậmQ: Làm sao để đo được RTT?SampleRTT: đo thời gian từ lúc gói tin gửi đi đến lúc nhận được ACKBỏ qua tình huống truyền lạiSampleRTT thay đổi, muốn đo được RTT “mượt hơn”Lấy trung bình của những lần đo SampleRTT gần nhất (không tính giá trị đo hiện thời)Transport Layer3-59TCP RTT và TimeoutTransport Layer3-60EstimatedRTT = (1- )*EstimatedRTT + *SampleRTTtrung bình động có trọng số hàm mũ ảnh hưởng của giá trị cũ giảm nhanh theo hàm mũ Giá trị thông dụng:  = 0.125Transport Layer3-61Ví dụ đo RTT:TCP Round Trip Time and TimeoutThiết lập thời gian TimeoutEstimtedRTT cộng với “biên an toàn”EstimatedRTT thay đổi với biên độ lớn → biên an toàn lớnĐầu tiên đo độ biến thiên của EstimatedRTT so với SampleRTTTransport Layer3-62TimeoutInterval = EstimatedRTT + 4*DevRTTDevRTT = (1-)*DevRTT + *|SampleRTT-EstimatedRTT|(Thông thường,  = 0.25) Sau đó thiết lập Timeout:TCP: Truyền tải dữ liệu tin cậyTCP tạo dịch vụ truyền tải dữ liệu tin cậy trên nền dịch vụ không tin cậy IPCác segment được truyền theo cơ chế đường ống (pipelined)ACK cộng dồnTCP chỉ sử dụng một bộ đếm thời gian cho truyền tải lạiTruyền tải lại được kích hoạt bởi: sự kiện hết thời gian chờ Trùng lặp ACK Đầu tiên xem xét ng/gửi TCP đơn giản: bỏ qua các ack trùng lặpbỏ qua kiểm tra lưu lượng, kiểm tra tắc nghẽnChương 3. Giao thức tầng giao vận (transport layer)63TCP sender events:data rcvd from app:Tạo ra segment với STTSTT là stt trên luồng-byte của byte dữ liệu đầu tiên trong segmentkhởi động bộ đếm t/g nếu nó chưa chạy (bộ đếm t/g cho segment chưa nhận ACK lâu nhất) khoảng t/g hết hạn: TimeOutIntervaltimeout:gửi lại segment gây nên timeoutđặt lại timer Ack rcvd:Nếu đó là ACK cho các khúc trước đó chưa được ACK Cập nhật danh sách các gói đã được ACKchạy lại timer nếu như còn có các segment chưa ACKTransport Layer3-64Transport Layer3-65TCP sender (Đơn giản hóa) NextSeqNum = InitialSeqNum SendBase = InitialSeqNum loop (forever) { switch(event) event: Nhận được dữ liệu từ application tầng trên tạo TCP segment có số thứ tự là NextSeqNum if (timer không chạy) khởi chạy timer đẩy segment xuống cho tầng IP NextSeqNum = NextSeqNum + length(data) event: timer timeout Gửi lại segment có stt nhỏ nhất mà chưa được ACK khởi chạy timer event: Nhận ACK, với giá trị trường ACK là y if (y > SendBase) { SendBase = y if (Còn sement chưa ACK) khởi chạy timer } } /* end of loop forever */ Ghi chú: SendBase-1: byte ACK được cộng dồn cuối cùngVí dụ: SendBase-1 = 71; y=73, vậy bên nhận cần 73+ ; y > SendBase, vì vậy có thêm dữ liệu được ACKTCP: retransmission scenariosTransport Layer3-66Host ASeq=100, 20 bytes dataACK=100timepremature timeoutHost BSeq=92, 8 bytes dataACK=120Seq=92, 8 bytes dataSeq=92 timeoutACK=120Host ASeq=92, 8 bytes dataACK=100losstimeoutlost ACK scenarioHost BXSeq=92, 8 bytes dataACK=100timeSeq=92 timeoutSendBase= 100SendBase= 120SendBase= 120Sendbase= 100TCP retransmission scenarios (more)Transport Layer3-67Host ASeq=92, 8 bytes dataACK=100losstimeoutCumulative ACK scenarioHost BXSeq=100, 20 bytes dataACK=120timeSendBase= 120Transport Layer3-68Tạo ACK trong TCP [RFC 1122, RFC 2581]Sự kiện tại ReceiverNhận được segment đúng thứ tự với STT hợp lí. Tất cả dữ liệu từ STT về trước đã được ACKNhận được segment đúng thứ tự với số STT hợp lý. Một segment khác đang chờ ACK Nhân được segment không đúng thứ tự (STT cao hơn STT mong đợi). Phát hiện thiếu hụtSegment nhận được khỏa lấp 1phân hoặc toàn bộ phần thiếuhụtHành vi TCP tại ReceiverTrì hoãn chưa ACK vội. chờ segment kế tiếp trong 500ms. nếu không có segment nào được gửi đến, gửi ACKNgay lập tức gửi 1 segment với ACKcộng dồn xác nhận cả 2 segment đã đượcnhận thành công Ngay lập tức gửi 1 ACK lặp, chỉ rõ byte mong đợi tiếp theoNgay lập tức gửi ACKTransport Layer3-69Fast RetransmitTime-out thường tương đối dài:trì hoãn lâu trước khi gửi lại gói bị mấtphát hiện mất segments thông qua ACK lặp.Sender thường gửi nhiều segment liên tụcnếu có 1 segment bị mất thì sẽ có nhiều ACK lặpNếu sender nhận được 3 ACK yêu cầu cho cùng 1 segment → nó xác định segment đó đã bị mất:fast retransmit: gửi lại segment bị mất ngay cả khi chưa tới thời điểm time-outFast Retransmit (cont.)Chương 3. Giao thức tầng giao vận (transport layer)70Host AACK=2Host BXSeq=1timeGửi liền 2 ACK yêu cầu segment có seq# 2 ACK=2ACK=2Seq=2Seq=3Seq=2Seq=2 timeoutTransport Layer3-71 event: Nhận ACK, với ACK# là y if (y > SendBase) { SendBase = y if (Nếu còn segment đang đợi ACK) start timer } else { tăng bộ đếm duplicate ACKs nhận được cho y if (nếu bộ đếm lặp của y = 3) { gửi lại segment với sequence # = y } Fast retransmit algorithm:a duplicate ACK for already ACKed segmentTruyền lại nhanhChương 3. Giao thức tầng giao vận (transport layer)72TCP flow controlCác apps có thể xử lý dữ liệu chậm, các gói tin nhận về được đưa vào bộ đệm (receiver buffer).Flow control: kiểm soát không để cho receiver buffer bị tràn vì sender gửi nhiều gói tin quá.Receiver: Thông báo cho sender biết kích thước của RcvWidow (free buffer): trường rcv window size trong TCP segment headers.Sender: Luôn nắm được kích thước tối đa của gói tin có thể truyền tiếp.Chương 3. Giao thức tầng giao vận (transport layer)73TCP Connection managementTCP: Connection-oriented.Khởi tạo các giá trị:sequence number.buffers, flow control information.Client:Connection initiator (khởi tạo liên kết: socket).Server: Chấp nhận kết nối.Three way handshaking:Bước 1: client gửi TCP SYN control segment tới server.Bước 2: server nhận SYN segment rồi trả lời bằng SYNACK segment.Bước 3: client nhận SYNACK segment và trả lời bằng ACK segment (có thể có dữ liệu đi kèm).Chương 3. Giao thức tầng giao vận (transport layer)74Chương 3. Giao thức tầng giao vận (transport layer)75TCP Connection management: ngắt liên kếtBước 1: client (phía muốn ngắt liên kết) gửi TCP FIN segment.Bước 2: server (phía còn lại) nhận được FIN, gửi ACK, ngắt liên kết, gửi tiếp FIN segment.Bước 3: client nhận FIN, trả lời bằng ACK. timed wait (chờ một lúc nữa cho tới khi liên kết đóng hẳn).Bước 4: server nhận ACK, đóng liên kết.clientFINserverACKACKFINclosingclosingclosedtimed waitclosedChương 3. Giao thức tầng giao vận (transport layer)76TCP client lifecycleTCP server lifecycleTCP Connection management (cont.)Chương 3. Giao thức tầng giao vận (transport layer)77bangtqh@utc2.edu.vnCh3. The Transport LayerTransport Layer Services & Principles.Multiplexing/Demultiplexing.Connectionless Transport (UDP).Principles of Reliable Data Transfer (RDT).Connection-oriented Transport (TCP).Congestion Control.Sử dụng TCP hay UDPChương 3. Giao thức tầng giao vận (transport layer)78Congestion controlNghẽn mạng là điều khó tránh khỏi!!!Khi mạng bị nghẽn, các gói tin có thể bị trễ hay bị mất.Hai hướng tiếp cận:End-end congestion control: Thông tin về mức độ nghẽn mạng được suy ra từ lượng tin bị mất mát trong quá trình truyền.Network-assited congestion control: Routers cung cấp các thông tin phản hồi về tình trạng nghẽn mạng tới end systems.Bit thông báo nghẽn mạng  đừng gửi nữa hoăc xin chờ một lát.Tốc độ tối đa cho phép gửi (maximum rate allowed).TCP sử dụng phương pháp end-end congestion control.Chương 3. Giao thức tầng giao vận (transport layer)79Causes/costs of congestion: scenario 1 2 senders, 2 receivers01 router, buffers vô hạnno retransmissionlarge delays when congestedmaximum achievable throughputunlimited shared output link buffersHost Alin : original dataHost BloutChương 3. Giao thức tầng giao vận (transport layer)80Causes/costs of congestion: scenario 2 one router, buffers có hạnsender gửi lại các packet bị mấtfinite shared output link buffersHost Alin : original dataHost Bloutl'in : original data, plus retransmitted dataChương 3. Giao thức tầng giao vận (transport layer)81always: (goodput)“perfect” retransmission only when loss:retransmission of delayed (not lost) packet makes larger (than perfect case) for samelinlout=linlout>linlout“costs” of congestion: more work (retrans) for given “goodput”unneeded retransmissions: link carries multiple copies of pktCauses/costs of congestion: scenario 2Chương 3. Giao thức tầng giao vận (transport layer)82Causes/costs of congestion: scenario 3 4 sendersmultihop pathstimeout/retransmitlinQ: what happens as and increase ?linfinite shared output link buffersHost Alin : original dataHost Bloutl'in : original data, plus retransmitted dataChương 3. Giao thức tầng giao vận (transport layer)83Causes/costs of congestion: scenario 3 Another “cost” of congestion: Khi thực hiện drop các packet trên đường truyền  dung lượng đường truyền đã sử dụng để gửi tin tới điểm bị drop là vô ích.Host AHost BloutChương 3. Giao thức tầng giao vận (transport layer)84TCP Congestion Controlend-end control (no network assistance)Sender điều khiển lượng dữ liệu gửi đi theo quy tắc: LastByteSent-LastByteAcked  min {CongWin, ReceiverWnd}Công thức xấp xỉ:Giá trị CongWin luôn biến đổi và được tính toán theo khả năng truyền tải của mạng.Làm thế nào sender đánh giá được tình trạng nghẽn?loss event = timeout or 3 duplicate ACKsTCP sender reduces rate (CongWin) after loss eventCơ chế đánh giá nghẽn:AIMDSlow startconservative after timeout eventsrate = CongWin RTT Bytes/secChương 3. Giao thức tầng giao vận (transport layer)85multiplicative decrease: cut CongWin in half after loss eventadditive increase: increase CongWin by 1 MSS every RTT in the absence of loss events: probingLong-lived TCP connectionTCP AIMD (additive-increase, multiplicative-decrease)Chương 3. Giao thức tầng giao vận (transport layer)86TCP Slow StartWhen connection begins, CongWin = 1 MSSExample: MSS = 500 bytes & RTT = 200 msecinitial rate = 20 kbpsAvailable bandwidth may be >> MSS/RTTdesirable to quickly ramp up to respectable rateWhen connection begins, increase rate exponentially fast until first loss eventChương 3. Giao thức tầng giao vận (transport layer)87TCP Slow Start (more)When connection begins, increase rate exponentially until first loss event:double CongWin every RTTdone by incrementing CongWin for every ACK receivedSummary: initial rate is slow but ramps up exponentially fastHost Aone segmentRTTHost Btimetwo segmentsfour segmentsChương 3. Giao thức tầng giao vận (transport layer)88RefinementAfter 3 dup ACKs:CongWin is cut in halfwindow then grows linearlyBut after timeout event:CongWin instead set to 1 MSS; window then grows exponentiallyto a threshold, then grows linearly 3 dup ACKs indicates network capable of delivering some segments timeout before 3 dup ACKs is “more alarming”Philosophy:Chương 3. Giao thức tầng giao vận (transport layer)89Q: When should the exponential increase switch to linear? A: When CongWin gets to 1/2 of its value before timeout. Implementation:Variable Threshold At loss event, Threshold is set to 1/2 of CongWin just before loss eventRefinement (more)Chương 3. Giao thức tầng giao vận (transport layer)90When CongWin is below Threshold, sender in slow-start phase, window grows exponentially.When CongWin is above Threshold, sender is in congestion-avoidance phase, window grows linearly.When a triple duplicate ACK occurs, Threshold set to CongWin/2 and CongWin set to Threshold.When timeout occurs, Threshold set to CongWin/2 and CongWin is set to 1 MSS. Summary: TCP Congestion ControlChương 3. Giao thức tầng giao vận (transport layer)91TCP throughput (or transmission rate)Gía trị throughout (số packet gửi đi / giây) của TCP tính theo Window size và RTT là bao nhiêu?Không tính giai đoạn slowstartGọi W là giá trị window size khi xuất hiện mất gói.Khi window size = W, throughput = W/RTTNgay sau khi có nghẽn (lost), window size giảm xuống = W/2  throughput = W/2RTT. Throughout trung bình là: 0.75 W/RTT Throughout TB = 3W/4RTTChương 3. Giao thức tầng giao vận (transport layer)92TCP FuturesHỏi: Giả sử MSS = 1500 byte, RTT = 100µs , Cần gửi đi với tốc độ là 10 Gbps (throughput=109 bps). Vậy giá trị Windowsize phải là bao nhiêu ?Trả lời: window size W = 83,333 in-flight segmentsThroughput tính theo loss rate: Trong đó L = loss rate Chương 3. Giao thức tầng giao vận (transport layer)93Delay modelingQ: How long does it take to receive an object from a Web server after sending a request? Ignoring congestion, delay is influenced by:TCP connection establishmentdata transmission delayslow startNotation, assumptions:Assume one link between client and server of rate RS: MSS (bits)O: object size (bits)no retransmissions (no loss, no corruption)Window size:First assume: fixed congestion window, W segments Then dynamic window, modeling slow startChương 3. Giao thức tầng giao vận (transport layer)94Fixed congestion window (1)First case:WS/R > RTT + S/R: ACK for first segment in window returns before window’s worth of data sentdelay = 2RTT + O/RChương 3. Giao thức tầng giao vận (transport layer)95Transport Layer3-95Fixed congestion window (2)Second case:WS/R < RTT + S/R: wait for ACK after sending window’s worth of data sentdelay = 2RTT + O/R+ (K-1)[S/R + RTT - WS/R]Chương 3. Giao thức tầng giao vận (transport layer)96Ch3. The Transport LayerTransport Layer Services & Principles.Multiplexing/Demultiplexing.Connectionless Transport (UDP).Principles of Reliable Data Transfer (RDT).Connection-oriented Transport (TCP).Congestion Control.Sử dụng TCP hay UDPChương 3. Giao thức tầng giao vận (transport layer)97Một số so sánh TCP/UDPCó liên kết, lưu trữ trạng thái liên kết (quản lý liên kết).Điểm-điểmCó độ trễ (delay): thiết lập, quản lý liên kết, luồng, nghẽnSegment header lớn (20 bytes)Bị giới hạn tốc độ truyền (congestion control)Không liên kết, không lưu trữ trạng thái.Điểm-điểm, quảng bá.Độ trễ thấp.Segment header nhỏ (8 bytes)Không giới hạn tốc độ truyền.Chương 3. Giao thức tầng giao vận (transport layer)98Các app thực tếApplicationApp protocolTransport protocolElectronic mailSMTPTCPRemote terminal accessTelnetTCPWebHTTPTCPFile transferFTPTCPRemote file serverNFStypically UDPStreaming multimediaproprietarytypically UDPInternet telephonyproprietarytypically UDPNetwork managementSNMPtypically UDPRouting protocolRIPtypically UDPName translationDNStypically UDP

Các file đính kèm theo tài liệu này:

  • pptmang_may_tinhchapter3_6004_2004690.ppt
Tài liệu liên quan