TRANSPORT
Như đã nói ở bài viết mô hình OSI, người làm về mảng Network sẽ phải thường xuyên tiếp xúc và làm việc với các vấn đề thuộc về lớp 4, 3, 2 và 1. Còn các người anh em hàng xóm làm về mảng System sẽ làm việc với các vấn đề thuộc lớp 4, 5, 6 và 7, như vậy, lớp 4 Transport như thể đang là lớp giao thoa giữa 2 mảng Network và System.
Giả sử có 2 máy, máy A ở Việt Nam và máy B ở Mỹ đang chat với nhau, thì nhìn vào mô hình OSI, các lớp 1, 2, 3 phải chịu trách nhiệm về việc 2 máy này đang đấu nối như thế nào, dùng đường truyền vật lý gì, dẫn đường dữ liệu đi đến đâu để cho dữ liệu ở 2 máy có thể truyền và nhận đến đúng đích đến. Còn đối với lớp thứ 4 nó sẽ không quan tâm đến các vấn đề đó vì mọi chuyện đã do 3 lớp bên dưới lo rồi, lớp thứ 4 chỉ lo kiểm soát hoạt động truyền dữ liệu giữa 2 máy. Nói cách khác, đứng từ vị trí lớp Transport sẽ xem như là đang có một đường kết nối ảo trực tiếp giữa 2 máy A và B, người ta gọi đường kết nối ảo này là kết nối end – to – end. Và lớp Transport này sẽ đảm nhận các nhiệm vụ như sau:
- Truyền tải các session trao đổi dữ liệu của lớp Application bên trên qua kết nối ảo end – to – end.
- Thực hiện phân mảnh dữ liệu, cắt nhỏ dữ liệu và đóng gói các đơn vị dữ liệu của lớp Application ở trên vào các đơn vị dữ liệu ở lớp 4.
- Đảm nhận việc truyền tải có tin cậy hay không, có nhanh hay không, có cơ chế điều khiển hay không phụ thuộc vào hai phương thức truyền tải Reliable hoặc Best-effort.
Hình: So sánh hai phương thức truyền tải
Ở lớp Transport này sẽ có 2 phương thức truyền tải chính (Reliable và Best-effort) tương ứng với 2 kiểu kết nối (Connection-oriented và Connection less) và 2 giao thức nổi bật (TCP và UDP).
Đối với phương thức truyền tải Reliable sẽ sử dụng kỹ thuật kết nối Connection-oriented, giao thức sử dụng là TCP, loại này trước khi truyền dữ liệu bắt buộc phải xây dựng một kết nối an toàn trước sau đó mới thực hiện truyền và nhận dữ liệu trên kết nối này. Khi đó, các đơn vị dữ liệu khi cắt nhỏ ra sẽ được đánh số thứ tự để khi ráp lại ở phía đầu nhận được chính xác nhất. Loại truyền tải Reliable này được sử dụng đối với các ứng dụng thiên về truyền file, dữ liệu để đảm bảo dữ liệu được truyền và nhận được chính xác.
Đói với phương thức truyền tải Best-effort sẽ sử dụng kỹ thuật kết nối Connection less, giao thức sử dụng là UDP, loại này không cần phải xây dựng kết nối an toàn, mà khi có dữ liệu lập tức đưa vào đường truyền truyền đi, sao cho dữ liệu có thể truyền một cách nhanh nhất có thể, cho nên các đơn vị dữ liệu sẽ không được đánh số thứ tự khi gửi, chính vì thế, không có gì có thể đảm bảo dữ liệu được truyền và nhận được chính xác, nhưng bù lại, tốc độ truyền cực kỳ nhanh. Loại truyền tải Best-effort này thường được dùng trong các ứng dụng thiên về Voice Streaming, Video Streaming để dữ liệu thoại và video có thể truyền nhanh chóng.
Có hai giao thức nổi bật hoạt động ở lớp thứ 4 của mô hình OSI là UDP và TCP, đây là hai giao thức quan trọng, được sử dụng hầu hết trong các loại ứng dụng từ lớp Application bên trên:
- UDP – User Datagram Protocol:
UDP là một giao thức truyền tải Connectionless điển hình. Như đã nói, một giao thức dạng Connectionless sẽ không thực hiện thao tác xây dựng kết nối trước khi truyền dữ liệu mà thực hiện truyền ngay lập tức khi có dữ liệu cần truyền. Ngoài ra, Connectionless cũng không sử dụng các phương pháp đảm bảo độ tin cậy và các biện pháp đánh số thứ tự cho các đơn vị dữ liệu được truyền. Với đặc điểm này, UDP sẽ thực hiện truyền tải rất nhanh cho dữ liệu của lớp ứng dụng, tuy nhiên, hoạt động truyền tải này lại không có độ tin cậy cao và dễ bị lỗi.
Hình: Cấu trúc của UDP Datagram.
Trong đó:
16 bit source port và 16 bit destination port: cho phép định danh một session của một ứng dụng nào đó chạy trên UDP. Ví dụ: Máy A sau khi đã có kết nối end – to – end tới Máy B thì hai máy này bắt đầu truyền dữ liệu, 1 luồng dữ liệu của TFTP, 1 luồng dữ liệu của DNS cùng chạy trên kết nối end – to – end này thì làm sao có thể phân biệt được hai luồng dữ liệu của 2 ứng dụng khác nhau. Nên người ta mới dựa vào source port và destination port để phân biệt, ví dụ luồng TFTP sẽ có source port là 1024, destination port là 69, còn luồng DNS sẽ có source port là 1025 và destination port là 53, dựa vào thông số này sẽ có thể phân biệt 2 luồng ứng dụng. Cho nên có thể coi port chính là địa chỉ của lớp thứ 4.
UDP length: cho biết chiều dài của toàn bộ UDP datagram.
UDP checksum: thực hiện kiểm tra lỗi cho toàn bộ UDP datagram.
Data: dữ liệu lớp trên được đóng gói vào UDP datagram đang xét.
- TCP – Tranmission Control Protocol:
Ngược lại với UDP, TCP là giao thức truyền tải connection – oriented điển hình. Một giao thức dạng connection – oriented phải thực hiện thiết lập kết nối với đầu xa trước khi thực hiện truyền dữ liệu (tiến trình thiết lập kết nối ở TCP được gọi là tiến trình bắt tay 3 bước – threeway handshake). Phải thực hiện cơ chế đánh số thứ tự (sequencing) cho các đơn vị dữ liệu được truyền. Phải thực hiện cơ chế báo nhận khi truyền dữ liệu, các segment gửi đi mà không được báo nhận được xem như bị lỗi khi truyền và sẽ được thực hiện truyền lại. Và phải thực hiện các cơ chế điều khiển luồng thích hợp (flow control) để tránh nghẽn xảy ra.
Hình: Cấu trúc của một TCP segment.
Source port và destination port (đều dài 16 bit): định danh một session của một ứng dụng nào đó chạy trên TCP
Sequence number (32 bit): dùng cho việc đánh số thứ tự cho các đơn vị dữ liệu khi được cắt nhỏ và đảm bảo sắp xếp đúng thứ tự của dữ liệu nhận được tại phía nhận.
Acknowledge number (32 bit): sử dụng trong cơ chế báo nhận khi truyền và nhận dữ liệu.
Header length (4 bit): cho biết chiều dài của TCP header
Các bit reserverd (4 bit): dùng cho mục đích dự phòng và đều được thiết lập bằng 0.
Các bit control (9 bit): thực hiện các chức năng điều khiển như thiết lập, kết thúc một session, kiểm soát nghẽn,… Mỗi bit này còn được gọi là một cờ (flag).
Windown size (16 bit): số lượng byte mà thiết bị sẵn sàng tiếp nhận.
Checksum (16 bit): kiểm tra lỗi cho toàn bộ TCP segment.
Urgent pointer (16bit): chỉ báo điểm kết thúc của dữ liệu khẩn cấp có tính ưu tiên cao (cần được xử lý trước).
Options (tối đa 32 bit): cho phép thêm vào TCP các tính năng khác.
Data: dữ liệu lớp trên.
Vậy thì một thực thể ở lớp Transport làm sao biết được dữ liệu bên trong segment đó thuộc về ứng dụng nào của lớp Application bên trên, để làm được điều này, thực thể đó phải đọc thông tin trên TCP hoặc UDP header và nhìn vào tham số port để nhận diện giao thức lớp trên đang được đóng gói trong phần data.
Hình: Giá trị port nhận diện của một số giao thức application thường gặp.
Một số nhận diện tiêu biểu:
FTP: chạy trên nền TCP, sử dụng port 20 hoặc 21.
HTTP: chạy trên nền TCP, sử dụng port 80.
HTTPS: chạy trên nền TCP, sử dụng port 443.
SMTP: chạy trên nền TCP, sử dụng port 25.
POP3: chạy trên nền TCP, sử dụng port 110.
TFTP: chạy trên nền UDP, sử dụng port 69.
SNMP: chạy trên nền UDP, sử dụng port 161 hoặc 162.
DNS: chạy trên nền TCP hoặc UDP, sử dụng port 53.
Tóm lại, TCP là giao thức truyền tải tin cậy theo kiểu connection – oriented, sử dụng nhiều cơ chế phức tạp để đảm bảo tính tin cậy nên sẽ hoạt động chậm hơn so với UDP truyền tải theo kiểu connectionless không phải sử dụng các cơ chế phức tạp để đảm bảo độ tin cậy. Vì vậy, TCP thích hợp cho việc truyền tải các ứng dụng không quá khắt khe về độ chờ (latency), thường là các ứng dụng có thiên hướng truyền file như: web, mail, telnet … Ngược lại, UDP lại thích hợp cho việc truyền tải các ứng dụng thời gian thực như VoIP hoặc Video.