• Tidak ada hasil yang ditemukan

CHƯƠNG II: GIAO THỨC TCP/ IP

2.2.4. Giao thức TCP

TCP là một giao thức kiểu có liên kết (Connection – Oriented), tức là phải có

giai đoạn thiết lập liên kết giữa một cặp thực thể TCP trước khi truyền dữ liệu.

Cũng giống như các giao thức ở tầng giao vận TCP nhận thông tin từ các lớp trên chia nó thành nhiều đoạn nếu cần thiết. Mỗi gói dữ liệu được chuyển tới giao thức lớp mạng (thường là IP) để truyền và định tuyến. Bộ xử TCP của nó nhận thông báo đã nhận từng gói, nếu nó nhận thành công, các gói dữ liệu không có thông báo sẽ được truyền lại. TCP của nơi nhận lắp ráp lại thông tin và chuyển nó tới tầng cao hơn khi nó nhận được toàn bộ.

Trước khi các gói dữ liệu được gửi tới máy đích nơi gửi và nơi nhận phải thương lượng để thiết lập một kết nối logic tạm thời. Kết nối này về đặc trưng sẽ ở trạng thái mở trong suốt phiên truyền.

Đặc điểm giao thức TCP

Trong bộ giao thức TCP/IP TCP là giao thức được phát triển như là cách để kết nối các mạng máy tính khác nhau về các phương pháp truyền dẫn và hệ điều hành.

TCP thiết lập kết nối hai đường giữa hai hệ thống cần trao đổi thông tin với nhau thông tin trao đổi giữa hai hệ thống được chia thành các gói. TCP có những đặc điểm sau:

2.2.4.2. Hai hệ thống cần kết nối với nhau cần phải thực hiện một loạt các sự bắt tay để trao đổi những thông tin về việc chúng muốn kết nối. Quá trình bắt tay đảm bảo ngăn trặn sự tràn và mất mát dữ liệu khi truyền.

2.2.4.3. Trong phiên truyền thông tin, hệ thống nhận dữ liệu cần phải gửi các xác nhận

cho hệ thống phát để xác nhận rằng nó đã nhận được dữ liệu.

2.2.4.4. Các gói tin có thể đến đích không theo thứ tự sắp xếp của dòng dữ liệu liên tục bởi các gói tin đi từ cùng một nguồn tin theo những đường dẫn khác nhau để đi tới cùng một đích. Vì vậy thứ tự đúng của các gói tin phải được đảm bảo sắp xếp lại tại hệ thống nhận.

2.2.4.5. Khi phát hiện gói tin bị lỗi thì nơi gửi chỉ phát lại những gói tin bị lỗi nhằm để tránh loại bỏ toàn bộ dòng dữ liệu.

Subnet Subnet

Sending Receiving

n n

TCP End to End Commmunication

Router Router

Bảng 2.11: trình bày phương thức hoạt động của giao thức TCP.

Hình 1.11: TCP cung cấp kết nối từ đầu cuối đến đầu cuối

Đơn vị dữ liệu sử dụng trong giao thức TCP được gọi là Segment. Khuôn dạng của Segment được mô tả như hình 1.12.

Bit 0 15 16 31

Sourse Port Destination Port

Sequence Number

Acknowledgment Number Data

Offset (4 bits)

Reserve d

(6 bits) U R G

A C K

P S H

R S T

S Y N

F I N

Window (16 bits)

Checksum Urgent poier

Option Padding

TCPdata

Bảng 2.12: Khuôn dạng TCP

Segment Các tham số của khuôn dạng trên có ý nghĩa như sau: Source Port (16 bits): Số hiệu của cổng nguồn.

Application Presentatio Secssion

TCP IP Dadalink

Physical

Application Presentatio Secssion

TCP IP Dadalink

Physical IP

Dadalink Physical

IP Dadalink

Physical

Destination Port (16 bits): Số hiệu cổng của trạm đích. Số hiệu này là địa chỉ thâm nhập dịch vụ lớp giao vận (CCISAP Addess) cho biết dịch vụ mà TCP cung cấp là dịch vụ gì. TCP có số lượng cổng trong khoảng 0216-1 tuy nhiên các cổng nằm trong khoảng từ 01023 là được biết nhiều nhất vì nó được sử dụng cho việc truy cập các dịch vụ tiêu chuẩn, ví dụ 23 là dịch vụ Telnet, 25 là dịch vụ mail . . .

Sequence Number (32 bits): Số hiệu của Byte đầu tiên của Segment trừ khi bit SYN được thiết lập. Nếu bit SYN được thiết lập thì Sequence Number là số hiệu tuần tự khởi đầu (ISN) và Byte dữ liệu đầu tiên là ISN+1. Tham số này có vai trò như tham số N(S) trong HDLC.

Acknowledgment Number (32 bits): Số hiệu của Segment tiếp theo mà trạm nguồn dang chờ để nhận. Ngầm ý báo đã nhận tốt các Segment mà trạm trạm đích đã gửi cho trạm nguồn. Tham số này có vai trò như tham số N(R) trong HDLC.

Data offset (4bits): Số lượng từ 32 bit trong TCP header (Tham số này chỉ ra vùng bắt đầu của vùng dữ liệu ).

Reserved (6 bits): Dành để dùng trong tương lai.

Control bits: Các bits điều khiển Từ trái sang phải:

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): Cấp phát credit để kiểm soát luồng dữ liệu (cơ chế cửa sổ). Đây chính là số lượng các Byte dữ liệu bắt đầu từ Byte được chỉ ra trong vùng ACK number, mà trạm nguồn đã sẵn sàng để nhận.

Checksum (16bits): Mã kiểm soát lỗi (theo phương pháp CRC) cho toàn bộ Segment.

Urgent Pointer (16 bits): Con trỏ này trỏ tới số liệu tuần tự của Byte đi theo sau dữ liệu khẩn, cho phép bên nhận biết được độ dài của dữ liệu khẩn. Vùng này chỉ có hiệu lực khi bit URG được thiết lập.

Option (độ dài thay đổi): Khai báo các option của TCP, trong đó có độ dài tối đa của vùng TCP data trong một Segment .

Padding (độ dài thay đổi): Phần chèn thêm vào Header để bảo đảm phần Header luôn kết thúc ở một mốc 32 bits. Phần thêm này gồm toàn số 0.

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.

2.2.4.1.Điều khiển luồng dữ liệu

Trong việc điều khiển luồng dữ liệu phương pháp hay sử dụng là dùng phương pháp cửa sổ trượt. Phương pháp này giúp cho việc nhận luồng dữ liệu hiệu quả hơn.

Phương pháp cửa sổ trượt cho phép nới gửi (Sender) có thể gửi đi nhiều gói tin rồi sau đó mới đợi tín hiệu báo nhận ACK (Acknowledgement) của nơi nhận (Receiver).Với phương pháp cửa sổ trượt khi cần truyền các gói tin, giao thức sẽ đặt một cửa sổ có kích cố định lên các gói tin. Những gói tin nào nằm trong vùng cửa sổ ở một thời điểm nhất định sẽ được truyền đi. Hình 1.14 minh hoạ quá trình này. Ở đây kích thước cửa sổ là 4. Tức là mỗi lúc cửa sổ chỉ gửi được 4 gói tin. Đầu tiên cửa sổ gửi sẽ gửi 4 gói tin từ 1 đến 4 và 4 gói tin này sẽ được gửi cho bên nhận. Cửa sổ tiếp tục trượt để gói tin thứ 5 được gửi đi ngay sau khi nhận được tín hiệu ACK của gói tin thứ nhất từ trạm đích qua trình như vậy cứ tiếp tục cho đến khi gói tin cuối cùng được chuyển đi.

Trong qua trình gửi và nhận dữ liệu, có thể có một số gói tin mặc dù đã được gửi đi nhưng không có phúc đáp (không nhận được báo nhận) có nghĩa là bên nhận không nhận được thì những gói đó sẽ được truyền lại.

Tại bên nhận cũng duy trì một cửa sổ trượt tương tự dùng để nhận và báo nhận các gói tin đã nhận được.

TCP cung cấp một kiểu dịch vụ gọi là dịch vụ chuyển luồng đáng tin cậy. TCP xem luồng dữ liệu như là một thứ tự các Bytes dữ liệu được tách thành các Segments.

Thường thì mỗi Segment truyền trong liên mạng sẽ được lồng vào một Datagram.

Với kỹ thuật cửa sổ trượt, sẽ giải quyết được hai vấn đề quan trọng đó là truyền có hiệu quả và điều khiển luồng dữ liệu. TCP sử dụng kỹ thuật cửa sổ trượt dựa trên kỹ thuật cửa sổ trượt đã trình bày ở trên. Nó cho phép gửi được nhiều Segment trước khi báo nhận đến từ nơi nhận và do đó làm tăng thông lượng truyền trên mạng. Bên cạnh đó kỹ thuật cửa sổ trượt còn cho phép bên nhận tránh được tình trạng dữ liệu bị mất bằng cách làm giảm lưu lượng dữ liệu gửi đến nếu bộ đệm của nó không chứa thêm nhiều dữ liệu.

Kỹ thuật cửa sổ trượt của TCP được tiến hành ở mức Byte chứ không phải ở mức Segment hay Packet như trình bày ở trên. Các Bytes của luồng dữ liệu được đánh số một cách tuần tự và một cửa sổ được định nghĩa bởi ba con trỏ như hình 1.15.

Tại mỗi thời điểm, con trỏ đầu tiên trỏ vào mép bên trái cửa sổ, con trỏ thứ hai trỏ vào mép bên phải cửa sổ và con trỏ thứ ba xác định vị trí các Bytes được gửi đi.

Con trỏ bên phải và bên trái cửa sổ xác định kích thước của cửa sổ. Các phần mềm giao thức gửi các gói bên trong cửa sổ không có trễ do đó danh giới bên trong cửa sổ luôn luôn di chuyển từ bên phải qua bên trái.

Như trong hình 1.12 chỉ ra Byte thứ hai đã được gửi và nhận được báo nhận, Bytes thứ 3, 4 đã được gửi nhưng chưa có báo nhận, Bytes thứ 5, 6 chưa được gửi nhưng sẽ được gửi mà không có trễ. Các Bytes lớn hơn 7 chưa được gửi cho đến khi cửa sổ di chuyển.

Có một sự khác biệt giữa cửa sổ trượt TCP và cửa sổ trượt được trình bày ở trên là cửa sổ trượt TCP có thể thay đổi kích thước theo thời gian. Trong đó mỗi báo nhận đều có thông tin về trạng thái bộ đệm tại bện nhận, cho biết bên nhận có thể nhận thêm được bao nhiêu Bytes dữ liệu nữa. Nếu nhận được thông báo kích thước bộ đệm còn ít thì bên gửi sẽ giảm kích cỡ của cửa sổ và nó không gửi số Bytes dữ liệu quá kích thước của bộ đệm. Còn nếu thông báo rằng kích thước của bộ đệm tăng thì bên gửi sẽ tăng tương ứng kích thước của cửa sổ.

Vì liên kết TCP là loại kiên kết đầy đủ, dữ liệu có thể được truyền theo cả hai hướng, tức là tại mỗi thời điểm dữ liệu có thể được truyền từ hai đầu cuối của liên kết một cách độc lập với nhau nên tại mỗi đầu của liên kết sẽ có thể duy trì hai cửa sổ một để gửi dữ liệu và một để nhận dữ liệu.

2.2.2.4..Thiết lập và huỷ bỏ liên kết

Như ta đã biết TCP là một giao thức kiểu có liên kết, tức là cần phải có giai đoạn 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 và huỷ bỏ liên kết khi không còn nhu cầu trao đổi dữ liệu nữa.

Thiết lập liên kết TCP

Một liên kết có thể được thiết lập theo một trong hai cách chủ động (active) và bị động (passive). Nếu liên kết được thiết lập theo cách bị động thì đầu tiên TCP tại trạm muốn thiết lập liên kết sẽ nghe và chờ yêu cầu liên kết từ một trạm khác. Tuỳ trường hợp của lời gọi hàm mà người sử dụng phải chỉ ra cổng yêu cầu kết nối hoặc có thể kết nối với một cổng bất kỳ.

Với phương thức chủ động thì người sử dụng yêu cầu TCP thử thiết lập một liên kết với một Socket nào đó với một mức ưu tiên và độ an toàn nhất định. Nếu trạm ở xa kia đáp lại bằng một hàm Passive open tương hợp hoặc đã gửi một active open tương hợp thì liên kết sẽ được thiết lập. Nếu liên kết được thiết lập thành công thì thì hàm Open success primitive được dùng để thông báo cho người sử dụng biết (cũng được sử dụng trong trường hợp Passive Open) còn nếu thất bại thì hàm Open failure primitive được dùng để thông báo.

Huỷ bỏ một liên kết:

Khi không còn nhu cầu trao đổi dữ liệu nữa thì liên kết TCP có thể được huỷ bỏ.

Liên kết có thể được huỷ bỏ theo hai cách:

- Huỷ bỏ một cách bất thường.

- Huỷ bỏ một cách bình thường.

Liên kết được huỷ bỏ một cách bình thường khi toàn bộ dữ liệu đã được truyền hết. Tức là hai bên không còn nhu cầu trao đổi dữ liệu nữa.

Liên kết có thể bị huỷ bỏ một cách bất thường vì một lý do nào đó(do người sử dụng hoặc do TCP đóng liên kết do không thể duy trì được liên kết). Toàn bộ dữ liệu đang truyền có thể bị mất.

2.2.4.3.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 thì có thể tiến hành việc truyền dữ liệu. Với liên kết TCP dữ liệu có thể được truyền theo cả hai hướng.

Khi nhận được một khối dữ liệu cần chuyển đi từ người sử dụng, TCP sẽ lưu giữ nó tại bộ đệm gửi. Nếu cờ PUST được dựng thì toàn bộ dữ liệu trong bộ đệm sẽ được gửi đi hết dưới dạng các TCP Sgment. Còn nếu cờ PUST không được dựng thì toàn bộ dữ liệu vẫn được lưu giữ trong bộ đệm để chờ gửi đi khi có cơ hội thích hợp.

Tại bên nhận, dữ liệu gửi đến sẽ được lưu giữ trong bộ đệm nhận. Nếu dữ liệu đệm được đánh dấu bởi cờ PUST thì toàn bộ dữ liệu trong bộ đệm nhận sẽ được gửi lên cho người sử dụng. Còn nếu dữ liệu không được đánh dấu với cờ PUST thì chúng 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 dùng và đánh dấu dữ liệu bằng bit URG để báo rằng dữ liệu khẩn cần được chuyển gấp.

Dokumen terkait