Chrome
while true; do
clear
lsof -nP -a -p 62350 -i
sleep 1
done
실제 chrome에서 나가는 네트워크를 확인하기 위해서 chrome 프로세스에서 사용하는 내부 네트워크 포트를 확인한결과 4개가 잡혔다.
| 내 포트 | 목적지 | 목적지 포트 | 의미 |
|---|---|---|---|
52301 | 74.125.203.188 | 5228 | 별도의 Google 계열 연결로 보임 |
52355 | 172.217.209.102 | 443 | HTTPS/TLS 연결 |
52363 | 142.251.118.138 | 443 | HTTPS/TLS 연결 |
52442 | 172.217.209.95 | 443 | HTTPS/TLS 연결 |
52328 | 160.79.104.10 | 443 | HTTPS/TLS 연결 |
하나의 프로세스에서 여러개의 네트워크 포트를 이용하고 있었습니다. 포트의 갯수는 우리가 얼마나 많은 사이트에 접속하는가 그리고 어떤 행위를 하는가에 따라서 달라집니다.
왜 chrome은 여러개의 포트를 사용할까?
Chrome은 웹사이트 하나만 열어도 실제로 하나의 서버에만 접속하는 것이 아니다.
웹 페이지를 구성하기 위해 HTML 서버뿐만 아니라 이미지, JavaScript, CSS, CDN, 외부 API 등 여러 서버와 통신할 수 있다.
이 과정에서 Chrome이 여러 서버와 TCP 연결을 요청하면 운영체제는 각각의 TCP 연결에 서로 다른 로컬 포트(Ephemeral Port)를 할당한다.
예를 들어 다음과 같다.
10.64.124.73:52355 → 서버 A:443
10.64.124.73:52356 → 서버 B:443
10.64.124.73:52357 → 서버 C:443TCP 연결은 다음 4개의 값, 즉 4-Tuple로 식별된다.
Source IP
Source Port
Destination IP
Destination Port따라서 여러 서버와 동시에 TCP 연결을 맺거나 동일한 서버와 여러 TCP 연결을 맺을 때 운영체제는 서로 다른 로컬 포트를 사용하여 각각의 연결을 구분할 수 있다.
또한 각각의 TCP 연결 위에서 TLS 연결이 형성될 수 있으며, 이 과정에서 TLS ClientHello와 ServerHello 등이 교환된다.
즉, 여러 포트를 사용하는 핵심 이유는 HTTPS 암호화 과정에서 오류가 발생하는 것을 방지하기 위해서가 아니라, 운영체제가 각각의 TCP 연결을 독립적으로 식별하고 관리하기 위해서이다.