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

ppt 98 trang hapham 1890
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Mạng máy tính - Chương 3: Tầng giao vận (Transport layer)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_mang_may_tinh_chuong_3_tang_giao_van_transport_lay.ppt

Nội dung text: Bài giảng Mạng máy tính - Chương 3: Tầng giao vận (Transport layer)

  1. Chương 3. Tầng giao vận (transport layer) Quang Dieu Tran, PhD Faculty of Information Technology University of Communication and Transport (Branch in Ho Chi Minh City) Email: dieutq@gmail.com Website: sites.google.com/sites/tranlectures
  2. Chương 3. Giao thức tầng giao vận (transport layer) 2
  3. Ch3. The Transport Layer 1. Transport Layer Services & Principles. 2. Multiplexing/Demultiplexing. 3. Connectionless Transport (UDP). 4. Principles of Reliable Data Transfer (RDT). 5. Connection-oriented Transport (TCP). 6. Congestion Control. 7. Sử dụng TCP hay UDP Chương 3. Giao thức tầng giao vận (transport layer) 3
  4. Transport Layer Services & Principles ◼ Cung cấp phương tiện truyền application thông logic (logical transport network data link network communication) giữa các physical data link network physical applications. data link physical network ◼ PDUs data link physical network data link  application: messages. physical  network transport: segments (đoạn). data link physical ◼ Các msg từ tầng application gửi application xuống được chia nhỏ thành các transport network data link đoạn (segments). physical ◼ Transport protocol được thực thi tại các trạm cuối (end system). Chương 3. Giao thức tầng giao vận (transport layer) 4
  5. Transport & Network layers ◼ Network layer: Household analogy:  Truyền thông logic giữa 12 kids sending letters to 12 kids các trạm làm việc (host). ◼ processes = kids  PDUs = packets (gói). ◼ app messages = letters in  IP (Internet Protocol) là giao thức truyền không tin envelopes cậy. ◼ hosts = houses ◼ Transport layer: ◼ transport protocol = Ann and  Tạo phương thức truyền Bill thông logic giữa các ứng ◼ network-layer protocol = dụng (application/process). postal service  Nhận các gói tin từ tầng Network gửi lên. Chương 3. Giao thức tầng giao vận (transport layer) 5
  6. Transport Protocols ◼ TCP (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) 6
  7. Ch3. The Transport Layer 1. Transport Layer Services & Principles. 2. Multiplexing/Demultiplexing. 3. Connectionless Transport (UDP). 4. Principles of Reliable Data Transfer (RDT). 5. Connection-oriented Transport (TCP). 6. Congestion Control. 7. Sử dụng TCP hay UDP Chương 3. Giao thức tầng giao vận (transport layer) 7
  8. Multiplexing/demultiplexing (mux/demux) sender receiver sender P3 P4 application-layer M M data application segment P1 transport P2 M header M network application application transport segment Ht M transport network Hn segment network ◼ 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 hosts ◼ Demultiplexing (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 hosts Chương 3. Giao thức tầng giao vận (transport layer) 8
  9. Dồn và chia kênh thế nào? ◼ source port number: ứng 32 bits dụng gửi dữ liệu. source port # dest port # ◼ destination port number: other header fields ứng dụng nhận dữ liệu. ◼ Port number: application 0-1023: well-known port data number (đã được giữ cho các (message) apps phổ biến). 1024 – 65535. TCP/UDP segment format Chương 3. Giao thức tầng giao vận (transport layer) 9
  10. Mux/demux: Ví dụ source port: x Web client host A dest. port: 23 server B host C source port:23 dest. port: x Source IP: C Source IP: C Dest IP: B Dest IP: B source port: y source port: x port use: simple telnet app dest. port: 80 dest. port: 80 Source IP: A Dest IP: B Web Web client source port: x server B host A dest. port: 80 port use: Web server Chương 3. Giao thức tầng giao vận (transport layer) 10
  11. Ch3. The Transport Layer 1. Transport Layer Services & Principles. 2. Multiplexing/Demultiplexing. 3. Connectionless Transport (UDP). 4. Principles of Reliable Data Transfer (RDT). 5. Connection-oriented Transport (TCP). 6. Congestion Control. 7. Sử dụng TCP hay UDP Chương 3. Giao thức tầng giao vận (transport layer) 11
  12. Connectionless 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) 12
  13. UDP: Segment structure ◼ source port. 32 bits ◼ dest port. Length, in source port # dest port # bytes of length checksum ◼ length. UDP segment, ◼ application data. including header ◼ checksum: mã kiểm Application data tra lỗi (phục vụ cho (message) cơ chế nhận biết lỗi – error detection) UDP segment format Chương 3. Giao thức tầng giao vận (transport layer) 13
  14. UDP segment - example Sender’s MAC address Receiver’s MAC address Type of upper layer’s protocol ( 0x0800 = IP ) Chương 3. Giao thức tầng giao vận (transport layer) 14
  15. UDP segment – example (cnt.) IP’s Header Chương 3. Giao thức tầng giao vận (transport layer) 15
  16. UDP segment – example (cnt.) UDP’s header Chương 3. Giao thức tầng giao vận (transport layer) 16
  17. UDP segment – example (cnt.) Data of applicaton layer Chương 3. Giao thức tầng giao vận (transport layer) 17
  18. UDP checksum ◼ Mã 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) 18
  19. UDP checksum: example ◼ Phé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 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 wraparound 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 sum 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 checksum 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 (bù 1) Chương 3. Giao thức tầng giao vận (transport layer) 19
  20. Ch3. The Transport Layer 1. Transport Layer Services & Principles. 2. Multiplexing/Demultiplexing. 3. Connectionless Transport (UDP). 4. Principles of Reliable Data Transfer (RDT). 5. Connection-oriented Transport (TCP). 6. Congestion Control. 7. Sử dụng TCP hay UDP Chương 3. Giao thức tầng giao vận (transport layer) 20
  21. Principles 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) 21
  22. RDT rdt_send(): called from above, deliver_data(): called by (e.g., by app.). Passed data to rdt to deliver data to upper deliver to receiver upper layer send receive side side udt_send(): called by rdt, rdt_rcv(): called when packet to transfer packet over arrives on rcv-side of channel unreliable channel to receiver Chương 3. Giao thức tầng giao vận (transport layer) 22
  23. Finite State Machine (FSM) event causing state transition actions taken on state transition state: when in this state state “state” next state event 1 2 uniquely determined actions by next event Chương 3. Giao thức tầng giao vận (transport layer) 23
  24. RDT1.0: reliable data transfer over reliable channel ◼ Tầ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 rdt_send(data) Wait for rdt_rcv(packet) call from call from extract (packet,data) above packet = make_pkt(data) below deliver_data(data) udt_send(packet) sender receiver Chương 3. Giao thức tầng giao vận (transport layer) 24
  25. RDT2.0: channel with bit errors ◼ Tầ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 detection  receiver feedback: control msgs (ACK,NAK) rcvr->sender. Chương 3. Giao thức tầng giao vận (transport layer) 25
  26. RDT2.0: FSM specification rdt_send(data) snkpkt = make_pkt(data, checksum) receiver udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for Wait for rdt_rcv(rcvpkt) && call from ACK or udt_send(sndpkt) corrupt(rcvpkt) above NAK udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) Wait for L call from sender below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Chương 3. Giao thức tầng giao vận (transport layer) 26
  27. RDT2.0: operation with no errors rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for Wait for rdt_rcv(rcvpkt) && call from ACK or udt_send(sndpkt) corrupt(rcvpkt) above NAK udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) Wait for L call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Chương 3. Giao thức tầng giao vận (transport layer) 27
  28. RDT2.0: error scenario rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for Wait for rdt_rcv(rcvpkt) && call from ACK or udt_send(sndpkt) corrupt(rcvpkt) above NAK udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) Wait for L call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Chương 3. Giao thức tầng giao vận (transport layer) 28
  29. RDT2.0: problems ◼ Nế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) 29
  30. RDT2.1: sender, handles garbled ACK/NAKs rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || Wait for Wait for isNAK(rcvpkt) ) ACK or call 0 from udt_send(sndpkt) above NAK 0 rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) L L Wait for Wait for ACK or call 1 from rdt_rcv(rcvpkt) && NAK 1 above ( corrupt(rcvpkt) || isNAK(rcvpkt) ) rdt_send(data) udt_send(sndpkt) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) Chương 3. Giao thức tầng giao vận (transport layer) 30
  31. RDT2.1: receiver, handles garbled ACK/NAKs rdt_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) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) sndpkt = make_pkt(NAK, chksum) Wait for Wait for udt_send(sndpkt) rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && below below not corrupt(rcvpkt) && has_seq1(rcvpkt) has_seq0(rcvpkt) sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) Chương 3. Giao thức tầng giao vận (transport layer) 31
  32. RDT2.2: a NAK-free protocol rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || Wait for Wait for isACK(rcvpkt,1) ) call 0 from ACK above 0 udt_send(sndpkt) sender FSM fragment rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && && isACK(rcvpkt,0) (corrupt(rcvpkt) || L has_seq1(rcvpkt)) Wait for receiver FSM 0 from udt_send(sndpkt) below fragment rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK1, chksum) udt_send(sndpkt) Chương 3. Giao thức tầng giao vận (transport layer) 32
  33. RDT3.0: channels with errors and loss ◼ Tầ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) 33
  34. RDT3.0 sender rdt_send(data) rdt_rcv(rcvpkt) && sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) || udt_send(sndpkt) isACK(rcvpkt,1) ) rdt_rcv(rcvpkt) start_timer L L Wait Wait for timeout call 0from for udt_send(sndpkt) above ACK0 start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt,1) && notcorrupt(rcvpkt) stop_timer && isACK(rcvpkt,0) stop_timer Wait Wait for timeout for call 1 from udt_send(sndpkt) ACK1 above start_timer rdt_rcv(rcvpkt) rdt_send(data) L rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || sndpkt = make_pkt(1, data, checksum) isACK(rcvpkt,0) ) udt_send(sndpkt) start_timer L Chương 3. Giao thức tầng giao vận (transport layer) 34
  35. RDT3.0 in action Chương 3. Giao thức tầng giao vận (transport layer) 35
  36. RDT3.0 in action (cont) Chương 3. Giao thức tầng giao vận (transport layer) 36
  37. Hiệ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: 1KB L (packet length in bits) 8kb/pkt T = = = 8 microsec transmit R (transmission rate, bps) 109 b/sec L / R .008 U = = = 0.00027 sender RTT + L / R 30.008 microsec onds m U sender: utilization – fraction of time sender busy sending m 1KB trong 30msec -> 33KB/sec effective throught put over 1 Gbps link m network protocol limits use of physical resources! Chương 3. Giao thức tầng giao vận (transport layer) 37
  38. RDT3.0 stop-and-wait operation sender receiver first packet bit transmitted, t = 0 last packet bit transmitted, t = L / R first packet bit arrives RTT last packet bit arrives, send ACK ACK arrives, send next packet, t = RTT + L / R L / R .008 U = = = 0.00027 sender RTT + L / R 30.008 microsec onds Chương 3. Giao thức tầng giao vận (transport layer) 38
  39. Tăng hiệu suất đường truyền - Pipelined protocols Pipelining: Gửi liên tục nhiều packets rồi đợi ACK  Số thứ tự gói tin (sequence numbers) tăng đều và duy nhất  Sử dụng bộ nhớ đệm tại Sender và Receiver ◼ Có 2 phương án xử lý khi gặp lỗi:  go-Back-N  Selective repeat Chương 3. Giao thức tầng giao vận (transport layer) 39
  40. Tăng hiệu suất đường truyền - Pipelined protocols sender receiver first packet bit transmitted, t = 0 last bit transmitted, t = L / R first packet bit arrives RTT last packet bit arrives, send ACK last bit of 2nd packet arrives, send ACK last bit of 3rd packet arrives, send ACK ACK arrives, send next packet, t = RTT + L / R Increase utilization by a factor of 3! 3 * L / R .024 U = = = 0.0008 sender RTT + L / R 30.008 microsecon ds Chương 3. Giao thức tầng giao vận (transport layer) 40
  41. Go-Back-N Sender: ◼ Sử dụng k-bit ở header để lưu sequence number ◼ Cửa sổ trượt cho phép chứa N packets chưa được báo ACK. r Nếu nhận ACK(n): Mọi packet có số hiệu tới n-1 đã gửi thành công r Cần giám sát thời gian timeout cho mỗi packet đang gửi đi (in-flight packet) r timeout(n): Gửi lại packet n và các packet có seq # lớn hơn trong window Chương 3. Giao thức tầng giao vận (transport layer) 41
  42. GBN in action Chương 3. Giao thức tầng giao vận (transport layer) 42
  43. GBN: sender extended FSM rdt_send(data) if (nextseqnum < base+N) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } L else refuse_data(data) base=1 nextseqnum=1 timeout start_timer Wait udt_send(sndpkt[base]) rdt_rcv(rcvpkt) udt_send(sndpkt[base+1]) && corrupt(rcvpkt) udt_send(sndpkt[nextseqnum-1]) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer Chương 3. Giao thức tầng giao vận (transport layer) 43
  44. GBN: receiver extended FSM default udt_send(sndpkt) rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) L && hasseqnum(rcvpkt,expectedseqnum) expectedseqnum=1 Wait extract(rcvpkt,data) sndpkt = deliver_data(data) make_pkt(expectedseqnum,ACK,chksum) sndpkt = make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt) expectedseqnum++ ACK-only: always send ACK for correctly-received pkt with highest in-order seq #  may generate duplicate ACKs  need only remember expectedseqnum ◼ out-of-order pkt:  discard (don’t buffer) -> no receiver buffering!  Re-ACK pkt with highest in-order seq # Chương 3. Giao thức tầng giao vận (transport layer) 44
  45. Selective Repeat (SR) ◼ Receiver gửi ACK cho từng packet tới đích Lưu trữ packets vào buffers (nếu cần thiết) để chuyển lên layer phía trên ◼ Sender gửi lại những packet không nhận được ACK sau khoảng timeout Cần cơ chế định thời timeout cho từng packet (chưa được ACK) ◼ Sender window N consecutive seq #’s again limits seq #s of sent, unACKed pkts Chương 3. Giao thức tầng giao vận (transport layer) 45
  46. Selective repeat: sender, receiver windows Chương 3. Giao thức tầng giao vận (transport layer) 46
  47. Selective repeat sender receiver data from above : pkt n in [rcvbase, rcvbase+N-1] ❑ send ACK(n) ❑ Nếu STT tiếp theo nằm trong cửa sổ→gửi gói tin ❑ out-of-order: buffer ❑ in-order: deliver (also deliver timeout(n): buffered, in-order pkts), advance ❑ gửi lại gói n, restart timer window to next not-yet-received ACK(n) in pkt [sendbase,sendbase+N]: pkt n in [rcvbase-N,rcvbase-1] ❑ đánh dấu gói n đã nhận ❑ ACK(n) được otherwise: ❑ nếu n là gói chưa ACK nhỏ ❑ ignore nhất, tăng cửa sổ lên STT chưa ACK tiếp theo Chương 3. Giao thức tầng giao vận (transport layer) 47
  48. Selective repeat in action Chương 3. Giao thức tầng giao vận (transport layer) 48
  49. Selective repeat: rắc rối khi window size quá lớn Example: ◼ seq #’s: 0, 1, 2, 3 ◼ window size=3 ◼ receiver 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=2 Chương 3. Giao thức tầng giao vận (transport layer) Transport Layer 3-49 49
  50. Ch3. The Transport Layer 1. Transport Layer Services & Principles. 2. Multiplexing/Demultiplexing. 3. Connectionless Transport (UDP). 4. Principles of Reliable Data Transfer (RDT). 5. Connection-oriented Transport (TCP). 6. Congestion Control. 7. Sử dụng TCP hay UDP Chương 3. Giao thức tầng giao vận (transport layer) 50
  51. TCP Overview ◼ Transmission 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. application application writes data reads data ◼ socket socket send/receive buffers door door TCP TCP send buffer receive buffer segment Chương 3. Giao thức tầng giao vận (transport layer) 51
  52. TCP segment structure URG: urgent data 32 bits (generally not used) source port # dest port # counting ACK: ACK # by bytes sequence number valid of data (not segments!) Header length acknowledgement number (by 32-bit word) head not len used UAP R S F rcvr window size # bytes checksum ptr urgent data PSH: push data to rcvr willing app immediately to accept (generally not used) Options (variable length) RST, SYN, FIN: connection estab application (setup, teardown commands) data (variable length) Internet checksum (as in UDP) Chương 3. Giao thức tầng giao vận (transport layer) 52
  53. TCP sequence number and ACKs Seq. #’s: Host A Host B  byte stream “number” of first byte in User types segment’s data ‘C’ ACKs: host ACKs receipt of  seq # of next byte ‘C’, echoes expected from other back ‘C’ side  cumulative ACK host ACKs Q: how receiver handles out- receipt of echoed of-order segments ‘C’  A: TCP spec doesn’t say, - up to implementor time simple telnet scenario Chương 3. Giao thức tầng giao vận (transport layer) 53
  54. TCP segment – example (cnt.) Sender’s MAC address Receiver’s MAC address Type of network layer’s protocol ( 0x0800 = IP ) bangtqh@utc2.edu.vn Chương 3. Giao thức tầng giao vận (transport layer) 54
  55. TCP segment – example (cnt.) IP’s Header Chương 3. Giao thức tầng giao vận (transport layer) 55
  56. TCP segment – example (cnt.) Dst’s port # (80) ACK number TCP’s Header Src’s port # (2467) Sequence number Wnd’s size Header’s length Flags (00010000) (0xa0 = 40 bytes) Chương 3. Giao thức tầng giao vận (transport layer) 56
  57. TCP segment – example (cnt.) TCP’s Header Check sum Pointer urgent data Chương 3. Giao thức tầng giao vận (transport layer) 57
  58. TCP segment – example (cnt.) TCP’s Header TCP’s Options (20 bytes) Chương 3. Giao thức tầng giao vận (transport layer) 58
  59. TCP Round Trip Time and Timeout Q: Làm sao thiết lập giá trị TCP Q: Làm sao để đo được RTT? timeout? ◼ SampleRTT: đo thời gian từ lúc gói ◼ Lớn hơn RTT tin gửi đi đến lúc nhận được ACK  Nhưng RTT thay đổi thì sao?  Bỏ qua tình huống truyền lại ◼ Nếu đặt Timeout quá nhỏ: → tình trạng ACK đến trễn hơn Timeout ◼ SampleRTT thay đổi, muốn đo  Nếu vậy không nhất thiết phải được RTT “mượt hơn” truyền lại  Lấy trung bình của những lần đo ◼ Nếu đặt quá lớn: Phản hồi với segmet SampleRTT gần nhất (không bị rớt chậm tính giá trị đo hiện thời) Transport Layer 3-59
  60. TCP RTT và Timeout EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT ❑ trung 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.125 Transport Layer 3-60
  61. Ví dụ đo RTT: RTT: gaia.cs.umass.edu to fantasia.eurecom.fr 350 300 250 RTT (milliseconds) 200 150 100 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 time (seconnds) SampleRTT Estimated RTT Transpo 3-61 rt Layer
  62. TCP Round Trip Time and Timeout Thiết lập thời gian Timeout ◼ EstimtedRTT 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 SampleRTT DevRTT = (1-)*DevRTT + *|SampleRTT-EstimatedRTT| (Thông thường,  = 0.25) Sau đó thiết lập Timeout: TimeoutInterval = EstimatedRTT + 4*DevRTT Transport Layer 3-62
  63. TCP: Truyền tải dữ liệu tin cậy ◼ TCP tạo dịch vụ truyền tải ◼ Truyền tải lại được kích dữ liệu tin cậy trên nền hoạt bởi: dịch vụ không tin cậy IP  sự kiện hết thời gian chờ ◼ Các segment được truyền  Trùng lặp ACK theo cơ chế đường ống ◼ Đầu tiên xem xét ng/gửi (pipelined) TCP đơn giản: ◼ ACK cộng dồn  bỏ qua các ack trùng lặp ◼ TCP chỉ sử dụng một bộ  bỏ qua kiểm tra lưu lượng, đếm thời gian cho truyền kiểm tra tắc nghẽn tải lại Chương 3. Giao thức tầng giao vận (transport layer) 63
  64. TCP sender events: data rcvd from app: timeout: ◼ Tạo ra segment với STT ◼ gửi lại segment gây nên ◼ STT là stt trên luồng-byte của timeout byte dữ liệu đầu tiên trong ◼ đặt lại timer segment Ack rcvd: ◼ khởi động bộ đếm t/g nếu nó ◼ Nếu đó là ACK cho các khúc chưa chạy (bộ đếm t/g cho trước đó chưa được ACK segment chưa nhận ACK lâu  Cập nhật danh sách các gói đã nhất) được ACK ◼ khoảng t/g hết hạn:  chạy lại timer nếu như còn có các TimeOutInterval segment chưa ACK Transport Layer 3-64
  65. NextSeqNum = InitialSeqNum SendBase = InitialSeqNum loop (forever) { TCP switch(event) event: Nhận được dữ liệu từ application tầng trên sender tạo TCP segment có số thứ tự là NextSeqNum (Đơn giản hóa) if (timer không chạy) khởi chạy timer đẩy segment xuống cho tầng IP Ghi chú: NextSeqNum = NextSeqNum + length(data) • SendBase-1: byte ACK được cộng dồn cuối cùng event: timer timeout Gửi lại segment có stt nhỏ nhất mà chưa được ACK Ví dụ: khởi chạy timer • SendBase-1 = 71; y=73, vậy bên nhận cần 73+ ; event: Nhận ACK, với giá trị trường ACK là y y > SendBase, vì vậy có thêm if (y > SendBase) { dữ liệu được ACK SendBase = y if (Còn sement chưa ACK) khởi chạy timer } } /* end of loop forever */ Transport Layer 3-65
  66. TCP: retransmission scenarios Host A Host B Host A Host B timeout X loss Seq=92 timeout Seq=92 Sendbase= 100 SendBase= 120 Seq=92 timeout Seq=92 SendBase= 100 SendBase= 120 premature timeout time time lost ACK scenario Transport Layer 3-66
  67. TCP retransmission scenarios (more) Host A Host B timeout X loss SendBase= 120 time Cumulative ACK scenario Transport Layer 3-67
  68. Tạo ACK trong TCP [RFC 1122, RFC 2581] Sự kiện tại Receiver Hành vi TCP tại Receiver Nhận được segment đúng thứ tự Trì hoãn chưa ACK vội. chờ segment với STT hợp lí. Tất cả dữ liệu từ kế tiếp trong 500ms. nếu không có STT về trước đã được ACK segment nào được gửi đến, gửi ACK Nhận được segment đúng thứ tự Ngay lập tức gửi 1 segment với ACK với số STT hợp lý. Một segment cộng dồn xác nhận cả 2 segment đã khác đang chờ ACK đượcnhận thành công Nhân được segment không đúng thứ tự (STT cao hơn STT mong Ngay lập tức gửi 1 ACK lặp, chỉ rõ byte đợi). Phát hiện thiếu hụt mong đợi tiếp theo Segment nhận được khỏa lấp 1 Ngay lập tức gửi ACK phân hoặc toàn bộ phần thiếu hụt Transpo 3-68 rt Layer
  69. Fast Retransmit ◼ Time-out thường tương đối dài:  trì hoãn lâu trước khi gửi lại gói ◼ Nếu sender nhận được 3 bị mất ACK yêu cầu cho cùng 1 ◼ phát hiện mất segments thông segment → nó xác định qua ACK lặp. segment đó đã bị mất:  Sender thường gửi nhiều segment  fast retransmit: gửi lại liên tục segment bị mất ngay cả khi  nếu có 1 segment bị mất thì sẽ có chưa tới thời điểm time-out nhiều ACK lặp Transpo 3-69 rt Layer
  70. Fast Retransmit (cont.) Host A Host B X Gửi liền 2 ACK yêu cầu segment có seq# 2 Seq=2 timeout Seq=2 time Chương 3. Giao thức tầng giao vận (transport layer) 70
  71. Fast retransmit algorithm: 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 } a duplicate ACK for Truyền lại nhanh already ACKed segment Transpo 3-71 rt Layer
  72. TCP flow control ◼ Cá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) 72
  73. TCP Connection management ◼ TCP: Connection-oriented. Three way handshaking: ◼ Khởi tạo các giá trị: ◼ Bước 1: client gửi TCP  sequence number. SYN control segment tới  buffers, flow control server. information. ◼ Bước 2: server nhận SYN ◼ Client:Connection initiator segment rồi trả lời bằng (khởi tạo liên kết: socket). SYNACK segment. ◼ Server: Chấp nhận kết nối. ◼ 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) 73
  74. Chương 3. Giao thức tầng giao vận (transport layer) 74
  75. TCP Connection management: ngắt liên kết ◼ Bước 1: client (phía muốn ngắt liên kết) gửi TCP FIN segment. client server ◼ Bước 2: server (phía còn lại) closing nhận được FIN, gửi ACK, ngắt liên kết, gửi tiếp FIN segment. closing ◼ 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). closed ◼ Bước 4: server nhận ACK, timedwait đóng liên kết. closed Chương 3. Giao thức tầng giao vận (transport layer) 75
  76. TCP Connection management (cont.) TCP client lifecycle TCP server lifecycle Chương 3. Giao thức tầng giao vận (transport layer) 76
  77. Ch3. The Transport Layer 1. Transport Layer Services & Principles. 2. Multiplexing/Demultiplexing. 3. Connectionless Transport (UDP). 4. Principles of Reliable Data Transfer (RDT). 5. Connection-oriented Transport (TCP). 6. Congestion Control. 7. Sử dụng TCP hay UDP bangtqh@utc2.edu.vn Chương 3. Giao thức tầng giao vận (transport layer) 77
  78. Congestion control ◼ Nghẽ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) 78
  79. Causes/costs of congestion: scenario 1 Host A ◼ 2 senders, 2 lout lin : original data receivers ◼ Host B unlimited shared 01 router, buffers vô output link buffers hạn ◼ no retransmission ◼ large delays when congested ◼ maximum achievable throughput Chương 3. Giao thức tầng giao vận (transport layer) 79
  80. Causes/costs of congestion: scenario 2 ◼ one router, buffers có hạn ◼ sender gửi lại các packet bị mất Host A l lin : original out data l'in : original data, plus retransmitted data Host B finite shared output link buffers Chương 3. Giao thức tầng giao vận (transport layer) 80
  81. Causes/costs of congestion: scenario 2 ◼ always: l = l (goodput) in out ◼ “perfect” retransmission only when loss: l > l in out ◼ retransmission of delayed (not lost) packet makes l larger (than perfect in case) for same l out “costs” of congestion: r more work (retrans) for given “goodput” r unneeded retransmissions: link carries multiple copies of pkt Chương 3. Giao thức tầng giao vận (transport layer) 81
  82. Causes/costs of congestion: scenario 3 ◼ 4 senders Q: what happens as l in ◼ multihop paths and l increase ? in ◼ timeout/retransmit Host A lout lin : original data l'in : original data, plus retransmitted data finite shared output link buffers Host B Chương 3. Giao thức tầng giao vận (transport layer) 82
  83. Causes/costs of congestion: scenario 3 H l o o s u t A t H o s t B Another “cost” of congestion: r 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. Chương 3. Giao thức tầng giao vận (transport layer) 83
  84. TCP Congestion Control ◼ end-end control (no network assistance) ◼ Sender điều khiển lượng dữ liệu gửi đi theo Làm thế nào sender đánh giá quy tắc: được tình trạng nghẽn? LastByteSent-LastByteAcked ◼ loss event = timeout or 3 min {CongWin, ReceiverWnd} duplicate ACKs ◼ Công thức xấp xỉ: ◼ TCP sender reduces rate CongWin rate = Bytes/sec (CongWin) after loss RTT event ◼ Giá trị CongWin luôn biến đổi và được Cơ chế đánh giá nghẽn: tính toán theo khả năng truyền tải của mạng.  AIMD  Slow start  conservative after timeout events Chương 3. Giao thức tầng giao vận (transport layer) 84
  85. TCP AIMD (additive-increase, multiplicative-decrease) multiplicative decrease: cut additive increase: increase CongWin in half after CongWin by 1 MSS every loss event RTT in the absence of loss events: probing congestion window 24 Kbytes 16 Kbytes 8 Kbytes time Long-lived TCP connection Chương 3. Giao thức tầng giao vận (transport layer) 85
  86. TCP Slow Start ◼ When connection r When connection begins, begins, CongWin = 1 increase rate exponentially MSS fast until first loss event  Example: MSS = 500 bytes & RTT = 200 msec  initial rate = 20 kbps ◼ Available bandwidth may be >> MSS/RTT  desirable to quickly ramp up to respectable rate Chương 3. Giao thức tầng giao vận (transport layer) 86
  87. TCP Slow Start (more) ◼ When connection begins, increase rate exponentially Host A Host B until first loss event:  double CongWin every RTT RTT  done by incrementing CongWin for every ACK received ◼ Summary: initial rate is slow but ramps up exponentially fast time Chương 3. Giao thức tầng giao vận (transport layer) 87
  88. Refinement Philosophy: ◼ After 3 dup ACKs: • 3 dup ACKs indicates  CongWin is cut in half network capable of  window then grows linearly delivering some segments • timeout before 3 dup ◼ But after timeout event: ACKs is “more alarming”  CongWin instead set to 1 MSS;  window then grows exponentially  to a threshold, then grows linearly Chương 3. Giao thức tầng giao vận (transport layer) 88
  89. Refinement (more) Q: 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 event Chương 3. Giao thức tầng giao vận (transport layer) 89
  90. Summary: TCP Congestion Control ◼ When 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. Chương 3. Giao thức tầng giao vận (transport layer) 90
  91. TCP 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 slowstart ◼ Gọi W là giá trị window size khi xuất hiện mất gói. Khi window size = W, throughput = W/RTT Ngay 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/4RTT Chương 3. Giao thức tầng giao vận (transport layer) 91
  92. TCP Futures ◼ Hỏ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 segments ◼ Throughput tính theo loss rate: 1.22 MSS RTT L ◼ Trong đó L = loss rate Chương 3. Giao thức tầng giao vận (transport layer) 92
  93. Delay modeling Q: How long does it take to Notation, assumptions: receive an object from a ◼ Assume one link between client and server of rate R Web server after sending ◼ S: MSS (bits) a request? ◼ O: object size (bits) Ignoring congestion, delay ◼ no retransmissions (no is influenced by: loss, no corruption) Window size: ◼ TCP connection establishment ◼ First assume: fixed ◼ data transmission delay congestion window, W ◼ slow start segments ◼ Then dynamic window, modeling slow start Chương 3. Giao thức tầng giao vận (transport layer) 93
  94. Fixed congestion window (1) First case: WS/R > RTT + S/R: ACK for first segment in window returns before window’s worth of data sent delay = 2RTT + O/R Chương 3. Giao thức tầng giao vận (transport layer) 94
  95. Fixed congestion window (2) Second case: ◼ WS/R < RTT + S/R: wait for ACK after sending window’s worth of data sent delay = 2RTT + O/R + (K-1)[S/R + RTT - WS/R] Chương 3. Giao thức tầng giao vận (transport layer) Transport Layer 3-95 95
  96. Ch3. The Transport Layer 1. Transport Layer Services & Principles. 2. Multiplexing/Demultiplexing. 3. Connectionless Transport (UDP). 4. Principles of Reliable Data Transfer (RDT). 5. Connection-oriented Transport (TCP). 6. Congestion Control. 7. Sử dụng TCP hay UDP Chương 3. Giao thức tầng giao vận (transport layer) 96
  97. Một số so sánh TCP/UDP ◼ Có liên kết, lưu trữ trạng ◼ Không liên kết, không lưu thái liên kết (quản lý liên trữ trạng thái. kết). ◼ Điểm-điểm ◼ Điểm-điểm, quảng bá. ◼ Có độ trễ (delay): thiết lập, ◼ Độ trễ thấp. quản lý liên kết, luồng, nghẽn ◼ Segment header nhỏ (8 ◼ Segment header lớn (20 bytes) bytes) ◼ Bị giới hạn tốc độ truyền (congestion control) ◼ Không giới hạn tốc độ truyền. Chương 3. Giao thức tầng giao vận (transport layer) 97
  98. Các app thực tế Application App protocol Transport protocol Electronic mail SMTP TCP Remote terminal access Telnet TCP Web HTTP TCP File transfer FTP TCP Remote file server NFS typically UDP Streaming multimedia proprietary typically UDP Internet telephony proprietary typically UDP Network management SNMP typically UDP Routing protocol RIP typically UDP Name translation DNS typically UDP Chương 3. Giao thức tầng giao vận (transport layer) 98