diff --git a/quic/core/quic_dispatcher.h b/quic/core/quic_dispatcher.h
index b553e3c..04c1698 100644
--- a/quic/core/quic_dispatcher.h
+++ b/quic/core/quic_dispatcher.h
@@ -116,18 +116,6 @@
                                            QuicConnectionId,
                                            QuicConnectionIdHash>;
 
-  // The largest packet number we expect to receive with a connection
-  // ID for a connection that is not established yet.  The current design will
-  // send a handshake and then up to 50 or so data packets, and then it may
-  // resend the handshake packet up to 10 times.  (Retransmitted packets are
-  // sent with unique packet numbers.)
-  static constexpr uint64_t kMaxReasonableInitialPacketNumber = 100;
-  static_assert(kMaxReasonableInitialPacketNumber >=
-                    kInitialCongestionWindow + 10,
-                "kMaxReasonableInitialPacketNumber is unreasonably small "
-                "relative to kInitialCongestionWindow.");
-
-
   // QuicBufferedPacketStore::VisitorInterface implementation.
   void OnExpiredPackets(QuicConnectionId server_connection_id,
                         QuicBufferedPacketStore::BufferedPacketList
diff --git a/quic/core/quic_dispatcher_test.cc b/quic/core/quic_dispatcher_test.cc
index 814462e..38cf329 100644
--- a/quic/core/quic_dispatcher_test.cc
+++ b/quic/core/quic_dispatcher_test.cc
@@ -1010,37 +1010,6 @@
   ProcessFirstFlight(client_address, EmptyQuicConnectionId());
 }
 
-TEST_P(QuicDispatcherTestAllVersions, OKSeqNoPacketProcessed) {
-  if (version_.UsesTls()) {
-    // QUIC+TLS allows clients to start with any packet number.
-    return;
-  }
-  QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
-  QuicConnectionId connection_id = TestConnectionId(1);
-
-  EXPECT_CALL(*dispatcher_,
-              CreateQuicSession(TestConnectionId(1), client_address,
-                                Eq(ExpectedAlpn()), _))
-      .WillOnce(Return(ByMove(CreateSession(
-          dispatcher_.get(), config_, TestConnectionId(1), client_address,
-          &mock_helper_, &mock_alarm_factory_, &crypto_config_,
-          QuicDispatcherPeer::GetCache(dispatcher_.get()), &session1_))));
-  EXPECT_CALL(*reinterpret_cast<MockQuicConnection*>(session1_->connection()),
-              ProcessUdpPacket(_, _, _))
-      .WillOnce(WithArg<2>(Invoke([this](const QuicEncryptedPacket& packet) {
-        ValidatePacket(TestConnectionId(1), packet);
-      })));
-
-  // A packet whose packet number is the largest that is allowed to start a
-  // connection.
-  EXPECT_CALL(*dispatcher_,
-              ShouldCreateOrBufferPacketForConnection(
-                  ReceivedPacketInfoConnectionIdEquals(connection_id)));
-  ProcessPacket(client_address, connection_id, true, SerializeCHLO(),
-                CONNECTION_ID_PRESENT, PACKET_4BYTE_PACKET_NUMBER,
-                QuicDispatcher::kMaxReasonableInitialPacketNumber);
-}
-
 TEST_P(QuicDispatcherTestOneVersion, VersionsChangeInFlight) {
   VerifyVersionNotSupported(QuicVersionReservedForNegotiation());
   for (ParsedQuicVersion version : CurrentSupportedVersions()) {
