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
64 trang |
Chia sẻ: tuandn | Lượt xem: 2884 | Lượt tải: 4
Bạn đang xem trước 20 trang tài liệu Khóa luận Điều khiển lưu lượng trong giao thức TCP, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
MỞ ĐẦ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 cơ 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/2006
Nguyễn Thị Hạt
Chươ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.
1.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, truyề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 mạ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 dữ 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.
Hì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.
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.
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 cá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
1.3.1. Hiện tượng tắc nghẽn
Trong mạng máy tính, tắc nghẽn xảy ra khi số lượng gói số liệu đến nút mạng vượt quá khả năng xử lý của nó hoặc vượt quá khả năng vận tải của các đường truyền đi ra, điều đó dẫn đến việc thông lượng của mạng bị giảm đi khi lưu lượng đến mạng tă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 nó (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 n