Professional Documents
Culture Documents
MMT - Chuong 3 - 3
MMT - Chuong 3 - 3
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
350
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
SendBase=92
Seq=92, 8 bytes of data Seq=92, 8 bytes of data
SendBase=120
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
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
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
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
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
đó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
ESTAB ESTAB
clientSocket.close()
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