Nghiên cứu cơ chế điều khiển trong giao thức TCP
Trang 1MỞ ĐẦU
Ngày nay, khắp mọi nơi trên thế giới, Internet đã mang lại lợi ích cực kỳ to lớn cho xã hội loài người Các công ty và các tổ chức đang thấy được khả năng tăng năng suất và hiệu quả bằng việc đầu tư mạnh các hoạt động trên mạng Internet Sự phát triển và thay đổi mạnh mẽ của công nghệ Internet, đã tạo ra sự gia tăng nhanh, phức tạp và đa dạng của các ứng dụng truyền thông Sự phát triển nhanh của các ứng dụng, đặc biệt là các ứng dụng có tốc độ cao và việc có nhiều nhu cầu sử dụng mạng Internet trong trao đổi thông tin đã làm cho lưu lượng truyền thông trên mạng gia tăng rất nhanh, trong khi các tài nguyên truyền thông dù không ngừng được tăng cường cũng không thể luôn luôn theo kịp nhu cầu, đó là một trong những nguyên nhân chính dẫn đến hiện tượng tắc nghẽn và giảm hiệu suất truyền thông trên mạng
Trong khi đó yêu cầu của người sử dụng Internet/Intranet là các dịch vụ thông tin về kinh tế, văn hoá, xã hội v.v Ngày càng phong phú trên mạng cũng như xu thế tích hợp hầu hết các hệ thống thông tin, các dịch vụ thông tin số liệu nói riêng và thông tin liên lạc nói chung trên cơ sở hạ tầng Internet (IP Inrastructure) Trên thực tế, sự bùng nổ và phát triển của các mạng máy tính và các ứng dụng trên mạng đã gặp phải nhiều vấn đề nghiêm trọng liên quan đến sự tắc nghẽn mạng Theo thống kê, thường thì các cổng (gateway) Internet sẽ làm mất khoảng 10% của các gói tin đi đến chúng Điều này thực sự là nguy hại khi thông tin luôn luôn đòi hỏi tính toàn vẹn và chính xác của nó
Như vậy, vấn đề điều khiển lưu lượng trên mạng để tránh tắc nghẽn và sử dụng hữu hiệu tài nguyên mạng càng trở lên hết sức quan trọng và cần thiết để đáp ứng được yêu cầu truyền thông của người dùng
Trong mạng Internet, bộ giao thức TCP/IP đã được sử dụng ngay từ những ngày đầu tiên và giữ vai trò quyết định đối với sự hoạt động của mạng Giao thức TCP
sử dụng cơ chế điều khiển lưu lượng, điều khiển tắc nghẽn và lỗi từ hai đầu của kết nối
để vận chuyển thông tin trên Internet một cách hiệu quả và tin cậy Vậy nguyên tắc và
cơ chế thực hiện việc đó của giao thức TCP như thế nào để đảm bảo tính tin cậy và hiệu quả? Đó chính là nội dung chính cần tìm hiểu trong khoá luận này
Mục đích của khoá luận là nghiên cứu cơ chế điều khiển trong giao thức TCP
từ đó đưa ra các biện pháp thực thi nhằm làm tăng hiệu suất sử dụng mạng thông qua
Trang 2cơ chế điều khiển lưu lượng và điều khiển tắc nghẽn Để thực hiện được mục đích đó, khoá luận sẽ nghiên cứu về một số vấn đề liên quan trực tiếp đó là:
• Tìm hiểu về cơ chế điều khiển lưu lượng và điều khiển tắc nghẽn trong giao thức TCP
• Việc áp dụng các cơ chế đó trong các phiên bản TCP như thế nào?
• Cuối cùng là dùng mô phỏng để đánh giá các giải pháp trong cơ chế TCP có tác dụng như thế nào?
Với khả năng còn hạn chế cũng như thời gian hạn hẹp, chắc chắn luận văn này còn nhiều điều thiếu sót, chưa hoàn thiện Kính mong sự đóng góp ý kiến và giúp đỡ của quý thầy cô và các bạn
Hà nội, tháng 06/2006Nguyễn Thị Hạt
Trang 3Chương 1 GIỚI THIỆU CHUNG
1.1 Sự ra đời và phát triển của mạng Internet
Nguồn gốc đầu tiên của Internet là hệ thống mạng máy tính của bộ quốc phòng
Mỹ, có tên gọi là mạng Arpanet Đó là một mạng thí nghiệm được thiết kế và đưa vào
sử dụng năm 1969 để tạo điều kiện thuận lợi cho việc hợp tác khoa học trong các công trình nghiên cứu quốc phòng Arpanet đã nêu cao triết lý truyền thông bình đẳng (peer-to-peer), trong đó mỗi máy tính của hệ thống đều có khả năng “nói chuyện” với bất kỳ máy tính thành viên nào khác Bất kỳ mạng máy tính nào dựa trên cơ sở thiết kế của Arpanet đều được mô tả như một tập hợp các trung tâm điện toán tự quản, mang tính địa phương và tự điều hành, chúng được liên kết dưới dạng “vô chính phủ nhưng có điều tiết” Sự phát triển thiết kế của mạng Arpanet đơn thuần chỉ do những yêu cầu về quân sự: mạng này phải có khả năng chống lại một cuộc tấn công có thể vô hiệu hoá một số lớn các trạm thành viên của nó Mạng Internet nguyên thuỷ được thiết kế nhằm mục đích phục vụ việc cung cấp thông tin cho thế giới khoa học, nên công nghệ của nó cho phép mọi hệ thống đều có thể liên kết với nó thông qua một cổng điện tử Theo cách đó, có hàng ngàn hệ máy tính hợp tác, cũng như nhiều hệ thống dịch vụ thư điện
tử có thu phí, như MCI và Compuserve chẳng hạn, đã trở thành thành viên của Internet Cũng từ đó hệ thống Internet ra đời, gồm các mạng máy tính được liên kết với nhau trên phạm vi toàn thế giới, tạo điều kiện thuận lợi cho các dịch vụ truyền thông dữ liệu, đăng nhập từ xa, truyền các tệp tin, thư tín điện tử và các nhóm thông tin…Ở một khía cạnh nào đó, có thể coi Internet là một phương pháp ghép nối các mạng máy tính hiện hành, phát triển rộng rãi tầm hoạt động của từng hệ thống thành viên Với hơn hai triệu máy chủ phục vụ chừng vài trăm triệu người dùng, mạng Internet đang phát triển với tốc độ bùng nổ, và việc sử dụng Internet đã đang trở thành phổ biến trong cuộc sống hiện nay
Mạng Arpanet có ảnh hưởng lớn đến sự tiến hoá của các mạng thương mại,
mô hình tham chiếu được sử dụng trong mạng Arpanet là tiền thân của tất cả các mạng máy tính, kể cả mạng Internet ra đời sau này Về sau, khi các mạng vệ tinh và vô tuyến
ra đời và kết nối vào Arpanet thì các giao thức sử dụng trong Arpanet không đáp ứng được yêu cầu liên mạng, do đó cần phải có các mô hình kiến trúc mới, có khả năng liên kết nhiều mạng với nhau một cách trong suốt Kiến trúc này được gọi là mô hình tham chiếu TCP/IP, tên này được đặt theo tên của hai giao thức cơ bản của nó là TCP và IP
Trang 41.2 Mô hình tham chiếu ISO/OSI và TCP/IP
Việc xây dựng hệ thống phần mềm để kết nối các máy tính thành một mạng nhỏ và kết nối các mạng nhỏ thành một mạng toàn cầu như Internet là một bài toán rất phức tạp, để thực hiện công việc phức tạp này, người ta chia hệ thống phần mềm thành các lớp, hay tầng (Layer) theo một số nguyên tắc nhất định và khoa học Các lớp này chỉ tương tác với các lớp trên và dưới của nó Trong các mạng khác nhau, số tầng, tên các tầng, nội dung của các tầng và chức năng của các tầng có thể khác nhau; tuy nhiên, mục đích của mỗi tầng là sử dụng các dịch vụ do các tầng dưới cung cấp, để cung cấp những dịch vụ nhất định cho các tầng cao hơn, sao cho các tầng này khi sử dụng các dịch vụ của nó, không cần phải quan tâm tới các thao tác chi tiết mà các dịch vụ phải thực hiện Để các mạng máy tính khác nhau có thể truyền thông với nhau, chúng cần tuân theo các chuẩn Người ta đã xây dựng nên các chuẩn như vậy, chúng còn được gọi
là mô hình tham chiếu, làm cơ sở chung cho các nhà thiết kế dựa vào khi thiết kế mạng Hai mô hình mạng phổ biến sử dụng các lớp là mô hình OSI (Open System Interconnection) và mô hình TCP/IP sẽ được trình bày dưới đây
1.2.1 Mô hình tham chiếu ISO/OSI
Thời kỳ đầu khi thiết kế mạng, các nhà thiết kế tự do lựa chọn kiến trúc cho riêng mình Từ đó dẫn đến tình trạng không tương thích giữa các mạng máy tính với nhau, như về phương pháp truy nhập đường truyền khác nhau, sử dụng họ giao thức khác nhau,…vấn đề không tương thích đó làm trở ngại cho sự tương tác giữa những người sử dụng mạng khác nhau Nhu cầu trao đổi thông tin càng lớn, nó càng thúc đẩy việc xây dựng khung chuẩn về kiến trúc mạng để làm căn cứ cho các nhà thiết kế và chế tạo thiết bị mạng
Chính vì lý do đó tổ chức tiêu chuẩn hoá quốc tế ISO (International Organization for Standardization) đã lập ra (vào năm 1977) một tiểu ban nhằm phát triển một khung chuẩn như thế Kết quả là năm 1984, ISO đã xây dựng và công bố mô hình tham chiếu cho việc kết nối các hệ thống mở OSI (reference model for Open Systems Interconnection) Mô hình này cung cấp các đại lý với các chuẩn đảm bảo tạo
ra tính tương thích và hoạt động giao tiếp giữa các loại công nghệ mạng khác nhau đã được giới thiệu bởi nhiều công ty trên toàn thế giới Mô hình OSI định nghĩa các chức năng của mạng ở mỗi lớp cũng như quan hệ giữa các lớp Quan trọng hơn, nó là một cái khuôn mẫu thuận tiện cho việc hiểu được cách thông tin truyền qua mạng Hơn nữa, mô hình OSI mô tả cách thức mà thông tin, hay cụ thể hơn là các gói dữ liệu,
Trang 5truyền từ các chương trình ứng dụng (như bảng tính và các tài liệu) qua một phương tiện mạng (như các dây dẫn) tới chương trình ứng dụng khác ở trong một máy tính trên một mạng khác, thậm chí nếu người gửi và người nhận có các loại phương tiện mạng khác nhau Mô hình OSI có bảy tầng được minh hoạ trên hình 1 như sau:
Hình 1 Mô hình tham chiếu OSI
Mỗi tầng của mô hình OSI có một bộ các chức năng mà nó phải thi hành đối với các gói dữ liệu để truyền từ một nguồn tới một đích trên mạng Sau đây là chi tiết chức năng của mỗi tầng:
Tầng vật lý (Physical layer): Tầng vật lý giải quyết các vấn đề ghép nối cơ
khí, điện và giao thức để có thể khởi tạo, duy trì và kết thúc các liên kết vật lý giữa các thiết bị truyền thông Tầng này liên quan đến việc truyền dòng bit giữa các máy bằng kênh truyền thông vật lý, không xét đến ý nghĩa và cấu trúc
của dòng bit
Tầng liên kết dữ liệu (Data Link layer): Nhiệm vụ chính của tầng này là cung
cấp đường truyền tin cậy của dữ liệu qua kết nối vật lý Để làm được điều này, lớp liên kết dữ liệu được liên quan với địa chỉ vật lý, tô-pô mạng, truy cập
Trang 6mạng, khai báo lỗi, đảm bảo việc biến đổi các tin dạng bits nhận được từ lớp dưới (lớp vật lý) sang khung số liệu, và điều khiển lưu lượng Ví dụ các giao thức ở lớp hai bao gồm: Ethernet, Token Ring, ISDN, PPP và Frame Relay.
Tầng mạng (Network layer): Đảm bảo việc chuyển chính xác số liệu giữa các
thiết bị cuối trong mạng, nó đảm bảo việc tìm đường tối ưu cho các gói dữ liệu bằng các giao thức chọn đường, điều khiển lưu lượng số liệu trong mạng để tránh xảy ra tắc nghẽn bằng cách chọn các chiến lược tìm đường khác nhau Hơn nữa, tầng mạng liên quan đến địa chỉ lô-gíc Ví dụ các giao thức tầng 3 là:
IP, IPX, và Appletalk
Tầng giao vận (Transport layer) :Thực hiện vận chuyển các phân đoạn dữ liệu
của lớp Transport từ hệ thống máy gửi đến hệ thống máy nhận và tập hợp lại thành một luồng dữ liệu trong hệ thống máy người nhận Đường biên giới giữa lớp Transport và lớp phiên có thể coi như là đường biên giới giữa các giao thức ứng dụng và các giao thức vận chuyển lưu lượng dữ liệu Ngược lại các tầng: ứng dụng, trình bày, phiên là liên quan với các ứng dụng, bốn tầng thấp nhất liên quan với việc vận chuyển dữ liệu Tầng Transport cố gắng cung cấp dịch vụ truyền dữ liệu tin cậy giữa hai máy của người gửi và người nhận qua mạng Ví dụ các giao thức tầng 4 như: TCP, UDP và SPX
Tầng phiên (Session layer): Đảm bảo việc liên kết giữa hai thực thể có nhu
cầu trao đổi số liệu, ví dụ như người dùng và một máy tính ở xa, được gọi là một phiên làm việc Nó quản lý việc trao đổi số liệu, như thiết lập giao diện giữa người dùng và máy, xác định thông số điều khiển trao đổi số liệu, v.v
Tầng trình bày dữ liệu (Presentation layer) Đảm bảo việc thích ứng các cấu
trúc dữ liệu khác nhau của người dùng với cấu trúc dữ liệu thống nhất sử dụng trong mạng Nó có chứa các thư viện các yêu cầu của người dùng, thư viện tiện ích, v.v
Tầng Ứng dụng (Application layer) Đảm bảo việc cung cấp các phương tiện
để người sử dụng có thể truy nhập được vào môi trường OSI Ví dụ về các giao thức tầng ứng dụng: Telnet và HTTP, v.v
Truyền dữ liệu trong mô hình OSI: Khi ứng dụng X trên một máy tính cần gửi
dữ liệu cho ứng dụng Y trên một máy tính khác trên mạng, nó sẽ trao dữ liệu cho tầng ứng dụng, tầng ứng dụng có thể gắn thêm một khối dữ liệu có cấu trúc xác định, gọi là header, vào đầu gói số liệu của nó rồi gửi xuống tầng trình bày dữ liệu Tầng trình bày
Trang 7dữ liệu có thể chuyển đổi gói số liệu này theo các cách khác nhau và có thể bổ sung header của nó rồi gửi kết quả xuống tầng phiên bên dưới Đối với tầng này, nó không phân biệt header của tầng trên với dữ liệu trong gói số liệu mà nó nhận được Quá trình này cứ tiếp tục cho tới khi dữ liệu truyền xuống tầng vật lý, tại đó dữ liệu mới thực sự được truyền tới máy nhận Tại máy nhận, các header lần lượt được tách ra và loại bỏ khi gói số liệu đi qua các tầng từ dưới lên trên, cho tới khi nó đi đến ứng dụng Y Tầng nào phát hiện ra lỗi thì yêu cầu phát lại ngay tại tầng đó.
1.2.2 Mô hình tham chiếu TCP/IP
Mặc dù mô hình OSI được thừa nhận là đẹp và hợp lý về mặt mô hình, nhưng thực tế có một chuẩn khác mang tính kỹ thuật và được sử dụng trên Internet là TCP/IP (Transmission Control Protocol/Internet Protocol) Họ giao thức TCP/IP cung cấp phương tiện truyền thông liên mạng được hình thành từ những năm 70 Do vậy, chúng
ta cần phải đặc biệt quan tâm tới các kết nối TCP trong việc điều khiển lưu lượng Khác với mô hình ISO/OSI, tầng mạng trong mô hình TCP/IP sử dụng giao thức liên mạng “không kết nối” (connectionless) IP, tạo thành hạt nhân hoạt động của Internet Cùng với các thuật toán định tuyến RIP, OSPF, BGP, tầng liên mạng IP cho phép kết nối một cách mềm dẻo và linh hoạt các loại mạng vật lý khác nhau, như: Ethernet, Token Ring, X.25, v.v
Giao thức trao đổi dữ liệu “có kết nối” (connection-oriented) TCP được sử dụng ở tầng giao vận để đảm bảo tính chính xác và tin cậy việc trao đổi dữ liệu dựa trên kiến trúc kết nối “không kết nối” ở tầng mạng IP
Các giao thức hỗ trợ ứng dụng phổ biến như, truy nhập từ xa (Telnet), chuyển tệp (FTP), dịch vụ World Wide Web (HTTP), thư điện tử (SMTP),v.v Ngày càng được cài đặt phổ biến như những bộ phận cấu thành của các hệ điều hành thông dụng
Hình 2 sau đây trình bày hai mô hình tham chiếu TCP/IP và OSI để tiện so sánh
Trang 8Hình 2 Mô hình tham chiếu OSI và TCP/IP
Sau đây là chi tiết các tầng trong mô hình TCP/IP:
Tầng Internet :Tầng Internet đôi khi được gọi là tầng IP, có chức năng tương tự
tầng mạng trong mô hình OSI Nhiệm vụ của tầng Internet là định tuyến gói số liệu, điều khiển lưu lượng và điều khiển tắc nghẽn Mỗi gói số liệu có thể đi đến đích theo các con đường khác nhau; tại đích, thứ tự nhận các gói số liệu có thể khác với thứ tự lúc chúng được phát đi từ nguồn, do đó tầng giao vận trên nó giải quyết vấn đề thứ tự các gói số liệu Tầng Internet định nghĩa một khuôn dạng gói số liệu và giao thức chính là giao thức IP
Tầng giao vận: Tầng này phải được thiết kế sao cho các thực thể ngang hàng ở
máy nguồn và máy đích có thể truyền thông với nhau, tương tự như trong mô hình OSI Tại tầng này, người ta định nghĩa hai giao thức kiểu đầu cuối - đầu cuối (end-to-end) là TCP và UDP
o TCP là giao thức hướng kết nối, bảo đảm, nó vận chuyển dòng byte sinh ra
từ máy (nguồn) tới một máy tuỳ ý khác (đích) trong liên mạng mà không có lỗi TCP phân mảnh dòng byte từ các tầng trên đi xuống thành các gói số liệu riêng biệt rồi chuyển từng gói số liệu này xuống cho tầng Internet Tại máy đích, tiến trình TCP nhận và thực hiện lắp ráp các gói số liệu nhận được lại thành dòng byte rồi chuyển lên tầng trên TCP cũng có các chức năng điều khiển lưu lượng và điều khiển tắc nghẽn Các chức năng này sẽ được nghiên cứu phần sau trong tài liệu này
o UDP là giao thức không hướng kết nối, không bảo đảm (không có sự biên nhận cho gói số liệu UDP), dành cho các ứng dụng không muốn sử dụng
Trang 9các chức năng điều khiển lưu lượng và phân phát các gói số liệu đúng thứ tự của TCP mà muốn tự cung cấp các chức năng này UDP được sử dụng rộng rãi trong các ứng dụng kiểu dùng một lần, khách/chủ và các ứng dụng trong
đó việc phân phát tin nhanh chóng quan trọng hơn việc phân phối tin chính xác Mối quan hệ giữa IP, TCP và UDP được thể hiện trên hình 3 sau:
Hình 3 Các giao thức và các mạng trong mô hình TCP/IP ban đầu
Tầng ứng dụng: Tầng ứng dụng thực chất là tầng hỗ trợ ứng dụng, tầng này
chứa tất cả các giao thức bậc cao, hỗ trợ cho các ứng dụng Trong các mô hình đầu tiên, tầng này bao gồm các giao thức Telnet (Virtual Terminal Protocol), FTP và SMTP v.v
Tầng host-to-network: Bên dưới tầng Internet là một khoảng trống lớn, mô hình
tham chiếu TCP/IP thực tế hầu như không nói gì về tầng này Ngoài việc chỉ ra rằng máy tính (host) phải nối với mạng bằng cách sử dụng một số giao thức để
có thể gửi các gói số liệu IP đi trên mạng Tầng này không được định nghĩa và
nó khác nhau trên các máy tính khác nhau cũng như trên các mạng khác nhau
1.3 Vấn đề tắc nghẽn và sự cần thiết của cơ chế điều khiển lưu lượng
Trang 10tăng lên Hiện tượng tắc nghẽn có thể xảy ra ở một hoặc một số nút mạng, hay trên toàn mạng và được miêu tả trên hình 4 như sau:
Hình 4 Sự xuất hiện tắc nghẽn trong mạng
Khi số lượng gói số liệu đến mạng còn tương đối nhỏ, nằm trong khả năng vận tải của nó, chúng sẽ được phân phát đi hết, số lượng gói số liệu được chuyển đi tỉ lệ thuận với số lượng gói số liệu đến mạng Do luôn có một tỉ lệ gói số liệu phải phát lại
do bị lỗi trong quá trình vận chuyển, lưu lượng mà mạng thực sự phải vận chuyển nhìn chung lớn hơn lưu lượng đi qua mạng (thông lượng)
Khi lưu lượng đến cao quá một mức nào đó, các nút mạng không còn đủ khả năng chứa và chuyển tiếp các gói số liệu, do đó các nút mạng bắt đầu phải loại bỏ các gói số liệu Bên gửi sẽ phát lại các gói số liệu không được biên nhận sau một khoảng thời gian nhất định, gọi là timeout (thời gian chờ) Nếu lưu lượng đến mạng tiếp tục tăng lên nữa, tỉ lệ gói số liệu phát lại trên tổng số gói số liệu trong mạng có thể tăng đến 100%, nghĩa là không có gói số liệu nào được phân phát đi cả, thông lượng của mạng giảm xuống bằng không, mạng bị nghẹt hoàn toàn
Sự tắc nghẽn có thể do một số yếu tố dẫn đến Nếu bỗng nhiên dòng các gói tin đi đến trên hai hoặc ba lối vào của một nút mạng đều cần cùng một đường đi ra, một hàng đợi sẽ hình thành Nếu nút mạng không có đủ bộ nhớ để lưu tất cả chúng, các gói tin bắt đầu bị mất đi Việc bổ sung thêm bộ nhớ trong một chừng mực nào đó là có ích, tuy nhiên Nagle (1987) đã chỉ ra rằng nếu một Router có một lượng bộ nhớ vô hạn thì vấn đề tắc nghẽn trở lên tồi tệ hơn chứ không tốt hơn lên, bởi vì vào lúc các gói tin
đi lên đến đầu hàng đợi thì chúng đã bị timeout (liên tiếp) mất rồi, và các bản sao của chúng đã được gửi đi Tất cả các gói tin này sẽ được gửi đi tới Router tiếp theo, làm tăng thêm tải cho mọi con đường tới đích Các bộ vi xử lý chậm cũng gây ra tắc nghẽn Nếu CPU của một Router chạy chậm khi thực hiện nhiệm vụ kế toán (bookeeping) của
Trang 11nó (queueing buffers, updating tables ), các hàng đợi có thể trở thành lớn hơn, mặc dù vậy có sự vượt quá mức độ (excess) của dung lượng hàng đợi Tương tự, các đường truyền có dải thông thấp cũng có thể gây ra tắc nghẽn Việc nâng cấp đường truyền nhưng không đổi bộ xử lý hoặc ngược lại đôi khi cũng cải thiện được tình hình chút ít, nhưng thường là chỉ làm dời điểm tắc nghẽn đi mà thôi Tương tự như vậy, việc nâng cấp từng phần chứ không nâng cấp toàn bộ hệ thống thường cũng chỉ cải thiện được phần đó mà toàn bộ hệ thống ít được cải thiện.
Tắc nghẽn có khuynh hướng tự nó làm gia tăng Nếu một Router không có bộ nhớ đệm trống, nó sẽ phải lờ các gói tin mới đi đến Khi một gói tin bị loại bỏ, Router gửi sẽ bị timeout và sẽ phát lại gói tin đó, việc phát lại có thể xảy ra nhiều lần Bởi vì
nó không được phép vứt bỏ các gói tin trong bộ đệm khi chưa nhận được biên nhận, nên sự tắc nghẽn ở bên nhận bắt buộc bên gửi nén lại (refrain) việc giải phóng bộ đệm
mà lẽ ra được giải phóng Theo kiểu như vậy, sự tắc nghẽn quay ngược trở lại phía bên gửi, giống như những chiếc ô tô đi tới quầy thu lệ phí giao thông bị ùn lại thành một hàng dài dần về phía chúng đã từ đó đi đến
1.3.2 Khái niệm điều khiển lưu lượng
Một vấn đề đặt ra là phải làm gì với một người gửi luôn muốn truyền các gói tin nhanh hơn tốc độ mà người nhận có thể nhận được Tình huống này rất dễ xảy ra khi người gửi đang chạy một một máy tính tốc độ cao hoặc tải nhẹ, còn người nhận đang chạy một máy tốc độ thấp hoặc tải nặng Người gửi cứ tiếp tục bơm các gói tin ra với tốc độ cao cho tới khi người nhận hoàn toàn bị lụt Ngay cả khi việc truyền tin không có lỗi, tại một thời điểm nhất định nào đó người nhận sẽ không có khả năng quản lý các gói tin khi chúng đi đến và sẽ bắt đầu làm mất một số gói tin Điều rõ ràng
là cần phải làm một việc gì đó để tình huống này không xảy ra
Giải pháp thông thường là đưa vào sự kiểm soát lưu lượng (Flow Control) để điều tiết người gửi, làm cho người gửi không gửi nhanh hơn mức mà người nhận có thể xử lý được Việc điều tiết này thường cần một kiểu nào đó của cơ chế phản hồi, sao cho bên gửi có thể nhận thấy được bên thu có thể chạy theo kịp mình hay không
Người ta đã biết đến nhiều giải pháp (scheme) điều khiển lưu lượng khác nhau, nhưng phần lớn trong chúng là sử dụng cùng một nguyên lý cơ sở Giao thức chứa các quy tắc được định nghĩa rõ ràng về việc khi nào bên gửi có thể truyền đi các gói tin tiếp theo Các quy tắc này thường không cho phép gửi các gói tin khi mà bên
Trang 12thiết lập, bên nhận có thể nói: “bây giờ anh có thể gửi cho tôi n gói tin, nhưng sau khi gửi chúng đi, đừng có gửi thêm nữa khi mà tôi chưa bảo anh gửi tiếp”.
Để đảm bảo việc truyền thông trên mạng được trong suốt, người ta đưa ra một số thuật toán giúp cho mạng lưu thông liên tục, đồng thời tăng hiệu suất hoạt động của mạng lên cao nhất Đó chính là phương pháp điều khiển lưu lượng, là cách phòng để tránh xảy ra tắc nghẽn mạng.
Nói chung điều khiển lưu lượng liên quan tới việc vận chuyển kiểu point giữa một người gửi đã biết nào đó với một người nhận Công việc của nó là đảm bảo rằng bên gửi tốc độ nhanh không thể tiếp tục truyền dữ liệu nhanh hơn mức mà bên nhận có thể tiếp thu được Điều khiển lưu lượng hầu như luôn luôn liên quan tới một sự phản hồi trực tiếp nào đó từ phía người nhận tới phía người gửi để báo cho người gửi về công việc đang được làm ở bên người nhận như thế nào.
point-to-1.3.3 Khái niệm điều khiển tắc nghẽn
Như trên ta đã thấy, hiện tượng tắc nghẽn làm giảm hiệu suất sử dụng mạng, thậm chí có thể làm cho mạng hoàn toàn bị nghẹt, không hoạt động được Vậy phải có phương pháp như thế nào đó để tránh được các tắc nghẽn
Nói chung điều khiển tắc nghẽn (Congestion Control) phải thực hiện nhiệm vụ
để đảm bảo rằng mạng có khả năng vận tải lưu lượng được đưa vào lưu thông Đó là vấn đề toàn cục, liên quan đến cả hành vi của mọi Host, Router, các quá trình chứa và chuyển tiếp (store-and-forward) trong mỗi Router, và tất cả các yếu tố khác có khuynh hướng làm giảm dung lượng vận tải của mạng.
1.3.4 Các cơ chế điều khiển lưu lượng và điều khiển tắc nghẽn
1.3.4.1 Điều khiển lưu lượng (flow control)
Có thể thực hiện điều khiển lưu lượng bằng các phương pháp sau:
• Tận dụng tối đa đường truyền: Trong các thủ tục truyền dữ liệu, các gói
tin được truyền đi theo một hướng Trong hầu hết các ứng dụng thực tế chúng ta cần truyền dữ liệu theo cả hai hướng Một cách để có thể truyền dữ liệu theo hai hướng (full-duplex) là sử dụng hai kênh truyền thông riêng biệt, trên mỗi kênh chỉ truyền dữ liệu theo một chiều (simplex) Như vậy ta cần hai đường truyền vật lý, một đường truyền đi dữ liệu, còn một đường dùng cho người nhận gửi tín hiệu ACK về cho người gửi Ta thấy rằng
Trang 13đường truyền thứ hai hiệu suất sử dụng gần như bằng 0, rất lãng phí Do đó, người ta đã áp dụng biện pháp tận dụng kênh truyền được trình bày dưới đây.
• Trả lời ACK+Data: Cách tốt nhất là làm sao chỉ cần một đường truyền mà
vẫn có thể truyền thông tin theo cả hai hướng, theo cả hai hướng dung lượng đường truyền là như nhau Trong mô hình này các gói tin dữ liệu đi
từ A đến B được trộn lẫn với các biên nhận (ACK) của A gửi cho B Bên nhận cần xem trường loại gói tin ở header của gói tin nhận được để biết gói tin đó là gói tin dữ liệu hay gói tin ACK
• Sử dụng cơ chế cửa sổ (giống như cánh đập nước để điều hoà lưu thông): Tắc nghẽn cũng có thể xảy ra khi người gửi tính thời gian hết giờ
(timeout) quá sớm Chúng ta cần thủ tục hoạt động tốt hơn, nó vẫn đồng bộ được khi gặp các tình huống trục trặc đồng thời xảy ra: gói tin lặp đi lặp lại, mất một số gói tin, thời gian chờ timeout sớm Ba thủ tục để khắc phục các trục trặc đó, chúng được gọi chung tên là sliding window Các thủ tục này khác nhau ở tính hiệu quả, độ phức tạp và lượng bộ nhớ cần đến
• Giao thức cửa sổ trượt (sliding window) một bit – cơ chế cửa sổ:
o Trong tất cả các thủ tục sliding window, mỗi gói tin gửi đi chứa một số thứ tự nằm trong miền từ 0 tới một giá trị cực đại nào đó (thường được chọn bằng 2n-1) số thứ tự này chiếm một trường dài n bit Trong các thủ tục tinh vi hơn người ta dùng n>1
o Điểm căn bản nhất của các thủ tục sliding window là tại mọi thời điểm người gửi ghi nhớ danh sách các số thứ tự liên tiếp tương ứng với các gói tin nó được phép gửi đi Các gói tin này được gọi là nằm trong cửa gửi (Sending Window) Tương tự như vậy, bên người nhận cũng ghi nhớ một cửa nhận (Receiving Window) tương ứng với các gói tin nó được phép nhận, hai loại cửa sổ trên không nhất thiết phải có cùng các giới hạn trên
và giới hạn dưới cũng như kích thước
o Các số thứ tự nằm trong cửa sổ của người gửi thể hiện các gói tin đã gửi
đi nhưng còn chưa được biên nhận (ACK) Khi có một gói tin mới do tầng mạng gửi đến, nó sẽ được gán số thứ tự cao nhất tiếp theo, do đó mép trên của cửa sổ sẽ tăng lên 1 Khi nhận được ACK, mép dưới cửa sổ
Trang 14được tăng lên 1 Bằng cách này cửa sổ luôn ghi nhớ danh sách các gói tin còn chưa được biên nhận.
o Vì các gói tin trong cửa sổ gửi có thể bị hỏng hoặc bị mất trên đường truyền, vì vậy bên gửi phải nhớ tất cả các gói tin mà nó đã gửi Khi nhận được mỗi gói tin, bên nhận sinh ra một tín hiệu biên nhận - ACK để gửi cho bên gửi và sau đó cửa sổ bên gửi sẽ tăng lên 1 Khác với cửa sổ bên người gửi, cửa sổ bên người nhận luôn luôn giữ kích thước ban đầu của nó
o Nếu kích thước cửa sổ bên nhận bằng 1, có nghĩa là tầng Data Link bên nhận chỉ chấp nhận các frame theo đúng thứ tự, nếu kích thước cửa sổ nhận lớn hơn 1 thì không phải như vậy Trái lại tầng mạng truyền dữ liệu cho tầng Data Link theo thứ tự bình thường, không phụ thuộc kích thước cửa sổ
• Quản lý các gói tin trong cơ chế cửa sổ một bit: Thủ tục sliding window
một bit sử dụng cơ chế stop-and-wait, người gửi truyền đi một gói tin và chờ biên nhận (ACK) trước khi gửi gói tin tiếp theo Có hai trường hợp xảy ra: bên A phát trước (bình thường) bên B và A, B cùng phát, đây là trường hợp bất thường
o Trường hợp có một bên A phát trước: Tầng Data Link của bên A sau khi
nhận gói tin đầu tiên từ tầng mạng của nó, sẽ xây dựng nên một frame (gồm: header+data, header gồm 3 phần: Seq: số thứ tự phát; ACK- thứ tự biên nhận và số thứ tự gói tin) và gửi đi Tại bên thu (B) khi nhận được frame này, tầng Data Link sẽ kiểm tra xem nó có phải là frame bị phát lặp lại (duplicate) không? Nếu đúng thì loại bỏ đi, nếu không thì chuyển cho tầng mạng và cửa sổ của người nhận sẽ dịch đi
Trong trường hợp này thể hiện trên hình 5 a), mọi frame gửi đi đều được biên nhận Mỗi gói tin đi tới đích đều mang đến một gói tin cho tầng mạng bên nhận, không có frame lặp
o Trường hợp A và B cùng phát: Giả sử rằng A gửi frame 0 cho B, còn B
gửi frame 0 cho A và thời gian timeout của A hơi ngắn, do đó bên A luôn xảy ra timeout khi gửi một loạt các frame giống nhau với Seq=1 và ACK=1
Trang 15Khi frame đầu tiên không có trục trặc đi tới B, B sẽ biên nhận, biến nhớ giá trị gói tin chờ nhận framexpected được thiết lập giá trị 1 Tất cả các frame liên tiếp sau đó sẽ bị từ chối vì stt (sequence) của chúng sai Hơn nữa mọi gói tin lặp (duplicate) có ACK=1 và b vẫn đang đợi một ACK=0, B sẽ không nhận các gói tin từ tầng mạng của nó chuyển xuống.
Cứ mỗi khi từ chối nhận một frame lặp gửi tới, B lại gửi cho a một frame có seq=0 và ACK=0 Cuối cùng có một frame như vậy B tới A, làm cho A bắt đầu gửi packet tiếp theo
Hình 5 Mô hình gửi nhận gói tin
Bằng cách này không có một tình huống kết hợp giữa mất một số frame và timeout quá sớm có thể làm cho thủ tục phân phối các packet lặp lên trên tầng mạng bên trên nó, cũng như bỏ qua một packet, hoặc rơi vào tắc nghẽn (deadlock)
Một tình huống đặc biệt xảy ra khi cả hai bên đồng thời gửi đi packet đầu tiên, khi đó xảy ra sự khó đồng bộ, tình huống này được thể hiện trên màn hình 1.5a)
Hình 1.5b) hai frame đầu của hai bên được gửi đi đồng thời, một nửa
số frame là lặp, tuy vậy không có lỗi truyền
Trang 16• Một giao thức sử dụng go-back-n: Trong các trường hợp được xét trước
đây ta giả thiết rằng thời gian truyền một frame từ bên gửi tới bên nhận cộng với thời gian truyền frame biên nhận là nhỏ, không đáng kể Trong một số trường hợp thực tế các giả thiết này sẽ hoàn toàn sai, không phù hợp Thí dụ khi truyền qua vệ tinh với tốc độ 50kbps, thời gian từ khi truyền đi tới khi nhận được ACK là 500 ms, trong khi đó thời gian phát một gói tin (khoảng 1000 bit) cỡ 20ms, sau khi truyền 270 ms thì bên nhận nhận được đẩy đủ frame, sau 520ms thì bên gửi nhận được ACK (giả sử bên nhận nhận ngay và frame biên nhận là ngắn), do đó hiệu suất xấp xỉ bằng 20/500 hay 4%, giá trị này rất thấp (xấp xỉ 96 % thời gian kênh truyền bị chiếm không
sử dụng) Điều này chính là hệ quả của việc đòi hỏi bên gửi phải đợi nhận được biên nhận rồi mới được gửi frame tiếp theo Như vậy, bên gửi nên phát đi liên tục các frame trong khoảng thời gian bằng thời gian đi và về của tín hiệu rồi mới chờ ACK, trong thí dụ trên tốt nhất chọn w=26 (như vậy window của người gửi có giá trị cực đại =26) Kỹ thuật trên gọi là pinelining (vận chuyển bằng đường ống)
Việc vận chuyển liên tục các frame trên kênh truyền thông không tin cậy cũng phải giải quyết một loạt các vấn đề nghiêm trọng: có một frame nằm giữa dãy các frame gửi đi bị hỏng hoặc bị mất, bên nhận nhận một số frame rồi bên gửi mới phát hiện có một lỗi gì đó…Chúng ta cần nhớ là tầng Data Link bên nhận bắt buộc phải gửi các packet lên tầng mạng bên trên nó theo đúng thứ tự Có hai cách giải quyết như sau:
o Cách thứ 1 “go back n”- phát lại từ gói tin thứ n: khi gặp frame có lỗi thì
nó loại bỏ các frame tiếp theo dù chúng không bị lỗi, không gửi biên nhận các frame bị loại bỏ Bên nhận sẽ bị hết giờ (timeout) và nó sẽ truyền lại tất cả các frame chưa có biên nhận Cách giải quyết này ứng với trường hợp cửa sổ nhận có kích thước bằng 1 và gây lãng phí lớn dải thông, nhất là khi tần suất lỗi cao như hình 6 sau đây:
Trang 17Hình 6 Ảnh hưởng của một lỗi khi kích thước cửa sổ của người nhận là 1
o Cách thứ 2 Chỉ phát lại một cách có chọn lọc gói tin thứ n có lỗi –
“selective repeat”: khi gặp gói tin có lỗi bên nhận vẫn cứ nhận các gói tin tiếp sau nếu chúng không có lỗi Khi bên gửi nhận được ACK nó mới biết frame nào đã bị hỏng trên đường truyền và sẽ phát lại các gói tin này Cách giải quyết này ứng với trường hợp cửa sổ nhận có kích thước lớn hơn 1 Mọi frame nằm trong cửa sổ đều có thể được nhận và được nhớ đệm cho tới khi frame trước chúng được truyền cho tầng mạng Cách giải quyết này đòi hỏi vùng nhớ đệm của tầng Data Link phải đủ lớn, hình 1.7 minh hoạ cách giải quyết này:
Hình 7 Ảnh hưởng của một lỗi khi kích thước cửa sổ người nhận là lớn1.3.4.2 Điều khiển tắc nghẽn
Các nguyên tắc chung của việc kiểm soát tắc nghẽn: Nhiều vấn đề trong
các hệ thống phức tạp, chẳng hạn mạng máy tính, có thể nhìn nhận theo quan điểm của
lý thuyết điều khiển Cách tiếp cận này dẫn tới việc chia các giải pháp làm hai nhóm: vòng lặp mở (open loop) và vòng lặp đóng (close loop)
Trang 18Các giải pháp open loop giải quyết vấn đề bằng thiết kế tốt, về thực chất là bảo đảm để vấn đề tắc nghẽn không xảy ra, đó là vấn đề số một Một khi hệ thống đang chạy thì không sửa chữa nữa
• Các công cụ để thực hiện giải pháp điều khiển kiểu open loop bao gồm việc quyết định khi nào thì chấp nhận lưu lượng mới vào mạng, quyết định khi nào thì loại bỏ các packet và loại bỏ các gói tin nào và ra các quyết định theo lịch trình (scheduling decisions) tại các điểm khác nhau của mạng Tất
cả các việc này có chung một điểm là chúng ra quyết định mà không xem xét đến trạng thái hiện thời của mạng
Trái lại, các giải pháp close-loop lại dựa trên khái niệm về vòng phản hồi (feedback loop) Cách tiếp cận này có ba phần khi đem áp dụng cho việc kiểm soát tắc nghẽn
• Theo dõi hệ thống để phát hiện ra tắc nghẽn xảy ra khi nào và ở đâu: có thể
sử dụng nhiều cách đo (metric) khác nhau để theo dõi subnet để phát hiện tắc nghẽn Một số cách chính trong số đó là tính phần trăm số các gói tin bị loại bỏ do thiếu không gian nhớ đệm, tính trung bình chiều dài hàng đợi, số gói tin quá hạn (time-out) được phát lại, thời gian trễ trung bình của gói tin…Trong mọi trường hợp sự gia tăng của các số đo này chỉ ra rằng sự tắc nghẽn đang tăng lên
• Chuyển các thông tin này cho những nơi có thể phản ứng lại: đây là bước thứ hai trong vòng phản hồi để chuyển các thông tin về sự tắc nghẽn từ điểm nó được phát hiện tới những nơi có thể làm một cái gì đó nhằm giải quyết vấn đề này Một cách rất hiển nhiên là để cho Router phát hiện ra tắc nghẽn gửi một gói tin tới nguồn hoặc các nguồn sinh ra giao thông, báo cho chúng biết về sự cố Tất nhiên là các gói tin bổ sung này làm tăng tải đúng vào thời điểm không nên có thêm tải- lúc mạng (subnet) bị tắc nghẽn
• Điều chỉnh lại hệ thống để sửa chữa sự cố: trong tất cả các kế hoạch loại có phản hồi (feedback), người ta hy vọng rằng việc biết được sự tắc nghẽn sẽ làm cho các máy tính trên mạng thực hiện các phản ứng phù hợp để giảm tắc nghẽn Để làm việc một cách đúng đắn, tỉ lệ thời gian phải được điều chỉnh rất cẩn thận Những lúc có hai gói tin cùng đi đến, Router kêu lên
"stop", những lúc Router rỗi đến 20ms nó kêu lên "go", hệ thống sẽ dao động lớn và không bao giờ hội tụ Mặt khác, nếu nó lại đợi tới 30 phút để
Trang 19cho chắc chắn trước khi nói gì đó thì cơ chế kiểm soát tắc nghẽn sẽ phản ứng quá chậm trễ, không có giá trị sử dụng trong thực tế Để cơ chế làm việc tốt, cần đến một kiểu tính trung bình nào đó, tuy nhiên việc chọn thời gian là hằng số không phải là một việc tầm thường.
Các chính sách ngăn chặn tắc nghẽn: Chúng ta bắt đầu nghiên cứu các
phương pháp kiểm soát tắc nghẽn bằng việc xem xét các hệ thống open-loop Các hệ thống này được thiết kế nhằm mục đích số một là để giảm tối thiểu sự tắc nghẽn, chứ không để nó xảy ra rồi mới phản ứng lại Người ta cố gắng đạt mục đích của mình bằng các chính sách phù hợp với các mức tầng khác nhau
1.3.5 Cách thực hiện cơ chế điều khiển lưu lượng
Điều khiển lưu lượng liên quan đến việc vận chuyển giữa một người gửi đã biết nào đó và một người nhận Nhiệm vụ của nó là đảm bảo rằng bên gửi có tốc độ nhanh không thể tiếp tục truyền dữ liệu nhanh hơn mức mà bên nhận có thể tiếp thu được Điều khiển lưu lượng luôn luôn liên quan đến một sự phản hồi trực tiếp từ phía người nhận đến người gửi để báo cho bên gửi về khả năng nhận số liệu thực của bên nhận
Điều khiển tắc nghẽn thực hiện nhiệm vụ đảm bảo cho mạng có khả năng vận chuyển lưu lượng đưa vào Đó là một vấn đề toàn cục, liên quan đến hành vi của mọi nút mạng, quá trình chứa và chuyển tiếp trong mỗi nút mạng và các yếu tố khác có khuynh hướng làm giảm thông lượng của mạng
Điều khiển lưu lượng và điều khiển tắc nghẽn là hai khái niệm khác nhau, nhưng liên quan chặt chẽ với nhau Điều khiển lưu lượng là để tránh tắc nghẽn, còn điều khiển tắc nghẽn là để giải quyết vấn đề tắc nghẽn khi nó xuất hiện hoặc có dấu hiệu sắp xảy ra Trong thực tế triển khai thực hiện các thuật toán điều khiển lưu lượng
và điều khiển tắc nghẽn, nhiều khi cả hai thuật toán này cùng được cài đặt trong một giao thức, thể hiện ra như là một thuật toán duy nhất, thí dụ trong giao thức TCP Trong nhiều tài liệu thuộc lĩnh vực mạng máy tính, hai khái niệm này được sử dụng như nhau và được coi là đồng nghĩa Trong các phần sau của luận án này, tác giả sẽ theo quan điểm đó, các vấn đề về điều khiển lưu lượng và điều khiển tắc nghẽn sẽ được trình bày chung, với tên gọi điều khiển lưu lượng
Các tầng có thể thực hiện điều khiển lưu lượng: Có thể thực hiện điều khiển lưu
lượng ở một vài tầng trong mạng, thí dụ:
Trang 20• Điều khiển lưu lượng ở tầng giao vận : thường được gọi là điều khiển lưu lượng đầu cuối- đầu cuối (end-to-end), nhằm tránh cho bộ đệm của quá trình nhận tại đích khỏi bị tràn.
• Điều khiển lưu lượng trên từng chặng : nhằm tránh cho từng đường truyền khỏi bị tắc nghẽn Tuy nhiên, việc điều khiển lưu lượng trên từng chặng sẽ
có ảnh hưởng đến các chặng khác, do đó nó cũng có tác dụng tránh tắc nghẽn cho các đường truyền có nhiều chặng Trong mô hình tham chiếu OSI, điều khiển lưu lượng theo từng chặng được thực hiện ở tầng liên kết
dữ liệu và tầng mạng
Như vậy việc điều khiển lưu lượng thường được điều khiển trên tầng Transport, tầng này thực hiện việc điều khiển lưu lượng dựa trên một số dịch vụ được cung cấp từ tầng dưới nó Việc điều khiển lưu lượng hoàn toàn trong suốt đối với các chức năng ứng dụng và việc thay đổi các thiết bị vật lý cũng không làm ảnh hưởng đến các chức năng quan trọng của của tầng này.
1.4 Cơ chế điều khiển lưu lượng bằng cửa sổ trượt
Đây là một trong các cơ chế điều khiển lưu lượng được sử dụng rộng rãi nhất,
có thể áp dụng tại một hay nhiều tầng của mạng, thường là tầng liên kết dữ liệu, tầng mạng hay tầng giao vận
Cơ chế điều khiển lưu lượng bằng cửa sổ trượt cho phép bên gửi phát đi liên tiếp một số gói số liệu nhất định rồi mới phải dừng lại chờ thông báo về kết quả nhận, gọi là biên nhận, trước khi tiếp tục phát Bên nhận điều khiển lưu lượng bằng cách kìm lại hay gửi ngay biên nhận, đó là một gói số liệu điều khiển, hoặc một gói số liệu có chứa thông tin điều khiển, mà bên nhận dùng để báo cho bên gửi biết về việc đã nhận một hay một số gói số liệu như thế nào Tại mọi thời điểm, bên gửi phải ghi nhớ một danh sách chứa số thứ tự liên tiếp các gói số liệu mà nó được phép gửi đi, các gói số liệu này được gọi là nằm trong cửa sổ gửi Tương tự như vậy, bên nhận cũng duy trì một danh sách gọi là cửa sổ nhận, tương ứng với các gói số liệu mà nó được phép nhận Hai cửa sổ gửi và nhận không nhất thiết phải có độ lớn bằng nhau
Người ta đã đề xuất và sử dụng một số phương thức quản lý cửa sổ khác nhau, thí dụ: biên nhận riêng rẽ cho mỗi gói số liệu nhận được, biên nhận ở cuối cửa sổ, biên nhận ở đầu cửa sổ v.v Dưới đây sẽ trình bày hai cách đã được sử dụng phổ biến trong
số các cách đã được nêu
Trang 21Để việc phân tích sự điều khiển lưu lượng theo cơ chế cửa sổ được thuận lợi, người ta có thể sử dụng một số ký hiệu cho các tham số như nêu trong bảng sau:
Tt Thời gian truyền (transmit) một gói số liệu
Tp Thời gian truyền một biên nhận, là tín hiệu cho phép tiếp tục truyền
Τ Thời gian trễ lan truyền
W Kích thước cửa sổ, đơn vị là gói số liệu
D Thời gian từ khi bắt đầu truyền gói số liệu đầu tiên trong cửa sổ, cho
đến khi nhận được tín hiệu cho phép truyền tiếp
Biên nhận từng gói số liệu
Theo cách quản lý này, mỗi khi nhận được một gói số liệu, bên nhận sẽ gửi một biên nhận cho bên gửi Cửa sổ gửi tương ứng với các gói số liệu đã gửi đi nhưng chưa biên nhận (hình 8 (a) ) Khi có một gói số liệu mới từ tầng trên chuyển xuống để gửi đi, nó sẽ được gán số thứ tự lớn nhất tiếp theo, do đó mép trên của cửa sổ gửi sẽ tăng thêm 1 Nếu cửa sổ tăng tới cực đại thì tiến trình truyền ở tầng trên bị chặn lại, không thể truyền các gói số liệu xuống nữa, cho đến khi có chỗ trống trong vùng nhớ đệm Mỗi gói số liệu sau khi đến đích sẽ được biên nhận một cách riêng rẽ Khi biên nhận về đến bên gửi, mép dưới của cửa sổ gửi sẽ được tăng thêm 1, làm cho danh sách các gói số liệu đã truyền nhưng còn chờ biên nhận giảm đi một phần tử, đồng thời vùng nhớ tương ứng với phần tử đó cũng được giải phóng để cấp phát cho một gói số liệu mới (hình 8 (b),(c) ) Bằng cách này, cửa sổ gửi luôn ghi nhớ được danh sách các gói số liệu còn chưa được biên nhận Vì các gói số liệu trong cửa sổ gửi có thể bị hỏng hoặc mất trên đường truyền, nên bên gửi phải giữ lại bản sao của chúng trong bộ nhớ đệm để phát lại nếu sau một khoảng thời gian nhất định vẫn không được biên nhận
Trang 22Hình 8 Điều khiển lưu lượng bằng cửa sổ trượt, biên nhận từng gói số liệu (a): Trạng thái ban đầu (b): Gói số 0 được biên nhận (c): Gói số 1 được biên nhận
Các gói số liệu nằm ngoài cửa sổ nhận nếu đến sẽ bị loại bỏ Khi nhận được một gói số liệu có số thứ tự bằng mép dưới của cửa sổ, nó sẽ được truyền cho tầng trên, bên nhận sinh ra một biên nhận gửi tới người gửi và tăng cửa sổ lên một ô Nếu kích thước cửa sổ nhận bằng một, có nghĩa là nó chỉ chấp nhận các gói số liệu đến theo đúng thứ tự Nếu khác 1 thì không phải như vậy, trong trường hợp này, bên nhận sẽ giữ gói số liệu đến không đúng thứ tự trong bộ đệm, chờ nhận đủ các gói số liệu trong cửa
sổ rồi mới chuyển các gói số liệu lên tầng trên theo thứ tự mà bên gửi đã gửi đi Khoảng thời gian chờ này luôn được giới hạn
Biên nhận ở cuối cửa sổ
Đây là cách đơn giản nhất, bên nhận sẽ phát ra một biên nhận sau khi nhận được tất cả các gói số liệu trong cửa sổ nhận Hình 9 minh hoạ cho phương pháp này, trong đó nút A truyền thông với nút B, sử dụng một giao thức tựa như giao thức HDLC, kích thước cửa sổ gửi và cửa sổ nhận ban đầu bằng 3 Các gói số liệu đi trên mạng được biểu diễn bằng các mũi tên, kiểu của gói số liệu được ghi bên cạnh mũi tên,
ý nghĩa như sau :
Hình 9 Điều khiển lưu lượng bằng cửa sổ trượt, biên nhận ở cuối cửa sổ Kích
thước cửa sổ nhận và gửi ban đầu bằng 3
I n,m: là gói số liệu, với trường số thứ tự gói số liệu n(s)=n, trường biên nhận n(r)=m Bên B cho gói số liệu của nó “cõng” (“piggyback”) biên nhận tới bên
Trang 23A, việc này giúp nâng cao hiệu quả sử dụng đường truyền Tất nhiên, bên A cũng có thể biên nhận các gói số liệu mà B gửi cho nó bằng cách trên.
Rnr 4: là gói số liệu điều khiển, B báo cho A rằng, lúc này nó không thể nhận tiếp các gói số liệu của A, đồng thời biên nhận cho các gói số liệu có số thứ tự nhỏ hơn hoặc bằng 3 Khi nhận được tín hiệu này, A sẽ phải ngừng gửi, chờ cho đến khi nhận được tín hiệu cho phép gửi tiếp của B
Rr 4: là gói số liệu điều khiển, B báo cho a rằng, lúc này nó sẵn sàng tiếp nhận tiếp các gói số liệu của A, bắt đầu từ gói số 4
Giả sử rằng bên gửi luôn có sẵn dữ liệu để gửi, còn bên nhận cũng gửi biên nhận ngay sau khi nhận được gói số liệu cuối cùng trong cửa sổ nhận Chúng ta có thể tính được thông lượng trung bình lớn nhất có thể đạt được, dựa trên hình 10
Hình 10 Điều khiển lưu lượng bằng cửa sổ trượt, biên nhận ở cuối cửa sổ; kích
thước cửa sổ W=3
So với cách biên nhận từng gói số liệu, rõ ràng là số lượng biên nhận giảm đi,
từ một biên nhận/một gói số liệu, xuống còn một biên nhận/một cửa sổ Thí dụ, nếu kích thước cửa sổ w=8, thì số biên nhận giảm đi 8 lần Tuy nhiên, chúng ta sẽ phải trả giá bằng việc thông lượng truyền bị giảm đi
Trang 24Chương 2 ĐIỀU KHIỂN LƯU LƯỢNG TRONG GIAO
THỨC TCP
2.1 Tìm hiểu về giao thức TCP
TCP là giao thức trao đổi số liệu có kết nối (connection-oriented), nghĩa là cần thiết lập lên liên kết logic giữa một cặp thực thể TCP, trước khi chúng trao đổi dữ liệu với nhau
TCP cung cấp khả năng truyền dữ liệu một cách an toàn đảm bảo tin cậy, và chính xác giữa 2 thực thể cuối trong mạng Nó cung cấp các chức năng nhằm kiểm tra tính chính xác của dữ liệu khi đến và bao gồm cả việc gửi lại dữ liệu khi có lỗi xảy ra
Việc thiết kế và thực hiện giao thức TCP là phức tạp bởi những nguyên nhân sau:
• TCP quản lý đúng số tuần tự tính theo byte của dòng số liệu
• TCP tối ưu hóa khả năng sử dụng dải thông của mạng bằng cách giám sát
và điều khiển lưu lượng số liệu từ thực thể gửi tới thực thể nhận
• TCP đảm bảo việc trao đổi số liệu tin cậy và chính xác giữa các thực thể cuối trong mạng nhờ các yếu tố:
o Đối thoại khi thu phát: Mỗi khi gửi một gói tin bên nhận phải thông báo
nhận đúng sau một khoảng thời gian nhất định Nếu không gói tin được coi là nhận sai và được phát lại
o Kiểm tra số liệu thu phát: Khi nhận số liệu gửi được kiểm tra bằng thuật
toán quy định byte kiểm tra (checksum) được gửi cùng với số liệu phát
và được so sánh với byte kiểm tra tính lại khi thu trong trường hợp sai lệch có nghĩa là có lỗi xảy ra trên đường truyền khi đó thực thể thu sẽ thông báo kết quả cho thực thể phát và yêu cầu gửi lại
o Kiểm tra số tuần tự: Vì các gói TCP được truyền đi trong các gói IP và
các gói IP có thể đến đích không theo đúng thứ tự phát (IP là giao thức không hướng kết nối) nên thực thể TCP phải lập lại trật tự các gói tin thu được và huỷ bỏ các gói tin trùng lặp khi cần, rồi chuyển các gói tin đó theo đúng trật tự phát cho các ứng dụng
Trang 25o Điều khiển lưu lượng: Mỗi thực thể của kết nối TCP đều có một vùng
đệm hạn chế nào đó Thực thể TCP chỉ cho phép thực thể TCP phát gửi một lượng số liệu đủ với vùng đệm thu của mình Điều này cho phép ngăn cản thực thể TCP phát nhanh làm tràn vùng đệm của thực thể TCP thu chậm
2.1.1 Cách thức truyền dữ liệu qua giao thức TCP
Hình 11 Mô hình hoạt động của giao thức TCP
Như hình 11, các thực thể ứng dụng sử dụng dịch vụ truyền tin cậy TCP để trao đổi số liệu trong quá trình xử lý
Chú ý: thực thể ứng dụng và thực thể TCP có bộ đệm riêng của mình để lưu trữ tạm thời số liệu trong quá trình xử lý.
Cách thức chuyển tiếp số liệu giữa hai bộ đệm trên là yếu tố quyết định hiệu suất chuyển tiếp số liệu của hệ thống TCP.
Số liệu có thể được chuyển toàn bộ hoặc một phần từ bộ đệm ứng dụng tới bộ đệm TCP, trước khi quá trình phát được khởi động.
Số liệu thu từ kết nối TCP có thể được chuyển tiếp tức thới từ bộ đệm thu TCP tới bộ đệm ứng dụng hoặc chỉ khi tỷ lệ phần bộ đệm bị chiếm dụng so với tổng dung lượng bộ đệm đạt tới một giá trị nào đó.
Trang 262.2.2 Cấu trúc gói tin TCP
Cấu trúc gói tin số liệu TCP:
Giao thức TCP có sự quy định về khuôn dạng của gói tin sẽ được truyền phát Cấu trúc gói tin TCP gồm có phần tiêu đề TCP “giả” (pseudo header TCP), nó cần thiết cho việc xây dựng gói tin IP, bao gồm các thông tin về địa chỉ IP nguồn, địa chỉ IP đích, số liệu thuộc giao thức TCP và độ dài của gói tin TCP thực Tiếp nữa là phần gói tin TCP thực:
Hình 12 Cấu trúc gói tin TCP với phần tiêu đề giả
Trang 27Hình vẽ 13 sau đây là chi tiết cấu trúc mỗi gói tin TCP:
Hình 13 Cấu trúc gói tin TCP Giải thích cấu trúc gói tin:
• Source Port và Destination Port: số hiệu cổng TCP cùng với địa chỉ IP
nguồn và địa chỉ IP đích trong gói tin IP, số hiệu cổng TCP định danh duy nhất hai tiến trình ở hai đầu kết nối
• Sequence Number: số tuần tự phát, định danh byte đầu tiên của phần số liệu
thuộc gói tin trong dòng số liệu từ thực thể TCP gửi đến thực thể TCP nhận
Số tuần tự phát là khoảng cách tương đối của byte đầu tiên của phần số liệu với phần đầu của dòng byte Nó là số không dấu 32 bit, có giá trị từ 0 đến
232-1 Nếu ta coi dòng byte là luồng số liệu một chiều từ ứng dụng này tới ứng dụng kia thì TCP đánh số tất cả các byte với giá trị gọi là số tuần tự sequence number Khi một kết nối đựơc thiết lập, trường số tuần tự chứa giá trị khởi tạo ISN (Initial Sequence Number) được thực thể TCP chọn cho kết nối này Byte số liệu đầu tiên có số tuần tự bằng ISN+1
Trang 28• ACKnowledgement: vị trí tương đối của byte cuối cùng đã nhận đúng bởi
thực thể gửi gói tin ACK cộng thêm 1 Giá trị trường này còn gọi là số tuần
tự thu Giá trị của trường này đúng khi bít cờ ACK=1
• Data offset: khoảng cách tương đối của trường số liệu với phần tiêu đề của
TCP (TCP header) tính theo từ 32 bít Tham số này chỉ ra vị trí bắt đầu của vùng số liệu
• Reserved: dành để dùng trong tương lai, được thiết lập là 0.
• Flags: cờ có 6 bit dùng trong phần tiêu đề TCP Một hay nhiều cờ có thể
được thiết lập tại cùng một thời điểm bao gồm các cờ sau:
URG=1: thông báo giá trị trường urgent pointer đúng
ACK=1: thông báo giá trị trường ACKnowledgment đúng
PSH=1: thực thể nhận phải chuyển số liệu này cho ứng dụng tức thời.RST=1: tái khởi tạo kết nối, dùng để kết thúc kết nối
SYN=1: đồng bộ trường số thứ tự, dùng để thiết lập kết nối TCPFIN=1: thông báo thực thể gửi đã kết thúc việc gửi số liệu
• Window size: Độ lớn cửa sổ, quy định tổng số byte số liệu mà thực thể thu có
thể nhận được (đồng nghĩa với độ lớn bộ đệm thu), tính khởi đầu từ giá trị trường số tuần tự thu (ACKnowledgmet number)
• Checksum: từ (word) kiểm tra là giá trị bù 1 của tổng các khối 16 bit trong
phần đầu và phần số liệu TCP
• Urgent pointer: vị trí tương đối của byte trong trường số liệu TCP cần được
xử lý đầu tiên Giá trị của trường này đúng khi bit cờ URG=1
• Options: tuỳ chọn, khai báo các lựa chọn của TCP, như quy định về độ dài
lớn nhất MSS (Maximum Segment Size) của một gói tin TCP
• Pad: vá thêm vào phần tiêu đề để độ dài của nó là bội của 4, đảm bảo phần
header luôn kết thúc ở một mốc 32 bits Phần thêm này toàn số 0
• Data: số liệu của ứng dụng TCP
Trang 292.2.3 Thiết lập và kết thúc kết nối TCP
2.2.3.1 Thiết lập kết nối
Việc thiết lập kết nối dựa trên phương thức bắt tay 3 bước như sau: Tiến trình trạm làm việc yêu cầu thiết lập một kết nối TCP bằng cách gửi một gói tin TCP với cờ SYN=1, gọi tắt là điều khiển SYN và giá trị khởi tạo số tuần tự ISN của mình Giá trị ISN là một số 4 byte không dấu và được tăng mỗi khi có một kết nối được yêu cầu (giá trị này quay về 0 khi đạt tới 232) Trong gói điều khiển 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 làm việc muốn kết nối Mỗi thực thể kết nối TCP đều có một giá trị ISN mới Số này được tăng theo thời gian
• Vì một kết nối TCP có cùng một số hiệu cổng và cùng một địa chỉ TCP được dùng lại nhiều lần, do đó việc thay đổi ISN ngăn không cho các kết nối dùng lại các số liệu cũ, vẫn còn đựoc truyền từ một kết nối cũ và có cùng 1 địa chỉ kết nối (bước 1)
• Sau khi nhận được gói điều khiển SYN ở trạng thái sẵn sàng chấp nhận kết nối, thực thể TCP của phần mềm dịch vụ gửi lại gói SYN với giá trị ISN của mình và đặt bít cờ ACK=1, để thông 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 2)
• Tiến trình trạm phúc đáp lại gói SYN của thực thể dịch vụ bằng 1 thông báo trả lời ACK cuối cùng, khẳng định đã nhận được giá trị ISN của thực thể phần mềm dịch vụ (bước 3)
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à sẵn sàng trao đổi số liệu.
Chú ý rằng: không có gói điều khiển SYN nào trong 3 bước trên chứa số liệu của thực thể ứng dụng; tất cả các số liệu điều khiển được trao đổi đều nằm trong phần tiêu đề của gói điều khiển TCP(bước 3).
2.2.3.2 Kết thúc kết nối
Khi có nhu cầu kết thúc kết nối, thực thể TCP (thực thể A) gửi yêu cầu kết thúc kết nối với cờ FIN=1 Vì kết nối TCP là song công nên mặc dù nhận được yêu cầu kết thúc kết nối của A (A thông báo hết số liệu để gửi), thực thể B vẫn có thể tiếp tục truyền số liệu 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 kết nối với cờ FIN=1 của mình
Trang 30Khi thực thể TCP nhận được thông điệp FIN, sau khi đã gửi thông điệp FIN của chính mình, kết nối TCP thực sự được kết thúc.
TCP hiện nay dung nạp nhiều loại mạng vật lý cơ sở khác nhau bằng việc cung cấp nhiều độ trễ khác nhau, nhiều loại băng thông cũng như tỷ lệ gói tin bị mất Nó xử
lý mỗi kết nối độc lập, cho phép nhiều kết nối từ một máy đến máy khác di chuyển theo con đường có đặc tính cơ sở khác nhau Quan trọng hơn, TCP có thể hiệu chỉnh đối với những thay đổi của thời gian khứ hồi RTT (Round Trip Time) của một kết nối nên làm cho nó đáng tin cậy ngay cả khi hệ thống chuyển mạch gói cơ sở bị nghẽn mạch hoặc tạm thời bị hỏng
Việc truyền lại với khả năng hiệu chỉnh chính là trọng tâm của TCP và đóng góp vào sự thành công của nó Việc truyền lại với khả năng hiệu chỉnh sử dụng cách hoạt động vừa qua để dự đoán cách hoạt động trong tương lai Nó đòi hỏi TCP tính toán thời gian khứ hồi cho mỗi lần truyền và sử dụng các kỹ thuật thống kê để kết hợp các số liệu riêng lẻ thành một ước lượng đủ đúng của thời gian khứ hồi, hơn nữa TCP liên tục cập nhật ước lượng về thời gian khứ hồi của nó
Đặc thù phát triển của các mạng diện rộng ngày nay là phát triển trên nền tích hợp của nhiều công nghệ và phương tiện khác nhau Một hệ thống như vậy mang đặc trưng của một hệ thống không đối xứng, sự chênh lệch giữa các kênh truyền ảnh hưởng không nhỏ đến tốc độ chung của hệ thống
Mạng diện rộng là hệ thống liên mạng với giao thức trao đổi dữ liệu cơ bản là TCP, trong đó băng thông cho mỗi kênh trao dổi dữ liệu chênh lệch nhau đáng kể Việc nghiên cứu hiệu suất mạng gắn liền với việc điều khiển các gói xác nhận ACK đóng vai trò quan trọng trong sự phát triển các giao thức mới
Trong các hệ thống mạng, điều khiển lưu lượng và điều khiển tắc nghẽn là hai quá trình có quan hệ mật thiết với nhau
Tắc nghẽn là nguyên nhân, là lý do điều khiển lưu lượng Sự tắc nghẽn xảy ra khi dữ liệu nhận được vượt quá khả năng xử lý của một nút mạng Trong các hệ thống mạng diện rộng sự tắc nghẽn làm giảm hiệu suất, tăng thời gian truyền và xử lý, điều này đôi khi dẫn đến nghẽn mạch toàn bộ hệ thống Điều đó có thể do một số nguyên nhân sau:
• Thiết bị mạng không đáp ứng được nhu cầu xử lý số liệu (ví dụ: bộ đệm quá nhỏ…)
Trang 31• Tần suất dữ liệu đầu vào quá lớn so với tần suất dữ liệu đầu ra
• Thời gian chờ xử lý, xếp hàng…quá lớn
• Tần suất lỗi mạng cao
Vấn đề là khi một trong các điều kiện trên xảy ra nó có thể kéo theo các điều kiện còn lại Để giải quyết vấn đề này trong các hệ thống mạng người ta phải đưa vào các thủ tục điều khiển tắc nghẽn
2.2 Sự kiện tắc nghẽn đầu tiên trên Internet và đề xuất của Jacobson về nguyên lý “bảo toàn gói tin”
2.2.1 Sự kiện tắc nghẽn đầu tiên trên Internet
Các mạng máy tính đã trải qua một sự bùng nổ lớn trong những năm qua và trong sự phát triển đã có một số sự kiện tắc nghẽn xảy ra Ví dụ, người ta thống kê được một việc phổ biến là các cổng (gateway) Internet làm mất tới 10% các gói tin đến
vì bị tràn bộ đệm cục bộ (local buffer).Tháng mười năm 1986, trên mạng Internet xảy
ra hiện tượng tắc nghẽn đầu tiên Trong suốt thời kỳ này, thông lượng thực tế của dữ liệu từ mạng của phòng thí nghiệm LBL đến trường đại học UC ở berkeley (đó là hai nơi riêng biệt, cách nhau khoảng 360 m, giữa chúng có 2 router) bị giảm từ 32kbps xuống 40bps
Người ta đã tập trung tìm hiểu nguyên nhân dẫn đến hiện tượng này và đã tìm
ra, đồng thời đề xuất các biện pháp khắc phục, đó là tuân theo nguyên lý bảo toàn số lượng gói tin trong mạng