Điều khiển luồng (flow control) là quá trình xác định cách thức các tài nguyên trên mạng (kết nối, bộ đệm tại các nút mạng…) được phân phối cho các gói tin sử dụng trong quá trình truyền tin. Điều khiển luồng tốt là cách thức phân phối tài nguyên một cách có hiệu quả qua đó truyền tin với độ trễ nhỏ xác định trước.
Ví dụ, hai gói tin đến từ hai cổng khác nhau tại một bộ chuyến tiếp tại cùng một thời điểm. Dựa trên giải thuật định tuyến, hai gòi tin này cần được chuyển tiếp đến cùng một cổng ra. Trong trường hợp này, điều khiển luồng là cơ chế giải quyết sự xung đột về yêu cầu sử dụng tài nguyên. Một phương pháp đơn giản đó là chọn một gói tin ngẫu nhiên để chuyển tiếp và loại bỏ gói tin còn lại (gói tin này sẽ được gửi lại sau). Đây là cơ chế đơn giản nhất trong điều khiển luồng khi không lưu trữ gói tin tại các bộ chuyên tiếp (bufferless flow-control).
Một cơ chế điều khiển luồn khác phức tạp hơn và hiệu quả hơn gọi là chuyển mạch (circuit switching). Trong đó, nút nguồn sẽ gửi gói tin thăm dò đến nút đích. Gói tin thăm dò chỉ bao gồm thông tin truyền tin cơ bản (ví dụ nút nguồn, nút đích) mà không bao gồm dữ liệu. Gói tin thăm dò có tác dụng đăng kí sử dụng tài nguyên tại các nút mạng mà nó đi qua. Khi nút địch nhận được gói tin thăm dò này sẽ gửi trả một gói tin gọi là ACK xác nhận. Nút nguồn sẽ bắt đầu truyền dữ liệu theo con đường được thiết lập bởi gói tin thăm dò trước đó sau khi nhận được ACK. Các tài nguyên trên được gói tin này sử dụng chỉ được giải phóng khi toàn bộ dữ liệu đến với nút đích. Trong trường hợp một gói tin thăm dò không được cấp phát tài nguyên ngay lập tức tại một nút mạng, nó sẽ được lưu trữ lại trong hàng đợi (do kích thước gói tin thăm dò nhỏ) cho đến khi tài nguyên được giải phóng. Với cách điều khiển luồng này, độ trễ truyền tin đôi khi rất lớn khi một gói tin cần phải đợi tài nguyên được giải phóng tại nút mạng được nhiều gói tin truyền qua (nút thắt cổ chai).
Do đó, một phương pháp điều khiển luồng khác hiệu quả hơn được để ra gọi là ―chuyển mạch gói‖ (packet switching). Trong phương pháp này, dữ liệu được chia
thành các thành phần nhỏ hơn có độ dài bằng nhau gọi là packet. Một vài bytes đầu của packet chứa thông tin định tuyến và điều khiển gọi là packet header. Trong quá trình truyền tin, nếu xảy ra tranh chấp tài nguyên, các packet này sẽ được lưu trữ lại tại nút mạng đó và chờ cho đến khi tài nguyên được giải phóng. Do vậy, chuyển mạch gói còn được gọi là store-and-forward switching. Với cơ chế này, các phần nhỏ của toàn bộ dữ liệu được truyền trong mạng theo các đường khác nhau nhằm tận dụng các tài nguyên rảnh rỗi. Ngoài ra quá trình chờ đợi để giải phóng tài nguyên cũng ngắn hơn do kích thước của các packet là nhỏ hơn rất nhiều so với kích thước dữ liệu cần truyền.
Trong quá trình chuyển mạch gói, quá trình định tuyến được thực hiện khi toàn bộ packet được truyền tới và lưu trữ tại nút trung gian. Tuy nhiên, trong thực tế, packet header truyền đến nút mạng này trước khi toàn bộ phần dữ liệu mà packet ấy chứa truyền tới. Nhằm giảm độ trễ truyền tin, và giảm thời gian sử dụng tại nguyên của một packet, quá trình định tuyến và chuyển tiếp packet header có thể được thực hiện ngay khi tài nguyên yêu cầu sử dụng được rảnh rỗi mà không cần phải chờ đợi toàn bộ packet đến được nút trung gian. Với phương pháp điều khiển luồng này, một packet sử dụng cùng lúc cổng ra (output port) tai một nút trung gian và cổng vào (input port) tại nút mạng tiếp theo. Do đó, phương pháp này được gọi là virtual cut-though switching.
Lưu trữ các packet có kích thước lên đến hàng chục bytes gây khó khăn cho việc chế tạo các bộ chuyển tiếp (hay bộ chuyển mạch) có kích thước nhỏ, giá thành rẻ. Bên cạnh đó, quá trình chờ đợi các packet đuợc truyền tin cũng góp phần tạo độ trễ truyền tin. Nhằm khắc phục các yếu điểm này, Wormhole switching đã ra được đề xuất. Trong phương pháp này, các packets đuợc chia nhỏ thành các đơn vị truyền tin (flits). Kích thước bộ đệm tại các cổng ra và cổng vào tại một nút mạng đủ lớn để chứa một vài flits. Ví dụ một flits có thể có kích thước cỡ 16 bits. Nhờ đó, yêu cầu về kích thước bộ đệm trong các bộ định tuyến giảm đi đáng kể. Trong trường hợp một packet phải đợi tài nguyên được giải phóng, packet trong Wormhole Switching bị chặn lại tại nhiều bộ chuyển tiếp thay vì một bộ chuyển tiếp duy nhất như ở Virtual Cut-through
switching. Hình 6 (nguồn [10]) minh họa quá trường hợp này. Trong đó, gói tin B đang chiếm tài bộ đệm của một cổng ra tại nút mạng R3. Packet header của gói tin A truyền tới R3 phải đợi bộ đệm ở cổng ra được giải phóng. Trong khi các thành phần dữ liệu của gói tin A được lưu trữ trong bộ đệm tại nút mạng R1 và R2 thay vì được lưu trữ toàn bộ tại R3. Lưu ý rằng các bộ đệm trong ví dụ này chỉ có kích thước rất nhỏ 2 flits (cỡ 32 bits).
Hình 6: Ví dụ về tắc nghẽn của Wormhole switching