You are on page 1of 7

TẦNG TRANSPORT

I. Dồn kênh – phân kênh


1. Dồn kênh
- Là hoạt động gắn header cho message đi từ tầng app xuống, lúc này trở thành segment
2. Phân kênh
- Là hoạt động chọn port tương ứng / socket tương ứng để truyền message từ segment lên tầng app.
- Đối với UDP:
+ Vì kết nối vô hướng, nên phía nhận chỉ mở 1 socket (1 port) cho nhiều source IP, các tập tin gửi chỉ quan tâm
đến dest port là gì, sau đó tập tin sẽ được nhét vào dest port đó.
- Đối với TCP:
+ Để mapping đúng socket mong muốn cần cả source IP, source Port, dest IP, dest Port. (giả sử như tại server
mở port 1000, có 2 connect từ 2 máy khác nhau đến. Khi kết nối sẽ sinh ra 2 socket, mỗi socket lưu 4 thông tin
trên). Lưu ý mỗi port có thể có nhiều socket
II. LÍ THUYẾT TRUYỀN DỮ LIỆU TIN CẬY:
- Tầng app gọi rdt_send, sau đó kernel sẽ tạo 1 udt_send(), bên nhận sẽ là rdt_rcv() dưới kernel, sau đó mới đẩy
lên trên. (khác với udp sẽ thao tác trực tiếp qua port và socket).
1. Rdt 1.0
- Thông tin được truyền trên một kênh tin cậy, dữ liệu Không bị lỗi, lúc này, việc nhận, gửi gần giống như udp.
2. Rdt2.0
- Giả sử kênh truyền có bit lỗi (nhận diện bằng checksum,…)
- Xử lí:
o Có một tập tin ACKs được bên nhận gửi trả lại bên gửi để thông báo đã nhận packet
o Có một tập tin NAKs nếu gửi có lỗi. Nếu bên gửi nhận NAKs, sẽ gửi lại packet.
- Stop and wait: bên gửi gửi 1 packet, sau đó chờ bên nhận response rồi thực hiện bước tiếp theo.

- Nếu gói tin ACK hay NAK có vấn đề, bên gửi sẽ gửi lại segment => duplicate. Lúc này cần “sequence number” để
kiểm tra xem có duplicate hay không. Nếu trùng sequence number => discard gói tin chứ không delever up.
3. Rdt2.1

4. Rdt 2.2: a NAK free protocol


- Cũng giống như rdt 2.1, nhưng chỉ dùng ACKs, bên nhận gửi ACK cho packet cuối nhận đúng.
- Bên nhận phải chứa một cách rõ rang seq của packet đã nhận được ACK.
- Nếu sender nhận ACK lặp thì bên gửi sẽ hành động như khi nhận được ACK
- TCP sẽ dùng phương thức này chứ không dùng NAK.
5. Rdt 3.0: kênh truyền bị lỗi và mất gói.
- Sender sẽ chờ 1 khoảng thời gian cho ACK, nếu quá thời gian vẫn chưa nhận được ACK thì gửi lại
- Từ nghi thức này trở đi, không dùng duplicate ack = nak nữa, mà sẽ dùng timeout.
- Performance của Rdt 3.0 nếu sử dụng stop and wait sẽ không hợp lí.
6. NGHI THỨC PIPELINED
- Gửi đi nhiều packet 1 lần thay vì 1 gói.
- Tăng range cho sequence number.
- Có buffer để chứa.
a. Go – back – N
o Một số “cấu trúc” mới
+ Số thứ tự : k-bit
+ Có 1 buffer windows size N: số gói tin liên tục chưa được gửi ACK
+ ACK seq# : nhận đúng đến packet có seq#
o Bên gửi:
+ Sử dụng windows để lưu các gói tin chưa nhận ACK
+ Gói nào được thêm windows vào sẽ được gửi qua bên nhận
+ Thiết lập đồng hồ cho gói tin đầu windows
+ Timeout: gửi lại all gói tin trong buffer
o Bên nhận:
+ Chỉ gửi ACK gói tin đã nhận đúng sau cùng ( đúng về mặt thứ tự)
+ Chỉ nhớ số thứ tự đang đợi
+ Gói tin không theo thứ tự sẽ được discard(nếu không dùng bộ nhớ đệm) và gửi lại ACK đúng sau cùng.

b. Selective repeat
o Các gói tin không đúng order sẽ được chứa vào buffer.
o Các ack không đúng sẽ được record
o Chỉ gửi lại các gói tin time out.
o Dịch chuyển windows để hết những gói tin đã nhận ACK (con time out và những con trong record)
7. TCP
a. Giới thiệu
o Là một giao thức dạng point to point, hướng kết nối, full-duplex.
o Sử dụng buffer bên gửi và nhận, gói tin được truyền theo thứ tự.

b. Cấu trúc gói tin

o Heaer:
 Source port, Dest port, seq (số thứ tự của byte đầu tiên trong phần data của gói tin), ack num
(byte mong đợi nhận tiếp theo), bit header (chiều dài của header theo đơn vị word = 4 byte),
reverse, các flag ( U: pointer cần gửi khẩn cấp/ ack: ACK number valid/ psh : dữ liệu cần phân
phối ngay, rst: thiết lập lại kết nối; syn: sử dụng để thiết lập kết nối; fin: đóng kết nối). windows
size, check sum, ptr urgen data, variable length.
o Body : data
c. Truyền dữ liệu:
o Dùng pinedline, thiết lập thời gian timeout. Nếu timeout => gửi lại toàn bộ gói tin trong buffer.
o Bên gửi: Nhận dữ liệu từ tầng ứng dụng -> tạo segment, bật đồng hồ và thời gian chờ. Nếu nhận gói tin
ACK không trùng lặp, trượt windows -> set time, nếu nhận duplicate Ack -> ignore. Trong trường hợp
time out -> gửi lại toàn bộ windows, reset time.
o Bên nhận: Nhận đúng thứ tự thì deliver up lên tầng app, gửi ack cho bên gửi, nếu không đúng thứ tự thì
gửi ack tùng lặp cho bên gửi.
o Nguyên lí fast restranmitment: Sau khi nhận 3 gói ACK trùng nhau liên tục => gửi lại gói tin thay vì đợi
timeout.
d. Thiết lập kết nối: Thực hiện handshake 3 lần trước khi truyền dữ liệu (để xác định seq ban đầu):
e. Quản lý luồng
o Dựa vào receive windows size, bên nhận sẽ điều phối windows size của bên gửi => điều khiển luồng

TẦNG NETWORK

I. Thuật toán Scheduling


- Nếu không có cờ priority => First come first service.
- Round robin: lần lượt lấy từ các class theo thứ tự rồi xoay vòng.
II. Cấu trúc gói tin

III. NAT
- Các địa chỉ private: 10/8 (class A), 172.16/12(class B), 192.168/16(class C)
- NAT chuyển IP private thành IP public.
IV. ICMP
DATALINK

You might also like