이 2 개의 패킷이 동일한 TCP 소켓에 속합니까?

Dec 15 2020

두 개의 패킷 AB.

A: source-IP S1, destination-IP D1, source-port SP1, destination-port 있음DP1

B: source-IP S2, destination-IP D1, source-port SP2, destination-port 있음DP1

둘 다 TCP입니다. 이제이 두 패킷이 동일한 소켓을 갖습니까?


UDP에 대하여 소켓이 destination-IP와 destination-port-number로 구성되어 있음을 읽었습니다. 따라서 UDP로 수행하면 두 패킷이 동일한 소켓에서 수신됩니다.

그러나이 예제는 TCP 용이며 TCP 용으로 동일한 소켓을 통과할지 확실하지 않습니다.

답변

12 SteffenUllrich Dec 15 2020 at 00:01

첫째, TCP는 단일 패킷을 고려하지 않습니다. 이들이 단순히 삭제되는 것보다 이전 연결 설정이없는 데이터 패킷 인 경우 소켓이 포함되지 않습니다. 그래서 이것은 설정된 연결 또는 연결을 설정하기위한 초기 패킷에 관한 것이라고 가정하고 있습니다. TCP 연결 은 적어도 4 개의 튜플 (src-ip, src-port, dst-ip, dst-port)에 의해 정의됩니다. 이 4 개의 튜플은 두 경우 모두 분명히 다르기 때문에 필요한 소켓이 다릅니다.

UDP에 대해 소켓이 대상 IP와 대상 포트 번호로 구성되어 있다는 것을 읽었습니다.

이것은 연결되지 않은 UDP 소켓 에만 해당됩니다 . 으로 연결된 UDP 소켓 다시 4 튜플 관련이있다.

2 MartinRosenau Dec 15 2020 at 15:28

UDP에 대해 읽었습니다 ...

TCP와 UDP의 주요 차이점은 TCP는 연결 지향이고 UDP는 단일 패킷을 전송하는 데 사용된다는 것입니다.

UDP 소켓은 컴퓨터의 특정 (목적지) 포트에 도착하는 모든 UDP 패킷을 처리합니다.

TCP 소켓은 특정 TCP 연결에 속하는 모든 패킷을 처리합니다.

이제이 두 패킷이 동일한 소켓을 갖게됩니까?

생각보다 더 복잡합니다.

설명하는 상황은 일반적으로 "서버 측"( accept()API를 사용하여 들어오는 연결을 처리 하는 컴퓨터 ( 예 : 웹 서버))에서 발생합니다.

웹 브라우저를 실행하는 두 대의 컴퓨터가 동일한 웹 서버에 연결하려고한다고 가정 해 보겠습니다. 두 컴퓨터 모두 동일한 "소스 TCP 포트"를 선택했습니다. 이 경우 두 컴퓨터에서 웹 서버로 보낸 패킷이 조건을 충족합니다. 두 컴퓨터에서 보낸 패킷에서 원본 IP 주소 만 다르지만 대상 IP 주소, 대상 포트 및 원본 포트는 동일합니다.

그러나 "서버 측" 에서는 단일 TCP 연결 을 처리 하는두 개의 소켓 이 관련됩니다 .

  1. 들어오는 TCP 연결 을 사용 listen()하고 accept()대기 하는 하나의 소켓 .
  2. 들어오는 각 TCP 연결에 대해 accept().

TCP 패킷이 TCP 연결 의 첫 번째 패킷 인 경우 패킷은 listen()대상 포트 에서을 수행하는 TCP 소켓에 의해 "처리"됩니다 .

이 소켓은 UDP 소켓처럼 소스 IP 주소 나 소스 TCP 포트에 대해 신경 쓰지 않습니다. 소켓은 특정 대상 IP 주소와 특정 대상 포트를 가진 TCP 연결의 모든 첫 번째 패킷을 처리합니다.

첫 번째 패킷이 수신되면 두 번째 소켓 (TCP 연결 처리)이 생성되고 access()API에 의해 반환됩니다 .

이 소켓은 특정 연결 (따라서 TCP 연결의 모든 추가 패킷)을 처리합니다.

예에서 두 컴퓨터가 동일한 "소스 TCP 포트"를 사용하여 동일한 서버에 연결하는 두 개의 다른 연결이 있기 때문에 두 개의 다른 소켓은 대상 TCP 포트가 다른 패킷 만 처리합니다.