2009-06-24 3 views
8

내가 이해하는 바에 따르면, 각 HTTP 요청은 자체 TCP 연결을 사용합니다 (내가 틀렸다면 수정하십시오). 이제 같은 서버에 두 개의 현재 연결이 있다고 가정 해 봅시다. 예를 들어, 클라이언트 측 자바 스크립트 코드는 XMLHttpRequest 객체를 사용하여 두 번째 AJAX POST 요청을 트리거합니다. 첫 번째 요청에 대한 응답을 받기 전에 하나씩 다른 AJAX POST 요청을 트리거합니다. 따라서 우리는 동일한 서버에 대한 두 개의 연결을 말하고 있습니다. 각 연결은 각 별도의 콜백 함수로 연결하기 위해 응답을 기다리고 있습니다.HTTP 요청의 다른 TCP 연결은 어떻게 식별됩니까?

여기에 내가 이해하지 못하는 것이 있습니다. TCP 패킷에는 원본 및 대상 IP와 포트가 포함되어 있지만이 두 연결에는 동일한 src 및 dest IP 주소와 포트 80이 포함되어 있지 않습니다. 패킷을 어떻게 차별화하고 적절히 라우팅 할 수 있습니까? 각 연결마다 다른 패킷 시퀀스 번호와 관련이 있습니까?

답변

9

브라우저가 HTTP 서버에 대한 새 연결을 만들면 다른 소스 포트를 사용합니다.

예를 들어 브라우저가 서버에 두 개의 연결을 만들고 IP 주소가 60.12.34.56이라고 가정 해보십시오. 첫 번째 연결은 원본 포트 60123에서 시작하고 두 번째 연결은 60127에서 시작될 수 있습니다. 이것은 서버로 보낸 각 패킷의 TCP 헤더에 포함됩니다. 서버가 각 연결에 회신하면 적절한 포트 (예 : 6또는 60127)가 사용되므로 패킷이 올바른 지점으로 되돌아갑니다.

가장 좋은 방법은 Wireshark을 다운로드하고 네트워크에서 트래픽을 관찰하는 것입니다. 그것은 당신에게 이것과 훨씬 더 많은 것을 보여줄 것입니다.

또한 NAT (Network Address Translation)가 라우터에서 작동하는 방식에 대한 통찰력을 제공합니다. 많은 컴퓨터가 동일한 IP 주소를 공유하도록 할 수 있으며 라우터는 다른 포트를 사용하도록 요청을 다시 작성하므로 두 대의 컴퓨터가 AOL Instant Messenger와 같은 장소에 동시에 연결할 수 있습니다.

2

원본 포트별로 구분됩니다.

별도의 TCP 연결을 생성하지 않는 각 HTTP 요청의 주된 이유는 우연히 keepalives입니다.

0

패킷 네트워크 통신에서 소켓은 서버 IP, 서버 포트, 클라이언트 IP, 클라이언트 포트의 4 가지 요소의 조합으로 간주됩니다. 두 번째 것은 일반적으로 프로토콜 (예 : http는 보통 포트 80에서 수신하지만 클라이언트 포트는 일반적으로 1024-65535 범위의 임의의 숫자입니다. 이는 운영 체제가 알려진 포트 프로토콜 (예 : FTP의 경우 21, SSH의 경우 22)에 대해 해당 포트를 사용할 수 있기 때문입니다. 동일한 네트워크 장치가 동일한 클라이언트 포트를 사용하여 서로 다른 서버에 두 개의 서로 다른 연결을 열 수 없으며 두 개의 서로 다른 클라이언트가 동일한 포트를 사용하는 경우 서버는 IP 주소로 구별 할 수 있습니다. 시스템에서 포트를 사용하여 연결을 수신하거나 연결을 설정하면 다른 용도로 사용할 수 없습니다. 이것이 운영체제가 네트워크 카드에 의해 수신 된 올바른 프로세스로 패킷을 보낼 수있는 방법입니다.