TCP/IP

Bộ giao thức TCP/IP, (tiếng Anh: "TCP/IP protocol suite)" hay còn gọi là bộ giao thức Internet (tiếng Anh: "Internet protocol suite" hoặc "IP suite)" là một mô hình khái niệm (conceptual model) và một tập hợp các giao thức truyền thông dùng trong mạng Internet và các hệ thống mạng máy tính tương tự. Tên gọi TCP/IP đến từ hai giao thức nền tảng của bộ giao thức là TCP (Transmission Control Protocol) và IP (Internet Protocol). TCP và IP cũng là hai giao thức đầu tiên được định nghĩa.
Như nhiều bộ giao thức khác, bộ giao thức TCP/IP có thể được coi là một tập hợp các tầng, mỗi tầng giải quyết một tập các vấn đề có liên quan đến việc truyền dữ liệu, và cung cấp cho các giao thức tầng cấp trên một dịch vụ được định nghĩa rõ ràng dựa trên việc sử dụng các dịch vụ của các tầng thấp hơn. Về mặt logic, các tầng trên gần với người dùng hơn và làm việc với dữ liệu trừu tượng hơn, chúng dựa vào các giao thức tầng cấp dưới để biến đổi dữ liệu thành các dạng mà cuối cùng có thể được truyền đi một cách vật lý.
Mô hình OSI miêu tả một tập cố định gồm 7 tầng mà một số nhà sản xuất lựa chọn và nó có thể được so sánh tương đối với bộ giao thức TCP/IP. Sự so sánh này có thể gây nhầm lẫn hoặc mang lại sự hiểu biết sâu hơn về bộ giao thức TCP/IP.
Lịch sử.
Bộ giao thức liên mạng xuất phát từ công trình DARPA, từ những năm đầu thập niên kỷ 1970. Sau khi đã hoàn thành việc xây dựng ARPANET tiên phong, DARPA bắt đầu công việc trên một số những kỹ thuật truyền thông dữ liệu khác. Vào năm 1972, Robert E. Kahn đã được thuê vào làm việc tại Văn phòng kỹ thuật điều hành tin tức ("Information Processing Technology Office") của DARPA, phòng có chức năng liên quan đến mạng lưới truyền thông dữ liệu thông qua vệ tinh và mạng lưới truyền thông bằng sóng radio trên mặt đất. Trong quá trình làm việc tại đây Kahn đã phát hiện ra giá trị của việc liên thông giữa chúng. Vào mùa xuân năm 1973, Vinton Cerf, kỹ sư thiết kế bản giao thức NCP hiện dùng ("chương trình ứng dụng xử lý mạng lưới truyền thông - nguyên tiếng Anh là "Network Control Program""), được phân công cùng làm việc với Kahn trên các mô hình liên kết nối kiến trúc mở ("open-architecture interconnection models") với mục đích thiết kế giao thức sắp tới của ARPANET.
Vào mùa hè năm 1973, Kahn và Cerf đã nhanh chóng tìm ra một phương pháp tái hội nhập căn bản, mà trong đó những khác biệt của các giao thức liên kết mạng được che lấp đi bằng một giao thức liên kết mạng chung, và thay vì mạng lưới truyền thông phải chịu trách nhiệm về tính đáng tin cậy, như trong ARPANET, thì các máy chủ ("hosts") phải chịu tránh nhiệm (Cerf ghi công của Hubert Zimmerman và Louis Pouzin (thiết kế viên của mạng lưới truyền thông CYCLADES) là những người có ảnh hưởng lớn trong bản thiết kế này.)
Với nhiệm vụ là một mạng lưới truyền thông bị hạ cấp tới mức cơ bản tối thiểu, khiến việc hội nhập với các mạng lưới truyền thông khác trở nên hầu như bất khả thi, mặc dầu đặc tính của chúng là gì, và vì thế, giải đáp nan đề đầu tiên của Kahn. Một câu nói cửa miệng vì thế mà TCP/IP, sản phẩm cuối cùng do những cống hiến của Cerf và Kahn, sẽ chạy trên "đường dây nối giữa hai ống bơ rỉ", và quả nhiên nó đã được thực thi dùng các con chim bồ câu đưa thư ("homing pigeons"). Một máy vi tính được dùng là "cổng nối" ("gateway") (sau này đổi thành "bộ định tuyến" ("router") để tránh nhầm với những loại "cổng nối" khác) được thiết bị một giao diện với từng mạng lưới truyền thông, truyền tải gói dữ liệu qua lại giữa chúng.
Ý tưởng này được nhóm nghiên cứu mạng lưới truyền thông của Cerf, tại Stanford, diễn giải ra tỉ mỉ, cụ thể vào khoảng thời gian trong năm 1973-1974. Những công trình về mạng lưới truyền thông trước đó tại Xerox PARC, nơi sản sinh ra bộ giao thức PARC Universal Packet, phần lớn được dùng vào thời kỳ đó, cũng gây ảnh hưởng về kỹ thuật không ít.
Sau đó DARPA ký hợp đồng với BBN, Stanford, và Trường đại học chuyên nghiệp Luân Đôn ("The University College London - viết tắt là UCL") kiến tạo một số phiên bản của giao thức làm việc được, trên các nền tảng phần cứng khác nhau. Có bốn phiên bản đã được xây dựng - TCP v1, TCP v2. Phiên bản 3 được tách ra thành hai phần TCP v3 và IP v3, vào mùa xuân năm 1978, và sau đó ổn định hóa với phiên bản TCP/IP v4 - giao thức tiêu chuẩn hiện dùng của Internet ngày nay.
Vào năm 1975, cuộc thử nghiệm thông nối hai mạng lưới TCP/IP, giữa Stanford và UCL đã được tiến hành. Vào tháng 11 năm 1977, một cuộc thử nghiệm thông nối ba mạng lưới TCP/IP, giữa Mỹ, Anh và Na Uy đã được chỉ đạo. Giữa năm 1978 và 1983, một số những bản mẫu của TCP/IP đã được thiết kế tại nhiều trung tâm nghiên cứu. Ngày 1 tháng 1 năm 1983, ARPANET đã hoàn toàn được chuyển hóa sang dùng TCP/IP.
Vào tháng 3 năm 1982, Bộ Quốc phòng Mỹ chấp thuận TCP/IP thành một tiêu chuẩn cho toàn bộ mạng lưới vi tính truyền thông quốc phòng. Vào năm 1985, Uỷ ban kiến trúc Internet ("Internet Architecture Board") đã dành 3 ngày hội thảo về TCP/IP cho công nghiệp điện toán, với sự tham dự của 250 đại biểu từ các công ty thương mại. Cuộc hội thảo này đã làm tăng thêm uy tín và sự nổi tiếng của giao thức, khiến nó ngày càng phổ biến trên thế giới.
Ngày 9 tháng 11 năm 2005 Kahn và Cerf đã được tặng thưởng Huy chương Tự do Tổng thống ("Presidential Medal of Freedom") cho những thành tích cống hiến của họ đối với nền văn hóa của Mỹ.
Các tầng trong chồng giao thức của bộ giao thức TCP/IP.
Bộ giao thức IP dùng sự đóng gói dữ liệu hòng trừu tượng hóa ("thu nhỏ lại quan niệm cho dễ hiểu") các giao thức và các dịch vụ. Nói một cách chung chung, giao thức ở tầng cao hơn dùng giao thức ở tầng thấp hơn để đạt được mục đích của mình. Chồng giao thức Internet gần giống như các tầng cấp trong mô hình của Bộ quốc phòng Mỹ:
Những tầng gần trên nóc gần với người sử dụng hơn, còn những tầng gần đáy gần với thiết bị truyền thông dữ liệu. Mỗi tầng có một giao thức để phục vụ tầng trên nó, và một giao thức để sử dụng dịch vụ của tầng dưới nó (ngoại trừ giao thức của tầng đỉnh và tầng đáy).
Cách nhìn các tầng cấp theo quan niệm: hoặc là cung cấp dịch vụ, hoặc là sử dụng dịch vụ, là một phương pháp trừu tượng hóa để cô lập các giao thức của tầng trên, tránh quan tâm đến thực chất của vấn đề, như việc truyền tải từng bit qua Ethernet chẳng hạn, và phát hiện xung đột ("collision detection"), trong khi những tầng dưới không cần phải biết đến chi tiết của mỗi một chương trình ứng dụng và giao thức của nó.
Sự trừu tượng hóa này cho phép những tầng trên cung cấp những dịch vụ mà các tầng dưới không thể làm được, hoặc cố ý không làm. Chẳng hạn IP được thiết kế với độ đáng tin cậy thấp, và được gọi là giao thức phân phát với khả năng tốt nhất (thay vì với "độ tin cậy cao" hoặc "đảm bảo nhất"). Điều đó có nghĩa là tất cả các tầng giao vận đều phải lựa chọn, hoặc là cung cấp dịch vụ đáng tin cậy, hoặc là không, và ở mức độ nào. UDP đảm bảo sự toàn vẹn của dữ liệu (bằng cách dùng kiểm tra tổng ("checksum")), song không đảm bảo sự phân phát dữ liệu tới đích; TCP cung cấp cả hai, sự toàn vẹn của dữ liệu, và đảm bảo sự phân phát dữ liệu tới đích (bằng cách truyền tải lại gói dữ liệu, cho đến khi nơi nhận nhận được gói dữ liệu).
Mô hình này còn thiếu sót một cái gì đó.
Ví dụ thứ ba và thứ tư có thể được giải thích rõ hơn dùng mô hình OSI, trong khi hai ví dụ đầu tiên còn nhiều vấn đề phải đề cập đến.
So sánh với mô hình OSI.
Bộ giao thức IP (và chồng giao thức tương ứng) đã được sử dụng, trước khi mô hình OSI được thành lập, và từ đó, rất nhiều lần trong sách in cũng như trong lớp học, chồng giao thức IP đã được so sánh với mô hình OSI rất nhiều lần. Các tầng cấp của OSI cũng thường được dùng để diễn tả chức năng của các thiết bị mạng.
Hai cái có liên quan ít nhiều, song không phải là hoàn toàn giống nhau. Điểm khác biệt đầu tiên dễ thấy nhất là số lượng của các tầng cấp. Mô hình của Bộ Quốc phòng Mỹ ("DoD model"), với chồng giao thức IP, chỉ có bốn hoặc năm tầng (tầng liên kết có thể được coi như là một tầng riêng biệt, song cũng có thể được phân tách ra thành hai tầng, tầng vật lý và tầng liên kết dữ liệu, trong khi đó mô hình OSI lại dùng bảy tầng. So sánh tên của chúng một cách chặt chẽ cho chúng ta thấy rằng, hai tầng "mới" có tên là tầng trình diễn và tầng phiên. Nhiều sự so sánh đã gộp hai tầng này lại với tầng ứng dụng của OSI, và coi nó tương tự như tầng ứng dụng của giao thức IP.
Tương tự như chồng giao thức IP, các tầng dưới của mô hình OSI không có nhiều chức năng, đủ để nắm bắt được thực trạng công việc của bộ giao thức IP. Chẳng hạn, chúng ta cần phải có một "tầng liên kết mạng" gắn vào khoảng trống giữa tầng mạng và tầng giao vận, để chỉ ra nơi tồn tại của ICMP ("Internet Control Message Protocol - Giao thức điều khiển thông điệp Internet") và IGMP ("Internet Group Management Protocol - Giao thức quản lý nhóm Internet"). Thêm vào đó, chúng ta cũng cần phải có một tầng ở giữa tầng mạng và tầng liên kết dữ liệu dành cho ARP ("Address Resolution Protocol - Giao thức tìm địa chỉ") và RARP ("Reverse Address Resolution Protocol - Giao thức tìm địa chỉ ngược lại"). Không những thế, nó còn chịu ảnh hưởng của việc thiết kế chỉ nhắm vào một cài đặt đơn giản của mạng lưới, với một tầng liên kết dữ liệu mà thôi (chẳng hạn người dùng ADSL dùng giao thức đường hầm ("tunnelling protocol") để "đào hầm" thông vào mạng lưới của công ty liên hiệp, dùng IP trên PPTP, hơn là dùng IP trên PPPoA, thông qua liên kết ADSL).
Một ví dụ cho thấy mô hình OSI có tác dụng là việc chỉ ra nơi thích hợp nhất của SSL/TLS. Thông thường SSL/TLS được dùng như một giao thức phiên ("session protocol"), tức là một giao thức tầng cấp trên ("upper layer protocol") dành cho TCP hoặc UDP, song lại là một giao thức tầng cấp dưới ("lower layer protocol") đối với rất nhiều các giao thức khác (HTTP, SFTP...), hoặc bất cứ một chương trình ứng dụng nào hoạt động trên một stunnel hoặc trên một mạng riêng ảo bảo an ("secure virtual private network").
Chim bồ câu đưa thư ("Carrier pigeon") cũng có thể được nhóm vào tầng vật lý, song đây là cách dùng không được chấp nhận (ngoại tiêu chuẩn).
Có một vài những câu dễ nhớ để giúp các bạn nhớ được tên và trật tự của những tầng cấp trong mô hình OSI.
Các tầng.
Sau đây là miêu tả từng tầng trong bộ giao thức TCP/IP.
Tầng ứng dụng.
Tầng ứng dụng là nơi các chương trình mạng thường dùng làm việc nhất nhằm liên lạc giữa các nút trong một mạng.
Giao tiếp xảy ra trong tầng này là tùy theo các ứng dụng cụ thể và dữ liệu được truyền từ chương trình, trong định dạng được sử dụng nội bộ bởi ứng dụng này, và được đóng gói theo một giao thức tầng giao vận.
Do chồng TCP/IP không có tầng nào nằm giữa ứng dụng và các tầng giao vận, tầng ứng dụng trong bộ TCP/IP phải bao gồm các giao thức hoạt động như các giao thức tại tầng trình diễn và tầng phiên của mô hình OSI. Việc này thường được thực hiện qua các thư viện lập trình.
Dữ liệu thực để gửi qua mạng được truyền cho tầng ứng dụng, nơi nó được đóng gói theo giao thức tầng ứng dụng. Từ đó, dữ liệu được truyền xuống giao thức tầng thấp tại tầng giao vận.
Hai giao thức tầng thấp thông dụng nhất là TCP và UDP. Mỗi ứng dụng sử dụng dịch vụ của một trong hai giao thức trên đều cần có cổng. Hầu hết các ứng dụng thông dụng có các cổng đặc biệt được cấp sẵn cho các chương trình phục vụ ("server")(HTTP - Giao thức truyền siêu văn bản dùng cổng 80; FTP - Giao thức truyền tệp dùng cổng 21, v.v..) trong khi các trình khách ("client") sử dụng các cổng tạm thời ("ephemeral port").
Các thiết bị định tuyến và thiết bị chuyển mạch không sử dụng tầng này nhưng các ứng dụng điều chỉnh thông lượng ("bandwidth throttling") thì có dùng.
Tầng giao vận.
Trách nhiệm của tầng giao vận là kết hợp các khả năng truyền thông điệp trực tiếp ("end-to-end") không phụ thuộc vào mạng bên dưới, kèm theo kiểm soát lỗi ("error control"), phân mảnh ("fragmentation") và điều khiển lưu lượng. Việc truyền thông điệp trực tiếp hay kết nối các ứng dụng tại tầng giao vận có thể được phân loại như sau:
Tầng giao vận có thể được xem như một cơ chế vận chuyển thông thường, nghĩa là trách nhiệm của một phương tiện vận tải là đảm bảo rằng hàng hóa/hành khách của nó đến đích an toàn và đầy đủ.
Tầng giao vận cung cấp dịch vụ kết nối các ứng dụng với nhau thông qua việc sử dụng các cổng TCP và UDP. Do IP chỉ cung cấp dịch vụ phát chuyển nỗ lực tối đa ("best effort delivery"), tầng giao vận là tầng đầu tiên giải quyết vấn đề độ tin cậy.
Ví dụ, TCP là một giao thức định hướng kết nối. Nó giải quyết nhiều vấn đề độ tin cậy để cung cấp một dòng byte đáng tin cậy ("reliable byte stream"):
Tuy các giao thức định tuyến động ("dynamic routing protocol") khớp về kỹ thuật với tầng giao vận trong bộ giao thức TCP/IP (do chúng chạy trên IP), nhưng chúng thường được xem là một phần của tầng mạng. Một ví dụ là giao thức OSPF (số hiệu giao thức IP là 89).
Giao thức mới hơn, SCTP ("Stream Control Transmission Protocol|"), cũng là một cơ chế giao vận định hướng kết nối "đáng tin cậy". Giao thức này định hướng dòng ("stream-oriented"), chứ không định hướng byte như TCP, và cung cấp nhiều dòng đa công ("multiplexed") trên một kết nối. Nó còn hỗ trợ multi-homed, trong đó một đầu của kết nối có thể được đại diện bởi nhiều địa chỉ IP (đại diện cho nhiều giao diện vật lý), sao cho, nếu một giao diện vật lý thất bại thì kết nối vẫn không bị gián đoạn. Giao thức này ban đầu được phát triển dành cho các ứng dụng điện thoại (để vận chuyển SS7 trên giao thức IP), nhưng nó cũng có thể được sử dụng cho các ứng dụng khác.
UDP là một giao thức datagram phi kết nối. Cũng như IP, nó là một giao thức nỗ lực tối đa hay "không đáng tin cậy". Vấn đề duy nhất về độ tin cậy mà nó giải quyết là sửa lỗi dữ liệu (dù chỉ bằng một thuật toán tổng kiểm yếu).
UDP thường được dùng cho các ứng dụng như các phương tiện truyền thông theo dòng ("streaming media") chứa âm thanh và hình ảnh, v.v.., trong đó, vấn đề gửi đến đúng giờ có vai trò quan trọng hơn độ tin cậy, hoặc cho các ứng dụng truy vấn/đáp ứng đơn giản như tra cứu tên miền, trong đó, phụ phí của việc thiết lập một kết nối đáng tin cậy lớn một cách không cân xứng.
Giao thức DCCP hiện đang được phát triển bởi IETF ("Internet Engineering Task Force"). Nó cung cấp nội dung điều khiển lưu lượng của TCP, trong khi đối với người dùng, nó giữ bề ngoài như mô hình dịch vụ datagram của UDP.
Cả TCP và UDP được dùng cho một số ứng dụng bậc cao ("high-level"). Các ứng dụng tại các địa chỉ mạng cho trước được phân biệt bởi cổng TCP hay UDP của nó. Theo quy ước, các cổng "nổi tiếng" được liên kết với một số ứng dụng cụ thể. ("Xem Danh sách cổng TCP và UDP.")
RTP ("Real-time Transport Protocol" - giao thức giao vận thời gian thực) là một giao thức datagram được thiết kế cho dữ liệu thời gian thực ("real-time"), chẳng hạn hình và tiếng được truyền theo dòng ('streaming audio and video'). RTP là một giao thức tầng phiên sử dụng định dạng gói tin UDP làm căn bản. Tuy nhiên, nó được đặt vào tầng giao vận của chồng giao thức TCP/IP.
Tầng mạng.
Theo định nghĩa ban đầu, tầng mạng giải quyết các vấn đề dẫn các gói tin qua một mạng đơn. Một số ví dụ về các giao thức như vậy là X.25, và giao thức Host/IMP của mạng ARPANET.
Với sự xuất hiện của khái niệm liên mạng, các chức năng mới đã được bổ sung cho tầng này, đó là chức năng dẫn đường cho dữ liệu từ mạng nguồn đến mạng đích. Nhiệm vụ này thường đòi hỏi việc định tuyến cho gói tin quan một mạng lưới của các mạng máy tính, đó là liên mạng.
Trong bộ giao thức liên mạng, giao thức IP thực hiện nhiệm vụ cơ bản dẫn đường dữ liệu từ nguồn tới đích. IP có thể chuyển dữ liệu theo yêu cầu của nhiều giao thức tầng trên khác nhau; mỗi giao thức trong đó được định danh bởi một số hiệu giao thức duy nhất: giao thức ICMP ("Internet Control Message Protocol") là giao thức 1 và giao thức IGMP ("Internet Group Management Protocol") là giao thức 2.
Một số giao thức truyền bởi IP, chẳng hạn ICMP (dùng để gửi thông tin chẩn đoán về truyền dữ liệu bằng IP) và IGMP (dùng để quản lý dữ liệu đa truyền ("multicast")), được đặt lên trên IP nhưng thực hiện các chức năng của tầng liên mạng, điều này minh họa một sự bất tương thích giữa liên mạng và chồng TCP/IP và mô hình OSI. Tất cả các giao thức định tuyến, chẳng hạn giao thức BGP ("Border Gateway Protocol"), giao thức OSPF, và giao thức RIP ("Routing information protocol|"), đều thực sự là một phần của tầng mạng, mặc dù chúng có thể có vẻ thuộc về phần trên của chồng giao thức.
Tầng liên kết.
Các giao thức thuộc tầng liên kết được sử dụng để chuyển các gói tin từ tầng mạng tới các máy chủ ("host") khác nhau. Các quá trình truyền các gói tin trên một liên kết cho trước và nhận các gói tin từ một liên kết cho trước có thể được điều khiển cả trong phần mềm điều vận thiết bị ("device driver") dành cho card mạng, cũng như trong firmware hay các chipset chuyên dụng. Những thứ đó sẽ thực hiện các chức năng liên kết dữ liệu chẳng hạn như bổ sung một tín đầu ("packet header") để chuẩn bị cho việc truyền gói tin đó, rồi thực sự truyền frame dữ liệu qua một môi trường vật lý.
Đối với truy nhập Internet qua modem quay số, các gói IP thường được truyền bằng cách sử dụng giao thức PPP. Đối với truy nhập Internet băng thông rộng ("broadband") như ADSL hay modem cáp, giao thức PPPoE thường được sử dụng. Mạng dây cục bộ ("local wired network"') thường sử dụng Ethernet, còn mạng không dây cục bộ thường dùng chuẩn IEEE 802.11. Đối với các mạng diện rộng ("wide-area network"), các giao thức thường được sử dụng là PPP đối với các đường T-carrier hoặc E-carrier, Frame relay, ATM ("Asynchronous Transfer Mode"), hoặc giao thức packet over SONET/SDH (POS).
Tầng liên kết còn có thể là tầng nơi các gói tin được chặn ("intercepted") để gửi qua một mạng riêng ảo ("virtual private network"). Khi xong việc, dữ liệu tầng liên kết được coi là dữ liệu của ứng dụng và tiếp tục đi xuống theo chồng giao thức TCP/IP để được thực sự truyền đi. Tại đầu nhận, dữ liệu đi lên theo chồng TCP/IP hai lần (một lần cho mạng riêng ảo và lần thứ hai cho việc định tuyến).
Tầng liên kết còn có thể được xem là bao gồm cả tầng vật lý - tầng là kết hợp của các thành phần mạng vật lý thực sự (hub, các bộ lặp ("repeater"), cáp mạng, cáp quang, cáp đồng trục ("coaxial cable"), card mạng, cạc HBA (Host Bus Adapter) và các thiết bị nối mạng có liên quan: RJ-45, BNC, etc), và các đặc tả mức thấp về các tín hiệu (mức hiệu điện thế, tần số, v.v..).
Các cài đặt.
Hiện nay, một số hệ điều hành thương mại có bao gồm và cài đặt sẵn chồng TCP/IP. Đối với đa số người dùng, chúng ta không cần phải lùng tìm bản lập trình thực thi của nó. TCP/IP được bao gồm trong tất cả các phiên bản Unix thương mại và các phân phối của Linux, cũng như với Mac OS X, Microsoft Windows, và Windows Server.
Liên kết ngoài.
Tiếng Anh: