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