diff --git a/quic/qbone/qbone_client.h b/quic/qbone/qbone_client.h
index d415e71..2095110 100644
--- a/quic/qbone/qbone_client.h
+++ b/quic/qbone/qbone_client.h
@@ -14,11 +14,11 @@
 
 namespace quic {
 // A QboneClient encapsulates connecting to a server via an epoll server
-// and setting up a Qbone tunnel. See the QboneTestClient in qbone_client_test
+// and setting up a QBONE tunnel. See the QboneTestClient in qbone_client_test
 // for usage.
 class QboneClient : public QuicClientBase, public QboneClientInterface {
  public:
-  // Note that the epoll server, qbone writer, and handler are owned
+  // Note that the epoll server, QBONE writer, and handler are owned
   // by the caller.
   QboneClient(QuicSocketAddress server_address,
               const QuicServerId& server_id,
diff --git a/quic/qbone/qbone_client_test.cc b/quic/qbone/qbone_client_test.cc
index 0ee0bf8..c106a33 100644
--- a/quic/qbone/qbone_client_test.cc
+++ b/quic/qbone/qbone_client_test.cc
@@ -36,11 +36,11 @@
   ParsedQuicVersionVector test_versions;
 
   for (const auto& version : CurrentSupportedVersions()) {
-    // TODO(b/113130636): Make Qbone work with TLS.
+    // TODO(b/113130636): Make QBONE work with TLS.
     if (version.handshake_protocol == PROTOCOL_TLS1_3) {
       continue;
     }
-    // Qbone requires MESSAGE frames
+    // QBONE requires MESSAGE frames
     if (!version.SupportsMessageFrames()) {
       continue;
     }
@@ -75,7 +75,7 @@
   std::vector<std::string> data_;
 };
 
-// A subclass of a qbone session that will own the connection passed in.
+// A subclass of a QBONE session that will own the connection passed in.
 class ConnectionOwningQboneServerSession : public QboneServerSession {
  public:
   ConnectionOwningQboneServerSession(
diff --git a/quic/qbone/qbone_constants.h b/quic/qbone/qbone_constants.h
index 1fa2688..eeb6171 100644
--- a/quic/qbone/qbone_constants.h
+++ b/quic/qbone/qbone_constants.h
@@ -13,11 +13,11 @@
 namespace quic {
 
 struct QboneConstants {
-  // Qbone's ALPN
+  // QBONE's ALPN
   static constexpr char kQboneAlpn[] = "qbone";
-  // The maximum number of bytes allowed in a qbone packet.
+  // The maximum number of bytes allowed in a QBONE packet.
   static const QuicByteCount kMaxQbonePacketBytes = 2000;
-  // The table id for Qbone's routing table. 'bone' in ascii.
+  // The table id for QBONE's routing table. 'bone' in ascii.
   static const uint32_t kQboneRouteTableId = 0x626F6E65;
   // The stream ID of the control channel.
   static QuicStreamId GetControlStreamId(QuicTransportVersion version);
diff --git a/quic/qbone/qbone_packet_exchanger.h b/quic/qbone/qbone_packet_exchanger.h
index afdfc2e..1b3577a 100644
--- a/quic/qbone/qbone_packet_exchanger.h
+++ b/quic/qbone/qbone_packet_exchanger.h
@@ -12,7 +12,7 @@
 namespace quic {
 
 // Handles reading and writing on the local network and exchange packets between
-// the local network with a Qbone connection.
+// the local network with a QBONE connection.
 class QbonePacketExchanger : public QbonePacketWriter {
  public:
   // The owner might want to receive notifications when read or write fails.
diff --git a/quic/qbone/qbone_server_session.h b/quic/qbone/qbone_server_session.h
index e4ff4dd..0badcf6 100644
--- a/quic/qbone/qbone_server_session.h
+++ b/quic/qbone/qbone_server_session.h
@@ -21,7 +21,7 @@
 class QboneCryptoServerStreamHelper
     : public QuicCryptoServerStreamBase::Helper {
  public:
-  // This will look for the qbone alpn.
+  // This will look for the QBONE alpn.
   bool CanAcceptClientHello(const CryptoHandshakeMessage& chlo,
                             const QuicSocketAddress& client_address,
                             const QuicSocketAddress& peer_address,
diff --git a/quic/qbone/qbone_session_base.cc b/quic/qbone/qbone_session_base.cc
index 35b41bc..68f659c 100644
--- a/quic/qbone/qbone_session_base.cc
+++ b/quic/qbone/qbone_session_base.cc
@@ -104,7 +104,7 @@
 }
 
 bool QboneSessionBase::ShouldKeepConnectionAlive() const {
-  // Qbone connections stay alive until they're explicitly closed.
+  // QBONE connections stay alive until they're explicitly closed.
   return true;
 }
 
@@ -182,7 +182,7 @@
     return;
   }
 
-  // Qbone streams are ephemeral.
+  // QBONE streams are ephemeral.
   QuicStream* stream = CreateOutgoingStream();
   if (!stream) {
     QUIC_BUG << "Failed to create an outgoing QBONE stream.";
diff --git a/quic/qbone/qbone_session_base.h b/quic/qbone/qbone_session_base.h
index 84498e6..d48b210 100644
--- a/quic/qbone/qbone_session_base.h
+++ b/quic/qbone/qbone_session_base.h
@@ -42,12 +42,12 @@
   virtual void ProcessPacketFromNetwork(quiche::QuicheStringPiece packet) = 0;
   virtual void ProcessPacketFromPeer(quiche::QuicheStringPiece packet) = 0;
 
-  // Returns the number of qbone network packets that were received
+  // Returns the number of QBONE network packets that were received
   // that fit into a single QuicStreamFrame and elided the creation of
   // a QboneReadOnlyStream.
   uint64_t GetNumEphemeralPackets() const;
 
-  // Returns the number of qbone network packets that were via
+  // Returns the number of QBONE network packets that were via
   // multiple packets, requiring the creation of a QboneReadOnlyStream.
   uint64_t GetNumStreamedPackets() const;
 
diff --git a/quic/qbone/qbone_session_test.cc b/quic/qbone/qbone_session_test.cc
index bb75138..c3219e5 100644
--- a/quic/qbone/qbone_session_test.cc
+++ b/quic/qbone/qbone_session_test.cc
@@ -48,11 +48,11 @@
   ParsedQuicVersionVector test_versions;
 
   for (const auto& version : CurrentSupportedVersions()) {
-    // TODO(b/113130636): Make Qbone work with TLS.
+    // TODO(b/113130636): Make QBONE work with TLS.
     if (version.handshake_protocol == PROTOCOL_TLS1_3) {
       continue;
     }
-    // Qbone requires MESSAGE frames
+    // QBONE requires MESSAGE frames
     if (!version.SupportsMessageFrames()) {
       continue;
     }
diff --git a/quic/qbone/qbone_stream.h b/quic/qbone/qbone_stream.h
index c2fb20a..1c14ab5 100644
--- a/quic/qbone/qbone_stream.h
+++ b/quic/qbone/qbone_stream.h
@@ -21,7 +21,7 @@
  public:
   QboneWriteOnlyStream(QuicStreamId id, QuicSession* session);
 
-  // QuicStream implementation. Qbone writers are ephemeral and don't
+  // QuicStream implementation. QBONE writers are ephemeral and don't
   // read any data.
   void OnDataAvailable() override {}
 
