5/22/2011

LOGO

C3

TẦNG GIAO VẬN

(cid:61558) Giới thiệu

(cid:61558)Dịch vụ dồn kênh và phân kênh

(cid:61558)Giao thức UDP

(cid:61558)Giao thức TCP

Biên soạn : Lê Minh

LOGO

I

Giới thiệu

(cid:61558)Cung

đường cấp truyền logic giữa các tiến trình chạy trên các máy tính khác nhau

(cid:61558)Dùng hai giao thức:

TCP và UDP

Biên soạn : Lê Minh

1

5/22/2011

LOGO

I

Giới thiệu

(cid:61558)Các giao thức của tầng giao vận chạy trên các

thiết bị đầu cuối ( máy tính,PDA … ) (cid:61607) Phía gởi : chia các thông điệp (message) nhận từ tầng ứng dụng thành các segment và chuyển xuống tầng mạng

(cid:61607) Phía nhận : tái hợp các segment thành thông

Biên soạn : Lê Minh

điệp và gởi lên cho tầng ứng dụng

LOGO

1

Quan hệ tầng giao vận với tầng mạng

(cid:61558)Tầng giao vận:

(cid:61607) Cung cấp đường

(cid:61558)Tầng mạng: (cid:61607) Cung đường cấp truyền logic giữa các máy tính

truyền logic giữa các tiến trình

(cid:61607) PDU : datagram (cid:61607) Datagram có thể bị trùng lắp và không

(cid:61607) PDU: segment (cid:61607) Phụ thuộc vào và mở rộng thêm các dịch vụ của tầng mạng

mất, chuyển đi đúng thứ tự

Biên soạn : Lê Minh

2

5/22/2011

LOGO

2

Giao thức tầng giao vận

(cid:61558)Mở rộng việc truyền dữ liệu giữa các thiết bị đầu cuối của tầng mạng thành việc truyền dữ liệu giữa các tiến trình

(cid:61558)TCP: giao thức tin cậy, gởi nhận theo đúng

thứ tự (cid:61607) Kiểm soát tắt nghẽn (cid:61607) Điều khiển lưu lượng (cid:61607) Thiết lập đường truyền

(cid:61558)UDP: giao thức không tin cậy, gởi nhận không

theo thứ tự

Biên soạn : Lê Minh

LOGO

II

Dịch vụ dồn kênh và phân kênh

(cid:61558)Tầng mạng sử dụng cùng một kênh truyền giữa hai máy tính cho việc liên lạc với nhau

HTTP FTP Telnet

Transport Layer

Transport Layer

Network Layer

Network Layer

(cid:61558)Mỗi máy tính có thể chạy nhiều ứng dụng cùng lúc, mỗi ứng dụng được gởi xuống tầng mạng qua một cổng bằng một tiến trình.

(cid:61558)Dữ liệu gởi đúng từ tiến trình gởi đến tiến

trình nhận?

Biên soạn : Lê Minh

3

5/22/2011

LOGO

II

Dịch vụ dồn kênh và phân kênh

(cid:61558)Bên gởi : thực hiện dịch vụ dồn kênh

(cid:61607) Nhận dữ liệu từ nhiều tiến trình ứng dụng

khác nhau từ tầng ứng dụng

(cid:61607) Thêm tiêu đề để tạo thành segment và chuyển

xuống tầng mạng

(cid:61558)Bên nhận: thực hiện dịch vụ phân kênh (cid:61607) Nhận dữ liệu từ tầng mạng chuyển lên (cid:61607) Căn cứ vào tiêu đề của segment để chuyển dữ

Biên soạn : Lê Minh

liệu đến đúng tiến trình nhận

LOGO

II

Dịch vụ dồn kênh và phân kênh

(cid:61558)Căn cứ để phân kênh? (cid:61607) Mỗi tiến trình được gởi

qua một cổng

(cid:61607) Mỗi gói tin (segment) sẽ cổng

chỉ

địa

có nguồn/đích

(cid:61607) Datagram ở tầng mạng sẽ có IP nguồn/đích

Biên soạn : Lê Minh

4

5/22/2011

LOGO

II

Dịch vụ dồn kênh và phân kênh

Biên soạn : Lê Minh

LOGO

III

Giao thức UDP

(cid:61558) Là giao thức đơn giản của tầng giao vận (cid:61558)Giao thức không hướng kết nối:

(cid:61607) Không “bắt tay” giữa bên gởi và bên nhận (cid:61607) Các UDP segment được xử lý độc lập

(cid:61558)Giao thức không tin cậy:

(cid:61607) Các UDP segment có thể bị mất mát khi truyền (cid:61607) Không có cơ chế kiểm soát tắt nghẽn

(cid:61558)Tại sao dùng UDP??

Biên soạn : Lê Minh

5

5/22/2011

LOGO

III

Giao thức UDP

(cid:61558)Tại sao dùng UDP?

(cid:61607) Không cần thiết lập đường truyền (cid:61607) Không cần lưu lại trạng thái ở 2 bên gởi/nhận (cid:61607) Trường tiêu đề của gói tin nhỏ (cid:61607) Không cần cơ chế kiểm soát tắt nghẽn

(cid:61558)Thường được dùng bởi các ứng dụng đa

phương tiện: (cid:61607) Chấp nhận mất mát dữ liệu (cid:61607) Cần tốc độ truyền nhanh

(cid:61558)Muốn truyền tin cậy với giao thức UDP: ứng

dụng phải có cơ chế khắc phục lỗi

Biên soạn : Lê Minh

LOGO

1

Cấu trúc gói tin UDP

(cid:61558)Source port: địa chỉ

32 bits

cổng nguồn

dest port #

source port #

(cid:61558)Dest port: địa chỉ

checksum

length

cổng đích

(cid:61558)Checksum: kiểm tra

lỗi của segment

Application data (message)

(cid:61558)Length: độ dài của segment (byte) – tính cả header

UDP segment format

Biên soạn : Lê Minh

6

5/22/2011

LOGO

UDP checksum

2

(cid:61558) Mục đích: phát hiện lỗi trong các segment đã

gởi

(cid:61558)Phía gởi:

(cid:61607) Chia nội dung của segment thành các từ có độ dài 16 bit

(cid:61607) Tính checksum bằng cách lấy tổng (có nhớ)

của các từ 16 bit này, sau đó lấy bù 1

(cid:61607) Đặt kết quả tính checksum vào trường

checksum của UDP segment

Biên soạn : Lê Minh

(cid:61607) Giá trị ban đầu của trường checksum trong segment là bao nhiêu??

LOGO

UDP checksum

2

(cid:61558)Phía nhận:

(cid:61607) Chia nội dung của segment nhận được thành

các từ có độ dài 16 bit

(cid:61607) Tính tổng của các từ 16 bit kể cả trường checksum

(cid:61607) Nếu kết quả bằng 111111111 11111111 thì dữ

liệu nhận được không lỗi

(cid:61607) Nếu có bất kỳ bit nào trong kết quả là 0 thì dữ

liệu nhận được có lỗi

Biên soạn : Lê Minh

(cid:61607) UDP sẽ làm gì khi có lỗi xảy ra???

7

5/22/2011

LOGO

IV

Giao thức TCP

(cid:61558)Là giao thức theo hướng kết nối:

(cid:61607) Tiến trình gởi và nhận phải “bắt tay” với nhau để xác định các tham số đảm bảo cho việc truyền dữ liệu

(cid:61558)Kết nối TCP:

(cid:61607) Là kết nối điểm – điểm (cid:61607) Cung cấp kênh truyền song công

(cid:61558)Có bộ đệm ở phía gởi và nhận (cid:61558)Quy định lượng dữ liệu lớn nhất MMS có thể đặt trong mỗi segment. Giá trị MMS có thể thay đổi được.

Biên soạn : Lê Minh

LOGO

1

Cấu trúc gói tin TCP

32 bits

source port #

dest port #

URG: urgent data (thường không dùng)

sequence number

Được xác định bởi số byte dữ liệu đã gởi/nhận

acknowledgement number

ACK: giá trị ACK đã nhận được

Receive window

head len

FSRPAU

PSH: push data now (thường không dùng)

not used checksum

Urg data pnter

Options (độ dài thay đổi)

RST, SYN, FIN: Thiết lập kết nối (thiết lập và đóng kết nối)

Số lượng byte bên nhận có thể nhận

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

Internet checksum (giống ở UDP)

Biên soạn : Lê Minh

8

5/22/2011

LOGO

Sequence number và ACK number

2

(cid:61558)TCP sẽ đánh số thứ tự cho từng byte của dòng

dữ liệu nhận được từ tầng ứng dụng

(cid:61558)Mỗi segment sẽ mang một số Seq number, là số thứ tự của byte đầu tiên trong phần dữ liệu của segment đó ( không phải là số thứ tự của segment) (cid:61607) Ví dụ: A cần truyền cho B file có kích thước 5000 byte, MMS là 1000 byte, byte đầu tiên có số thứ tự là 0

Biên soạn : Lê Minh

LOGO

Sequence number và ACK number

2

(cid:61558)Giá trị ban đầu của sequency number được

chọn ngẫu nhiên

(cid:61558)Việc đánh số sequency number phụ thuộc vào

từng bên truyền nhận

(cid:61558)ACK number: số seq # của segment tiếp theo

mong muốn nhận được từ bên kia

Biên soạn : Lê Minh

9

5/22/2011

LOGO

Sequence number và ACK number

2

Host B

Host A

(cid:61558)Ví dụ

1000 byte data

(cid:61607) Seq #: số thứ tự của byte dữ liệu đầu tiên trong segment

host ACKs receipt of data

(cid:61607) ACK #:

Host sends another 500 bytes

• Số seq# của segment tiếp mong theo chờ từ phía kia

time

tính “tích

• Được kiểu lũy”

Biên soạn : Lê Minh

LOGO

3

Truyền dữ liệu tin cậy với TCP

(cid:61558)Tầng mạng cung cấp dịch vụ IP: dịch vụ

truyền không tin cậy

(cid:61558)TCP tạo ra đường truyền dữ liệu tin cậy dựa

trên dịch vụ IP (cid:61607) Đảm bảo truyền đúng và đủ dữ liệu (segment)

cho bên nhận

(cid:61558)Căn cứ vào ACK và timer để thực hiện việc truyền lại các segment, 1 segment sẽ được truyền lại khi: (cid:61607) “Không” nhận được ACK xác nhận từ bên

Biên soạn : Lê Minh

nhận

(cid:61607) Hết thời gian chờ (timeout) nhận ACK

10

5/22/2011

LOGO

3

Truyền dữ liệu tin cậy với TCP

(cid:61558)Các hoạt động của bên gởi:

• Chia dữ liệu ra và đóng gói thành các segment

(cid:61607) Nhận dữ liệu từ tầng ứng dụng:

căn cứ vào giá trị MMS

• Đánh số cho các segment và đặt vào trường

sequency number của segment

• Tiến hành gởi segment và khởi động timer cho

từng segment

Biên soạn : Lê Minh

LOGO

3

Truyền dữ liệu tin cậy với TCP

(cid:61558)Các hoạt động của bên gởi:

(cid:61607) Sau khoảng thời gian chờ (timeout) cho mỗi segment, nếu không nhận được ACK xác nhận từ bên nhận: • Gởi lại segment đó • Khởi động lại timer cho segment

(cid:61607) Nếu nhận được ACK xác nhận từ bên nhận

trước thời gian timeout: • gửi tiếp segment có số sequency tương ứng với

số ACK vừa nhận được

(cid:61558)Bên nhận: nếu nhận được segment từ bên gởi

sẽ trả lời lại bằng segment chứa ACK

Biên soạn : Lê Minh

11

5/22/2011

LOGO

3

Truyền dữ liệu tin cậy với TCP

(cid:61558)Ví dụ:

Biên soạn : Lê Minh

(cid:61607) ACK xác nhận từ bên nhận bị thất lạc

LOGO

3

Truyền dữ liệu tin cậy với TCP

(cid:61558)Ví dụ:

(cid:61607) ACK xác nhận thứ 2 đến trước thời gian

Biên soạn : Lê Minh

timeout của mình

12

5/22/2011

LOGO

3

Truyền dữ liệu tin cậy với TCP

(cid:61558)Ví dụ:

(cid:61607) ACK xác nhận thứ 2 đến trước thời gian

Biên soạn : Lê Minh

timeout của ACK thứ nhất

LOGO

4

Điều khiển lưu lượng trong TCP

(cid:61558) Mục đích: tránh hiện tượng bên gởi làm tràn

bộ đệm bên nhận

(cid:61558)Khi khởi tạo kết nối TCP, mỗi bên sẽ khởi tạo

cho mình bộ đệm nhận (RevBuffer)

(cid:61607) Dữ liệu nhận được từ bên gởi sẽ được lưu

Biên soạn : Lê Minh

trong bộ đệm nhận trước khi được xử lý

13

5/22/2011

LOGO

4

Điều khiển lưu lượng trong TCP

32 bits

source port #

dest port #

sequence number

acknowledgement number

Receive window

head len

FSRPAU

not used checksum

Urg data pnter

(cid:61607) Bên nhận báo cho bên gởi biết độ lớn của vùng

Options (độ dài thay đổi)

đệm còn rỗi ( RcvWindow) của mình ??

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

Biên soạn : Lê Minh

(cid:61607) Khi bộ đệm bên nhận đầy (RcvWindow = 0)??

LOGO

5

Quản lý kết nối TCP

client

server

(cid:61558) Thiết lập kết nối : bắt tay 3 bước giữa client và server: (cid:61607) B1: client gởi 1 segment SYN tới server ( không chứa data, chứa số Seq# khởi đầu)

giá

trị Seq#

(cid:61607) B2: server trả lời bằng 1 segment SYN-ACK ( khởi của tạo server)

(cid:61607) B3: client trả lời bằng 1

segment SYN-ACK

Biên soạn : Lê Minh

14

5/22/2011

LOGO

3

Quản lý kết nối TCP

(cid:61558)Đóng kết nối:

client

server

(cid:61607) B1: client gởi segment

closing

FIN tới server

(cid:61607) B2: server gởi segment ACK xác nhận, gởi lại 1 segment FIN

(cid:61607) B3:

client

gởi

t i

khi

nhận

lại 1 segment ACK xác nhận sau được segment FIN

a w d e m

i t

(cid:61607) B4: server nhận được segment ACK, đóng kết nối

Biên soạn : Lê Minh

15