TCP là một giao thức hướng liên kết (Connection Oriented), tức là trước khi truyền dữ liệu, thực thể TCP phát và thực thể TCP thu thương lượng để thiết lập một kết nối logic tạm thời, tồn tại trong quá trình truyền số liệu. TCP nhận thông tin từ tầng trên, chia dữ liệu thành nhiều gói theo độ dài quy định và chuyển giao các gói tin xuống cho các giao thức tầng mạng (Tầng IP) để định tuyến. Bộ xử lý TCP xác nhận từng gói, nếu không có xác nhận gói dữ liệu sẽđược truyền lại. Thực thể TCP bên nhận sẽ khôi phục lại thông tin ban đầu dựa trên thứ tự gói và chuyển dữ liệu lên tầng trên.
TCP cung cấp khả năng truyền dữ liệu một cách an toàn giữa các thành trong liên mạng. Cung cấp các chức năng kiểm tra tính chính xác của dữ liệu khi đến đích và truyền lại dữ liệu khi có lỗi xảy ra. TCP cung cấp các chức năng chính sau:
- Thiết lập, duy trì, giải phóng liên kết giữa hai thực thể TCP. - Phân phát gói tin một cách tin cậy.
- Tạo số thứ tự (Sequencing) các gói dữ liệu. - Điều khiển lỗi.
- Cung cấp khả năng đa kết nối cho các quá trình khác nhau giữa thực thể nguồn và thực thểđích thông qua việc sử dụng số hiệu cổng.
- Truyền dữ liệu theo chếđộ song công (Full-Duplex). TCP có những đặc điểm sau:
- Hai thực thể liên kết với nhau phải trao đổi, đàm phán với nhau về các thông tin liên kết. Hội thoại, đàm phán nhằm ngăn chặn sự tràn lụt và mất dữ liệu khi truyền.
- Hệ thống nhận phải gửi xác nhận cho hệ thống phát biết rằng nó đã nhận gói dữ liệu. - Các Datagram IP có thểđến đích không đúng theo thứ tự , TCP nhận sắp xếp lại. - Hệ thống chỉ phát lại gói tin bị lỗi, không loại bỏ toàn bộ dòng dữ liệu.
Cấu trúc gói tin TCP: Đơn vị dữ liệu sử dụng trong giao thức TCP được gọi là Segment. Khuôn dạng và nội dung của gói tin TCP được biểu diễn như sau
0 15 16 31
Source port Destination port
Sequence number Acknowledgment number
Offset Reserved U A P R S F Window
Checksum Urgent pointer
Options Padding TCP data
…
Hình 3.4 Cấu trúc gói tin TCP (TCP Segment)
- Cổng nguồn (Source Port): 16 bít, số hiệu cổng nguồn.
- Cổng đích (Destination Port): Độ dài 16 bít, chứa số hiệu cổng đích. - Sequence Number: 32 bits, số thứ tự của gói số liệu khi phát.
- Acknowlegment Number (32 bits), Bên thu xác nhận thu được dữ liệu đúng. - Offset (4 bíts): Độ dài Header gói tin TCP.
- Reserved (6 bít) lưu lại: Lấp đầy bằng 0 để dành cho tương lai. - Control bits: Các bits điều khiển
URG : Vùng con trỏ khẩn có hiệu lực.
ACK : Vùng báo nhận (ACK number) có hiệu lực . PSH: Chức năng PUSH.
RST: Khởi động lại (reset) liên kết.
SYN : Đồng bộ các số liệu tuần tự (sequence number). FIN : Không còn dữ liệu từ trạm nguồn .
- Window (16bits): Số lượng các Byte dữ liệu trong vùng cửa sổ bên phát. - Checksum (16bits): Mã kiểm soát lỗi (theo phương pháp CRC).
- Urgent Pointer (16 bits): Số thứ tự của Byte dữ liệu khẩn, khi URG được thiết lập . - Option (độ dài thay đổi): Khai báo độ dài tối đa của TCP Data trong một Segment . - Padding (độ dài thay đổi): Phần chèn thêm vào Header.
Việc kết hợp địa chỉ IP của một máy trạm và số cổng được sử dụng tạo thành một Socket. Các máy gửi và nhận đều có Socket riêng. Số Socket là duy nhất trên mạng.
Điều khiển lưu lượng và điều khiển tắc nghẽn
Cơ chế cửa sổ động là một trong các phương pháp điều khiển thông tin trong mạng máy tính. Độ lớn của cửa sổ bằng số lượng các gói dữ liệu được gửi liên tục mà không cần chờ thông báo trả lời về kết quả nhận từng gói dữ liệu đó. Độ lớn cửa sổ quyết định hiệu suất trao đổi dữ liệu trong mạng. Nếu chọn độ lớn của sổ cao thì có thể gửi được nhiều dữ liệu trong cùng một đơn vị thời gian. Nếu truyền bị lỗi, dữ liệu phải gửi lại lớn thì hiệu quả sử dụng đường truyền thấp. Giao thức TCP cho phép thay đổi độ lớn của sổ một cách động, phụ thuộc vào độ lớn bộđệm thu của thực thể TCP nhận.
Cơ chế phát lại thích nghi: Đểđảm bảo kiểm tra và khắc phục lỗi trong việc trao đổi dữ liệu qua liên mạng, TCP phải có cơ chế đồng hồ kiểm tra phát (Time Out) và cơ chế phát lại (Retransmission) mềm dẻo, phụ thuộc vào thời gian trễ thực của môi trường truyền dẫn cụ thể. Thời gian trễ toàn phần RTT (Round Trip Time) được xác định bắt đầu từ thời điểm phát gói dữ liệu cho đến khi nhận được xác nhận của thực thểđối tác, là yếu tố quyết định giá trị của đồng hồ kiểm tra phát Tout. Như vậy Tout phải lớn hơn hoặc bằng RTT.
Cơ chế điều khiển tắc nghẽn: Hiện tương tắc nghẽn dữ liệu thể hiện ở việc gia tăng thời gian trễ của dữ liệu khi chuyển qua mạng. Để hạn chế khả năng dẫn đến tắc nghẽn dữ liệu trong mạng, điều khiển lưu lượng dựa trên việc thay đổi độ lớn của sổ phát.
Thiết lập và huỷ bỏ liên kết: TCP là một giao thức hướng liên kết, tức là cần phải thiết lập một liên kết giữa một cặp thực TCP trước khi truyền dữ liệu. Sau khi liên kết được thiết lập, những giá trị cổng (Port) hoạt động như một nhận dạng logic được sử dụng nhận dạng mạch ảo (Virtual Circuit).Trên kênh ảo dữ liệu được truyền song công (Full Duplex). Liên kết TCP được duy trì trong thời gian truyền dữ liệu. Kết thúc truyền, liên kết TCP được giải phóng, các tài nguyên như bộ nhớ, các bảng trạng thái.. cũng được giải phóng.
Thiết lập liên kết TCP: Được thực hiện trên cơ sở phương thức bắt tay ba bước (Tree - Way Handsake):
Bước 1: Như hình 3.7 yêu cầu liên kết luôn được trạm nguồn khởi tạo tiến trình bằng cách gửi một gói TCP với cờ SYN=1 và chứa giá trị khởi tạo số tuần tự ISN của Client. Giá trị ISN này là một số 4 byte không dấu và được tăng mỗi khi liên kết được yêu cầu (giá trị này quay về 0 khi nó tới giá trị 232). Trong thông điệp SYN này còn chứa số hiệu cổng TCP của phần mềm dịch vụ mà tiến trình trạm muốn liên kết.
Mỗi thực thể liên kết TCP đều có một giá trị ISN mới, số này được tăng theo thời gian. Vì một liên kết TCP có cùng số hiệu cổng và cùng địa chỉ IP được dùng lại nhiều lần, do đó việc thay đổi giá trị ISN ngăn không cho các liên kết dùng lại các dữ liệu đã cũ (Stale) vẫn còn được truyền từ một liên kết cũ và có cùng một địa chỉ liên kết .
Bước 2: Khi thực thể TCP của phần mềm dịch vụ nhận được thông điệp SYN, nó gửi lại gói SYN cùng giá trị ISN của nó và đặt cờ ACK=1 trong trường hợp sẵn sàng nhận liên kết . Thông điệp này còn chứa giá trị ISN của tiến trình trạm trong trường hợp số tuần tự nhận để báo rằng thực thể dịch vụđã nhận được giá trị ISN của tiến trình trạm.
Bước 3: Tiến trình trạm trả lời lại gói SYN của thực thể dịch vụ bằng một thông báo trả lời ACK. Bằng cách này, các thực thể TCP trao đổi một cách tin cậy các giá trị ISN của nhau và có thể bắt đầu trao đổi dữ liệu. Không có thông điệp nào trong ba bước trên chứa bất kỳ dữ liệu gì , tất cả thông tin trao đổi đều nằm trong phần Header của thông điệp TCP.
Syn, Seq=x TCP_A a) Thiết lập liên kết TCP_B TCP_A Syn, Seq=y Fin,Seq=x Ack (x+1) Ack (x+1) Ack (y+1) Fin, Seq=y Ack (x+1) Ack (y+1) b) Kết thúc liên kết TCP_B
Hình 3.5 Quá trình thiết lâp và kết thuc liên kết TCP 3 bước
Kết thúc liên kết: Khi có nhu cầu kết thúc liên kết TCP, ví dụ A gửi yêu cầu kết thúc liên kết với FIN=1. Vì liên kết TCP là song công (Full-Duplex) nên mặc dù nhận được yêu cầu kết thúc liên kết của A, thực thể B vẫn có thể tiếp tục truyền cho đến khi B không còn số liệu để gửi và thông báo cho A bằng yêu cầu kết thúc liên kết với FIN=1. Khi thực thể TCP đã nhận được thông điệp FIN và sau khi đã gửi thông điệp FIN của mình, liên kết TCP thực sụ kết thúc. Như vậy cả hai trạm phải đồng ý giải phóng liên kết TCP bằng cách gửi cờ FIN=1 trước khi chấm dứt liên kết xẩy ra, việc này bảo đảm dữ liệu không bị thất lạc do đơn phương đột ngột chấm dứt liên lạc.
Truyền và nhận dữ liệu Sau khi liên kết được thiết lập giữa một cặp thực thể TCP, các thực thể truyền dữ liệu. Liên kết TCP dữ liệu có thểđược truyền theo hai hướng. Khi nhận một khối dữ liệu cần chuyển đi từ người sử dụng, TCP sẽ lưu trữ tại bộđệm. Nếu cờ PUST được xác lập thì toàn bộ dữ liệu trong bộđệm sẽđược gửi đi dưới dạng TCP Segment. Nếu PUST không được xác lập thì dữ liệu trong bộđệm vẫn chờ gửi đi khi có cơ hội thích hợp.
Bên nhận, dữ liệu sẽ được gửi vào bộđệm. Nếu dữ liệu trong đệm đựợc đánh dấu bởi cờ PUST thì toàn bộ dữ liệu trong bộđệm sẽđược gửi lên cho người sử dụng. Ngược lại, dữ liệu vẫn được lưu trong bộđệm. Nếu dữ liệu khẩn cần phải chuyển gấp thì cờ URGENT được xác lập và đánh dấu dữ liệu bằng bit URG để báo dữ liệu khẩn cần được chuyển gấp.