Thứ Bảy, 24 tháng 10, 2009

Giới thiệu giao thức TCP

Giới thiệu giao thức TCP


Giới thiệu

Việc hiểu biết mỗi giao thức được xếp đặt vào trong mô hình OSI như thế nào là một điều cần thiết cho mọi người quan tâm về mạng. Bài này phân tích TCP được xếp vào loại “giao thức vận chuyển” như thế nào và cho ta một sự thấu hiểu điều gì mình có thể mong đợi nơi giao thức này.

Việc sắp xếp TCP vào mô hình OSI

Như mọi người đã biết, mỗi giao thức có chỗ của nó trong mô hình OSI. Mô hình OSI là một biểu thị tính phức tạp và độ thông minh của giao thức đó. Theo qui tắc tổng quát, khi chúng ta càng lên cao trong mô hình OSI, thì giao thức đó càng trở nên thông minh. Việc đặt vị trí của tầng cũng phản ánh mức độ làm việc nhiều của CPU, trong khi đó các tầng thấp hơn của mô hình OSI thì hoàn toàn ngược lại, nghĩa là, mức độ làm việc của CPU ít hơn và bớt thông minh hơn.

http://www.firewall.cx/pictures/tcp-protocol-1.gif

TCP được đặt ở lớp thứ tư của mô hình OSI, mà người ta còn gọi là tầng vận chuyển. Tầng vận chuyển chịu trách nhiệm thiết lập phiên kết nối, chuyển dữ liệu và phân nhỏ các kết nối ảo.

Với ý nghĩ này, chúng ta sẽ mong đợi bất cứ giao thức nào nằm trong tầng vận chuyển phải thực hiện một vài tính năng và đặc tính cho phép nó hỗ trợ những chức năng mà tầng vận chuyển quy định.

thế sau khi phân tích TCP, chúng ta chắc chắn rằng TCP phải được xếp vào tầngvận chuyển mà thôi.

Sơ đồ bên dưới đây cho chúng ta thấy TCP header nằm ở vị trí nào trong frame do một máy tính đã tạo ra và gởi vào mạng. Nếu chúng ta xoay sơ đồ 90 độ qua trái, chúng ta cũng lại có được điều tương tự trong sơ đồ trước. Điều này dĩ nhiên vì mỗi tầng chức năng gắn thêm thông tin của mình, hay còn gọi là header

http://www.firewall.cx/pictures/tcp-protocol-2.gif

Frame được tạo thành bởi 6 khối 3 chiều để chúng ta có thể thấy khối nào được thêm vào trong mỗi tầng OSI. Chúng ta có thể thấy rằng TCP header chứa đựng mọi tuỳ chọn mà giao thức hổ trợ, được đặt ngay đằng sau IP header (tầng 3), và trước phần dữ liệu chứa đựng các thông tin của các tầng cao hơn (các tầng 5,6,7)

Ghi chú: khối FCS ở cuối cùng là một tổng kiểm tra đặc biệt do tầng datalink tạo ra để cho phép máy nhận phát hiện xem frame hiện thời có bị hư hỏng do quá trình vận chuyển hay không.

Chúng ta sử dụng TCP ở đâu và vì sao phải sử dụng?

Người ta dùng TCP hầu như cho mọi loại mạng. Là một giao thức, nó không bị hạn chế trong bất cứ một sơ đồ nối mạng nào, dù đó là mạng LAN hay mạng WAN. Là một giao thức vận chuyển, chúng ta gọi nó là một giao thức vận chuyển vì nó được định vị trong tầng vận chuyển của mô hình OSI, công việc đầu tiên của nó là chuyển dữ liệu từ nơi này tới nơi khác, bất kể đó là mạng vật lý nào hay nằm ở đâu.

Như phần lớn chúng ta đã biết, có hai loại giao thức vận chuyển. TCP là một, còn kia là UDP. Sự khác biệt giữa hai giao thức vận chuyển này là TCP cho một phương pháp vận chuyển dữ liệu mạnh mẽ và vô cùng đáng tin cậy, đảm bảo rằng dữ liệu chuyển đi không bị hư hao cách này hay cách khác. Mặt khác, UDP cho một phương pháp chuyển dữ liệu không đáng tin cậy vì nó không đảm bảo dữ liệu đã đến hay tính toàn vẹn của nó khi nó đến nơi.

Khái niệm về giao thức vận chuyển

Như chúng ta đã đề cập, TCP là một giao thức vận chuyển và điều này nghĩa là nó được dùng để chuyển dữ liệu của các giao thức khác. Thoạt tiên, điều này nghe có vẻ kỳ quặc hay khó hiểu nhưng điều này đúng là lý do mà người ta thiết kế, một tính năng thiết yếu cho các giao thức mà nó chuyên chở.

Sơ đồ dưới đây là cách đơn giản nhất để cho thấy khái niệm về giao thức ‘vận tải’:

http://www.firewall.cx/pictures/tcp-protocol-3.gif

Trong các phần kế tiếp, chúng ta sẽ có một cái nhìn sát hơn làm sao TCP xoay xở để có một phương pháp vận chuyển dữ liệu đáng tin cậy và làm sao để đảm bảo các gói tin đến được đích cuối cùng mà không bị lỗi. Nguyên trọn tiến trình này là công việc của nhiều hệ thống con trong TCP làm việc với nhau để cung cấp tính năng đáng tin cậy mà TCP đã đem lại cho chúng ta.

Chúng ta hãy nhìn khái quát tới giao thức này.

Khi người ta nói tới “TCP”, chúng ta hãy nhớ rằng người ta đang nói về một bộ các giao thức, không phải nói tới một giao thức, như một số người nghĩ.

Các tính năng chính của TCP

· Vận chuyển đáng tin cậy.

· Có định hướng nối kết.

· Kiểm soát dòng dữ liệu.

· Windowing (định số gói tin mới có một acknowledgements)

· Thông điệp báo đã nhận được.(acknowledgements)

Nhiều chi phí hơn (overhead)

Vận chuyển đáng tin cậy

TCP vận chuyển đáng tin cậy vì nhờ các kỹ thuật khác nhau mà nó sử dụng để đảm bảo dữ liệu nhận được là không bị lỗi. TCP là một giao thức mạnh được dùng để vận chuyển tập tin mà lỗi của dữ liệu không thể nào là một sự tùy chọn. Khi chúng ta quyết định tải về một tập tin là 50MB từ một website, chúng ta không muốn phát hiện ra sau khi tải tập tin về hoàn tất mà tập tin thì bị lỗi. Mặc dù vậy trong thực tế, điều này vẫn xảy ra, để chỉ cho chúng ta thấy rằng chúng ta không thể nào hoàn thiện về 1 điều nào đó.

Hình ảnh này cho thấy header của TCP trong khung ethernet II. Ngay dưới đây, các bạn sẽ thấy sơ đồ thứ hai thu nhỏ lại chỉ trong TCP header, hiển thị các trường mà giao thức chứa đựng

http://www.firewall.cx/pictures/tcp-quick-overview-1.gif

http://www.firewall.cx/pictures/tcp-quick-overview-2.gif

Sơ đồ bên trên cho thấy từng phần chia nhỏ là mỗi trường bên trong TCP header cùng với số bit.

Trường phổ biến nhất trong TCP header là cổng nguồn (source port), cổng đích (destination port),và các bit mã (Code bits). Các bit mã này còn gọi là “cờ’ (flag) .

Các trường còn lại giúp đảm bảo mọi đoạn TCP đi được đến đích và được ráp lại đúng thứ tự, nhưng trong cùng một lúc cung cấp một cơ chế khắc phục lỗi nếu có một vài đoạn bị mất hay không đi đến đích được.

Kết nối có định hướng

Ý nghĩa cơ bản của điều này là phải có kết nối giữa hai máy tính trước khi chuyển dữ liệu. Khi người ta sử dụng thuật ngữ “kết nối đã được thiết lập”, điều này nghĩa là cả hai máy tính biết nhau và đã thỏa thuận trao đổi dữ liệu. Đây cũng là nơi mà bắt tay 3 chiều xảy ra. Chúng ta có thể tìm thấy các bit SYN và ACK trong trường các bit mã được sử dụng để thực hiện bắt tay 3 chiều. Nhờ có bắt tay 3 chiều mà TCP có định hướng nối kết.

Sơ đồ sau giải thích thủ tục của bắt tay 3 chiều:

http://www.firewall.cx/pictures/tcp-quick-overview-3.gif

Bước 1: Máy A gởi gói khởi đầu đến máy B. Gói này có bit “SYN” được bật lên. Máy B nhận gói này và thấy bit “SYN” có giá trị “1” (trong nhị phân, điều này nghĩa là MỞ) vì vậy nó biết máy A đang cố thiết lập kết nối với nó.

­Bước 2: cho rằng máy B có đủ tài nguyên, nó gởi một gói trả lại cho máy A và với các bit “SYN và ACK” được bật lên. Bit SYN mà máy B gởi, ở bước này, có nghĩa là “tôi muốn đồng bộ với bạn” và bit ACK có nghĩa là “tôi ghi nhận yêu cầu SYN trước đây của bạn”

Bước 3: vì vậy…sau cùng, máy A gởi một gói khác tới máy B và với bit ACK được bật lên, nó nói với máy B rằng “tôi ghi nhận yêu cầu trước đây của bạn.”

Mỗi khi bắt tay 3 chiều đã hoàn tất, kết nối được thiết lập (virtual circuit) và việc chuyển dữ liệu bắt đầu.

Kiểm soát dòng dữ liệu

Kiểm soát dòng dữ liệu được dùng để kiểm soát dòng chảy của dữ liệu trong kết nối. Nếu vì một lý do nào đó một trong hai máy không thể theo kịp việc chuyển dữ liệu, thì nó có khả năng gởi những tín hiệu đặc biệt tới máy kia, yêu cầu máy kia hoặc là ngưng hoặc là chậm lại vì vậy nó mới theo kịp.

Ví dụ, nếu máy B là một web server mà người ta có thể tải về các trò chơi, thế thì dĩ nhiên máy A không phải là máy tính duy nhất tải về từ web server, vì vậy máy B phải điều chỉnh dòng dữ liệu chảy về mọi máy tải về từ nó. Điều này có nghĩa là nó xoay qua máy A và bảo máy A chờ trong một lát cho tới khi có đủ tài nguyên có sẵn vì nó có thêm 20 người dùng đang cố tải cùng một lúc.

Dưới đây là sơ đồ một phiên làm việc kiểm soát dòng chảy giữa hai máy. Về điểm này, chúng ta chỉ cần hiểu khái niệm về kiểm soát dòng dữ liệu.

http://www.firewall.cx/pictures/tcp-quick-overview-4.gif

Nói chung, khi một máy nhận ngập tràn dữ liệu quá mau mà nó không xử lý kịp, nó cất dữ liệu đó trong một phần của bộ nhớ mà gọi là buffer. Hành động cất vào bộ nhớ này giải quyết vấn đề chỉ khi nào có sự bùng nổ dữ liệu nhỏ và chóng qua.

Tuy nhiên, nếu bùng nổ dữ liệu tiếp tục, nó gần như cạn kiệt bộ nhớ ở phía máy nhận và hệ quả là dữ liệu đến bị vứt bỏ. vì vậy trong tình huống này, đầu nhận chỉ phát ra tín hiệu “chưa sẵn sàng” hoặc “ngưng” tới máy gởi hay tới nguồn của sự ngập tràn này. Sau khi máy nhận xử lý dữ liệu nó có trong bộ nhớ của nó, nó sẽ phát ra tín hiệu “sẵn sàng” hay “tiến hành” và máy gởi nhận tín hiệu này và bắt đầu truyền lại.

Windowing

Thông lượng, hay hiệu quả việc truyền dữ liệu, sẽ thấp nếu máy gởi phải chờ sự ghi nhận sau mỗi lần gởi mỗi gói dữ liệu (từ chính xác là đoạn dữ liệu ,segment). Vì có thời gian sẵn sàng sau khi máy gởi truyền đoạn dữ liệu và trước khi nó kết thúc tiến trình ghi nhận từ máy nhận, máy gởi lợi dụng thời gian giải lao đó để truyền thêm dữ liệu. Nếu chúng ta muốn định nghĩa ngắn gọn Windowing, chúng ta cũng có thể làm như thế bằng cách nói rằng đó là số đoạn dữ liệu mà máy truyền được phép gởi mà không cần nhận các gói ghi nhận của chúng.

Windowing kiểm soát bao nhiêu thông tin được truyền qua lại với nhau. Trong khi đó một số giao thức lượng hoá thông tin bằng cách quan sát số gói tin, TCP/IP đo thông tin bằng cách đếm số bytes

http://www.firewall.cx/pictures/tcp-quick-overview-5.gif

Chúng ta hãy giải thích sơ đồ trên

Máy B đang gởi dữ liệu cho máy A, dùng window size bằng 1. Điều này có nghĩa là máy B mong đợi gói “ACK” cho mỗi đoạn dữ liệu mà nó gỡi cho máy A. Mỗi khi đoạn dữ liệu đầu tiên được gởi, máy A nhận nó và gởi một gói “ACK2” tới máy B. Bạn có thể ngạc nhiên tại sao “ACK2” và không phải là “ACK”?

“ACK2” đươc dịch ra bởi máy B là: “tôi ghi nhận gói tin của bạn vừa gởi cho tôi và tôi sẵn sàng nhận đoạn dữ liệu thứ 2”. Vì vậy máy B sẵn sàng đoạn dữ liệu thứ 2 và gởi nó cho máy A, và mong chờ gói “ACK3” trả lời từ máy A vì thế nó có thể gởi đoạn mạng thứ 3, như bức hình cho thấy, nó nhận “ACK3”.

Tuy nhiên nếu nó nhận “ACK2” một lần nữa, điều này nghĩa là có vấn đề gì đó với việc truyền trước đây và máy B gởi lại đoạn mạng bị mất. Bây giờ chúng ta thử một window size khác để có thể hiểu hơn…Ta chọn số 3!

http://www.firewall.cx/pictures/tcp-quick-overview-6.gif

Trong ví dụ trên, chúng ta có window size bằng 3, nghĩa là máy B có thể gởi 3 đoạn dữ liệu tới máy A trước khi mong chờ “ACK” trả lại. Máy B gởi 3 đoạn dữ liệu đầu tiên (Send 1,Send 2,Send 3), Máy A nhận tất cả 3 đoạn dữ liệu tình trạng tốt và gởi “ACK4 ” cho máy B. Điều này có nghĩa là máy A ghi nhận 3 đoạn dữ liệu mà máy B đã gởi và chờ đoạn dữ liệu kế tiếp, mà trong trường hợp này là 4,5,và 6.

http://www.firewall.cx/pictures/tcp-quick-overview-7.gif

Thông điệp ghi nhận

Việc chuyển giao dữ liệu đáng tin cậy đảm bảo tính toàn vẹn của dòng dữ liệu gởi từ một máy đến một máy qua một liên kết dữ liệu đầy đủ chức năng. Điều này đảm bảo dữ liệu không bị trùng lặp hay bị mất. Phương pháp đạt được điều này được biết là ghi nhận tích cực với sự truyền lại. Kỹ thuật này đòi hỏi máy nhận liên lạc với máy gởi bằng cách gởi trả lại một thông điệp ghi nhận cho máy gởi khi nó nhận được dữ liệu. Máy gởi ghi lại từng đoạn dữ liệu mà nó đã gởi và chờ thông điệp ghi nhận này trước khi gởi đoạn dữ liệu kế tiếp. khi nó gởi một đoạn dữ liệu, máy gởi bắt đầu bộ đếm thời gian và truyền lại nếu thời gian hết hạn trước khi thông điệp ghi nhận trở về từ máy nhận.

Thêm nhiều chi phí (overhead)

Như chúng ta đã thấy, có một cơ chế rõ ràng nhờ có TCP mà dữ liệu đươc chuyển đi không bị lỗi. mọi tính năng mà giao thức hổ trợ phải trả một giá, và đây là chi phí liên kết với TCP.

Khi chúng ta nói về chi phí, chúng ta nói tới các trường khác nhau chứa đựng bên trong TCP header và việc kiểm tra lỗi diễn ra để đảm bảo không phần nào của dữ liệu bị hư hỏng. Tuy nhiên có một giao thức khác cùng chức năng vận chuyển nhưng không có tính năng bằng nhưng không phải tốn nhiều chi phí, băng thông, thời gian, khả năng xử lý…đó là UDP.

http://hoan.nhatnghe.vn/gt-tcp.htm

Không có nhận xét nào:

Đăng nhận xét