Cross-Network Container Communication

在 Docker 的網路規則中,由於 DOCKER-ISOLATION-STAGE-1DOCKER-ISOLATION-STAGE-2 兩個 iptables chain 的關係,因此不同 Docker network 連結的 container 是無法互相溝通的。不過,我們可以透過建立 router 的手段來規避掉 chain 的限制,讓 container 收到其他 container 來的packages。此方式涉及到 Linux Bridge 處理封包的方式和基本網路知識,希望透過此介紹,來更了解 network stack 與 packages 處理流程。

Docker Container Network

我們知道,Docker 的網路實現是基於 Linux network namespace,Linux network bridge,與 virtual ethernet device 所架構而成的(可參閱 Linux Network Fundamentals)。

Start HTTP/2 running over cleartext TCP

![flow]({{ site.url }}/assets/images/h2c-flow.png)

前言

主流使用 HTTP/2 時都是基於 TLS protocol,不過在 HTTP/2 RFC7540 規範中, HTTP/2 其實也可以直接基於 cleartext TCP 來溝通。這次主要介紹 based on cleartext TCP 的 HTTP/2 server 與 client 實作,後續會再加入 HTTP/2 結合 TLS protocol 的相關內容。

HTTP/2 Version Identification

RFC7540 3.1 中有明確定義出 HTTP/2 on TLS protocol or cleartext TCP 的識別號,這個識別主要用於 client 端詢問 server 對於 HTTP/2 的 protocol 支援,以及切換到 HTTP/2 的過程。