Các kết nối TCP và các cổng
Hai ứng dụng dùng TCP phải thiết lập một kết nối TCP trước khi dữ liệu có thể được truyền. Mỗi kết nối sẽ tồn tại giữa một cặp TCP sockets với socket được định nghĩa như là một kết hợp của địa chỉ IP, cổng được dùng, giao thức lớp transport. Quá trình thiết lập kết nối, khởi tạo socket bao gồm giá trị cổng nguồn và cổng đích, chỉ số tuần tự và ACK. Hình 6-2 mô tả tiến trình bắt tay ba lần trong thiết lập TCP và quá trình hủy một kết nối TCP.
Trong quá trình thiết lập kết nối, hai host sẽ chọn lựa cổng, chọn lựa chỉ số tuần tự sequence-number và dùng các chỉ số của TCP để nhận ra thông điệp trong quá trình bắt tay ba chiều. Đầu tiên, đối với vấn đề cổng, bên server phải lắng nghe các yêu cầu kết nối từ client, trong trường hợp này là cổng 80. Phía client sẽ chọn một cổng chưa dùng làm source port, thường là giá trị 1024 hoặc lớn hơn. Lưu ý rằng khi so sánh các segment trong tiến trình trên, giá trị port là không đổi.
Trong phần header của TCP có bao gồm vài trường có giá trị 1-bit, gọi là các cờ. Các cờ này phục vụ cho các mục đích khác nhau. Các cờ SYN và ACK sẽ chỉ ra một segment có phải là segment đầu tiên hay là thứ hai trong một kết nối TCP mới. Một segment có cờ SYN sẽ là segment đầu tiên trong một kết nối TCP. Một segment có cả SYN và ACK sẽ là segment thứ hai trong một kết nối. Các cờ này cho phép các host dễ dàng nhận ra các yêu cầu kết nối mới. Chỉ số ban đầu có thể được gán về bất kỳ giá trị hợp lệ nào và thường không được gán về 0. Hãy nhớ rằng trong quá trình khôi phục lỗi, việc sử dụng các giá trị này là độc lập trong cả hai chiều.
Quá trình khôi phục lỗi
Để thực hiện quá trình khôi phục lỗi, TCP sẽ gửi các công nhận ACK khi nhận được dữ liệu. Khi dữ liệu gửi đi không được ACK, bên gửi có thể gửi lại dữ liệu. Hình dưới đây mô tả tiến trình một web server gửi ra 1000-bytes trong đó khi segment thứ hai bị mất, dữ liệu sẽ được khôi phục lại.
Ví dụ trên mô tả một tiến trình khôi phục lỗi trong đó bên gửi (máy web) nhận được một ACK trong đó chỉ ra rằng một segment đã bị mất. Lưu ý rằng trường ACK sẽ chỉ ra byte mong đợi kế tiếp- chứ không phải là byte nhận được cuối cùng. Cũng lưu ý rằng trường ACK và trường sequence chỉ ra số bytes, chứ không phải chỉ ra TCP segment. Bên máy gửi sẽ gửi ra một bộ định thời timers, dựa trên giá trị TCP Measured Round Trip Time (MRTT) sao cho nếu một ACK là không nhận được, máy gửi sẽ gửi lại tất cả nhưng dữ liệu không được công nhận mà không chờ cho bên máy nhận gửi một yêu cầu truyền lại.
Hai ứng dụng dùng TCP phải thiết lập một kết nối TCP trước khi dữ liệu có thể được truyền. Mỗi kết nối sẽ tồn tại giữa một cặp TCP sockets với socket được định nghĩa như là một kết hợp của địa chỉ IP, cổng được dùng, giao thức lớp transport. Quá trình thiết lập kết nối, khởi tạo socket bao gồm giá trị cổng nguồn và cổng đích, chỉ số tuần tự và ACK. Hình 6-2 mô tả tiến trình bắt tay ba lần trong thiết lập TCP và quá trình hủy một kết nối TCP.
Trong quá trình thiết lập kết nối, hai host sẽ chọn lựa cổng, chọn lựa chỉ số tuần tự sequence-number và dùng các chỉ số của TCP để nhận ra thông điệp trong quá trình bắt tay ba chiều. Đầu tiên, đối với vấn đề cổng, bên server phải lắng nghe các yêu cầu kết nối từ client, trong trường hợp này là cổng 80. Phía client sẽ chọn một cổng chưa dùng làm source port, thường là giá trị 1024 hoặc lớn hơn. Lưu ý rằng khi so sánh các segment trong tiến trình trên, giá trị port là không đổi.
Trong phần header của TCP có bao gồm vài trường có giá trị 1-bit, gọi là các cờ. Các cờ này phục vụ cho các mục đích khác nhau. Các cờ SYN và ACK sẽ chỉ ra một segment có phải là segment đầu tiên hay là thứ hai trong một kết nối TCP mới. Một segment có cờ SYN sẽ là segment đầu tiên trong một kết nối TCP. Một segment có cả SYN và ACK sẽ là segment thứ hai trong một kết nối. Các cờ này cho phép các host dễ dàng nhận ra các yêu cầu kết nối mới. Chỉ số ban đầu có thể được gán về bất kỳ giá trị hợp lệ nào và thường không được gán về 0. Hãy nhớ rằng trong quá trình khôi phục lỗi, việc sử dụng các giá trị này là độc lập trong cả hai chiều.
Quá trình khôi phục lỗi
Để thực hiện quá trình khôi phục lỗi, TCP sẽ gửi các công nhận ACK khi nhận được dữ liệu. Khi dữ liệu gửi đi không được ACK, bên gửi có thể gửi lại dữ liệu. Hình dưới đây mô tả tiến trình một web server gửi ra 1000-bytes trong đó khi segment thứ hai bị mất, dữ liệu sẽ được khôi phục lại.
Ví dụ trên mô tả một tiến trình khôi phục lỗi trong đó bên gửi (máy web) nhận được một ACK trong đó chỉ ra rằng một segment đã bị mất. Lưu ý rằng trường ACK sẽ chỉ ra byte mong đợi kế tiếp- chứ không phải là byte nhận được cuối cùng. Cũng lưu ý rằng trường ACK và trường sequence chỉ ra số bytes, chứ không phải chỉ ra TCP segment. Bên máy gửi sẽ gửi ra một bộ định thời timers, dựa trên giá trị TCP Measured Round Trip Time (MRTT) sao cho nếu một ACK là không nhận được, máy gửi sẽ gửi lại tất cả nhưng dữ liệu không được công nhận mà không chờ cho bên máy nhận gửi một yêu cầu truyền lại.
Comment