웹 브라우저는 탭마다 다른 발신 포트를 사용합니까?


58

Firefox와 같은 여러 탭을 지원하는 웹 브라우저에서 다른 웹 사이트 도메인으로 이동하는 다른 탭은 각 도메인에 대해 전용 포트를 사용합니까?

또는 브라우저가 모든 탭과 모든 도메인을 관리하기 위해 단일 포트를 사용합니까?


브라우저는 웹 사이트에 연결할 때 2 개의 포트를 사용하고, 80은 http 연결, 443은 https 연결입니다. en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
Moab

7
서버에 연결하는 데 사용되는 포트를 알고 있지만 클라이언트 (호스트 컴퓨터)에서 연결하는 데 사용되는 포트 번호가 궁금합니다.
yoyo_fun

2
"나가는 포트"라는 용어가 정확하지 않다고 생각합니다. 포트는 양방향입니다. 아마도 당신은 말할 수 있습니다. 대신 "로컬 포트". 로컬 포트는 요청을 보내기위한 소스 (발신) 포트와 응답을 받기위한 목적지 (수신) 포트로 사용됩니다.
Ron Maupin

6
포트는 OS에 의해 할당되며 각각의 새 연결에는 다른 모든 열린 연결과 구별되도록 새 로컬 포트가 할당됩니다.
Ex Umbris

1
@ExUmbris : 현명하고 간단한 전략이지만 TCP 연결은 쿼드 {로컬 IP, 로컬 포트, 원격 IP, 원격 포트}로 식별됩니다. 고유성은 로컬 포트가 필요하지 않습니다. 이는 웹 서버가 고유성을 위해 로컬 포트를 전혀 사용할 수 없습니다. 웹 서버의 관점에서 원격 IP는 여러 사용자가 단일 게이트웨이 / 프록시 뒤에 위치 할 수 있으므로 고유하지 않습니다.
MSalters

답변:


55

브라우저가 다른 포트를 사용하여 다른 웹 사이트에 연결합니까?

예, 그렇습니다.

다음은 Windows 7에서 현재 Firefox 연결 (9 개의 열린 탭이 있음)을 보여주는 예입니다.

여기에 이미지 설명을 입력하십시오

노트:

  • 로컬 포트가 모두 다르다는 것을 알 수 있습니다.

  • 원격 포트는 일반적으로 80 (HTTP), 443 (HTTPS) 또는 8080 (HTTP Alternate)입니다.

  • 웹 페이지를 렌더링하는 전체 프로세스는 아래에 설명되어 있습니다. 특히 5, 6, 13 및 15 단계 (굵게 표시됨)를 참조하십시오.

    • 일반적으로 단일 웹 페이지를 렌더링 할 때는 여러 개의 연결을 사용하지만 모두 동일한 원격 주소로 연결되는 것은 아닙니다.

    • 웹 페이지에는 종종 다른 곳에서 호스팅되는 리소스 (자바 스크립트 파일 등)가 포함되기 때문입니다.

  • 동일한 웹 사이트 (예 : stackoverflow.com) 에 대한 여러 연결 에는 다른 로컬 포트가 있습니다 (다른 페이지를 렌더링하는 다른 탭에서 별도의 연결이기 때문에).


웹 페이지 렌더링 – 단계별

노트 :

  • 5, 6, 13 및 15 단계 (굵게 표시됨)는 질문과 직접 ​​관련이 있습니다.

웹을 서핑 할 때 어떤 일이 일어날 지 생각해 본 적이 있습니까? 보이는 것처럼 간단하지 않습니다.

  1. 선호하는 브라우저에서 주소 표시 줄에 URL을 입력합니다.
  2. 브라우저는 URL을 구문 분석하여 프로토콜, 호스트, 포트 및 경로를 찾습니다.
  3. HTTP 요청 (프로토콜 일 가능성이 가장 높음)을 형성합니다.
  4. 호스트에 도달하려면 먼저 사람이 읽을 수있는 호스트를 IP 번호로 변환해야하며 호스트에서 DNS 조회를 수행하여이를 수행합니다.
  5. 그런 다음 사용자 컴퓨터에서 지정된 포트 (대부분 포트 80)의 해당 IP 번호로 소켓을 열어야합니다.
  6. 연결이 열리면 HTTP 요청이 호스트로 전송됩니다
  7. 호스트는 지정된 포트에서 수신 대기하도록 구성된 서버 소프트웨어 (대부분 Apache)에 요청을 전달합니다.
  8. 서버는 요청을 검사하고 (대부분의 경로 만) 요청을 처리하는 데 필요한 서버 플러그인을 시작합니다 (사용하는 서버 언어, PHP, Java, .NET, Python?에 해당)?
  9. 플러그인은 전체 요청에 액세스하고 HTTP 응답 준비를 시작합니다.
  10. 응답을 구성하기 위해 데이터베이스에 액세스 할 가능성이 높습니다. 요청의 경로 (또는 데이터)에있는 매개 변수를 기반으로 데이터베이스를 검색합니다.
  11. 플러그인이 추가하기로 결정한 다른 정보와 함께 데이터베이스의 데이터는 긴 텍스트 문자열 (아마도 HTML)로 결합됩니다.
  12. 플러그인은 해당 데이터를 일부 메타 데이터 (HTTP 헤더 형식)와 결합하고 HTTP 응답을 브라우저로 다시 보냅니다.
  13. 브라우저는 응답을 받고 응답에서 HTML (95 % 확률로 깨짐)을 구문 분석합니다.
  14. DOM 트리는 깨진 HTML로 만들어졌습니다.
  15. HTML 소스에있는 각각의 새 자원 (일반적으로 이미지, 스타일 시트 및 JavaScript 파일)에 대해 서버에 새 요청이 작성됩니다. 3 단계로 돌아가서 각 자원에 대해 반복하십시오.
  16. 스타일 시트가 구문 분석되고 각각의 렌더링 정보가 DOM 트리에서 일치하는 노드에 첨부됩니다.
  17. 자바 스크립트가 파싱 및 실행되고 DOM 노드가 이동하고 스타일 정보가 그에 따라 업데이트됩니다.
  18. 브라우저는 DOM 트리 및 각 노드의 스타일 정보에 따라 화면에 페이지를 렌더링합니다.
  19. 화면에 페이지가 나타납니다
  20. 전체 프로세스가 너무 느려서 짜증이납니다.

웹 페이지 소스 렌더링 – 단계별


63

웹 사이트에 대한 각 연결은 일반 HTTP의 경우 기본 대상 TCP 포트 80, HTTPS의 경우 443 인 다른 소켓을 사용합니다. 소켓이 고유하려면 소스 IP 주소, 소스 TCP 포트, 대상 IP 주소 및 대상 TCP 포트의 조합이 달라야합니다.

동일한 컴퓨터에서 동일한 웹 사이트에 여러 개의 연결이있는 경우 (웹 사이트에서 하나의 IP 주소 만 사용한다고 가정) 다른 소스 TCP 포트를 사용해야합니다. 이러한 방식으로 각 연결은 고유합니다.

그러나 HTTP 1.1부터는 모든 연결이 지정된 기간 동안 지속됩니다 (달리 선언되지 않는 한). 즉, 동일한 웹 사이트에서 여러 리소스 (예 : css / js 파일)를 요청하면 브라우저에서 동일한 연결을 다시 사용할 수 있습니다. 브라우저에 동일한 웹 사이트의 인스턴스가 여러 개인 경우에도 마찬가지입니다.

Windows에있는 경우 netstat -no -p TCP명령은 브라우저의 소켓을 포함하여 모든 활성 TCP 소켓 및 해당 프로세스 ID를 표시합니다.

여기에 이미지 설명을 입력하십시오

유닉스 / 리눅스 (이 경우 데비안)를 사용하는 경우 netstat -ntp또는 ss -t명령을 사용할 수 있습니다 .

여기에 이미지 설명을 입력하십시오


4
netstat에는 브라우저 이외의 연결 (예 : 이메일 클라이언트의 이메일 연결, 뉴스 리더의 뉴스 연결)도 표시됩니다. 이 연결은 다른 원격 포트에 있습니다.
DavidPostill

내가 빠진 것이 아닌 한, asker가 운영 체제를 언급하지 않았지만 asker가 Windows를 사용하고 있다고 가정하는 것처럼 보입니다. 콘솔 명령을 제공 할 때마다 참조하는 OS를 나열하는 것도 좋습니다.
user45623

9
@ user45623 : 스크린 샷은 Windows 스크린 샷이지만 netstat -nLinux 및 Mac OS를 포함한 대부분의 운영 체제에서 작동합니다.
Heinzi

1
Windows (다른 OS도 가능)에서는 netstat -n -o어떤 프로세스가 어떤 연결을 생성했는지 확인할 수 있습니다 . 또는 SysInternal의 tcpview 를 실행 하여 프로세스 이름 및 아이콘과 함께 GUI에서 목록을 볼 수 있습니다 .
Jonathan

이제 문제는 웹 브라우저가 동일한 서버로 연결되는 경우 다른 탭의 연결을 재사용합니까?
John Dvorak

11

다른 웹 사이트에 대한 탭과 관련하여 튜플 {로컬 IP, 로컬 포트, 대상 IP, 대상 포트} 가 고유 한 한 TCP에는 로컬 포트가 달라야 할 것이 없습니다 . 동일한 웹 사이트에 대한 탭의 경우 상황이 훨씬 복잡합니다.

다른 클라이언트 소프트웨어와 마찬가지로 브라우저는 동일한 대상에 대한 발신 연결마다 다른 로컬 포트를 사용합니다. 일반적으로 이미지, CSS, JavaScript 등과 같은 임베드 된 자원을 가져 오기 위해 특정 웹 사이트에 대한 다중 연결을 형성합니다. 또한 재사용을 위해 해당 연결을 풀링합니다.

그것은 동일한 웹 사이트에 다른 탭은 별개의 사용 여부를 말할 수 없습니다 , 연결 (A) 일반적으로 탭 당 하나의 연결이 어쨌든 없기 때문에, 그리고 (b) 타이밍 및 인증에 따라 연결이 될 수있다 탭 사이에서 재사용 연결을 식별 할 수 없으므로 로컬 포트를 식별 할 수도 없습니다.


감사. 연결 "풀링"이란 무엇입니까?
yoyo_fun

풀을 닫는 대신 풀로 되돌리고 시간 초과 간격 동안 유휴 상태로있는 경우에만 닫습니다. 해당 대상에 대한 새 연결을 만들기 전에 먼저 풀을 살펴보십시오. 이것이 HTTP 연결 유지 방법입니다.
user207421

풀은 아직 열려 있고 닫히지 않은 연결을 저장하는 메모리의 데이터 구조입니까?
yoyo_fun

맞습니다. 일반적으로 대상 IP : 포트로 키가 지정된 맵입니다.
user207421

2
@EJP : HTTPS의 경우 대상 IP 및 포트로 맵을 키잉하는 것이 안전하지 않습니다. 동일한 IP 및 포트로 확인 되더라도 다른 호스트 이름에 대한 연결을 구분해야합니다 . 적어도 하나의 탭이 시크릿 모드 인 경우 브라우저는 다른 탭에 대한 연결을 별도로 유지 해야 합니다.
Henning Makholm

6

예. 아뇨. 따라 다릅니다.

먼저, 브라우저는 연결에 다음 전략 중 하나를 사용할 수 있습니다.

  1. 단일 연결 (1995 년 이후의 브라우저에서는 가능하지 않음)
  2. 탭당 하나의 연결 (기본적으로 # 1과 동일, 약간 더 우수)
  3. 리소스 당 하나의 연결 (순진하지만 그렇게 나쁘지 않음)
  4. 연결 유지, 재사용 연결이있는 연결 풀
  5. 다른 것 (읽기 : 이상한 것)

연결 풀을 사용하고 연결을 다시 사용하는 것이 합리적인 가정이지만 브라우저에서 어떤 전략을 사용할지 알 수있는 방법이 없습니다.

둘째, TCP 작동 방식에 따라 모든 연결에 대한 소스 포트와 대상 포트가 있습니다. 소스와 대상 주소 / 포트 쌍이 연결을 정의합니다.
항상 [1] 용도 공지 (그것의 광고 된 어드레스에서 수신 된) 서버에 연결하도록 포트 (예컨대 80 또는 443)를, 그러나 다른 포트는 임의로 선택된다. 따라서 어느 쪽에서 연결을 보느냐에 따라 하나 또는 여러 개의 가능한 포트가 있습니다.

따라서 동일한 탭은 끝에 여러 개의 다른 포트를 사용할 수 있지만 일반적으로 다른 탭 이있을 수 있습니다 (연결이 풀링되고 다른 탭의 다른 리소스가 동일한 서버에서로드 된 경우) 동일한 포트를 사용할 수 있습니다.

이 질문 에는 "보통"의 경우 발신이 명시 적으로 언급 되어 있으므로 포트 번호는 포트가 어느 탭에 있는지 또는 두 개의 가능한 포트 (80 및 443) 중 하나에 관계없이 동일합니다. 물론 URL에 다른 포트 (예 : 8080)를 명시 적으로 요청할 수 있습니다. 그래도 드물다.


[1] 글쎄요, 항상 그런 것은 아니지만 너무 복잡하지는 않겠습니다.


또 다른 요인은 ... 클라이언트 측 포트는 일반적으로 브라우저가 아닌 OS에 의해 선택됩니다. 연결이 NAT 장치를 통과하는 경우 서버에서 보는 클라이언트 쪽 포트가 브라우저에서 보는 것과 다를 수 있습니다. 대부분의 OS는 (구성 가능한) 임시 포트 범위 내에서 선형 또는 무작위로 할당하지만 브라우저 다른 서버에 대한 여러 연결을 통해 동일한 소스 포트를 요청할 있습니다. (그리고 OP는 서버 포트가 아닌 클라이언트 포트를 요구하고있다.)
david

@david : Q가 애매 모호하기 때문에 어느 것이 옳은지 (또는 무엇을 대답해야하는지) 말하기가 어렵습니다. OP가 클라이언트의 발신 포트에 대해 묻고 있습니다. "클라이언트"는 (구현에 의해) 자유롭게 또는 무작위로 선택 되는 소스 포트 (TCP 용어로)에 대해 이야기하고 있다고 제안하지만, "발신"은 그것이 실제로 우리가 말하는 대상 포트 임을 나타냅니다. 평신도에서 "서버 포트"라고하는 것이 훨씬 낫습니다. NAT에 대한 귀하의 의견은 서버에서 보았을 때 정확하지만 클라이언트에는 영향을 미치지 않습니다.
Damon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.