You are on page 1of 14

Chương 3: Nội dung

3.1 Các dịch vụ tầng 3.5 Vận chuyển hướng


giao vận kết nối: TCP
3.2 Ghép kênh và § Cấu trúc đoạn dữ liệu
phân kênh (segment)
§ Truyền dữ liệu tin cậy
3.3 Vận chuyển không
§ Điều khiển luồng
kết nối: UDP
§ Quản lý kết nối
3.4 Các nguyên lý
3.6 Các nguyên lý điều
truyền dữ liệu tin
khiển tắc nghẽn
cậy
3.7 Điều khiển tắc nghẽn
TCP
Tầng giao vận 3-56

Khái quát TCP RFCs: 793,1122,1323, 2018, 2581


v Điểm-tới-điểm: v Truyền dữ liệu song công (full
§ Một bên gửi, một bên nhận duplex):
§ Luồng dữ liệu đi theo 2
v Truyền dòng byte theo đúng hướng trên cùng một kết nối
thứ tự và truyền tin cậy: § MSS: maximum segment size
§ Không có “ranh giới thông (kích thước đoạn lớn nhất)
điệp” v Hướng kết nối:
§ Bắt tay (trao đổi các thông
v pipeline:
điệp điều khiển) khởi tạo
§ Điều khiển tắc nghẽn và điều trạng thái cho bên gửi và bên
khiển luồng TCP thiết lập kích nhận trước khi trao đổi dữ
thước cửa sổ liệu
v Điều khiển luồng:
§ Bên gửi không lấn át bên
nhận

Tầng giao vận 3-57


Cấu trúc TCP segment
32 bits
URG: dữ liệu khẩn Đếm các bytes
(thường không sử dụng) source port # dest port #
dữ liệu
ACK: ACK #
sequence number (không phải là
Các mảnh!)
hợp lệ acknowledgement number
head not
len used
UAP R S F receive window
PSH: đẩy dữ liệu hiện tại Số byte
(thường không sử dụng) checksum Urg data pointer bên nhận có
thể nhận được
RST, SYN, FIN: options (độ dài thay đổi)
Thiết lập kết nối
(các lệnh thiết lập,
hủy bỏ )
Dữ liệu ứng dụng
Internet (Độ dài thay đổi)
checksum
(như trong UDP)

Tầng giao vận 3-58

Số thứ tự và báo nhận ACK trong TCP


segment đi từ bên gửi
Số thứ tự: source port # dest port #
sequence number
§ “Số” dòng byte của byte đầu acknowledgement number
tiên trong đoạn (segment) rwnd
checksum urg pointer
dữ liệu
window size
Báo nhận:
§ Số thứ tự của byte tiếp theo
được mong đợi từ phía bên
kia
§ ACK tích lũy sent sent, not- usable not
ACKed yet ACKed but not usable
Hỏi: Làm thế nào bên nhận xử (“in- yet sent
lý được các segment không flight”)
segment đến từ bên gửi
đúng thứ tự? source port # dest port #

§ Trả lời: TCP không đề cập, sequence number


acknowledgement number
tùy thuộc vào người thực A rwnd
hiện checksum urg pointer

Tầng giao vận 3-59


Số thứ tự và báo nhận ACK trong TCP

Host A Host B

Người dùng
nhập ‘C’
Seq=42, ACK=79, data = ‘C’
host báo nhận ACK
cho ‘C’, phản hồi
ngược lại‘C’
Seq=79, ACK=43, data = ‘C’
host báo nhận ACK
cho ‘C’đã phản hồi

Seq=43, ACK=80

Kịch bản telnet đơn giản

Tầng giao vận 3-60

TCP round trip time và timeout


Hỏi: Làm thế nào để thiết Hỏi: Ước lượng RTT như
lập giá trị TCP timeout? nào?
v Dài hơn RTT v SampleRTT: thời gian đo
§ nhưng RTT thay đổi được từ khi truyền segment
đến khi nhận được ACK
v Quá ngắn: timeout
§ Bỏ qua việc truyền lại
sớm, không cần truyền
v SampleRTT có thể thay đổi,
lại cần giá trị RTT ước lượng
v Quá dài: phản ứng “mượt hơn”
chậm với các segment § Tính trung bình một vài độ
bị mất đo gần đây, không chỉ
SampleRTT hiện tại

Tầng giao vận 3-61


TCP round trip time và timeout
EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT
v Giá trị đặc trưng: = 0.125
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr

350

RTT: gaia.cs.umass.edu tới fantasia.eurecom.fr

300

250

200

sampleRTT
150

EstimatedRTT

100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
Thời gian (seconds)
SampleRTT Estimated RTT

Tầng giao vận 3-62

TCP round trip time và timeout


v Khoảng thời gian timeout: EstimatedRTT cộng với “hệ số
dự trữ an toàn”
§ Nếu có biến thiên lớn trong EstimatedRTT, thì hệ số dự trữ an toàn
phải lớn hơn
v Ước lượng sự biến thiên của SampleRTT từ EstimatedRTT:
DevRTT = (1- )*DevRTT +
*|SampleRTT-EstimatedRTT|
(Giá trị đặc trưng:  = 0.25)

TimeoutInterval = EstimatedRTT + 4*DevRTT

RTT ước lượng “hệ số dự trữ an toàn”

Tầng giao vận 3-63


Chương 3: Nội dung
3.1 Các dịch vụ tầng 3.5 Vận chuyển hướng
giao vận kết nối: TCP
3.2 Ghép kênh và § Cấu trúc đoạn dữ liệu
phân kênh (segment)
§ Truyền dữ liệu tin cậy
3.3 Vận chuyển không
§ Điều khiển luồng
kết nối: UDP
§ Quản lý kết nối
3.4 Các nguyên lý
3.6 Các nguyên lý điều
truyền dữ liệu tin
khiển tắc nghẽn
cậy
3.7 Điều khiển tắc nghẽn
TCP
Tầng giao vận 3-64

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

v TCP tạo dịch vụ rdt trên


dịch vụ không tin cậy của
IP
§ Truyền segment theo kiểu Hãy bắt đầu xem xét bên gửi
pipelining TCP theo cách đơn giản:
§ ACK tích lũy
§ Bỏ qua trùng lặp ACK
§ Dùng bộ định thời cho việc
§ Bỏ qua điều khiển luồng,
truyền lại
điều khiển tắc nghẽn
v Việc truyền lại được kích
hoạt bởi:
§ Các sự kiện timeout
§ ACK bị trùng lặp

Tầng giao vận 3-65


Các sự kiện của TCP bên gửi:
Dữ liệu nhận từ ứng dụng: Timeout:
v Tạo segment với số thứ v Truyền lại segment bị
tự timeout
v Số thứ tự là số dòng v Khởi tạo lại bộ định thời
byte của byte dữ liệu ACK đã nhận:
đầu tiên trong segment v Nếu ACK báo nhận cho
v Khởi tạo bộ định thời các segment chưa
nếu chưa chạy: được báo nhận trước
§ Chú ý bộ định thời của đó, thì:
segment chưa được báo
§ Cập nhật lại các segment
nhận muộn nhất
đã được báo nhận
§ Hết thời hạn:
§ Khởi tạo bộ định thời nếu
TimeOutInterval
vẫn còn các segment
chưa được báo nhận
Tầng giao vận 3-66

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


data received from application above
create segment, seq. #: NextSeqNum
pass segment to IP (i.e., “send”)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
L start timer
NextSeqNum = InitialSeqNum Chờ
SendBase = InitialSeqNum sự
kiện timeout
retransmit not-yet-acked segment
with smallest seq. #
start timer
ACK received, with ACK field value y
if (y > SendBase) {
SendBase = y
/* SendBase–1: last cumulatively ACKed byte */
if (there are currently not-yet-acked segments)
start timer
else stop timer
} Tầng giao vận 3-67
TCP: Các tình huống phải truyền lại
Host A Host B Host A Host B

SendBase=92
Seq=92, 8 bytes of data Seq=92, 8 bytes of data

Seq=100, 20 bytes of data


ACK=100
X
ACK=100
ACK=120

Seq=92, 8 bytes of data Seq=92, 8


SendBase=100 bytes of data
SendBase=120
ACK=100
ACK=120

SendBase=120

Tình huống mất ACK Tình huống timeout sớm


Tầng giao vận 3-68

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


Host A Host B

Seq=92, 8 bytes of data

Seq=100, 20 bytes of data


ACK=100
X
ACK=120

Seq=120, 15 bytes of data

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


Tầng giao vận 3-69
Tạo ACK trong TCP [RFC 1122, RFC 2581]

Sự kiện tại bên nhận Hành động của TCP tại bên nhận

Segment đến đúng thứ tự với số ACK bị trễ. Chờ 500ms cho segment
thứ tự mong muốn. Tất cả dữ liệu tiếp theo. Nếu không có segment tiếp
đến đã được báo nhận theo thì gửi ACK

Segment đến đúng thứ tự với số Gửi ngay một ACK tích lũy, báo nhận
thứ tự mong muốn. Một segment ACK cho cả hai segment đến đúng
khác đang chờ ACK thứ tự

Segment đến không đúng số thứ Gửi ngay ACK trùng lặp,
tự, số thứ tự lớn hơn mong đợi. chỉ ra số thứ tự của byte mong đợi
Phát hiện có khoảng trống tiếp theo

Segment đến lấp đầy hoặc Gửi ngay ACK, với điều kiện là
một phần khoảng trống segment bắt đầu ngay tại điểm có
khoảng trống
Tầng giao vận 3-70

Truyền lại nhanh trong TCP


v Chu kỳ time-out thường
tương đối dài:
§ Trễ dài trước khi gửi lại Nếu bên gửi nhận được 3
gói tin đã bị mất ACK trùng lặp cho cùng
một dữ liệu (“Ba ACK trùng
v Phát hiện các segment
lặp”), thì sẽ gửi lại
bị mất qua các ACK bị segment chưa được báo
trùng lặp. nhận có số thứ tự nhỏ
§ Bên gửi thường gửi nhiều nhất
segment song song § Có thể là đã bị mất
§ Nếu segment, có thể sẽ segment chưa được báo
có nhiều ACK bị trùng nhận, nên không cần
phải đợi đến timeout
lặp.

Tầng giao vận 3-71


Truyền lại nhanh trong TCP
Host A Host B

Seq=92, 8 bytes of data


Seq=100, 20 bytes of data
X

ACK=100
ACK=100
ACK=100
ACK=100
Seq=100, 20 bytes of data

Truyền lại nhanh sau khi bên gửi nhận được 3 ACK trùng lặp
Tầng giao vận 3-72

Chương 3: Nội dung


3.1 Các dịch vụ tầng 3.5 Vận chuyển hướng
giao vận kết nối: TCP
3.2 Ghép kênh và § Cấu trúc đoạn dữ liệu
phân kênh (segment)
§ Truyền dữ liệu tin cậy
3.3 Vận chuyển không
§ Điều khiển luồng
kết nối: UDP
§ Quản lý kết nối
3.4 Các nguyên lý
3.6 Các nguyên lý điều
truyền dữ liệu tin
khiển tắc nghẽn
cậy
3.7 Điều khiển tắc nghẽn
TCP
Tầng giao vận 3-73
Điều khiển luồng trong TCP
Tiến trình
Ứng dụng có thể ứng dụng
di chuyển dữ liệu từ Ứng dụng
bộ đệm TCP socket ….
TCP socket Hệ điều hành
Bộ đệm bên nhận
… chậm hơn so với
bên nhận TCP
(trong khi bên gửi TCP
vẫn đang gửi) code

IP
Điều khiển luồng code
Bên nhận điều khiển bên gửi,
để bên gửi sẽ không làm tràn
bộ đệm của bên nhận do việc Từ bên gửi
gửi quá nhanh và quá nhiều
Chồng giao thức phía bên nhận

Tầng giao vận 3-74

Điều khiển luồng trong TCP


v Bên nhận “thông báo” không
gian đệm còn trống bởi giá trị
rwnd trong TCP header của
các segment gửi-nhận
§ Kích thước RcvBuffer được RcvBuffer Dữ liệu được đệm
thiết lập qua tùy chọn (option)
của socket (thường mặc định rwnd
là 4096 byte) Không gian đệm trống
§ Nhiều hệ điều hành tự động
điều chỉnh RcvBuffer
v Bên gửi giới hạn tổng số dữ
liệu chưa được báo nhận đến
bên nhận theo giá trị rwnd
v Đảm bảo vùng đệm nhận
không bị tràn

Tầng giao vận 3-75


Chương 3: Nội dung
3.1 Các dịch vụ tầng 3.5 Vận chuyển hướng
giao vận kết nối: TCP
3.2 Ghép kênh và § Cấu trúc đoạn dữ liệu
phân kênh (segment)
§ Truyền dữ liệu tin cậy
3.3 Vận chuyển không
§ Điều khiển luồng
kết nối: UDP
§ Quản lý kết nối
3.4 Các nguyên lý
3.6 Các nguyên lý điều
truyền dữ liệu tin
khiển tắc nghẽn
cậy
3.7 Điều khiển tắc nghẽn
TCP
Tầng giao vận 3-76

Quản lý kết nối


Trước khi trao đổi dữ liệu, bên gửi/bên nhận “bắt tay”:
v Đồng ý thiết lập kết nối
v Đồng ý các tham số kết nối

Tầng ứng dụng Tầng ứng dụng

Trạng thái kết nối: ESTAB Trạng thái kết nối: ESTAB
Các biến kết nối: Các biến kết nối:
Số thứ tự client-đến-server Số thứ tự client-đến-server
server-đến-client server-đến-client
Kích thước rcvBuffer tại Kích thước rcvBuffer tại
server, client server, client

Tầng mạng Tầng mạng

Socket clientSocket = Socket connectionSocket =


newSocket("hostname","port welcomeSocket.accept();
number");

Tầng giao vận 3-77


Đồng ý thiết lập kết nối

Bắt tay hai bước


Hỏi: Bắt tay hai bước có luôn
được thực hiện trên mạng?
Mình nói
chuyện nhé?
v Chậm trễ liên quan tới các biến
ESTAB v Các thông điệp được truyền lại
OK
ESTAB (ví dụ, req_conn(x)) là do mất
thông điệp
v Sắp xếp lại thông điệp
v Không thể “nhìn thấy” phía bên
chọn x
kia
req_conn(x)
ESTAB
acc_conn(x)
ESTAB

Tầng giao vận 3-78

Đồng ý thiết lập kết nối


Các kịch bản có lỗi khi thực hiện bắt tay 2 bước:

chọn x chọn x
req_conn(x) req_conn(x)
ESTAB ESTAB
truyền lại acc_conn(x) truyền lại acc_conn(x)
req_conn(x) req_conn(x)

ESTAB ESTAB
data(x+1) chấp nhận
req_conn(x)
truyền lại data(x+1)
data(x+1)
Kết nối Kết nối
client x hoàn thành server x hoàn thành server
client
chấm dứt quên x chấm dứt quên x
req_conn(x)

ESTAB ESTAB
data(x+1) chấp nhận
Kết nối mở nửa! data(x+1)
(không có client!)
Tầng giao vận 3-79
Bắt tay 3 bước trong TCP

LISTEN LISTEN
Chọn số thứ tự khởi tạo x
Gửi thông điệp TCP SYN
SYNSENT SYNbit=1, Seq=x
Chọn số thứ tự khởi tạo y
Gửi thông điệp TCP SYNACK,
báo nhận cho SYN SYN RCVD
SYNbit=1, Seq=y
ACKbit=1; ACKnum=x+1
SYNACK(x) nhận được cho
biết server đang hoạt động;
ESTAB Gửi ACK cho SYNACK;
segment này có thể chứa
dữ liệu client-tới-server ACKbit=1, ACKnum=y+1
ACK(y) nhận được cho biết
client đang hoạt động
ESTAB

Tầng giao vận 3-80

Bắt tay 3 bước trong TCP: FSM

đóng

Socket connectionSocket =
welcomeSocket.accept();

L Socket clientSocket =
SYN(x) newSocket("hostname","port
number");
SYNACK(seq=y,ACKnum=x+1)
Tạo một socket mới cho SYN(seq=x)
truyền thông quay lại phía client nghe

SYN Gửi
rcvd SYN

SYNACK(seq=y,ACKnum=x+1)
ESTAB ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L

Tầng giao vận 3-81


TCP: đóng kết nối
v Mỗi bên client và server thực hiện đóng kết nối
§ Gửi TCP segment với bit FIN = 1
v Đáp ứng lại FIN nhận được bằng ACK
§ FIN, ACK đang nhận có thể được kết nối với FIN của nó
v Có thể thực hiện đồng bộ trao đổi FIN

Tầng giao vận 3-82

TCP: đóng kết nối

ESTAB ESTAB
clientSocket.close()

FIN_WAIT_1 Không thể gửi FINbit=1, seq=x


nữa, nhưng vẫn
có thể nhận CLOSE_WAIT
dữ liệu ACKbit=1; ACKnum=x+1
Vẫn có thể
FIN_WAIT_2 Chờ server đóng gửi dữ liệu

LAST_ACK
FINbit=1, seq=y
TIMED_WAIT Không thể gửi
dữ liệu thêm nữa
ACKbit=1; ACKnum=y+1
chờ một khoảng thời gian
bằng 2*max thời gian CLOSED
sống của segment

CLOSED

Tầng giao vận 3-83

You might also like