Part 05 · Network · 5.1.01

Từ DNS tới reverse proxy

Một request HTTP không bắt đầu ở controller. Nó phải tìm được địa chỉ, mở được kết nối, xác thực peer, đi qua các trust boundary và chia sẻ deadline với connection pool trước khi application xử lý.

Debug rule: tách timeline thành DNS, connect, TLS, proxy queue, pool acquisition, application queue, downstream và response read. “Request mất 3 giây” chưa phải là chẩn đoán.

1. DNS: tên miền không phải là địa chỉ tức thời

Resolver thường kiểm tra cache của browser/OS, sau đó recursive resolver truy vấn authoritative hierarchy. AAAAA trả địa chỉ IPv4/IPv6; CNAME tạo alias; SRV mang port/priority cho client biết record; TXT thường phục vụ metadata như SPF hoặc ACME. TTL kiểm soát thời gian cache, không phải lời hứa failover xảy ra ngay lập tức.

2. TCP: ordered byte stream và các timeout khác nhau

TCP cung cấp byte stream có thứ tự, sequence/acknowledgement, retransmission, flow control và congestion control; nó không giữ message boundary. HTTP/1.1 vì thế có thể bị head-of-line blocking trên một connection, còn client thường mở nhiều connection để giảm chờ.

Signal/timeoutNó đo gìBẫy thường gặp
Connect timeoutThời gian tới khi TCP connection được thiết lậpNhầm với server xử lý chậm
Pool acquisition timeoutThời gian chờ slot trong client poolĐổ lỗi cho downstream dù pool đã cạn
Read/response timeoutChờ byte phản hồi hoặc body tiếp theoĐặt quá thấp cho response hợp lệ lớn
Idle/keep-alive timeoutKhoảng không có traffic trên connectionKhông khớp với NAT/LB nên gặp reset ngẫu nhiên

3. TLS: xác thực danh tính trước khi tin dữ liệu

TLS handshake thương lượng protocol/cipher, xác thực certificate chain và hostname, rồi tạo session keys để mã hóa application data. SNI giúp server chọn certificate theo hostname; ALPN giúp chọn HTTP/1.1 hay HTTP/2. mTLS thêm client certificate nhưng vẫn cần mapping identity, rotation và revocation strategy ở application.

client --TLS/SNI/ALPN--> edge proxy --trusted hop--> application
         certificate + hostname       forwarded identity / scheme

4. Reverse proxy và forwarded headers

Load balancer/reverse proxy có thể terminate TLS, route, buffer, compress, retry và đặt forwarded headers. Chỉ tin Forwarded hoặc X-Forwarded-* khi request đến từ proxy nằm trong allowlist; nếu client được tự gửi header, họ có thể giả mạo scheme, host hoặc IP để bypass policy, tạo URL sai hay làm hỏng audit.

5. Connection pools và deadline end-to-end

Pool giới hạn connections theo destination. Pool quá nhỏ tạo acquisition wait; pool quá lớn dồn tải vào downstream và làm queue tăng. NAT/LB idle timeout, stale keep-alive và DNS rotation có thể tạo connection reset. Deadline phải bao gồm cả pool wait, không chỉ thời gian app xử lý.

Interview framing: “Tôi đo từng hop và percentile, kiểm tra pool saturation cùng downstream, rồi phân bổ một deadline hữu hạn. Retry chỉ dành cho lỗi transient, có backoff+jitter, giới hạn lần thử và chỉ khi side effect được bảo vệ.”

6. Checklist điều tra một request chậm

  1. So sánh DNS lookup và địa chỉ thực tế của từng client zone.
  2. Đo TCP connect, TLS handshake, certificate/ALPN và proxy queue.
  3. Kiểm tra pool acquisition, app thread/queue, downstream spans và response serialization.
  4. Đối chiếu timeout ở client, proxy, server và LB; tìm hop có deadline ngắn hơn.
  5. Kiểm tra connection reuse, idle timeout, retry count và request ID xuyên suốt.
Tài liệu: RFC 9293 TCP · RFC 8446 TLS 1.3 · RFC 9460 SVCB/HTTPS DNS