Giới thiệu

Bên cạnh mô hình OSI , một mô hình phân lớp khác cũng được sử dụng rất rộng rãi là mô hình TCP/IP. Khác với OSI , mô hình TCP/IP tổ chức các tác vụ của việc truyền dữ liệu thành 4 lớp thay vì 7 lớp. Các lớp từ trên xuống dưới lần lượt là : Application , Transport, Internet, và Network Access (hình 1.5)

Hình 1.5-Mô hình TCP/IP
Hình 1.5-Mô hình TCP/IP

Trong đó :

  • Lớp Application kiêm nhiệm vụ vai trò của lớp 5,6,7 của mô hình OSI . Các thực thể của lớp  Application cũng cung cấp giao tiếp đến người dùng, cung cấp các ứng dụng cho phép người dùng trao đổi dữ liệu ứng dụng qua mạng. Vì đảm nhận luôn vai trò của lớp 5 và lớp 6 của OSI , các thực thể của lớp Application trong mô hình TCP/IP của cùng một giao thức đều thống nhất nhau về định dạng dữ liệu cũng như cách thiết lập và quản lý các session từ đó không cần phải có các phân lớp riêng cho các tác vụ này nữa
  • Lớp Transport đảm nhận nhiệm vụ giống như lớp Transport bên mô hình OSI. Hai giao thức nổi tiếng của tầng Tranport thuộc mô hình TCP/IP là TCP và UDP.
  • Lớp Internet có nhiệm vụ giống như lớp Network của mô hình OSI. Một giao thức rất nổi tiếng và được sử dụng rộng rãi của lớp Internet là giao thức IP
  • Lớp Network Access đảm nhận nhiệm vụ của hai lớp Data Link và Physical của mô hình OSI

Như vậy , về mặt so sánh có thể nói , 3 lớp 5,6,7 của mô hình OSI đã được tích hợp thành lớp Application , lớp Network của mô hình OSI đã được chuyển thành lớp Internet và 2 lớp Data Link , Physical của mô hình OSI đã được tích hợp thành lớp Network Access của mô hình TCP/IP. Điều này được thể hiện trên hình 1.6

Hình 1.6 - So sánh TCP/IP & OSI
Hình 1.6 – So sánh TCP/IP & OSI

Bên cạnh việc đưa ra một kiến trúc phân lớp mà ta gọi là mô hình tham chiếu như đã trình bày ở trên , mỗi mô hình phân lớp còn định nghĩa ra một hệ thống các giao thức cụ thể cho từng lớp của mô hình . Hệ thống các giao thức đi kèm này được gọi là chồng giao thức (Protocol Stack).

Cả hai mô hình OSI và TCP/IP đều có chồng giao thức riêng của mình nhưng trong các mạng ngày nay , gần như chỉ còn chồng giao thức TCP/IP được sử dụng. Các giao thức của chồng giao thức OSI chỉ được sử dụng rất ít ỏi trong một số trường hợp đặc thù . Tuy nhiên, khi tham chiếu một công nghệ, người ta vẫn có thói quen tham chiếu đến mô hình 7 lớp OSI.

MỘT SỐ ỨNG DỤNG TCP/IP

Một số ứng dụng thường gặp của chồng giao thức TCP/IP :

  • FTP (File Transfer Protocol): Một giao thức chạy trên nền TCP cho phép truyền các file ASCII hoặc nhi phân theo 2 chiều
  • TFTP (Trival File Transfer Protocol) : Một giao thức truyền file chạy trên nền UDP
  • SMTP ( Simple Mail Transfer Protocol) : Đây là một giao thức dùng để phân phối thư điện tử
  • Telnet : Cho phép truy nhập từ xa để cấu hình thiết bị
  • SNMP (Simple Network Managerment Protocol) : Là ứng dụng chạy trên nền UDP , cho phép quản lý và giám sát các thiết bị mạng từ xa
  • Domain Name System ( DNS) : Là giao thức phân giải tên miền, rất thường được sử dụng trong hỗ trợ truy nhập Internet
  • v..v..

LỚP TRANSPORT 

Lớp Transport đảm nhận các nhiệm vụ :

  • Truyền tải các session trao đổi dữ liệu của lớp Application qua một kết nối end-to-end
  • Thực hiện phân mảnh dữ liệu, đóng gói các PDU của lớp Application ở trên vào các đơn vị dữ liệu lớp 4
  • Việc truyền tải của các giao thức lớp Transport có thể theo phương thức connection-oriented hoặc connectionless

Có ai giao thức nổi bật của chồng giao thức TCP/IP hoạt động ở lớp thứ 4 của mô hình OSI là UDP và TCP. Các phần tiếp theo sẽ đi vào đặc điểm của 2 giao thức quan trong này

UDP

UDP (User Datagram Protocol) là một giao thức truyền tải connectionless điển hình. Một giao thức 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 (gọi là kiểu truyền best effort – truyền tổng lực). Ngoài ra phương thức truyền connectionless cũng không sử dụng các phương pháp đảm bảo độ tin cậy như báo cáo nhận hay điều khiển luồng (flow control). Connectionless không thực hiện 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ẽ 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 không có độ tin cậy cao và dễ bị lỗi. Hình 1.7 trình bày cấu trúc của một gói tin UDP ( thường được gọi là UDP Datagram) Hình 1.7 :

Hình 1.7 – UDP datagram

Từ hình trên ta có thể thấy cấu trúc của UDP header khá đơn giản , phù hợp cho phương thức truyền best-effort connectionless. Trong đó :

  • Các trường source port và destination port: cho phép định danh một session của một ứng dụng nào đó chạy trên UDP. 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

Đặc điểm chung

Ngược lại với UDP, TCP (Tranmission Control Protocol) là giao thức truyền tải connection-oriented điển hình .Một giao thức connection-oriented (hướng kết nối) mang các đặc điểm như sau:

  • 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ế báo nhận khi truyền dữ liệu. Mọi segment được gửi đi đều phải được báo nhận (acknowledge, hay viết gọn là ack). Các segment gửi đi mà không được báo nhận xem như bị lỗi khi truyền và sẽ được thực hiện truyền lại
  • 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ác cơ chế điều khiển luồng thích hợp (flow control) để tránh nghẽn xảy ra

Ngoài ra , một kết nối TCP có thể được xem như một cặp đường kết nối luận lý kết nối giữa 2 host đầu cuối, mỗi đường phục vụ cho một hướng truyền dữ liệu. Ta nói TCP hỗ trợ truyền tải full duplex.

TCP cũng cung cấp các dịch vụ sửa lỗi , trong đó phía nhận có thể yêu cầu phía gửi truyền lại một segment nào đó . Hình 1.8 trình bày các cấu trúc của một gói tin TCP (thường được gọi là TCP segment):

Hình 1.8 – Cấu trúc của một TCP segment

Trong đó:

  • Source port và destination port (đều dài 16 bit): được sử dụng để định danh cho session của giao thức nào đó trên lớp ứng dụng đang được truyền tải trong TCP segment đang xét
  • Sequence number (32 bit): là số thứ tự của byte đầu tiên trong phần data của segment đang xét. Được sử dụng để đã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ố thự tự của byte kế tiếp mà phía nhận mong muốn phía gửi gửi cho mình
  • Header length (4 bit) :  cho biết chiều dài của TCP header tính theo đơn vị word (32bit)
  • Các bit reserverd (4 bit): đề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).
  • Window 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 (16 bit) : 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 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

Bắt tay 3 bước

Ví dụ trên hình 1.9 minh họa cho tiến trình bắt tay 3 bước:

3-buoc

Giả sử host A muốn truyền dữ liệu cho host B thông qua một kết nối TCP. Trước khi thực hiện truyền , host A cần phải thiết lập kết nối TCP với host B việc này được tiến hành thông qua quá trình bắt tay 3 bước:

  1. Host A gửi cho host B segment đầu tiên , segment này có cờ SYN được bật lên . Giả sử rằng host A thiết lập cho segment này số thứ tự (sequence) là 100. Segment đầu tiên này không chứa phần dữ liệu nên không có phần data, tuy nhiên số lượng byte dữ liệu vẫn được tính là một byte cho hoạt động gửi cờ SYN.
  2. Host B khi nhận được cờ SYN từ đầu bên kia, thực hiện hồi đáp lại một TCP segment . Segment này có cờ SYN và cờ ACK được bật lên . Giả sử rằng Host B thiết lập cho segment này có số thứ tự là 300.Segment trả lời từ Host B này cũng không có dữ liệu nhưng vẫn được tính là 1 byte cho phần data. Khi hồi đáp host , host B cũng cần phải chỉ rõ trong trường ACK sequence số thứ tự của byte kế tiếp mà nó muốn nhận từ host A. Như đã nói segment SYN do A gửi qua được tính là 1 byte bên B sẽ mong muốn nhận byte tiếp theo là byte thứ 101 từ A , do đó ACK sequence được đánh số là 101.
  3. Khi host A nhận được segement hồi đáp từ host B , nó gửi segment có bật cờ ACK về lại cho host B. Trường ACK sequence trong segment A gửi B sẽ chỉ rõ số thứ tự của byte tiếp theo mà nó muốn nhận từ B , đó là byte 301.

Sau khi 3 bước này được hoàn tất , kết nối TCP đã được thiết lập giữa host A và host B, lúc này 2 host đã có thể truyền dữ liệu được với nhau

Điều khiển luồng

flow-control
Hình 2.0 – Điều khiển luồng (flow control)

Khi host gửi , gửi dữ liệu quá nhanh và host nhận tiếp nhận không kịp, dữ liệu có thể bị mất . Để tránh xảy ra hiện tượng này , host nhận có thể thực hiện cơ chế điều khiển luồng bằng cách gửi cho host gửi một chỉ báo cho biết rằng nó chưa sẵn sàng tiếp nhận dữ liệu. Host gửi khi nhận được chỉ báo này sẽ thực hiện dừng việc truyền dữ liệu và chờ đến khi host nhận gửi tín hiệu thông báo là nó đã sẵn sàng nhận dữ liệu thì lại tiếp tục truyền.

ACK báo nhận (Acknowledgement)

Như đã nêu ở trên, TCP sử dụng cơ chế báo nhận cho dữ liệu đã gửi đi. Mọi dữ liệu

ack-windows-size
Hình 1.21- Ack báo nhận với windows size = 1

Để tăng hiệu xuất , việc báo nhận có thể được thực hiện cho nhiều byte một lúc thông qua hiệu chỉnh window size . Ở ví dụ trong hình 1.22, host nhận thưc hiện báo nhận cho từng đợt 3 byte gửi đến từ host gửi bằng cách thiết lập window size = 3

Hình 1.22 - Ack báo nhận với window size = 3
Hình 1.22 – Ack báo nhận với window size = 3

 

Hình 1.23 - Thay đổi kích thước cửa sổ
Hình 1.23 – Thay đổi kích thước cửa sổ

Kích thức cửa sổ cũng có thể được hiệu chỉnh tự động để thích nghi với điều kiện của mạng . Xét ví dụ trên hình 1.23 , trong ví dụ này , vì host nhận bị nghẽn không thể tiếp nhận được dữ liệu dẫn đến byte thứ 3 bị mất. Host nhận chủ động yêu cầu host gửi chỉ gửi một lúc 2 byte bằng cách hạ kích thước window xuống còn 2.

Nhận diện giao thức Application trên layer 4 header

Khi một thực thể lớp Transport đọc thông tin trên TCP hoặc UDP header, nó có thể xác định được dữ liệu đang đóng gói bên trong TCP segment hay UDP datagram là của giao thức Application nào mà không cần phải mở gói để xem nội dung bên trong. Để thực hiện được điều này , chồng giao thức lớp trên TCP/IP sử dụng tham số port trong TCP/UDP header để nhận diện giao thức lớp trên đang được đóng gói trong phần data. Hình 1.24 giới thiệu một số giá trị port dùng để nhận diện một số giao thức application thường gặp:

Hình 1.24 - Giá trị port nhận diện của một số giao thức application thường gặp
Hình 1.24 – 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
  • v.v..

Như đã nêu ở trên 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 yêu cầu 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 như : web, mail, telnet, v.v… Ngược lại , UDP 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.

Phần tiếp theo : Mô Hình TCP/IP phần 2

LuanPM