Giao thức TCP

Một phần của tài liệu Công nghệ IP-VPN (Trang 25 - 30)

Giao thức TCP (Transmission Control Protocol) cung cấp dịch vụ truyền thông dữ liệu định hướng truyền thống cho các chương trình - dịch vụ chuyển dòng (stream) tin cậy. TCP cung cấp một mạch ảo, còn được gọi là kết nối. Nó cấp khả năng đứt quảng, kiểm tra lỗi và điều khiển luồng.

a) Cấu trúc tiêu đề TCP

Source Port Destination Port Sequence Number 40 o ct et 0 15 31 Acknowledgement Number Window Unused Flags

Checksum Urgent Pointer

Option Padding Header

length

4 10

Hình 1.9: Cấu trúc tiêu đề TCP

Giải thích ý nghĩa các trường:

 Source port, Destination port (cổng nguồn, cổng đích): chứa các giá trị cổng TCP để xác định các chương trình ứng dụng tại hai đầu kết nối. Mỗi khi TCP nhận gói dữ liệu từ IP, nó sẽ gỡ bỏ phần đầu IP và đọc phần đầu TCP. Khi đọc Destination port, nó sẽ tìm trong tệp tin chứa các thông tin về dịch vụ để gửi dữ liệu đến chương trình ứng với số cổng đó. Song với TCP, giá trị cổng phức tạp hơn UDP vì một giá trị cổng TCP cho trước không tương ứng với một đối tượng đơn. Thay vì vậy, TCP được xây dựng trên kết nối trừu tượng, trong đó các đối tượng được xác định là những liên kết mạch ảo, không phải từng cổng. Ví dụ như giá trị 192.168.2.3,25 xác định cổng TCP 25 trên máy tính có địa chỉ 192.168.2.3.

 Sequence Number (số thứ tự): xác định vị trí trong chuỗi các byte dữ liệu trong segment của nơi gửi.

 Acknowledgment Number (số xác nhận): xác định số octet mà nguồn đang đợi để nhận kế tiếp. Lưu ý là Sequence Number để chỉ đến lượng dữ liệu theo cùng chiều với segment, trong khi giá trị Acknowledgment Number để chỉ đến dữ liệu ngược lại với segment đến.

 Header length (độ dài tiêu đề): chứa một số nguyên để xác định độ dài của phần đầu segment, được tính theo bội số của 32 bit. Giá trị này là cần thiết

vì có phần Options có độ dài thay đổi, tùy thuộc vào những lựa chọn đã được đưa vào.

 Unused (dự phòng): được dành riêng để sử dụng trong tương lai.

 Flags (bít mã): gồm có 6 bít để xác định mục đích và nội dung của segment, diễn dịch các nội dung trong phần đầu dựa vào nội dung các bit. Ví dụ segment chỉ chuyển tải ACK, hoặc chỉ chuyển đưa dữ liệu hay để tải những yêu cầu để thiết lập hoặc ngắt nối.

 Window (cửa sổ): thông báo cho máy tính đầu cuối kích thước vùng đêm cho quá trình truyền.

 Urgent pointer (con trỏ khẩn cấp): yêu cầu kết nối gửi dữ liệu ngoài dòng xác định, chương trình nhận phải được thông báo lập tức ngay khi dữ liệu đến cho dù nó nằm ở đâu trong vùng dữ liệu. Sau khi xử lý xong dữ liệu khẩn cấp, TCP thông báo cho chương trình ứng dụng trở về trạn thái thông thường.

Đơn vị truyền giữa hai phần mềm TCP trên hai máy được gọi là segment. Các segment được trao đổi để thiết lập kết nối, để truyền dữ liệu, để gửi các ACK (thông báo xác nhận đã nhận dữ liệu), để thông báo kích thước của cửa sổ (nhằm tối ưu hóa quá trình truyền và nhận dữ liệu) và để ngắt kết nối.

b) Thiết lập và đóng một kết nối TCP

Để thiết lập một kết nối TCP sử dụng mô hình bắt tay ba bước, trong trường hợp đơn giản có thể minh họa như sau:

Hình 1.10: Thiết lập kết nối theo giao thức TCP

Nhận SYN +ACK ACK y+1

Đầu cuối máy

tính gửi Mạng Đầu cuối máy tính nhận

Gửi SYN Seq = x

Nhận SYN

Gửi SYN seq = y, ACK x+1

Gói tin khởi đầu cho kết nối được xác định bởi bit SYN trong trường dữ liệu CODE, bản tin trả lời lập giá trị cho bit SYN và ACK để chuyển ý nghĩa đồng bộ và tiếp tục tiến trình bắt tay. Bản tin cuối cùng chỉ có ý nghĩa như một lời đáp và chỉ để đơn giản dùng để thông báo cho đích rằng cả hai bên cùng đồng ý một kết nối đã được thiết lập.

Tiến trình bắt tay ba bước là điều kiện cần và đủ để có sự đồng bộ chính xác giữa hai đầu của kết nối, thông thường các phần mềm TCP thường sử dụng phương pháp đợi thụ động để chờ kết nối, nhưng điều này không gây khó khăn trong quá trình kết nối vì các kết nối được thiết lập từ các bên độc lập với nhau. Số thực tự được chọn ngẫu nhiên và độc lập với nhau cũng có thể được gửi kèm cùng với dữ liệu. Trong những trường hợp đó, phần mềm TCP giữ lại dữ liệu cho đên khi hoàn tất quá trình bắt tay kết nối. Một khi kết nối được thiết lập, phần mêm TCP sẽ giải phóng dữ liệu trước đây và nhanh chóng chuyển chúng tời các chương trình ứng dụng cấp cao hơn.

Thủ tục đóng kết nối TCP được thực hiện theo từng chiều, (giả thiết kết nối TCP là song công). Một khi kết nối đóng lại theo chiều nào đó, TCP sẽ từ chối nhận thêm dữ liệu trong kết nối của chiều đó, trong lúc dữ liệu vẫn di chuyển theo chiều ngược lại cho đến khi nơi gửi thực hiện đóng kết nối. Như vây, lời đáp của kết nối vẫn được chuyển về nơi gửi ngay cả khi kết nối đã đóng lại, khi cả hai chiều đều đóng, phần mềm TCP tại mỗi bên xóa bỏ những ghi nhận về kết nối này.

Hình 1.11: Thủ tục đóng kết nối TCP

c) TCP là giao thức truyền tin cậy

Yêu cầu đối với TCP phát chuyển stream (luồng) là khối dữ liệu lớn và cần độ tin cậy. Các đặc trưng đối với dịch vụ phát chuyển tin cậy gồm:

Nhận ACK

Đầu cuối máy

tính gửi Mạng

Đầu cuối máy tính nhận

Gửi FIN

Seq = x Nhận FIN

Gửi ACK x+1

Gửi FIN seq=x, ACK x+1 Nhận ACK

Nhận FIN+ACK Gửi ACK y+1

 Định hướng stream: Khi hai chương trình ứng dụng (các tiến trình của người sử dụng) truyền những khối lượng lón dữ liệu được xem như một chuỗi bit, dữ liệu này được chia thành các octet. Dịch vụ chuyển phát stream chuyển dữ liệu một cách chính xác tới máy nhận.

 Kết nối kênh ảo: Thực hiện việc truyền stream cũng tương tự như thực hiện một cuộc gọi điện thoại. Trước khi việc truyền có thể bắt đầu, cả hai chương trình ứng dụng gửi và nhận đều phải tương tác với hệ điều hành, thông báo về yêu cầu thực hiện truyền stream. Về mặt khái niệm, một chương trình ứng dụng sẽ thực hiện một cuộc gọi mà đầu kia chấp nhận, tức là thiết lập kết nối - hay mạch ảo để truyền và nhận dữ liệu một các chính xác.

 Việc truyền có vùng đệm: Các chương trình ứng dụng gửi một dòng dữ liệu qua mạch ảo bằng cách lặp lại việc chuyển các octet dữ liệu đến phần mềm giao thức. Khi truyền dữ liệu, mỗi chương trình ứng dụng sử dụng bất kỳ kích thước đơn vị truyền nào nó thấy thuận tiện, có thể chỉ bằng một octet. Tại đầu nhận, phần mềm giao thức phát chuyển một cách tự động dữ liệu theo đúng thứ tự mà chúng được gửi đi, làm cho chúng sẵn sàng được chương trình ứng dụng nhận sử dụng ngay sau khi chúng được nhận và kiểm tra. Phần mềm giao thức được tự do phân chia dòng dữ liệu thành những gói dữ liệu độc lập với đơn vị mà chương trình ứng dụng truyền đi. Để làm cho việc truyền hiệu quả hơn và tối thiểu giao thông trên mạng, các cài đặt thường tập hợp cho đủ dữ liệu để đặt vào datagram có độ lớn thích hợp trước khi truyền nó qua Internet.

o Như vậy ngay cả khi chương trình ứng dụng phát sinh dòng dữ liệu có kích thước là 1 octet mỗi lần thì việc truyền qua Internet vẫn hoàn toàn hiệu quả.

o Tương tự, nếu chương trình ứng dụng quyết định phát chuyển những khối dữ liệu cực lớn, phần mềm giao thức có thể quyết định chia khối này thành những khối nhỏ hơn khi truyền.

o Đối với những chương trình ứng dụng mà dữ liệu phải được phát chuyển ngay cả khi nó không đầy một vùng đệm, dịch vụ stream cung cấp cơ chế đẩy cho các chương trình ứng dụng để bắt buộc truyền.

 Stream không có cấu trúc: Dịch vụ TCP stream không xác định các dòng dữ liệu có cấu trúc. Nghĩa là nó không phân biệt được cấu trúc hay nội dung phân chia bên trong của dòng dữ liệu. Các chương trình

ứng dụng sử dụng dịch vụ stream phải hiểu nội dung stream và thống nhất với nhau về định dạng stream trước khi khởi động việc kết nối.

 Kết nối hai chiều: Các kết nối do dịch vụ TCP cấp cho phép truyền đồng thời cả hai chiều. Cách kết nối này được gọi là song công. Nghĩa là từ quan điểm của một tiến trình ứng dụng, kết nối 2 chiều bao gồm 2 dòng dữ liệu độc lập chạy ngược nhau, không có tương tác hay va chạm. Dịch vụ stream cho phép một tiến trình ứng dụng chấm dứt dòng chảy theo một chiều trong khi dữ liệu vẫn tiếp tục chảy theo chiều kia làm cho kết nối trở thành một chiều (half duplex). Ưu điểm chính của kết nối hai chiều là phần mềm giao thức cơ sở có thể gửi thông tin điều khiển cho một tream ngược trở về nguồn trong những datagram đang chuyển tải dữ liệu theo chiều ngược lại. Điều này làm giảm bớt giao thông trên mạng.

Để thực hiện cung cấp tính tin cậy khi truyền tin, TCP sử dụng giao thức xác nhận gói tin (ACK) đã nhận được và truyền lại những gói tin bị mất hoặc bị lỗi. Bộ đếm thời gian bên gửi sẽ được kích hoạt mỗi khi gửi gói (mỗi gói được gửi sẽ được một bộ thời gian đếm từ lúc gửi). Khi qúa thời gian của bộ đếm mà chưa nhận được ACK thì mặc nhiên coi là mất gói hoặc hỏng gói và gói sẽ được gửi lại. Số thứ tự gói trong tiêu đề dùng cho bên gửi và thu xác định việc mất gói và trùng lặp dữ liệu, từ đó tái truyền hay loại bỏ gói lặp cho phù hợp.

d) Kỹ thuật cửa sổ trượt

Để thực hiện việc điều khiển luồng, TCP sử dụng kỹ thuật cửa sổ trượt. Cửa sổ trượt có kích thước cố định hoặc có thể thay đổi được cho phép xác định số gói dữ liệu tối đa được truyền trước khi nhận được một ACK từ đích xác nhận về. Kỹ thuật này giải quyết vấn đề quan trọng là tăng hiệu quả truyền dẫn và điều khiển tốc độ dòng dữ liệu.

Gửi gói 1 Gửi gói 1 Gửi gói 1

Nhận gói 1, gửi ACK Không nhận được gói 2 Nhận gói 3, gửi ACK Vẫn chưa nhận

được ACK nên không truyền

đi nữa Gửi gói 4 Mất gói 2 hoặc

quá thời gian Gửi lại gói 2

ACK 1

ACK 2

ACK 3

Hình 1.12: Cơ chế cửa sổ trượt với kích thước cố định

Một phần của tài liệu Công nghệ IP-VPN (Trang 25 - 30)

Tải bản đầy đủ (DOC)

(126 trang)
w