새로운 TCP 연결을 만드는 데 비용이 많이 드는 이유는 무엇입니까?


9

새 TCP 연결을 만드는 것이 왜 비싼 작업인지 이해하지 못합니다. 기본적으로 새 연결 설정은 TCP의 3 방향 핸드 셰이크 수행을 나타냅니다. 두 개의 패킷을 보내고 하나를받습니다. 수천 개의 (데이터) 패킷이 뒤따를 것이라는 점을 고려하면 핸드 셰이크는 비용이 많이들 수 없습니다. 할 수 있습니까?


CPU 및 연결의 메모리 사용으로 인한 것일 수 있습니까?
joeqwerty 2

@joeqwerty 나는 새로운 TCP 연결은 일반적으로 서버와 같은 새로운 프로세스 / 스레드를 만드는 것을 의미한다는 것을 이해하지만 TCP 때문이 아니라 응용 프로그램 때문입니다.

경우 데이터 패킷의 수천 따르 handshaks는 비용에 포함되지 않습니다. 그러나 각 데이터 청크에 대해 새로운 TCP 연결을 사용하지 않는 이유는 무엇입니까? 새로운 TCP 연결을 만드는 데 많은 비용이 듭니다. 그렇기 때문에 하나의 연결을 설정 한 다음 수천 개의 데이터 청크에 사용합니다.
David Schwartz

1
또한 새 연결 작성이 TCP 핸드 셰이크에만 국한되지 않을 수도 있습니다. 예를 들어 SSL은 인증 및 암호화 세부 사항에 대한 많은 협상을 추가합니다.
Zoredache

답변:


10

나는 일반적으로 TCP 연결을 여는 것이 이미 열려있는 연결을 열어서 재사용 할 수있는 능력과 비교할 때 비용이 많이 든다고 생각합니다. 맞습니다. 연결을 여는 데 3 패킷 / 턴만 소요되지만 그 시간 (3 x RTT)은 이미 열려있는 연결을 재사용하는 비용을 훨씬 초과하여 0에 훨씬 가깝습니다. 연결을 자주 열고 닫습니다.

당신은 확실히 당신이 응용 프로그램이 "일을"할 것으로 볼 수있는 회전 수와 비교할 때이 3 개의 패킷은 매우 작게 보일 수 있지만 다시, 옵션을 비교하려는 방법에 달려 있습니다. 응용 프로그램의 동작 / 연결을 계획하는 횟수

편집 우리가 UDP와 TCP를 이야기한다면, Cheekaleek는 100 % 정확합니다 .UDP의 비 연결 동작과 비교할 때 장기적으로 오버 헤드가 엄청납니다.


1
패킷 추적에서 본 좋은 예 : 재사용 된 MySQL 연결은 2-5ms 안에 쿼리를 전환 할 수 있습니다. 일련의 ElasticSearch 쿼리는 17-25ms 안에 쿼리를 전환하며, 대부분의 시간은 연결 설정 (초기 DNS 조회 포함)에있었습니다.
sysadmin1138

2

UDP 패킷을 보내는 것보다 확실히 오버 헤드가 발생하고 그 이후의 일을 신경 쓰지 않습니다.

TCP에는 더 많은 헤더 데이터가 제공되며 연결 상태를 유지하여 리소스를 소비합니다.

예, UDP에 비해 TCP는 더 비싸지 만 비싸다는 것은 상대적 용어입니다.

"TCP 연결은 여자의 가장 친한 친구입니까 ???"


5
"TCP connections are a girl's best friend???" 아니야, 그들은 그렇지 않아. 나는 그녀의 생일을 위해 수천 명의 소녀를 얻었고 그녀가 한 모든 일은 내 이메일 반환을 중단했습니다. :(
HopelessN00b

2

단순히 패킷을 보내고받는 것이 아닙니다. 세션이 설정 될 때까지 각 단계에서 추가 메모리를 할당하고 최소 네트워킹 상태 테이블을 업데이트해야합니다. 수행 할 수있는 추가 보안 검사 (경로 스푸핑 방지 등)는 말할 것도 없습니다.

설정된 세션에 대한 패킷의 CPU 비용이 1 단위 인 경우 일부 예제 번호를 사용하면 (특정 운영 체제에 대해 이야기하지 않기 때문에) 새 세션의 비용은 10x 또는 100x 수행 된 작업. 필자가 작업 한 대부분의 하드웨어 방화벽은 기존 세션을 처리 할 수있는 것보다 초당 훨씬 적은 수의 새로운 연결을 처리 할 수 ​​있습니다.

특히 SYN-SYN / ACK-ACK가 밀리 초 단위로 발생하기 때문에 그다지 큰 문제는 아니지만 많은 고객이있는 대규모 시스템의 경우 새 세션이 상당한 오버 헤드 로 바뀔 수 있습니다 .


2

트래픽의 양 또는 유형은 실제로 메모리 할당 및 관련된 상태 정보 추적과 관련된 코드보다 훨씬 중요합니다. 이것이 의미하는 바를 대략적으로 이해하려면 TCP와 관련된 Linux 커널에서 UDP 또는 ICMP와 관련된 코드의 양을 살펴보십시오. 엄청나게 거친 비교는 UDP에서 발견되는 코드 라인 수의 10 배가 필요한 TCP를 보여줍니다.

IP 네트워킹에서 필요한 상태 유지 관리 량은 확장 성의 가장 중요한 결정 요소 중 하나입니다. TCP 엔드 포인트의 경우 SYN / ACK뿐만 아니라 슬라이딩 윈도우, 시퀀스 번호, 버퍼 관리 및 QoS 작업 등의 지속적인 유지 관리에서도 표현됩니다. tcp 에 대한 FSM의 복잡성을 확인하고 UDP에서 고유 한 부족을 고려하십시오. ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.