1. Trang chủ
  2. » Tất cả

Lớp Transport trong mạng máy tính

111 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 111
Dung lượng 2,05 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

3rd Edition Chapter 3 Chương 3 Lớp Transport Computer Networking A Top Down Approach Featuring the Internet, 5rd edition Jim Kurose, Keith Ross Addison Wesley, July 2012 Slide này được biên dịch sang.

Trang 1

Chương 3

Lớp Transport

Computer Networking: A Top Down Approach Featuring the Internet , 5 rd edition.

Jim Kurose, Keith Ross Addison-Wesley, July 2012.

Slide này được biên dịch sang tiếng Việt

Trang 2

O truyền dữ liệu tin cậy

O điều khiển luồng

Trang 3

Chương 3: Nội dung trình bày

D 3.4 Các nguyên lý của việc

truyền dữ liệu tin cậy

D 3.5 Vận chuyển hướng kết nối: TCP

O cấu trúc phân đoạn O

truyền dữ liệu tin cậy O

điều khiển luồng

O quản lý kết nối

D 3.6 Các nguyên lý của

điều khiển tắc nghẽn

D 3.7 Điều khiển tắc nghẽn TCP

Trang 4

3.1 Các dịch vụ lớp Transport

Trang 5

Các dịch vụ và giao thức Transport

D cung cấp truy ề n thông logic

chạy trên các host khác nhau

D các giao thức transport chạy trên các

hệ thống đầu cuối

O phía gửi: cắt các thông điệp

ứng dụng thành các đoạn , chuyển cho lớp network

O phía nhận: tái kết hợp các đoạn

thành các thông điệp, chuyển cho lớp application

D có nhiều hơn 1 giao thức transport

application

transport

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

logic

al en d-en

d tra nspo rt

Trang 6

Lớp Transport với lớp network

Trang 7

Các giao thức lớp transport trên Internet

D tin cậy, truyền theo thứ tự

application

transport

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

logic

al en d-en

d tra nspo rt

Trang 8

3.2 Multiplexing và demultiplexing

Trang 9

link physical

application transport network link physical

Demultiplexing tại host nhận:

thu nhặt dữ liệu từ nhiều socket,

đóng gói dữ liệu với header (sẽ dùng sau đó cho

demultiplexing) Multiplexing tại host gửi:

Trang 10

Demultiplexing làm việc như thế nào

D host nhận các IP datagrams

O mỗi datagram có địa chỉ IP nguồn

và IP đích

O mỗi datagram mang 1

đoạn của lớp transport

O mỗi đoạn có số port nguồn và

đích

D host dùng địa chỉ IP & số port để

điều hướng đoạn đến socket thích hợp

Trang 11

Demultiplexing không kết nối

D Tạo các sockets với các số port:

(địa chỉ IP, số port đích)

D Khi host nhận đoạn UDP:

O kiểm tra port đích trong đoạn

O điều hướng đoạn UDP đến socket nào phù hợp với số port đó

D IP datagrams với địa chỉ IP nguồn và/hoặc số port khác nhau có thể được điều hướng đến cùng socket

Trang 12

Demultiplexing không kết nối (tt)

DatagramSocket serverSocket = new DatagramSocket(6428);

Client IP:B

P2

client

IP: A

P1 P1 P3

server IP: C

SP: 6428 DP: 9157

SP: 9157 DP: 6428

SP: 6428 DP: 5775

SP: 5775 DP: 6428

SP cung cấp “địa chỉ trở về”

Trang 13

Demultiplexing hướng kết nối

O mỗi socket được xác định bởi

bộ 4 của nó

D Web server có các socket khác nhau cho mỗi kết nối từ client

O kết nối HTTP không bền vững sẽ có socket khác nhau cho mỗi yêu cầu

Trang 14

Demultiplexing hướng kết nối (tt)

Client IP:B

P1

client

IP: A

P1 P2

P4

server IP: C

SP: 9157 DP: 80

SP: 9157 DP: 80

D-IP:C

S-IP: A D-IP:C

S-IP: B

SP: 5775 DP: 80 S-IP: B D-IP:C

Trang 15

Demultiplexing hướng kết nối:

Threaded Web Server

Client IP:B

P1

client

IP: A

P1 P2

server IP: C

SP: 9157 DP: 80

SP: 9157 DP: 80

D-IP:C

S-IP: A D-IP:C

S-IP: B

SP: 5775 DP: 80 S-IP: B D-IP:C

Trang 16

3.3 Vận chuyển không kết nối: UDP

Trang 17

UDP: User Datagram Protocol [RFC 768]

D giao thức Internet transport

“đơn giản hóa”

D connectionless (không k ế t n ố i):

O không bắt tay giữa bên nhận

và bên gửi UDP

O mỗi đoạn UDP được quản lý

D header của đoạn nhỏ

D không điều khiển tắc nghẽn: UDP có thể gửi nhanh nhất theo mong muốn

Trang 18

D truyền tin cậy trên UDP: thêm

khả năng này tại lớp application

O sửa lỗi

32 bits

dạng thức đoạn UDP

Độ dài đoạn UDP bao gồm cả header

source port # dest port #

dữ liệu ứng dụng (thông điệp)

Trang 19

UDP checksum

bên gửi:

đoạn như một chuỗi các số

nguyên 16-bit

D checksum: bổ sung(tổng bù 1)

của các nội dung đoạn

D đặt giá trị checksum vào

trường UDP checksum

Xem tiếp phần sau ….

Mục tiêu: kiểm tra các “lỗi” (các bit cờ đã bật lên) trong các

đoạn đã truyền

Trang 20

Ví dụ Checksum

D Lưu ý

O Khi cộng các số, một bit nhớ ở phía cao nhất có thể sẽ

phải thêm vào kết quả

D Ví dụ: cộng hai số nguyên 16-bit

Trang 21

3.4 Các nguyên lý của việc truyền dữ liệu tin cậy

Trang 22

Các nguyên lý truyền dữ liệu tin cậy

D quan trọng trong các lớp application, transport, link

D là danh sách 10 vấn đề quan trọng nhất của mạng

Trang 23

Các nguyên lý truyền dữ liệu tin cậy

D quan trọng trong các lớp application, transport, link

D là danh sách 10 vấn đề quan trọng nhất của mạng

D các đặc thù của kênh truyền không tin cậy sẽ xác định sự phức tạp của giao

Trang 24

Các nguyên lý truyền dữ liệu tin cậy

D quan trọng trong các lớp application, transport, link

D là danh sách 10 vấn đề quan trọng nhất của mạng

D các đặc thù của kênh truyền không tin cậy sẽ xác định sự phức tạp của giao

Trang 25

Truyền dữ liệu tin cậy

bên

rdt_send(): được gọi bởi lớp app

Chuyển dữ liệu cần truyền đến lớp cao hơn

bên nhận

udt_send(): được gọi bởi

rdt, để truyền các gói trên kênh rdt_rcv(): kênh bên nhận được gọi khi gói đến

deliver_data(): được gọi

bởi rdt để truyền dữ liệu đến

lớp cao hơn

Trang 26

Truyền dữ liệu tin cậy

Sẽ:

D chỉ xem xét truyền dữ liệu theo 1 hướng duy nhất

O nhưng điều khiển luồng thông tin sẽ theo cả 2 chiều!

D dùng máy trạng thái hữu hạn (finite state machines-FSM)

để xác định bên gửi, bên nhận

sự kiện gây ra trạng thái truyền các hành động xảy ra khi truyền

trạng thái: khi ở “trạng thái”

này thì trạng thái kế tiếp

duy nhất được xác định

bởi sự kiện kế tiếp

sự kiện các hành động

Trang 27

Rdt1.0: truyền dữ liệu tin cậy trên 1 kênh truyền tin cậy

D kênh ưu tiên tin cậy hoàn toàn

O không có các lỗi

O không mất mát các gói

D các FSM phân biệt cho bên gửi, bên nhận:

O bên gửi gửi dữ liệu vào kênh ưu tiên

O bên nhận nhận dữ liệu từ kênh ưu tiên

chờ gọi

từ lớp dưới

Trang 28

Rdt2.0: kênh với các lỗi

D kênh ưu tiên có thể bật lên một số bit trong gói

O checksum để kiểm tra các lỗi

D H ỏ i : làm sao khôi phục các lỗi?

O các acknowledgements (ACK): bên nhận rõ ràng thông báo cho bên gửi rằng quá trình nhận gói tốt

O các negative acknowledgements (NAK): bên nhận rõ ràng thông báo cho bên gửi rằng quá trình nhận gói có lỗi

O bên gửi gửi lại gói nào được xác nhận là NAK

D các cơ chế

O nhận phản hồi: các thông điệp điều khiển (ACK,NAK) bên nhận -7 bên gửi

Trang 29

chờ ACK hoặc NAK

chờ gọi từ lớp dưới

bên gửi

bên nhận

rdt_send(data)

Trang 30

rdt2.0: hoạt động khi không lỗi

chờ ACK hoặc NAK

chờ gọi từ lớp dưới

Trang 31

rdt2.0: hoạt động khi có lỗi

chờ gọi từ

lớp dưới

rdt_rcv(rcvpkt) &&

notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)

chờ gọi từ lớp dưới

chờ ACK hoặc NAK

Trang 32

rdt2.0 có lỗ hổng nghiêm trọng!

Điều gì xảy ra nếu

ACK/NAK bị hỏng?

D bên gửi không biết điều gì

đã xảy ra tại bên nhận!

từ bên nhận

Trang 33

rdt2.1: bên gửi quản lý các ACK/NAK bị hỏng

chờ gọi 0

từ lớp trên

rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt)

chờ ACK hoặc NAK 0

rdt_rcv(rcvpkt) &&

( corrupt(rcvpkt) ||

isNAK(rcvpkt) ) udt_send(sndpkt)

rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt)

Trang 34

rdt2.1: bên gửi quản lý các ACK/NAK bị hỏng

chờ

0 từ dưới

sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt)

chờ

1 từ dưới

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)

sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt)

Trang 35

D số trạng thái tăng lên 2 lần

O trạng thái phải “nhớ” gói

Trang 36

rdt2.2: một giao thức không cần NAK

D chức năng giống như rdt2.1, chỉ dùng các ACK

D thay cho NAK, bên nhận gửi ACK cho gói vừa rồi đã nhận tốt

O bên nhận phải rõ ràng chèn số thứ tự của gói vừa ACK

D trùng ACK tại bên gửi hậu quả giống như hành động của

NAK: truy ề n l ạ i gói v ừ a r ồ i

Trang 37

rdt2.2: gửi, nhận các mảnh

Chờ cho gọi 0 từ trên

rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) &&

( corrupt(rcvpkt) ||

isACK(rcvpkt,1)

)

udt_send(sndp kt)

gửi phân mảnh

FSM

Chờ cho gọi

0 từ dưới

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

&& has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data)

Trang 38

rdt3.0: các kênh với lỗi và mất mát

Giả định mới: kênh ưu tiên cũng

D truyền lại nếu không nhận ACK trong khoảng thời gian này

D nếu gói (hoặc ACK) chỉ trễ (không mất):

O truyền lại sẽ gây trùng, nhưng dùng số thứ tự sẽ giải quyết được

O bên nhận phải xác định số thứ

tự của gói vừa gửi ACK

D cần bộ định thì đếm lùi

Trang 39

rdt3.0 gửi

sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt)

start_timer rdt_send(data)

Chờ cho ACK 0

Chờ cho gọi 1

Chờ cho ACK 1

Trang 40

hành động của rdt3.0

Trang 41

hành động của rdt3.0

Trang 42

Hiệu suất của rdt3.0

D rdt3.0 làm việc được, nhưng đánh giá hiệu suất hơi rắc rối

D ví dụ: liên kết 1 Gbps, trễ lan truyền giữa hai đầu cuối là 15 ms, gói 1KB:

L (độ dài gói tính bằng bits)

O gói 1KB mỗi 30 msec -> 33kB/s trên đường truyền 1 Gbps

O giao thức network hạn chế việc dùng các tài nguyên vật lý!

Trang 43

rdt3.0: hoạt động dừng-và-chờ

gói đầu tiên đã truyền, t = 0

gói cuối cùng đã truyền, t = L / R

RTT gói đầu tiên đã đếngói cuối cùng đã đến, gửi ACK

ACK đến, gửi gói kế tiếp,

t = RTT + L / R

L / R RTT + L / R =

Trang 44

Các giao thức Pipelined

Pipelining: bên gửi cho phép gửi nhiều gói đồng thời, không cần

chờ báo nhận được

O nhóm các số thứ tự phải tăng dần

O phải có bộ nhớ đệm tại nơi gửi và/hoặc nơi nhận

D hai dạng phổ biến của các giao thức pipelined: go-Back- N, L ặ p có

Trang 45

Pipelining: độ khả dụng tăng

sender receiver gói đầu tiên đã truyền, t = 0

gói cuối cùng đã truyền,

t = L / R

RTT gói đầu tiên đã đếngói cuối cùng đã đến, gửi ACK

bit cuối của gói thứ 2 đến, gửi ACK bit cuối của gói thứ 3 đến, gửi ACK

30.008 = 0.0008

3 * L / R RTT + L / R =

ACK đến, gửi gói

kế tiếp, t = RTT + L / R

Độ khả dụng tăng lên gấp

3 lần!

Trang 46

Bên gửi:

D k-bit số thứ tự trong header của gói

D “cửa sổ” tăng lên đến N, cho phép gửi các gói liên tục không cần ACK

D ACK(n): ACKs tất cả các gói đến, chứa số thứ tự n – “ACK tích lũy”

O có thể nhận các ACK trùng lặp (xem bên nhận)

D định thì cho mỗi gói trên đường truyền

D timeout(n): gửi lại gói n và tất cả các gói có số thứ tự cao hơn trong

Trang 47

GBN: bên gửi mở rộng FSM

chờ start_timer udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

… udt_send(sndpkt[nextseqn um-1])

timeout

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)

rdt_rcv(rcvpkt) &&

notcorrupt(rcvpkt) base = getacknum(rcvpkt)+1

If (base == nextseqnum)

base=1 nextseqnum=1

rdt_rcv(rcvpkt)

&& corrupt(rcvpkt)

Trang 48

D gói không theo thứ tự:

O hủy -> không nhận vào bộ đệm !

deliver_data(data) sndpkt = make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt)

Trang 49

hoạt động

Trang 50

Lặp có lựa chọn

D bên nhận thông báo đã nhận đúng tất cả từng gói một

O đệm (buffer) các gói nếu cần thiết

D bên gửi chỉ gửi lại các gói nào không nhận được ACK

O bên gửi định thì đối với mỗi gói không gửi ACK

D cửa sổ bên gửi

O N số thứ tự liên tục

O hạn chế số thứ tự các gói không gửi ACK

Trang 51

Lặp có lựa chọn: các cửa sổ gửi, nhận

Trang 52

D nếu gói không ACK có n nhỏ nhất,

dịch chuyển cửa sổ base đến số

thứ tự không ACK kế tiếp

gói n trong [rcvbase, rcvbase+N- 1]

D gửi ACK(n)

D không thứ tự: đệm (buffer)

D có thứ tự: truyền (cũng truyền các gói đã đệm, có thứ tự), dịch

chuyển cửa sổ đến gói chưa nhận

Trang 53

Lớp Tr

Hoạt động của lặp có lựa chọn

Trang 54

D bên nhận không thấy sự khác

nhau trong 2 tình huống

D chuyển không chính xác dữ

liệu trùng lặp như dữ liệu

mới trong (a)

Hỏi: quan hệ giữa dãy số thứ

tự và kích thước cửa sổ?

Trang 55

3.5 Vận chuyển hướng kết nối: TCP

Trang 56

TCP: Tổng quan RFCs: 793, 1122, 1323, 2018, 2581

D dữ liệu full duplex:

O luồng dữ liệu đi 2 chiều trong cùng một kết nối

O MSS: maximum segment size – kích thước đoạn tối đa

D h ướng kết nối:

O bắt tay (trao đổi các thông điệp điều khiển) trạng thái bên gửi, bên nhận trước khi trao đổi dữ liệu

D điều khiển luồng:

O bên gửi sẽ không lấn át

bên nhận

D point-to-point:

O một bên gửi, một bên nhận

D tin cậy, dòng byte có thứ

Trang 57

TCP: cấu trúc đoạn

port # nguồn port # đích số thứ tự

32 bits

dữ liệu ứng dụng (độ dài thay đổi)

số ACK

cửa sổ nhận con trỏ URG checksum

UA P R S F

head

not len used Tùy chọn (độ dài thay đổi)

URG: dữ liệu khẩn cấp

(thường không dùng)

ACK: ACK #

hợp lệ PSH: push data now

số byte bên nhận sẵn sàng chấp nhận

Internet checksum (giống UDP)

đếm bởi số byte của

dữ liệu

Trang 58

Các số thứ tự TCP và ACK

Các số thứ tự:

O dòng byte “đánh số”

byte đầu tiên trong

dữ liệu của đoạn

các ACK:

O số thứ tự của byte kế

tiếp được chờ đợi từ

phía bên kia

host ACKs báo nhận ‘C’, phản hồi ngược lại

‘C’

User nhập

‘C’

time

tình huống telnet đơn giản

Trang 59

TCP Round Trip Time vàTimeout

Hỏi: Làm thế nào để thiết

đối với việc mất mát gói

Hỏi : Làm thế nào để thiết lập RTT?

truyền đoạn đến khi báo nhận ACK

O lờ đi việc truyền lại

lượng RTT “mượt hơn”

O tính trung bình một số giá trị đo được gần đó, không chỉ

SampleRTT hiện tại

Trang 60

TCP Round Trip Time và Timeout

EstimatedRTT = ( )*EstimatedRTT + *SampleRTT

D giá trị đặc trưng:  = 0.125

Trang 62

TCP Round Trip Time và Timeout

Thiết lập timeout

O sự biến thiên lớn trong EstimatedRTT -> hệ số dự trữ an toàn lớn hơn

D ước lượng đầu tiên về sự biến thiên của SampleRTT từ

EstimatedRTT :

DevRTT = ()*DevRTT +

*|SampleRTT-EstimatedRTT|

(tiêu biểu  = 0.25)

Sau đó thiết lập timeout interval:

TimeoutInterval = EstimatedRTT + 4*DevRTT

Trang 63

TCP: truyền dữ liệu tin cậy

truyền lại đơn

D Truyền lại được kích hoạt bởi:

O các sự kiện timeout

O các ack trùng lặp

D lúc đầu khảo sát các bên gửi TCP đơn giản: O lờ đi các ack trùng lặp

O lờ đi điều khiển luồng, điều khiển tắc nghẽn

Trang 64

nếu chưa chạy

D khoảng thời gian hết

O khởi động bộ định thì nếu có các đoạn còn chờ

Trang 65

TCP bên gửi (đơn giản)

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

loop (forever) {

switch(event)

event: data received from application above

create TCP segment with sequence number NextSeqNum

if (timer currently not running)

start timer pass segment to IP

NextSeqNum = NextSeqNum + length(data)

event: timer timeout

retransmit not-yet-acknowledged segment with

smallest sequence number start timer

event: ACK received, with ACK field value of y

if (y > SendBase) {

SendBase = y

if (there are currently not-yet-acknowledged segments)

start timer }

y > SendBase, vì thế dữ liệu mới được chấp nhận

Trang 66

TCP: các tình huống truyền lại

= 120

SendBase

= 120

Trang 67

TCP: các tình huống truyền lại (tt)

= 120

time

tình huống ACK tích lũy

Host B

Trang 68

kế tiếp, gửi ACK

Gửi ngay một ACK tích lũy, chấp nhận cho cả các đoạn theo thứ tự

Gửi ngay ACK, với điều kiện là đoạn bắt đầu ngay điểm có khoảng trống

Trang 69

Truyền lại nhanh

D Chu kỳ Time-out thường

tương đối dài:

O độ trễ dài trước khi gửi lại

gói đã mất

D Xác nhận các đoạn đã mất

bằng các ACK trùng lặp.

O bên gửi thường gửi nhiều

đoạn song song

O Nếu đoạn bị mất, sẽ xảy ra

tình trạng giống như nhiều

ACK trùng nhau

D Nếu bên gửi nhận 3 ACK của cùng một dữ liệu, nó cho là đoạn sau dữ liệu đã ACK bị mất:

O Truyền lại nhanh: gửi lại đoạn trước khi bộ định thì hết hạn

Ngày đăng: 15/11/2022, 21:48

TỪ KHÓA LIÊN QUAN

w