CHƯƠNG 1 : MƠ HÌNH TCP/IP
1.3.5 GIAO THỨC TCP – SỰ TRUYỀN THÔNG TIN CẬY
Thiết lập phiên làm việc và duy trì nó
Một chức năng của lớp Transport là một phiên (session) làm việc giữa các thiết bị tương tự nhau tại lớp ứng dụng. Để hoạt động truyền dữ liệu bắt đầu, cả hai ứng dụng truyền và nhận thông báo cho hệ điều hành rằng một kết nối sẽ được khởi tạo. Thiết bị khởi đầu một kết nối phải được chấp nhận bởi thiết bị kia. Các giao thức mạng để xác nhận rằng hoạt động truyền dữ liệu đã được quản lý và cả hai phía đang ở trạng thái sẳn sàng.
Kết nối này được thiết lập và truyền dữ liệu bắt đầu sau khi đạt được tất cả sự đồng bộ. Trong quá trình truyền dữ liệu thực sự, hai máy tiếp tục thông tin để xác nhận rằng dữ liệu đang được phân phát chính xác.
TCP – Làm cho cuộc trao đổi trở nên tin cậy
Sự khác biệt chính giữa giao thức TCP và UDP là độ tin cậy. Độ tin cậy của giao thức TCP được thể hiện ở chỗ nó là một giao thức hướng kết nối (connection-oriented). Điều này có nghĩa là: trước khi hai ứng dụng trên hai máy tính có thể trao đổi dữ liệu cho nhau đòi hỏi phải có một kết nối được thiết lập giữa chúng. Nó đảm bảo rằng mỗi máy tính đã sẳn sàng trao đổi dữ liệu. Đồng thời, nó cho phép theo dõi một phiên giao dịch hay chuỗi giao tiếp giữa các máy tính. Một cuộc trao đổi hồn chỉnh dựa trên giao thức TCP yêu cầu phải thiết lập một phiên giao dịch theo cả hai hướng.
TCP còn một cơ chế khác đó là sự xác nhận trong quá trình trao đổi dữ liệu để đảm bảo rằng máy nhận đã nhận đầy đủ dữ liệu từ máy gửi. Sau khi kết nối được thiết lập, máy nhận phải phản hồi cho máy gửi biết nó đã nhận được những segment nào và mong chờ nhận segment nào kế tiếp bằng các ACK (acknowledgement). Khi nhận ACK từ máy nhận, máy gửi biết được là mình đã gửi thành công và không theo dõi các segment đó nữa. Ngược lại, nếu khơng nhận được nó trong một khoảng thời gian quy định, thì máy gửi truyền lại các segment đó.
Các bước thiết lập kết nối, các ACK và việc truyền lại tiêu tốn băng thơng mạng. Bên cạnh đó, các máy tính cũng bận rộn hơn khi phải theo dõi các segment đang đợi ACK và truyền lại dữ liệu.
Để đạt được độ tin cậy này, TCP dựa vào các thơng tin trong TCP header. TCP header có nhiều cột, mỗi cột cung cấp một tính năng xác định.
Ý nghĩa các cột:
Source Port: port của ứng dụng nguồn.
Sequence Number: chỉ ra số octet (byte) cuối cùng trong một segment.
Acknowledgement Number: chỉ ra octet kế tiếp mà máy nhận đang mong chờ.
Header Length: chỉ ra chiều dài của header, tính theo byte.
Control Bits (Flags): được sử dụng trong việc quản lý phiên giao dịch và theo
dõi các segment.
Window (Window Size): là giá trị của cửa sổ động – có thể gửi bao nhiêu octet
trước khi đợi nhận một ACK.
Checksum: được sử dụng để kiểm tra lỗi của header và data.
Urgent: chỉ được sử dụng với cờ URG (Urgent).
Options: thông tin tùy biến.
Data: dữ liệu của ứng dụng.
Hình 20: TCP header
Các tiến trình TCP Server
Mỗi ứng dụng, dịch vụ, giao thức ở lớp Application đều gắn với một port và port này phải là duy nhất, hay nói cách khác là khơng thể có hai dịch vụ hay ứng dụng có cùng
một port trong một hệ thống. Bạn có thể cấu hình một hay nhiều dịch vụ server trên một máy tính và mỗi dịch vụ được cấu hình một hay nhiều port chẳng hạn như web server – port 80, mail server – port 25/110, file server – port 20 và 21 v.v…Port này có thể là mặc định hay bị thay đổi là do người cấu hình. Khi các dịch vụ được khởi động lên, các tiến trình của các dịch vụ server chạy trên hậu cảnh, đứng chờ và lắng nghe tại cổng của mình để nhận những yêu cầu từ các client gửi đến. Lớp Transport nhận, xử lý các segment và chuyển dữ liệu đến đúng dịch vụ đang chạy.
Một cách để tăng cường bảo mật trên server là chỉ mở những port của các ứng dụng cần thiết và chỉ cho những yêu cầu hợp lệ được phép truy cập đến server.
Thiết lập kết nối TCP – Bắt tay ba bước (Three-way handshake)
TCP là một giao thức có tạo kết nối. TCP yêu cầu thiết lập một kết nối trước khi hoạt động truyền dữ liệu diễn ra. Để một kết nối được thiết lập hay kết thúc hai thiết bị phải đồng bộ giá trị Initial Sequence Number (ISN) được chỉ ra trong cột sequence number trong TCP header. Giá trị này được chọn ngẫu nhiên và được dùng để bắt đầu theo dõi luồng dữ liệu từ client đến server trong một phiên giao dịch.
Hình 21: Thiết lập kết nối TCP
Để hiểu quá trình three-way handshake, chúng ta hãy xem xét các giá trị khác nhau của cột Control Bit trong TCP header mà hai máy tính trao đổi. Cột này có 6 bit, mỗi bit biểu diễn một cờ và cờ này chỉ có thể là bật hay khơng bật. Các cờ này là các thông tin điều khiển được dùng để quản lý các tiến trình TCP. Chúng bao gồm:
URG: cờ cho cột Urgent.
PSH: hàm Push.
RST:thiết lập lại đường truyền.
SYN: đồng bộ lại số thứ tự (sequence number).
FIN: khơng gửi thêm dữ liệu.
Q trình three-way handshake trải qua 3 bước:
1. AB: Một client TCP bắt đầu three-way handshake bằng cách gửi một
segment đồng bộ với các thông tin: cờ SYN để được bật thông báo cho server biết rằng tôi muốn thiết lập kết nối với anh; một giá trị ban đầu trong cột sequence number. Giá trị của sequence number được tăng lên 1 cho mỗi byte dữ liệu được gửi từ client đến server khi trao đổi dữ liệu diễn ra.
2. BA: TCP server cần phải xác nhận rằng mình đã nhận được segment đồng bộ
từ client gửi đến. khi đó, server phản hồi bằng một segment xác nhận với các thông tin: cờ ACK được bật để thông báo cho client biết rằng đây là một thông tin xác nhận; giá trị của cột ACK bằng giá trị của cột sequence number trong segment đồng bộ đầu tiên cộng 1. Khi client nhận được segment phản hồi này có nghĩa là một phiên giao dịch (session) từ client đến server được thiết lập. Trong segment này ngoài cờ ACK được bật lên, còn cờ SYN được bật lên để thiết lập một session từ server đến client. Đồng thời server cũng chỉ ra một giá trị ban đầu trong cột sequence number. Giá trị này được dùng để theo dõi luồng dữ liệu trong session từ server đến client. Đến lúc này bạn có thể thấy rõ rằng trong cuộc trao đổi giữa client và server thực sự có hai phiên giao dịch một chiều: một từ client đến server và một từ server đến client.
3. AB: Cuối cùng, client phản hồi với một segment xác nhận. Đây là một trả lời
cho SYN được gửi từ server. Trong segment này có cờ ACK được bật lên và giá trị của cột acknowledgement lớn hơn giá trị của cột sequence number được nhận từ server 1. Khi cả 2 session được thiết lập giữa client và server, tất cả các segment được trao đổi tiếp theo sẽ có cờ ACK được bật lên.
Dựa vào các bước thiết lập kết nối này mà những kẻ xấu có thể thực hiện kiểu tấn công Deny of Service (DoS). Loại tấn công này thường nhắm vào mục tiêu xác định trước và làm cho nó xử lý quá tải bằng cách tạo nhiều kết nối đến đối tượng cùng một lúc. Nếu hệ thống không được trang bị chống lại tấn công DoS, hệ thống dễ bị quá tải và bị gián đoạn.
Cấm thiết lập các TCP session.
Chỉ cho phép thiết lập session với các dịch vụ đặc biệt.
Chỉ cho phép luồng thông tin khi một phần của session được thiết lập thực sự.
Bảo mật này có thể được triển khai cho tất cả TCP session hay chỉ các session được chọn.
Ngắt phiên giao dịch TCP
Đối với TCP, để ngắt một phiên giao dịch một chiều phải trải qua hai bước (two-way handshake). Vì thế, để ngắt hai phiên giao dịch trong cuộc trao đổi giữa hai máy tính phải có bốn trao đổi được thực hiện.
Hình 22: Ngắt kết nối TCP
1. Khi client khơng cịn dữ liệu để gửi, nó gửi đến server một segment với cờ FIN
được bật lên.
2. Server gửi phản hồi một segment với cờ ACK được bật lên để xác nhận rằng đã
nhận được yêu cầu ngắt phiên giao dịch từ client.
3. Server gửi đến client một segment với cờ FIN được bật lên để thông báo ngắt
session từ server đến client.
Khi client kết thúc session, nó bật cờ FIN trong header của segment. Kế tiếp, server kết thúc kết nối sẽ gửi một segment thông thường chứa dữ liệu với cờ ACK được bật, xác nhận rằng tất cả các byte dữ liệu đã được nhận. Khi tất cả các segment được xác nhận đã nhận, session bị đóng.
Session trong hướng ngược lại cũng bị đóng trong cách tương tự.
Nó cũng có thể ngắt kết nối bằng three-way handshake. Khi client khơng cịn dữ liệu để gửi, nó gửi một FIN đến server. Nếu server khơng cịn dữ liệu để gửi, nó có thể trả lời với cờ FIN và ACK được bật đồng thời, kết hợp bước 2 và bước 3 thành 1. Client trả lời với một ACK.