Bài giảng Mạng máy tính - Chương 3: Lớp truyền tải - Nguyễn Hồng Sơn

pdf 54 trang hoanguyen 3530
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: Lớp truyền tải - Nguyễn Hồng Sơn", để 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:

  • pdfbai_giang_mang_may_tinh_chuong_3_lop_truyen_tai_nguyen_hong.pdf

Nội dung text: Bài giảng Mạng máy tính - Chương 3: Lớp truyền tải - Nguyễn Hồng Sơn

  1. Chapter 3 LP TRUY N T I Nguyễn Hồng Sơn Ch ươ ng 3-Lớp truy ền t ải 3-1
  2. Ổ Ì ủa Ì a ứ ề ả ị ụ ớ ề ả H ee e H ề ố ệ ậ H ề ể ồ H ể ẽ e Ch ươ ng 3-Lớp truy ền t ải 3-2
  3. Ộ Ì ị ụ ớ ề ả Ì e ee Ì a ứ ề ả ế ố Ì ề ố ệ ậ Ch ươ ng 3-Lớp truy ền t ải 3-3
  4.  Ớ  a  ợa  ứ  Transport  ơ a aa ữaa ứ (UDP, TCP ) a   a  e  ườ a    ữaa  a  aa aaa   ữaa  Eee ự a a  a   a ườ    Ch ươ ng 3-Lớp truy ền t ải 3-4
  5. a ứ ị ụ ề ả aa a Ì ự ệa ế ữa e aa a ứ ụ ạ ề a ả Ì a ứ ề ả ạ ừ ầ ầ ố ố H ế ềaaa ầ ạ ố ee ể ố ớ ạ aa a H ậ ậ e aa eeaa a ể ớ ứ ụ Ì ềa ứ ề ả H ee Ch ươ ng 3-Lớp truy ền t ải 3-5
  6. a ứ ớ ề ả ee aa Ì ểe ứ a e ự ậ aa a e H ể ẽ aaề e a ả aa H ề ể ồ a ừ ầ H ế ậ ế ố ố e Ì ể aa ế e ae ầ ứ ự ậ aa a ố e aa aa a Ì e a ị ụ ượ aa e a aa ỗ ợ a H ể ễ H ả ả Ch ươ ng 3-Lớp truy ền t ải 3-6
  7.  a   a  Ì a  ứa aa  a    a a a  a ờa ự Ì a ứa a ớ aaee ea e Ì a ứ    ư a a ớ ưeea Ch ươ ng 3-Lớp truy ền t ải 3-7
  8. Ộ Ì ị ụ ớ ề ả Ì e ee Ì a ứ ề ả ế ố Ì ề ố ệ ậ Ch ươ ng 3-Lớp truy ền t ải 3-8
  9. ạ ề ạ ểaa ậ ượ ậ ợaa ừ ềe ếe ắeae e e aa aa aa a a a e e e a a a Ch ươ ng 3-Lớp truy ền t ải 3-9
  10. Ì ậ H ỗ ộ ịa ỉ ồ ịa ỉ e e H ỗ ứa ộ ee ớ ề ả H ỗee ỉ ố e ồ Ì ịa ỉ ỉ ố ể ểee ế aa ủa ứ ụ e ị ạ ủa ee Ch ươ ng 3-Lớp truy ền t ải 3-10
  11. ế ố Ì ậ Ì ạe ớ ỉ ố ee H DatagramSocket mySocket1 = new ểa ỉ ố DatagramSocket(12534); H ể eeế DatagramSocket mySocket2 = new e ứ ớ DatagramSocket(12535); Ì ộ eượ ậ ạ ởa ố ịa ỉ ịa ỉ Ch ươ ng 3-Lớp truy ền t ải 3-11
  12. ế ố DatagramSocket serverSocket = new DatagramSocket(6428); e ee e Ch ươ ng 3-Lớp truy ền t ải 3-12
  13. ướ ế ố Ì ộ e ượ Ì ee ể ồ ậ ạ ở ố ế ờ ề e ố H ỗe ượ ậ ạ H eae ở ộ ộ ồ ố ế ố H ee Ì eee H eae ea ỗ H ee ế ố ớ e Ì ậ ấ H ụ ẽ ả ố ế ố ể ể ea ỗee ee ế e Ch ươ ng 3-Lớp truy ền t ải 3-13
  14. ướ ế ố e ee e Ch ươ ng 3-Lớp truy ền t ải 3-14
  15. ướ ế ố eae eee e ee e Ch ươ ng 3-Lớp truy ền t ải 3-15
  16. Ộ Ì ị ụ ớ ề ả Ì e ee Ì a ứ ề ả ế ố Ì ề ố ệ ậ Ch ươ ng 3-Lớp truy ền t ải 3-16
  17. e aaa Ì a ứ ề ả ee ỉ ứa ưaa ế ế Ì ả ễ ế ậ Ì ượ ặ ả ế ố Ì ộ ị ụ e e Ì ơ ả ạ ee ể ế ố ạ H ị ấ Ì ướeae ỏ H ể ứ Ì ả ể ẽ ự Ì ế ốee H ắa ữa ề ậ H ỗ ee ượ ể ộ ộ ậ ớ ee Ch ươ ng 3-Lớp truy ền t ải 3-17
  18. Ì ườ ượ ứ ụea ea ề ủa e e H ị ấ ee e e H aeee ồeae Ì ứ ụ H aa H Ì ể ậa ườ ả ổ ặ ậ ớ ứ ụ ị ạ ee H ửa ỗ ứ ụ ặ ệ Ch ươ ng 3-Lớp truy ền t ải 3-18
  19. e ụ ệ ỗ ề ậ Ì ộee ầ Ì eee ự ố ậ ượ Ì eộ ấ ả Ì ểae ổ ượ ố ầ ộ ằ ớ ổ ậ ượ ộ ế ả a Ì ặ ị ổ H ỗ e ườ H ằ ỗ e ủa Ch ươ ng 3-Lớp truy ền t ải 3-19
  20. ụ e Ì ư H ộ ố ớ ừ a ớ ấ ượ ộ ế ả Ì ụ ộa ố 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 e 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 Ch ươ ng 3-Lớp truy ền t ải 3-20
  21. Ộ Ì ị ụ ớ ề ả Ì e ee Ì a ứ ề ả ế ố Ì ề ố ệ ậ Ch ươ ng 3-Lớp truy ền t ải 3-21
  22. ề ố ệ ậ Ì a ọ ớ ứ ụ ề ả ế ố ệ Ì ộ ủ ề ạa ọ ấ ị ụ ề ậaa ự ị ụ Ch ươ ng 3-Lớp truy ền t ải 3-22
  23. ề ố ệ ậ rdt_send(): được g ọi t ừ lớp trên deliver_data(): được g ọi b ởi Số li ệu được chuy ển qua để chuy ển đến rdt để chuy ển data lên l ớp trên máy thu ề ậ udt_send(): được g ọi b ởi rdt, rdt_rcv(): được g ọi khi gói đến để truy ền gói qua kênh không tin cậy đến máy thu eaeaaae Ch ươ ng 3-Lớp truy ền t ải 3-23 eaeaaae
  24. ề ố ệ ậ Ì ểa ề ậ ủa Ì ỉ e ề ộ ướ H ề ể ẽea ướ Ì ơ ồ ạe aeae ể ặ ả ề ậ ự ệa ể ạ ộ ạ a ở ạ ạ ae ae ự ệ ế ế ượ ị ở ự ệ ế ộ ế Ch ươ ng 3-Lớp truy ền t ải 3-24
  25. ề ậa ộ ậ Ì ề ướ ậ H ỗ H ấ Ì ơ ồ ạ ệ ề ậ H ề ửaa ố H ọaa ừ ướ i g i rdt_send(data) ợ ọ rdt_rcv(packet) t trên ừ ướ extract (packet,data) packet = make_pkt(data) deliver_data(data) rdt_send(packet) ề Ch ươ ng 3-Lớp truy ền t ải 3-25
  26. ỗ Ì ướ ảa ỗ ề H e ể ệ ỗ Ì ứ ửa ỗ H aeee ề ằ ậ ố H eaeaeee ị ỗ H ề ử ạ ậ Ì ơ ế ớ rdt2.0 H ệ ỗ H ả ồ ủa Ch ươ ng 3-Lớp truy ền t ải 3-26
  27. ặ ả ơ ồ ạ rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) i g i i ACK rdt_rcv(rcvpkt) && t trên hay NAK udt_send(sndpkt) corrupt(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) Λ i g i t dưi ề rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Ch ươ ng 3-Lớp truy ền t ải 3-27
  28. ạ ộ ỗ rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) i g i i ACK rdt_rcv(rcvpkt) && t trên hay NAK udt_send(sndpkt) corrupt(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) i g i Λ tưi rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Ch ươ ng 3-Lớp truy ền t ải 3-28
  29. ạ ộ ỗ rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) i g i i ACK rdt_rcv(rcvpkt) && t trên hay NAK udt_send(sndpkt) corrupt(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) i g i Λ tưi rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Ch ươ ng 3-Lớp truy ền t ải 3-29
  30. ố ặ ệ ề ảa ế ử ị ấ Ì ề ử ạ ế Ì ề ế ề ờ ảa ạ Ì ề ố ầ ự Ì ề ạ ể ỗ Ì ạ ỏ ể e aa ề ử ạ ợ ậ Ch ươ ng 3-Lớp truy ền t ải 3-30
  31. ề ể ấ rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || i g i 0 i ACK hay NAK 0 isNAK(rcvpkt) ) t trên udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) Λ Λ i ACK i g i 1 hay NAK 1 t trên rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) rdt_send(data) udt_send(sndpkt) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) Ch ươ ng 3-Lớp truy ền t ải 3-31
  32. ể ấ 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) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) udt_send(sndpkt) i 0 i 1 rdt_rcv(rcvpkt) && tưi tưi rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && 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-Lớp truy ền t ải 3-32
  33. ậ ề Ì eượ Ì ả ểae ậ ị Ì a ố ầ ự ủ H ạ ỉ a ố ầ Ì ả ểa ể ự ợ ấ Ì ể ế Ì a ạ ạ H ả ớ ệ ạ ề ố ầ ự a Ch ươ ng 3-Lớp truy ền t ải 3-33
  34. ee Ì ố ư ỉ Ì a ửa ậ ố H ẽ ỉ ố ầ ự ậ ố ả ồ Ì ạ ề ẫ ế ộ ươ ự ư ề ạ ệ Ch ươ ng 3-Lớp truy ền t ải 3-34
  35. ơ ồ ạ rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || i ACK i g i 0 isACK(rcvpkt,1) ) t trên 0 udt_send(sndpkt) ề rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && && isACK(rcvpkt,0) (corrupt(rcvpkt) || Λ has_seq1(rcvpkt)) i 0 tưi udt_send(sndpkt) 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-Lớp truy ền t ải 3-35
  36. ỗ ấ ả ử ướ ả ề ợ ể ấ ộ ả ờ aaa a ợ H ee Ì ề ạ ế ấ ề ạ ữ ờa ợ ư ủ Ì ếa ị ễ H ề ạ ẽ ị ư ố ầ ự ể ể H ả ỉ a ố ầ ự ủaa ậ Ì ầ ộ ị ờ ế Ch ươ ng 3-Lớp truy ền t ải 3-36
  37. ề 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 Λ Λ i i g i 0 timeout t trên ACK 0 udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt,1) && notcorrupt(rcvpkt) stop_timer && isACK(rcvpkt,0) stop_timer i i g i 1 timeout ACK1 t trên udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) Λ rdt_send(data) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || sndpkt = make_pkt(1, data, checksum) isACK(rcvpkt,0) ) udt_send(sndpkt) start_timer Λ Ch ươ ng 3-Lớp truy ền t ải 3-37
  38. ạ ộ ấ ấ Ch ươ ng 3-Lớp truy ền t ải 3-38
  39. ạ ộ ấ e ớ Ch ươ ng 3-Lớp truy ền t ải 3-39
  40. ệ ủa Ì ụ ướ L 8000 bits dtrans = = = 8microsecon ds R 10 9 bps H ee a ỉ ệ ờa ề ự ự ệ ề . = = = ee e H ỗ e ượea ế H a ứ ạ ớ ạ ử ụ ậ Ch ươ ng 3-Lớp truy ền t ải 3-40
  41. ạ ộ ụeaaa sender receiver Truy n bit u c a gói, t = 0 ềa ủa t = L / R Bit u n RTT Bit sau cùng n, gi ACK ACK n, gi gói k , t = RTT + L / R . = = = ee e Ch ươ ng 3-Lớp truy ền t ải 3-41
  42. a ứ ỹ ậ ố ẫ e ề ề ượ ử ế ầ ậ H ỉ ố ầ ự H ệ ạ ề ậ Ì ụ eee eea a aeeaee Ch ươ ng 3-Lớp truy ền t ải 3-42
  43. ỹ ậe Nh m gia tăng hi u qu s dng đ ưng truy n (utilization) sender receiver Truy n bit u c a gói, t = 0 Truy n bit sau cùng c a gói, t = L / R Nh n bit u c a gói RTT Bit sau cùng c a gói n, g i ACK Bit sau cùng c a gói th n, g i ACK Bit sau cùng c a gói th n, g i ACK ACK n, gi gói k ti p, t = RTT + L / R aa ầ . = = = ee e Ch ươ ng 3-Lớp truy ền t ải 3-43
  44. a ứe ụ a eeeeea Ì ề ể Ì ề ể ế ưa ượ ế ưa ượ ậ ửa ậ ửa ố ố Ì ỉ ử Ì ử ừ ề ừ ậ ố ướ ề ậ ố Ì ề ộ ị Ì ề ộ ị ờ ừ ưa ờ ưa ượ ậ ượ ậ H ế ị ờ ế ạ H ế ị ờ ế ạ ỉ ề ạ ươ ề ạ ấ ả ứ a ờ Ch ươ ng 3-Lớp truy ền t ải 3-44
  45. a ề Ì ố ầ ự e eae ủa Ì ửa ổ ướ ố ề ế ưa ậ ố ầ ự ờ ậ ế ế ố ậ ưa ưa ậ e ố ửa ồ ề Ì ậ ấ ả ế H ể ậ Ì ộ ị ờa ợ Ì e ề ạ ấ ả ừ ở Ch ươ ng 3-Lớp truy ền t ải 3-45
  46. ơ ồ ạ ủa ề a rdt_send(data) 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) base=1 nextseqnum=1 timeout start_timer i 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-Lớp truy ền t ải 3-46
  47. ơ ồ ạ ủa ậa ỉ ấ ả ườ ợ ạ ừ ườ ợ ậ ứ ự ố default udt_send(sndpkt) rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) Λ && hasseqnum(rcvpkt,expectedseqnum) expectedseqnum=1 i extract(rcvpkt,data) sndpkt = deliver_data(data) make_pkt(expectedseqnum,ACK,chksum) sndpkt = make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt) expectedseqnum++ Ch ươ ng 3-Lớp truy ền t ải 3-47
  48. ạ ộ ủa a Ch ươ ng 3-Lớp truy ền t ải 3-48
  49. eeeeea Ì ậ ừ ậ ố H ệ ầ ờ ứ ự ể aa ứ a ơ Ì ề ỉ ử ạ ậ ượ H ộ ị ờ ỗ ề ưa ậ Ì ửa ổ ề H ướ ỉ ố ầ ự ụ ượ ể ề H ớ ạ ố ượ ề ụ Ch ươ ng 3-Lớp truy ền t ải 3-49
  50. eeeeeaửa ổ ề ờ ậ ố ầ ự ế ế ố ậ ưa ưa ậ e ố ửa ồ ề a ầ ự ề ớ ửa ổ ướ ậ ự ư ộ ệ ố ậ ứa ầ ư e ố ưa ấ ửa ồ ậ ờ ầ ự a ầ ự ậ ớ ửa ổ ướ Ch ươ ng 3-Lớp truy ền t ải 3-50
  51. eeeeea ề aaừ ả ủa ổ Ì ế ầ ự ế ẵ ề ửa ổ ỗ Ì ử e Ì ậ ựệ ạ Ì ề ạ ở ộ Ì ậ ự ểa ạ ộ ị ờ ớ ửa ổ ướ ế ỉ ố ế ế ả ầ ự ửa ổ ờ ậ ế Ì ạ ỉ ố ầ ự ỏ Ì ử a ợ Ì ướ ủa ửa ổ Ch ươ ng 3-Lớp truy ền t ải 3-51
  52. ạ ộ ủaeee eea Ch ươ ng 3-Lớp truy ền t ải 3-52
  53. ụ Ì e Ì e Ì a ệ ữa ỉ ố ầ ự ướ ửa ổ Ch ươ ng 3-Lớp truy ền t ải 3-53
  54. Ế ƯƠ Ch ươ ng 3-Lớp truy ền t ải 3-54