diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart
index 5aea8b3..1e6b0f3 100644
--- a/packages/flutter_tools/lib/src/android/android_device.dart
+++ b/packages/flutter_tools/lib/src/android/android_device.dart
@@ -549,8 +549,7 @@
       observatoryDiscovery = ProtocolDiscovery.observatory(
         getLogReader(),
         portForwarder: portForwarder,
-        hostPort: debuggingOptions.hostVmServicePort,
-        devicePort: debuggingOptions.deviceVmServicePort,
+        hostPort: debuggingOptions.observatoryPort,
         ipv6: ipv6,
       );
     }
diff --git a/packages/flutter_tools/lib/src/commands/attach.dart b/packages/flutter_tools/lib/src/commands/attach.dart
index ee6a0e0..b9f35b5 100644
--- a/packages/flutter_tools/lib/src/commands/attach.dart
+++ b/packages/flutter_tools/lib/src/commands/attach.dart
@@ -232,8 +232,7 @@
         observatoryUri = await MDnsObservatoryDiscovery.instance.getObservatoryUri(
           appId,
           device,
-          usesIpv6: usesIpv6,
-          deviceVmservicePort: deviceVmservicePort,
+          usesIpv6,
         );
       }
       // If MDNS discovery fails or we're not on iOS, fallback to ProtocolDiscovery.
@@ -243,9 +242,6 @@
           observatoryDiscovery = ProtocolDiscovery.observatory(
             device.getLogReader(),
             portForwarder: device.portForwarder,
-            ipv6: ipv6,
-            devicePort: deviceVmservicePort,
-            hostPort: hostVmservicePort,
           );
           printStatus('Waiting for a connection from Flutter on ${device.name}...');
           observatoryUri = await observatoryDiscovery.uri;
@@ -263,7 +259,7 @@
         device,
         debugUri?.host ?? hostname,
         devicePort ?? debugUri.port,
-        hostVmservicePort,
+        observatoryPort,
         debugUri?.path,
       );
     }
diff --git a/packages/flutter_tools/lib/src/commands/drive.dart b/packages/flutter_tools/lib/src/commands/drive.dart
index 680a817..4d89864 100644
--- a/packages/flutter_tools/lib/src/commands/drive.dart
+++ b/packages/flutter_tools/lib/src/commands/drive.dart
@@ -273,7 +273,7 @@
     debuggingOptions: DebuggingOptions.enabled(
       command.getBuildInfo(),
       startPaused: true,
-      hostVmServicePort: command.hostVmservicePort,
+      observatoryPort: command.observatoryPort,
       verboseSystemLogs: command.verboseSystemLogs,
       cacheSkSL: command.cacheSkSL,
       dumpSkpOnShaderCompilation: command.dumpSkpOnShaderCompilation,
diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart
index e87b586..6f10357 100644
--- a/packages/flutter_tools/lib/src/commands/run.dart
+++ b/packages/flutter_tools/lib/src/commands/run.dart
@@ -315,8 +315,7 @@
         traceSystrace: argResults['trace-systrace'],
         dumpSkpOnShaderCompilation: dumpSkpOnShaderCompilation,
         cacheSkSL: cacheSkSL,
-        deviceVmServicePort: deviceVmservicePort,
-        hostVmServicePort: hostVmservicePort,
+        observatoryPort: observatoryPort,
         verboseSystemLogs: argResults['verbose-system-logs'],
         initializePlatform: argResults['web-initialize-platform'],
         hostname: featureFlags.isWebEnabled ? argResults['web-hostname'] : '',
diff --git a/packages/flutter_tools/lib/src/desktop_device.dart b/packages/flutter_tools/lib/src/desktop_device.dart
index f577989..341aa1d 100644
--- a/packages/flutter_tools/lib/src/desktop_device.dart
+++ b/packages/flutter_tools/lib/src/desktop_device.dart
@@ -109,11 +109,7 @@
       return LaunchResult.succeeded();
     }
     _deviceLogReader.initializeProcess(process);
-    final ProtocolDiscovery observatoryDiscovery = ProtocolDiscovery.observatory(_deviceLogReader,
-      devicePort: debuggingOptions?.deviceVmServicePort,
-      hostPort: debuggingOptions?.hostVmServicePort,
-      ipv6: ipv6,
-    );
+    final ProtocolDiscovery observatoryDiscovery = ProtocolDiscovery.observatory(_deviceLogReader);
     try {
       final Uri observatoryUri = await observatoryDiscovery.uri;
       onAttached(package, buildMode, process);
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart
index 6fe8a06..adb04a3 100644
--- a/packages/flutter_tools/lib/src/device.dart
+++ b/packages/flutter_tools/lib/src/device.dart
@@ -502,8 +502,7 @@
     this.cacheSkSL = false,
     this.useTestFonts = false,
     this.verboseSystemLogs = false,
-    this.hostVmServicePort,
-    this.deviceVmServicePort,
+    this.observatoryPort,
     this.initializePlatform = true,
     this.hostname,
     this.port,
@@ -523,8 +522,7 @@
       traceSystrace = false,
       dumpSkpOnShaderCompilation = false,
       verboseSystemLogs = false,
-      hostVmServicePort = null,
-      deviceVmServicePort = null,
+      observatoryPort = null,
       browserLaunch = true,
       vmserviceOutFile = null;
 
@@ -544,15 +542,14 @@
   final bool verboseSystemLogs;
   /// Whether to invoke webOnlyInitializePlatform in Flutter for web.
   final bool initializePlatform;
-  final int hostVmServicePort;
-  final int deviceVmServicePort;
+  final int observatoryPort;
   final String port;
   final String hostname;
   final bool browserLaunch;
   /// A file where the vmservice uri should be written after the application is started.
   final String vmserviceOutFile;
 
-  bool get hasObservatoryPort => hostVmServicePort != null;
+  bool get hasObservatoryPort => observatoryPort != null;
 }
 
 class LaunchResult {
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index bb481a5..3fff840 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -356,8 +356,7 @@
         observatoryDiscovery = ProtocolDiscovery.observatory(
           getLogReader(app: package),
           portForwarder: portForwarder,
-          hostPort: debuggingOptions.hostVmServicePort,
-          devicePort: debuggingOptions.deviceVmServicePort,
+          hostPort: debuggingOptions.observatoryPort,
           ipv6: ipv6,
         );
       }
@@ -384,8 +383,8 @@
         localUri = await MDnsObservatoryDiscovery.instance.getObservatoryUri(
           packageId,
           this,
-          usesIpv6: ipv6,
-          hostVmservicePort: debuggingOptions.hostVmServicePort,
+          ipv6,
+          debuggingOptions.observatoryPort,
         );
         if (localUri != null) {
           UsageEvent('ios-mdns', 'success').send();
diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart
index 05847fe..5084d7e 100644
--- a/packages/flutter_tools/lib/src/ios/simulators.dart
+++ b/packages/flutter_tools/lib/src/ios/simulators.dart
@@ -374,18 +374,14 @@
         if (debuggingOptions.disableServiceAuthCodes) '--disable-service-auth-codes',
         if (debuggingOptions.skiaDeterministicRendering) '--skia-deterministic-rendering',
         if (debuggingOptions.useTestFonts) '--use-test-fonts',
-        '--observatory-port=${debuggingOptions.hostVmServicePort ?? 0}',
+        '--observatory-port=${debuggingOptions.observatoryPort ?? 0}',
       ],
     ];
 
     ProtocolDiscovery observatoryDiscovery;
     if (debuggingOptions.debuggingEnabled) {
       observatoryDiscovery = ProtocolDiscovery.observatory(
-        getLogReader(app: package),
-        ipv6: ipv6,
-        hostPort: debuggingOptions.hostVmServicePort,
-        devicePort: debuggingOptions.deviceVmServicePort,
-      );
+          getLogReader(app: package), ipv6: ipv6);
     }
 
     // Launch the updated application in the simulator.
diff --git a/packages/flutter_tools/lib/src/mdns_discovery.dart b/packages/flutter_tools/lib/src/mdns_discovery.dart
index d824fb3..6fc3bd4 100644
--- a/packages/flutter_tools/lib/src/mdns_discovery.dart
+++ b/packages/flutter_tools/lib/src/mdns_discovery.dart
@@ -50,8 +50,7 @@
   /// If it is null and there is only one available instance of Observatory,
   /// it will return that instance's information regardless of what application
   /// the Observatory instance is for.
-  // TODO(jonahwilliams): use `deviceVmservicePort` to filter mdns results.
-  Future<MDnsObservatoryDiscoveryResult> query({String applicationId, int deviceVmservicePort}) async {
+  Future<MDnsObservatoryDiscoveryResult> query({String applicationId}) async {
     printTrace('Checking for advertised Dart observatories...');
     try {
       await client.start();
@@ -137,27 +136,14 @@
     }
   }
 
-  Future<Uri> getObservatoryUri(String applicationId, Device device, {
-    bool usesIpv6 = false,
-    int hostVmservicePort,
-    int deviceVmservicePort,
-  }) async {
-    final MDnsObservatoryDiscoveryResult result = await query(
-      applicationId: applicationId,
-      deviceVmservicePort: deviceVmservicePort,
-    );
+  Future<Uri> getObservatoryUri(String applicationId, Device device, [bool usesIpv6 = false, int observatoryPort]) async {
+    final MDnsObservatoryDiscoveryResult result = await query(applicationId: applicationId);
     Uri observatoryUri;
     if (result != null) {
       final String host = usesIpv6
         ? InternetAddress.loopbackIPv6.address
         : InternetAddress.loopbackIPv4.address;
-      observatoryUri = await buildObservatoryUri(
-        device,
-        host,
-        result.port,
-        hostVmservicePort,
-        result.authCode,
-      );
+      observatoryUri = await buildObservatoryUri(device, host, result.port, observatoryPort, result.authCode);
     }
     return observatoryUri;
   }
@@ -173,7 +159,7 @@
   Device device,
   String host,
   int devicePort, [
-  int hostVmservicePort,
+  int observatoryPort,
   String authCode,
 ]) async {
   String path = '/';
@@ -185,6 +171,7 @@
   if (!path.endsWith('/')) {
     path += '/';
   }
-  final int actualHostPort = await device.portForwarder.forward(devicePort, hostPort: hostVmservicePort);
-  return Uri(scheme: 'http', host: host, port: actualHostPort, path: path);
+  final int localPort = observatoryPort
+      ?? await device.portForwarder.forward(devicePort);
+  return Uri(scheme: 'http', host: host, port: localPort, path: path);
 }
diff --git a/packages/flutter_tools/lib/src/protocol_discovery.dart b/packages/flutter_tools/lib/src/protocol_discovery.dart
index 803c957..33768ed 100644
--- a/packages/flutter_tools/lib/src/protocol_discovery.dart
+++ b/packages/flutter_tools/lib/src/protocol_discovery.dart
@@ -4,8 +4,6 @@
 
 import 'dart:async';
 
-import 'package:meta/meta.dart';
-
 import 'base/io.dart';
 import 'device.dart';
 import 'globals.dart';
@@ -18,7 +16,6 @@
     this.serviceName, {
     this.portForwarder,
     this.hostPort,
-    this.devicePort,
     this.ipv6,
   }) : assert(logReader != null) {
     _deviceLogSubscription = logReader.logLines.listen(_handleLine);
@@ -27,9 +24,8 @@
   factory ProtocolDiscovery.observatory(
     DeviceLogReader logReader, {
     DevicePortForwarder portForwarder,
-    @required int hostPort,
-    @required int devicePort,
-    @required bool ipv6,
+    int hostPort,
+    bool ipv6 = false,
   }) {
     const String kObservatoryService = 'Observatory';
     return ProtocolDiscovery._(
@@ -37,7 +33,6 @@
       kObservatoryService,
       portForwarder: portForwarder,
       hostPort: hostPort,
-      devicePort: devicePort,
       ipv6: ipv6,
     );
   }
@@ -46,7 +41,6 @@
   final String serviceName;
   final DevicePortForwarder portForwarder;
   final int hostPort;
-  final int devicePort;
   final bool ipv6;
 
   final Completer<Uri> _completer = Completer<Uri>();
@@ -77,22 +71,17 @@
     if (match != null) {
       try {
         uri = Uri.parse(match[1]);
-      } on FormatException catch (error, stackTrace) {
+      } catch (error, stackTrace) {
         _stopScrapingLogs();
         _completer.completeError(error, stackTrace);
       }
     }
-    if (uri == null) {
-      return;
-    }
-    if (devicePort != null  &&  uri.port != devicePort) {
-      printTrace('skipping potential observatory $uri due to device port mismatch');
-      return;
-    }
 
-    assert(!_completer.isCompleted);
-    _stopScrapingLogs();
-    _completer.complete(uri);
+    if (uri != null) {
+      assert(!_completer.isCompleted);
+      _stopScrapingLogs();
+      _completer.complete(uri);
+    }
   }
 
   Future<Uri> _forwardPort(Uri deviceUri) async {
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart
index 4f4c3e2..81ec070 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart
@@ -216,60 +216,23 @@
   /// Adds options for connecting to the Dart VM observatory port.
   void usesPortOptions() {
     argParser.addOption(observatoryPortOption,
-        help: '(deprecated use host-vmservice-port instead)'
-              'Listen to the given port for an observatory debugger connection.\n'
+        help: 'Listen to the given port for an observatory debugger connection.\n'
               'Specifying port 0 (the default) will find a random free port.',
     );
-    argParser.addOption('device-vmservice-port',
-      help: 'Look for vmservice connections only from the specified port.\n'
-            'Specifying port 0 (the default) will accept the first vmservice '
-            'discovered.',
-    );
-    argParser.addOption('host-vmservice-port',
-      help: 'When a device-side vmservice port is forwarded to a host-side '
-            'port, use this value as the host port.\nSpecifying port 0 '
-            '(the default) will find a random free host port.'
-    );
     _usesPortOption = true;
   }
 
-  /// Gets the vmservice port provided to in the 'observatory-port' or
-  /// 'host-vmservice-port option.
-  ///
-  /// Only one of "host-vmservice-port" and "observatory-port" may be
-  /// specified.
+  /// Gets the observatory port provided to in the 'observatory-port' option.
   ///
   /// If no port is set, returns null.
-  int get hostVmservicePort {
-    if (!_usesPortOption ||
-        argResults['observatory-port'] == null ||
-        argResults['host-vmservice-port'] == null) {
-      return null;
-    }
-    if (argResults.wasParsed('observatory-port') &&
-        argResults.wasParsed('host-vmservice-port')) {
-      throwToolExit('Only one of "--observatory-port" and '
-        '"--host-vmservice-port" may be specified.');
-    }
-    try {
-      return int.parse(argResults['observatory-port'] ?? argResults['host-vmservice-port']);
-    } on FormatException catch (error) {
-      throwToolExit('Invalid port for `--observatory-port/--host-vmservice-port`: $error');
-    }
-    return null;
-  }
-
-  /// Gets the vmservice port provided to in the 'device-vmservice-port' option.
-  ///
-  /// If no port is set, returns null.
-  int get deviceVmservicePort {
-    if (!_usesPortOption || argResults['device-vmservice-port'] == null) {
+  int get observatoryPort {
+    if (!_usesPortOption || argResults['observatory-port'] == null) {
       return null;
     }
     try {
-      return int.parse(argResults['device-vmservice-port']);
-    } on FormatException catch (error) {
-      throwToolExit('Invalid port for `--device-vmservice-port`: $error');
+      return int.parse(argResults['observatory-port']);
+    } catch (error) {
+      throwToolExit('Invalid port for `--observatory-port`: $error');
     }
     return null;
   }
diff --git a/packages/flutter_tools/lib/src/tester/flutter_tester.dart b/packages/flutter_tools/lib/src/tester/flutter_tester.dart
index 213cf3c..75844c9 100644
--- a/packages/flutter_tools/lib/src/tester/flutter_tester.dart
+++ b/packages/flutter_tools/lib/src/tester/flutter_tester.dart
@@ -134,7 +134,7 @@
         command.add('--disable-service-auth-codes');
       }
       if (debuggingOptions.hasObservatoryPort) {
-        command.add('--observatory-port=${debuggingOptions.hostVmServicePort}');
+        command.add('--observatory-port=${debuggingOptions.observatoryPort}');
       }
     }
 
@@ -187,9 +187,7 @@
 
       final ProtocolDiscovery observatoryDiscovery = ProtocolDiscovery.observatory(
         getLogReader(),
-        hostPort: debuggingOptions.hostVmServicePort,
-        devicePort: debuggingOptions.deviceVmServicePort,
-        ipv6: ipv6,
+        hostPort: debuggingOptions.observatoryPort,
       );
 
       final Uri observatoryUri = await observatoryDiscovery.uri;
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart
index f257a09..b4fb892 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart
@@ -400,7 +400,7 @@
           ],
         );
         await completer.future;
-        verifyNever(portForwarder.forward(devicePort, hostPort: anyNamed('hostPort')));
+        verifyNever(portForwarder.forward(devicePort));
 
         await expectLoggerInterruptEndsTask(task, logger);
         await loggerSubscription.cancel();
@@ -432,7 +432,7 @@
           ],
         );
         await completer.future;
-        verifyNever(portForwarder.forward(devicePort, hostPort: anyNamed('hostPort')));
+        verifyNever(portForwarder.forward(devicePort));
 
         await expectLoggerInterruptEndsTask(task, logger);
         await loggerSubscription.cancel();
diff --git a/packages/flutter_tools/test/general.shard/ios/devices_test.dart b/packages/flutter_tools/test/general.shard/ios/devices_test.dart
index 56d7b72..1bea916 100644
--- a/packages/flutter_tools/test/general.shard/ios/devices_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/devices_test.dart
@@ -259,7 +259,7 @@
           port: 1234,
           path: 'observatory',
         );
-        when(mockMDnsObservatoryDiscovery.getObservatoryUri(any, any, usesIpv6: anyNamed('usesIpv6')))
+        when(mockMDnsObservatoryDiscovery.getObservatoryUri(any, any, any))
           .thenAnswer((Invocation invocation) => Future<Uri>.value(uri));
 
         final LaunchResult launchResult = await device.startApp(mockApp,
@@ -329,7 +329,7 @@
           mockLogReader.addLine('Foo');
           mockLogReader.addLine('Observatory listening on http://127.0.0.1:$devicePort');
         });
-        when(mockMDnsObservatoryDiscovery.getObservatoryUri(any, any, usesIpv6: anyNamed('usesIpv6')))
+        when(mockMDnsObservatoryDiscovery.getObservatoryUri(any, any, any))
           .thenAnswer((Invocation invocation) => Future<Uri>.value(null));
 
         final LaunchResult launchResult = await device.startApp(mockApp,
@@ -362,7 +362,7 @@
           mockLogReader.addLine('Foo');
           mockLogReader.addLine('Observatory listening on http:/:/127.0.0.1:$devicePort');
         });
-        when(mockMDnsObservatoryDiscovery.getObservatoryUri(any, any, usesIpv6: anyNamed('usesIpv6')))
+        when(mockMDnsObservatoryDiscovery.getObservatoryUri(any, any, any))
           .thenAnswer((Invocation invocation) => Future<Uri>.value(null));
 
         final LaunchResult launchResult = await device.startApp(mockApp,
@@ -411,7 +411,7 @@
           port: 1234,
           path: 'observatory',
         );
-        when(mockMDnsObservatoryDiscovery.getObservatoryUri(any, any, usesIpv6: anyNamed('usesIpv6')))
+        when(mockMDnsObservatoryDiscovery.getObservatoryUri(any, any, any))
             .thenAnswer((Invocation invocation) => Future<Uri>.value(uri));
 
         List<String> args;
diff --git a/packages/flutter_tools/test/general.shard/protocol_discovery_test.dart b/packages/flutter_tools/test/general.shard/protocol_discovery_test.dart
index db074a0..6ad073f 100644
--- a/packages/flutter_tools/test/general.shard/protocol_discovery_test.dart
+++ b/packages/flutter_tools/test/general.shard/protocol_discovery_test.dart
@@ -17,8 +17,6 @@
     ProtocolDiscovery discoverer;
 
     group('no port forwarding', () {
-      int devicePort;
-
       /// Performs test set-up functionality that must be performed as part of
       /// the `test()` pass and not part of the `setUp()` pass.
       ///
@@ -37,7 +35,7 @@
       /// See also: [runZoned]
       void initialize() {
         logReader = MockDeviceLogReader();
-        discoverer = ProtocolDiscovery.observatory(logReader, ipv6: false, hostPort: null, devicePort: devicePort);
+        discoverer = ProtocolDiscovery.observatory(logReader);
       }
 
       tearDown(() {
@@ -121,28 +119,6 @@
         expect(uri.port, 54804);
         expect('$uri', 'http://127.0.0.1:54804/PTwjm8Ii8qg=/');
       });
-
-      testUsingContext('skips uri if port does not match the requested vmservice - requested last', () async {
-        devicePort = 12346;
-        initialize();
-        final Future<Uri> uriFuture = discoverer.uri;
-        logReader.addLine('I/flutter : Observatory listening on http://127.0.0.1:12345/PTwjm8Ii8qg=/');
-        logReader.addLine('I/flutter : Observatory listening on http://127.0.0.1:12346/PTwjm8Ii8qg=/');
-        final Uri uri = await uriFuture;
-        expect(uri.port, 12346);
-        expect('$uri', 'http://127.0.0.1:12346/PTwjm8Ii8qg=/');
-      });
-
-      testUsingContext('skips uri if port does not match the requested vmservice - requested first', () async {
-        devicePort = 12346;
-        initialize();
-        final Future<Uri> uriFuture = discoverer.uri;
-        logReader.addLine('I/flutter : Observatory listening on http://127.0.0.1:12346/PTwjm8Ii8qg=/');
-        logReader.addLine('I/flutter : Observatory listening on http://127.0.0.1:12345/PTwjm8Ii8qg=/');
-        final Uri uri = await uriFuture;
-        expect(uri.port, 12346);
-        expect('$uri', 'http://127.0.0.1:12346/PTwjm8Ii8qg=/');
-      });
     });
 
     group('port forwarding', () {
@@ -151,9 +127,6 @@
         final ProtocolDiscovery discoverer = ProtocolDiscovery.observatory(
           logReader,
           portForwarder: MockPortForwarder(99),
-          hostPort: null,
-          devicePort: null,
-          ipv6: false,
         );
 
         // Get next port future.
@@ -173,8 +146,6 @@
           logReader,
           portForwarder: MockPortForwarder(99),
           hostPort: 1243,
-          devicePort: null,
-          ipv6: false,
         );
 
         // Get next port future.
@@ -194,8 +165,6 @@
           logReader,
           portForwarder: MockPortForwarder(99),
           hostPort: 0,
-          devicePort: null,
-          ipv6: false,
         );
 
         // Get next port future.
@@ -216,7 +185,6 @@
           portForwarder: MockPortForwarder(99),
           hostPort: 54777,
           ipv6: true,
-          devicePort: null,
         );
 
         // Get next port future.
@@ -237,7 +205,6 @@
           portForwarder: MockPortForwarder(99),
           hostPort: 54777,
           ipv6: true,
-          devicePort: null,
         );
 
         // Get next port future.
