diff --git a/docker-compose/Makefile b/docker-compose/Makefile
index 87101b3e33fd64de37ce574b85f3484a2d2b518a..e63814ef5b520ef44514b1386e9af26b509389dc 100644
--- a/docker-compose/Makefile
+++ b/docker-compose/Makefile
@@ -124,13 +124,15 @@ down:  ## stop all services and tear down the system
 	$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) down
 ifneq ($(NETWORK_MODE),host)
 	docker network inspect $(NETWORK_MODE) &> /dev/null && ([ $$? -eq 0 ] && docker network rm $(NETWORK_MODE)) || true
+    docker network inspect 9000-$(NETWORK_MODE) &> /dev/null && ([ $$? -eq 0 ] && docker network rm 9000-$(NETWORK_MODE)) || true
 endif
 
 minimal: ## start the base TANGO system
 ifneq ($(NETWORK_MODE),host)
 	docker network inspect $(NETWORK_MODE) &> /dev/null || ([ $$? -ne 0 ] && docker network create $(NETWORK_MODE))
+    docker network inspect 9000-$(NETWORK_MODE) &> /dev/null || ([ $$? -ne 0 ] && docker network create 9000-$(NETWORK_MODE) -o com.docker.network.driver.mtu=9000)
 endif
-	$(DOCKER_COMPOSE_ARGS) docker-compose -f tango.yml up -d
+	$(DOCKER_COMPOSE_ARGS) docker-compose -f tango.yml -f networks.yml up -d
 
 start: up ## start a service (usage: make start <servicename>)
 	if [ $(UNAME_S) = Linux ]; then chmod a+r ~/.Xauthority; fi
diff --git a/docker-compose/archiver.yml b/docker-compose/archiver.yml
index 7aa1c13362c15d5d2a44185e9a6f2e6289a2c056..08d90a113d590a2ebb0e89206cb615048473556f 100644
--- a/docker-compose/archiver.yml
+++ b/docker-compose/archiver.yml
@@ -4,7 +4,8 @@ services:
   archiver-maria-db:
     image: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/mariadb_hdbpp:2021-05-28
     container_name: archiver-maria-db
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     depends_on:
       - databaseds
     environment:
@@ -18,7 +19,8 @@ services:
 
   hdbpp-es:
       image: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-archiver:2021-05-28
-      network_mode: ${NETWORK_MODE}
+      networks:
+      - control
       container_name: hdbpp-es
       depends_on:
         - databaseds
@@ -35,7 +37,8 @@ services:
 
   hdbpp-cm:
       image: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-archiver:2021-05-28
-      network_mode: ${NETWORK_MODE}
+      networks:
+      - control
       container_name: hdbpp-cm
       depends_on:
         - databaseds
@@ -53,7 +56,8 @@ services:
   dsconfig:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-dsconfig:1.5.0.6
     container_name: dsconfig
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     depends_on:
       - databaseds
     environment:
diff --git a/docker-compose/astor.yml b/docker-compose/astor.yml
index 747a39c5fef9958cfe9d80fc2afafd25478c09f5..1d86575d48f8a5fdbe1506a1cf7885941181f608 100644
--- a/docker-compose/astor.yml
+++ b/docker-compose/astor.yml
@@ -15,7 +15,8 @@ services:
   astor:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-java:9.3.3.2
     container_name: ${CONTAINER_NAME_PREFIX}astor
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
       - ${XAUTHORITY_MOUNT}
     environment:
@@ -33,7 +34,8 @@ services:
   starter-example:
     image: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-starter:2021-05-28
     container_name: ${CONTAINER_NAME_PREFIX}starter-example
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     # set the hostname, otherwise duplicate device registrations result every
     # time the hostname changes as the container is restarted.
     hostname: starter-example
diff --git a/docker-compose/device-pcc.yml b/docker-compose/device-pcc.yml
index 47f2c9b22089e1162e9ca10737ea11aa27a4b32c..5439161cd0797b7f3e014802cb7620ba7c8dcdfb 100644
--- a/docker-compose/device-pcc.yml
+++ b/docker-compose/device-pcc.yml
@@ -22,7 +22,8 @@ services:
         args:
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:9.3.3.7
     container_name: ${CONTAINER_NAME_PREFIX}device-pcc
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
         - ${TANGO_LOFAR_CONTAINER_MOUNT}
     environment:
diff --git a/docker-compose/device-sdp.yml b/docker-compose/device-sdp.yml
index 13288630491032d2cb7f550177dc421c210561b3..5a83a701fd3750a674aea09d110bd6dff58d38d6 100644
--- a/docker-compose/device-sdp.yml
+++ b/docker-compose/device-sdp.yml
@@ -22,7 +22,8 @@ services:
         args:
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:9.3.3.7
     container_name: ${CONTAINER_NAME_PREFIX}device-sdp
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
         - ${TANGO_LOFAR_CONTAINER_MOUNT}
     environment:
diff --git a/docker-compose/device-statistics.yml b/docker-compose/device-statistics.yml
index c2d450dbdfd97ac450d82dbef27b13d8ffadb393..c3b9d9ff48e81a4694d4f8b7e729a814b923af02 100644
--- a/docker-compose/device-statistics.yml
+++ b/docker-compose/device-statistics.yml
@@ -22,7 +22,9 @@ services:
         args:
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:9.3.3.7
     container_name: ${CONTAINER_NAME_PREFIX}device-statistics
-    network_mode: ${NETWORK_MODE}
+    networks:
+        - control
+        - data
     volumes:
         - ${TANGO_LOFAR_CONTAINER_MOUNT}
     environment:
diff --git a/docker-compose/elk.yml b/docker-compose/elk.yml
index 50060566f3824203c4b91e0332f853861ef6c7a4..cce66839b499caa0b8948eaeb0c5cc65176be2c9 100644
--- a/docker-compose/elk.yml
+++ b/docker-compose/elk.yml
@@ -17,7 +17,8 @@ services:
     build:
         context: elk-configure-host
     container_name: ${CONTAINER_NAME_PREFIX}elk-configure-host
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     privileged: true
 
   elk:
@@ -25,7 +26,8 @@ services:
     build:
         context: elk
     container_name: ${CONTAINER_NAME_PREFIX}elk
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
       - elk-data:/var/lib/elasticsearch
     ports:
diff --git a/docker-compose/hdbpp_viewer.yml b/docker-compose/hdbpp_viewer.yml
index c3d10c3ff48df27a3f15bf483743e6d601ce869e..c7a54f7e6b027e96ebae55d0863981fe85541b54 100644
--- a/docker-compose/hdbpp_viewer.yml
+++ b/docker-compose/hdbpp_viewer.yml
@@ -12,7 +12,8 @@ services:
   hdbpp-viewer:
     image: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/hdbpp_viewer:2021-05-28
     container_name: ${CONTAINER_NAME_PREFIX}hdbpp-viewer
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     depends_on:
       - databaseds
       - dsconfig
diff --git a/docker-compose/itango.yml b/docker-compose/itango.yml
index 4af318480763a80170aa7926d477ddda597c5125..cd5283f234606276d9b54e4f4348d306e25597b7 100644
--- a/docker-compose/itango.yml
+++ b/docker-compose/itango.yml
@@ -19,7 +19,8 @@ services:
         args:
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:9.3.3.7
     container_name: ${CONTAINER_NAME_PREFIX}itango
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
         - ${TANGO_LOFAR_CONTAINER_MOUNT}
         - ${HOME}:/hosthome
diff --git a/docker-compose/jupyter.yml b/docker-compose/jupyter.yml
index 9c4c8053c7d397733a0ba73402eb3ec54b98a9b2..cbd2ab9ce968c0d0e7c512b8467310b02b9dd053 100644
--- a/docker-compose/jupyter.yml
+++ b/docker-compose/jupyter.yml
@@ -17,7 +17,8 @@ services:
             CONTAINER_EXECUTION_UID: ${CONTAINER_EXECUTION_UID}
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:9.3.3.7
     container_name: ${CONTAINER_NAME_PREFIX}jupyter
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
         - ${TANGO_LOFAR_CONTAINER_MOUNT}
         - ${TANGO_LOFAR_LOCAL_DIR}/jupyter-notebooks:/jupyter-notebooks:rw
diff --git a/docker-compose/lofar-device-base.yml b/docker-compose/lofar-device-base.yml
index 18c8ef36bb028be8bcb92c5fc7e17dd045d36857..2a2cdc4dde93fcc8045361600621fab0ea5bd9f3 100644
--- a/docker-compose/lofar-device-base.yml
+++ b/docker-compose/lofar-device-base.yml
@@ -20,4 +20,5 @@ services:
         args:
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:9.3.3.7
     container_name: ${CONTAINER_NAME_PREFIX}lofar-device-base
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
diff --git a/docker-compose/logviewer.yml b/docker-compose/logviewer.yml
index 0959d8b944c31d1b2ad9cf537037f51d31fe410e..cea36402729fd9157e8c5e572ebca44a602aa6a0 100644
--- a/docker-compose/logviewer.yml
+++ b/docker-compose/logviewer.yml
@@ -14,7 +14,8 @@ services:
   logviewer:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-java:9.3.3.2
     container_name: ${CONTAINER_NAME_PREFIX}logviewer
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
       - ${XAUTHORITY_MOUNT}
     environment:
diff --git a/docker-compose/networks.yml b/docker-compose/networks.yml
new file mode 100644
index 0000000000000000000000000000000000000000..bdacc3005a15a91a5120790e4ac288dacd54030a
--- /dev/null
+++ b/docker-compose/networks.yml
@@ -0,0 +1,24 @@
+#
+# Docker compose file that describes our docker networks.
+#
+version: '3.5'
+
+networks:
+
+  # Control network, with MTU=1500. Our default network.
+  control:
+    name: ${NETWORK_MODE}
+    # The networks are created and destroyed in the Makefile.
+    external: true
+
+  # Data network, with MTU=9000, to receive the Jumbo frames from SDP
+  data:
+    # This name needs to be alphabetically before the control network.
+    #
+    # As we add the data-receiving devices to both control and data
+    # network, we need to make sure the UDP data are forwarded to
+    # the data network, not the control network. The way Docker decides
+    # which network to actually expose ports on is by chosing the
+    # first one in alphabetical order.
+    name: 9000-${NETWORK_MODE}
+    external: true
diff --git a/docker-compose/pogo.yml b/docker-compose/pogo.yml
index 85bf0ef3d9bcbf962f501d4bbca22227820e42aa..6f87f640a2977b53a4b5ed27d98c2cfd5ccca68a 100644
--- a/docker-compose/pogo.yml
+++ b/docker-compose/pogo.yml
@@ -22,7 +22,8 @@ services:
   pogo:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-pogo:9.6.31.2
     container_name: ${CONTAINER_NAME_PREFIX}pogo
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
       - pogo:/home/tango
       - ${XAUTHORITY_MOUNT}
diff --git a/docker-compose/pypcc-sim.yml b/docker-compose/pypcc-sim.yml
index d1c47c0465affd6b7bcb2de27dfa340c48e681ce..15739d3f4dcfada169a4bb6f9ee568da612d2259 100644
--- a/docker-compose/pypcc-sim.yml
+++ b/docker-compose/pypcc-sim.yml
@@ -11,7 +11,8 @@ services:
     build:
         context: pypcc-sim
     container_name: ${CONTAINER_NAME_PREFIX}pypcc-sim
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
         - ${HOME}:/hosthome
     ports:
diff --git a/docker-compose/rest.yml b/docker-compose/rest.yml
index 4019b9fddb4f8801db6922c9afa559d1e581e2ee..f5bfbd329d6223f578c6bd5ea1b255a69527b64c 100644
--- a/docker-compose/rest.yml
+++ b/docker-compose/rest.yml
@@ -15,7 +15,8 @@ services:
   rest:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-rest:1.14.1.2
     container_name: ${CONTAINER_NAME_PREFIX}tango-rest
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     # set the hostname, otherwise duplicate device registrations result every
     # time the hostname changes as the container is restarted.
     hostname: tango-rest
diff --git a/docker-compose/sdptr-sim.yml b/docker-compose/sdptr-sim.yml
index 677433019a9e7031ed55fb7e1f94591457a6d74a..70c1edf63acdf84df8a7d294aa17ea9489c9b9a7 100644
--- a/docker-compose/sdptr-sim.yml
+++ b/docker-compose/sdptr-sim.yml
@@ -11,7 +11,8 @@ services:
     build:
         context: sdptr-sim
     container_name: ${CONTAINER_NAME_PREFIX}sdptr-sim
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     ports:
         - "4840:4840"
     restart: on-failure
diff --git a/docker-compose/tango.yml b/docker-compose/tango.yml
index 2e2494ff9ff08e326ac0b68a449dd70ae2811a86..0cde93b0c9b6690d48f427d5b31afa399b150022 100644
--- a/docker-compose/tango.yml
+++ b/docker-compose/tango.yml
@@ -17,7 +17,8 @@ services:
   tangodb:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-db:10.4.10
     container_name: ${CONTAINER_NAME_PREFIX}tangodb
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     environment:
       - MYSQL_ROOT_PASSWORD=secret
       - MYSQL_DATABASE=tango
@@ -32,7 +33,8 @@ services:
   databaseds:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-cpp:9.3.4.2
     container_name: ${CONTAINER_NAME_PREFIX}databaseds
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     ports:
       - "10000:10000"
     depends_on:
diff --git a/docker-compose/tangotest.yml b/docker-compose/tangotest.yml
index 707b1cb7ce182792974df28f1fdbff5fab4702a7..30e0575026f3f203e6da739c9538432efad99ce3 100644
--- a/docker-compose/tangotest.yml
+++ b/docker-compose/tangotest.yml
@@ -13,7 +13,8 @@ services:
   tangotest:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-java:9.3.3.2
     container_name: ${CONTAINER_NAME_PREFIX}tangotest
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     environment:
       - TANGO_HOST=${TANGO_HOST}
     entrypoint: