이 2 개의 패킷이 동일한 TCP 소켓에 속합니까?
두 개의 패킷 A
과 B
.
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 용으로 동일한 소켓을 통과할지 확실하지 않습니다.
답변
첫째, TCP는 단일 패킷을 고려하지 않습니다. 이들이 단순히 삭제되는 것보다 이전 연결 설정이없는 데이터 패킷 인 경우 소켓이 포함되지 않습니다. 그래서 이것은 설정된 연결 또는 연결을 설정하기위한 초기 패킷에 관한 것이라고 가정하고 있습니다. TCP 연결 은 적어도 4 개의 튜플 (src-ip, src-port, dst-ip, dst-port)에 의해 정의됩니다. 이 4 개의 튜플은 두 경우 모두 분명히 다르기 때문에 필요한 소켓이 다릅니다.
UDP에 대해 소켓이 대상 IP와 대상 포트 번호로 구성되어 있다는 것을 읽었습니다.
이것은 연결되지 않은 UDP 소켓 에만 해당됩니다 . 으로 연결된 UDP 소켓 다시 4 튜플 관련이있다.
UDP에 대해 읽었습니다 ...
TCP와 UDP의 주요 차이점은 TCP는 연결 지향이고 UDP는 단일 패킷을 전송하는 데 사용된다는 것입니다.
UDP 소켓은 컴퓨터의 특정 (목적지) 포트에 도착하는 모든 UDP 패킷을 처리합니다.
TCP 소켓은 특정 TCP 연결에 속하는 모든 패킷을 처리합니다.
이제이 두 패킷이 동일한 소켓을 갖게됩니까?
생각보다 더 복잡합니다.
설명하는 상황은 일반적으로 "서버 측"( accept()
API를 사용하여 들어오는 연결을 처리 하는 컴퓨터 ( 예 : 웹 서버))에서 발생합니다.
웹 브라우저를 실행하는 두 대의 컴퓨터가 동일한 웹 서버에 연결하려고한다고 가정 해 보겠습니다. 두 컴퓨터 모두 동일한 "소스 TCP 포트"를 선택했습니다. 이 경우 두 컴퓨터에서 웹 서버로 보낸 패킷이 조건을 충족합니다. 두 컴퓨터에서 보낸 패킷에서 원본 IP 주소 만 다르지만 대상 IP 주소, 대상 포트 및 원본 포트는 동일합니다.
그러나 "서버 측" 에서는 단일 TCP 연결 을 처리 하는 데 두 개의 소켓 이 관련됩니다 .
- 들어오는 TCP 연결 을 사용
listen()
하고accept()
대기 하는 하나의 소켓 . - 들어오는 각 TCP 연결에 대해
accept()
.
TCP 패킷이 TCP 연결 의 첫 번째 패킷 인 경우 패킷은 listen()
대상 포트 에서을 수행하는 TCP 소켓에 의해 "처리"됩니다 .
이 소켓은 UDP 소켓처럼 소스 IP 주소 나 소스 TCP 포트에 대해 신경 쓰지 않습니다. 소켓은 특정 대상 IP 주소와 특정 대상 포트를 가진 TCP 연결의 모든 첫 번째 패킷을 처리합니다.
첫 번째 패킷이 수신되면 두 번째 소켓 (TCP 연결 처리)이 생성되고 access()
API에 의해 반환됩니다 .
이 소켓은 특정 연결 (따라서 TCP 연결의 모든 추가 패킷)을 처리합니다.
예에서 두 컴퓨터가 동일한 "소스 TCP 포트"를 사용하여 동일한 서버에 연결하는 두 개의 다른 연결이 있기 때문에 두 개의 다른 소켓은 대상 TCP 포트가 다른 패킷 만 처리합니다.