네트워크 패킷 브로커의 주요 미스터리 TCP 연결 : 트리플 핸드 셰이크의 필요성을 비난했습니다.

TCP 연결 설정
웹을 탐색하거나 이메일을 보내거나 온라인 게임을 할 때 종종 복잡한 네트워크 연결에 대해 생각하지 않습니다. 그러나 우리와 서버 사이의 안정적인 커뮤니케이션을 보장하는 것은 이러한 작은 단계입니다. 가장 중요한 단계 중 하나는 TCP 연결 설정이며, 이것의 핵심은 3 방향 핸드 셰이크입니다.

이 기사는 3 방향 핸드 셰이크의 원리, 과정 및 중요성에 대해 자세히 설명합니다. 단계별로, 3 방향 핸드 셰이크가 필요한 이유, 연결 안정성과 안정성을 보장하는 방법, 데이터 전송에 얼마나 중요한지 설명합니다. 3 방향 핸드 셰이크에 대한 더 깊은 이해를 통해 우리는 네트워크 통신의 기본 메커니즘과 TCP 연결의 신뢰성에 대한 명확한 관점을 더 잘 이해할 수 있습니다.

TCP 3 방향 핸드 셰이크 프로세스 및 상태 전환
TCP는 연결 지향 전송 프로토콜로, 데이터 전송 전에 연결 설정이 필요합니다. 이 연결 설정 프로세스는 3 방향 핸드 셰이크로 수행됩니다.

 TCP 3 방향 악수

각 연결로 전송되는 TCP 패킷을 자세히 살펴 보겠습니다.

처음에는 클라이언트와 서버가 모두 닫힙니다. 첫째, 서버는 포트에서 적극적으로 자리를 듣고 청취 상태에 있으므로 서버를 시작해야합니다. 다음으로 클라이언트는 웹 페이지에 액세스 할 준비가되었으며 서버와 연결해야합니다. 첫 번째 연결 패킷의 형식은 다음과 같습니다.

 SYN 패킷

클라이언트가 연결을 시작하면 임의의 초기 시퀀스 번호 (client_isn)를 생성하고 TCP 헤더의 "시퀀스 번호"필드에 배치합니다. 동시에 클라이언트는 SYN 플래그 위치를 1로 설정하여 나가는 패킷이 SYN 패킷임을 나타냅니다. 클라이언트는 첫 번째 SYN 패킷을 서버로 보내서 서버와 연결을 설정하려고합니다. 이 패킷에는 애플리케이션 계층 데이터가 포함되어 있지 않습니다 (즉, 데이터 전송). 이 시점에서 클라이언트의 상태는 Syn-Sent로 표시됩니다.

SYN+ACK 패킷

서버가 클라이언트로부터 Syn 패킷을 수신하면 자체 일련 번호 (Server_isn)를 무작위로 초기화 한 다음 해당 번호를 TCP 헤더의 "일련 번호"필드에 넣습니다. 다음으로 서버는 "승인 번호"필드에서 Client_ISN + 1을 입력하고 SYN 및 ACK 비트를 모두 1로 설정합니다. 마지막으로 서버는 패킷을 클라이언트로 보냅니다. 여기에는 응용 프로그램 계층 데이터가 포함되어 있지 않습니다 (및 서버는 보낼 수있는 데이터가 없습니다). 현재 서버는 SYN-RCVD 상태에 있습니다.

ACK 패킷

클라이언트가 서버로부터 패킷을 수신하면 최종 응답 패킷에 응답하기 위해 다음과 같은 최적화를 수행해야합니다. 첫째, 클라이언트는 응답 패킷의 TCP 헤더의 ACK 비트를 1로 설정합니다. 둘째, 클라이언트는 "답변 번호 확인"필드에서 값 Server_isn + 1을 입력합니다. 마지막으로 클라이언트는 패킷을 서버로 보냅니다. 이 패킷은 클라이언트에서 서버로 데이터를 전달할 수 있습니다. 이러한 운영이 완료되면 클라이언트는 기존 상태에 들어갑니다.

서버가 클라이언트로부터 답장 패킷을 수신하면 확립 된 상태로 전환됩니다.

위의 프로세스에서 볼 수 있듯이 3 방향 핸드 셰이크를 수행 할 때 세 번째 핸드 셰이크는 데이터를 전달할 수 있지만 처음 두 개의 핸드 셰이크는 그렇지 않습니다. 이것은 인터뷰에서 종종 묻는 질문입니다. 3 방향 핸드 셰이크가 완료되면 양 당사자가 확립 된 상태에 들어가서 연결이 성공적으로 설정되었음을 나타냅니다.이 시점에서 클라이언트와 서버가 서로 데이터를 보내기 시작할 수 있습니다.

왜 세 가지 악수? 두 번, 네 번이 아니야?
일반적인 대답은 "3 방향 핸드 셰이크는 받고 보내는 능력을 보장하기 때문에"입니다. 이 대답은 정확하지만 표면 이유 일뿐 아니라 주된 이유를 제시하지는 않습니다. 다음은 세 가지 측면에서 트리플 핸드 셰이크의 이유를 분석 하여이 문제에 대한 이해를 심화시킬 것입니다.

3 방향 핸드 셰이크는 역사적으로 반복되는 연결의 초기화를 효과적으로 피할 수 있습니다 (주된 이유)
3 방향 핸드 셰이크는 양 당사자가 신뢰할 수있는 초기 시퀀스 번호를 받았다고 보장합니다.
3 방향 악수는 자원을 낭비하지 않습니다.

이유 1 : 역사적 복제 조인을 피하십시오
간단히 말해서, 3 방향 악수의 주된 이유는 이전 중복 연결 초기화로 인한 혼란을 피하는 것입니다. 복잡한 네트워크 환경에서, 지정된 시간에 따라 데이터 패킷의 전송이 항상 대상 호스트로 전송되는 것은 아니며, 기존 데이터 패킷은 네트워크 혼잡 및 기타 이유 때문에 먼저 대상 호스트에 도착할 수 있습니다. 이를 피하기 위해 TCP는 3 방향 핸드 셰이크를 사용하여 연결을 설정합니다.

3 방향 핸드 셰이크는 역사적 중복 연결을 피합니다

클라이언트가 네트워크 혼잡과 같은 상황에서 여러 SYN 연결 설정 패킷을 연속적으로 보내면 다음이 발생할 수 있습니다.

1- 오래된 SYN 패킷은 최신 SYN 패킷 전에 서버에 도착합니다.
2- 서버는 이전 SYN 패킷을 수신 한 후 클라이언트에게 SYN + ACK 패킷을 응답합니다.
3- 클라이언트가 SYN + ACK 패킷을 수신 할 때, 연결은 자체 컨텍스트에 따라 역사적 연결 (시퀀스 번호 만료 또는 시간 초과)임을 결정한 다음 RST 패킷을 서버로 보내 연결을 중단합니다.

두 개의 핸드 셰이크 연결을 사용하면 현재 연결이 역사적 연결인지 확인할 방법이 없습니다. 3 방향 핸드 셰이크를 통해 클라이언트는 현재 연결이 세 번째 패킷을 보낼 준비가되었을 때의 컨텍스트에 따라 과거 연결인지 여부를 결정할 수 있습니다.

1- 역사적 연결 (시퀀스 번호 만료 또는 시간 초과) 인 경우, 세 번째 핸드 셰이크가 전송하는 패킷은 역사적 연결을 중단하는 첫 번째 패킷입니다.
2- 역사적 연결이 아닌 경우, 세 번째로 전송 된 패킷은 ACK 패킷이며, 두 커뮤니케이션 당사자는 연결을 성공적으로 설정합니다.

따라서 TCP가 3 방향 핸드 셰이크를 사용하는 주된 이유는 역사적 연결을 방지하기 위해 연결을 초기화하기 때문입니다.

이유 2 : 양 당사자의 초기 시퀀스 번호를 동기화하려면
TCP 프로토콜의 양쪽은 시퀀스 번호를 유지해야하며, 이는 신뢰할 수있는 전송을 보장하는 핵심 요소입니다. 시퀀스 번호는 TCP 연결에서 중요한 역할을합니다. 다음을 수행합니다.

수신기는 중복 데이터를 제거하고 데이터의 정확성을 보장 할 수 있습니다.

수신기는 데이터의 무결성을 보장하기 위해 시퀀스 번호의 순서로 패킷을 수신 할 수 있습니다.

● 시퀀스 번호는 상대방이 수신 한 데이터 패킷을 식별하여 신뢰할 수있는 데이터 전송을 가능하게합니다.

따라서 TCP 연결을 설정하면 클라이언트는 초기 시퀀스 번호로 SYN 패킷을 보내고 서버가 클라이언트의 SYN 패킷을 성공적으로 수신하는 ACK 패킷으로 답장을 요구합니다. 그런 다음 서버는 초기 시퀀스 번호와 함께 SYN 패킷을 클라이언트에게 보내고 클라이언트가 한 번에 응답하여 초기 시퀀스 번호가 확실하게 동기화되도록합니다.

양 당사자의 초기 일련 번호를 동기화하십시오

두 당사자의 초기 시퀀스 번호를 안정적으로 동기화하기 위해 4 방향 핸드 셰이크가 가능하지만, 두 번째 및 세 번째 단계는 단일 단계로 결합하여 3 방향 악수를 초래할 수 있습니다. 그러나 두 핸드 셰이크는 한 당사자의 초기 시퀀스 번호가 다른 당사자에 의해 성공적으로 수신되도록 보장 할 수 있지만 양 당사자의 초기 시퀀스 번호를 확인할 수 있다는 보장은 없습니다. 따라서 TCP 연결의 안정성과 신뢰성을 보장하기 위해 3 방향 핸드 셰이크가 최선의 선택입니다.

이유 3 : 자원 낭비를 피하십시오
"2 핸드 셰이크"만 있으면 클라이언트 SYN 요청이 네트워크에서 차단되면 클라이언트는 서버에서 전송 된 ACK 패킷을받을 수 없으므로 SYN이 다시 열립니다. 그러나 세 번째 핸드 셰이크가 없기 때문에 서버는 클라이언트가 연결을 설정하기 위해 ACK 승인을 받았는지 확인할 수 없습니다. 따라서 서버는 각 SYN 요청을 수신 한 후에 만 ​​연결을 적극적으로 설정할 수 있습니다. 이것은 다음으로 이어집니다.

리소스 낭비 : 클라이언트의 SYN 요청이 차단되어 여러 SYN 패킷의 반복 전송이 발생하면 서버는 요청을 수신 한 후 여러 중복 무효 연결을 설정합니다. 이로 인해 서버 리소스의 불필요한 낭비가 발생합니다.

메시지 유지 : 세 번째 핸드 셰이크가 없기 때문에 서버는 클라이언트가 연결을 설정하기 위해 ACK 승인을 올바르게 받았는지 알 수있는 방법이 없습니다. 결과적으로 메시지가 네트워크에 갇히면 클라이언트는 계속해서 SYN 요청을 계속해서 보내어 서버가 새로운 연결을 지속적으로 설정하게합니다. 이는 네트워크 혼잡을 증가시키고 지연 및 전체 네트워크 성능에 부정적인 영향을 미칩니다.

자원을 낭비하지 마십시오

따라서 네트워크 연결의 안정성과 신뢰성을 보장하기 위해 TCP는 3 방향 핸드 셰이크를 사용하여 이러한 문제의 발생을 피하기 위해 연결을 설정합니다.

요약
그만큼네트워크 패킷 브로커TCP 연결 설정은 3 방향 핸드 셰이크로 수행됩니다. 3 방향 핸드 셰이크 중에 클라이언트는 먼저 SYN 플래그가있는 패킷을 서버로 보냅니다. 클라이언트로부터 요청을 수신 한 후 서버는 SYN 및 ACK 플래그와 패킷을 클라이언트에 응답하여 연결 요청이 수락되었음을 나타내고 자체 초기 시퀀스 번호를 보냅니다. 마지막으로, 클라이언트는 ACK 플래그로 서버에 응답하여 연결이 성공적으로 설정되었음을 나타냅니다. 따라서 두 당사자는 기존 상태에 있으며 서로에게 데이터를 보내기 시작할 수 있습니다.

일반적으로 TCP 연결 설정을위한 3 방향 핸드 셰이크 프로세스는 연결 안정성과 신뢰성을 보장하고, 역사적 연결에 대한 자원의 혼란과 낭비를 피하고, 양 당사자가 데이터를 수신하고 보낼 수 있도록 설계되었습니다.


시간 후 : 1 월 8 일 -2025 년