TCP Half Open Connection과 TCP Half Close 연결이란 무엇입니까


17

TCP Half Open Connection과 TCP Half Closed Connection의 차이점이 무엇인지 이해하려고 노력하고 있습니다.

답변:


26

이 게시물은 절반 닫힌 연결에서 확장됩니다. 반 개방 연결의 경우 KContreau의 올바른 설명을 참조하십시오.

반 폐쇄 연결이란 무엇입니까? 또는 : 버그가 아닙니다. 기능입니다!

모든 TCP 연결은 서로 독립적으로 닫힌 두 개의 반 연결로 구성됩니다. 따라서 한쪽 끝이 FIN을 보내면 다른 쪽 끝은 FIN + ACK 대신 FIN을 ACK 만하면 FIN 전송쪽에 여전히 보낼 데이터가 있음을 알립니다. 따라서 양쪽 끝은 ESTABLISHED 이외의 안정적인 데이터 전송 상태, 즉 FIN_WAIT_2 (수신 끝) 및 CLOSE_WAIT (송신 끝)로 끝납니다. 이러한 연결은 절반 닫힘이라고하며 TCP는 실제로 이러한 시나리오를 지원하도록 설계되었으므로 절반 닫힌 연결은 TCP 기능입니다.

반 폐쇄 연결의 역사

RFC 793은 "반 개폐"라는 용어를 언급하지 않고 원시 메커니즘 만 설명하지만 RFC 1122는 4.2.2.13 절에서 그 문제에 대해 자세히 설명합니다. 누가 그 기능이 필요한지 궁금 할 것입니다. TCP 설계자들은 또한 Unix 시스템을위한 TCP / IP를 구현했으며 모든 Unix 사용자와 마찬가지로 I / O 리디렉션을 좋아했습니다. W. Stevens (TCP / IP 그림 18.5 참조)에 따르면 I / O 리디렉션 TCP 스트림에 대한 요구는이 기능을 도입하려는 동기였습니다. 이를 통해 FIN ack가 EOF의 역할을 수행하거나 EOF로 변환 될 수 있습니다. 따라서 기본적으로 FIN이 "요청 종료"신호를 보내는 응용 프로그램 계층에서 즉석 요청 / 응답 스타일 상호 작용을 생성 할 수있는 기능입니다.


10

다른 사람은 반 개방 및 반 폐쇄 연결이 실제로 무엇을 설명하는 상당히 괜찮은 일했다 됩니다 만, 반 열린 연결의 아이디어는 종종 문제가 되 고 그 맥락에서 검색됩니다.

인터넷에서 "반 개방"또는 "반 개폐"라는 용어가 무엇을 나타내는 지에 대한 논쟁이 있지만, 제가 아는 한, 용어는 의미 론적입니다. 어떤 사람들은 "반쯤 열린"연결은 "문제"라고 말하지만 "반쯤 닫힌"은 파일 다운로드가 반 닫힘 상태에서 끝나기 전에 전송 스트림을 닫아 전송 스트림을 닫을 수있는 디자인 기능입니다 ( 다른 사용자가 설명한대로).

그러나 다른 문제에 대해서는 "문제": TCP 연결을 열기 위해 3 방향 핸드 셰이크를 닫고이를 닫으려면 4 방향 핸드 셰이크가 필요합니다.

TCP는 클라이언트로 전송 된 최종 FIN 패킷이 라우터 / 네트워크에 의해 잠재적으로 삭제 될 수있어 실제 의도가 연결을 완전히 종료하려고 할 때 연결이 절반 개방되는 취약점이 있습니다. 이러한 접근 방식과 유사한 접근 방식은 많은 대역폭이 필요하지 않지만 서버 구현에 따라 귀중한 핸들, 소켓 및 스레드를 잠재적으로 제거 할 수 있기 때문에 널리 사용되는 서비스 거부 공격 유형입니다. 우리의 무선 통신 사업자 덕분에 주파수가 증가하고 있습니다.

운영 체제는 주어진 시간에 운영 체제에 존재할 수있는 반 개방 / 폐쇄 연결 수를 제한하고 연결이 최대로 유지 될 수있는 최대 시간을 도입함으로써 반 개방 DDoS 공격에 맞서 싸우려고 시도했습니다. 반 개폐 / 폐쇄 상태. 마지막으로 개인적으로 확인했지만 Windows의 시간 제한은 꽤 높았습니다 (내 생각에 2 일).

TCP keep-alives의 선택적 특성으로 인해이 조건이 더욱 악화됩니다.이 기능은 완전히 구현 된 경우 데드 / 좀비 연결을 감지하기위한 프로토콜 수준 (응용 프로그램 수준이 아닌) 솔루션으로 의도되었습니다. 그러나 TCP가 설계되었을 때 대역폭은 현재보다 훨씬 더 귀중했으며 TCP에 대한 필수 keep-alive 타이머가 너무 "불쾌"하다는 우려가있었습니다. 따라서 연결 유지는 선택 사항이며 일반적으로 사용되지 않으며 RFC1122에 따라 라우터에서 전송되도록 보장되지 않습니다. 따라서 ... 시나리오를 탐지 / 처리하려는 시도에서 TCP 계층에서 연결 유지를 활성화하더라도 트래픽이 전 세계로 이동함에 따라 일부 라우터가 연결 유지 패킷을 삭제하고 있음을 알 수 있습니다. 잠재적으로 테스트하기 어려운 또 다른 시나리오입니다.

Half-Open 연결은 특히 TCP 기반 서버를 작성하는 코더에게 약간의 엔지니어링 과제를 제기합니다. 특히 고부하시에는 일반적으로 프로덕션 서버에서 임의로 우연히 나타날 수 있기 때문에 TCP 서버 기반 서버를 작성하는 코더에게는 다소 어려움이 있습니다. 알파 / 베타 테스트 단계에서는 눈에 띄지 않습니다. 내 경험상, 하루 250 만 회 연결을 처리하는 서버에서 40,000 개의 연결 중 1 개에서 발생하는 것으로 나타 났지만이 수는 서버와 클라이언트 사이의 모든 인터넷 구간의 트래픽 조건과 트래픽 조건에 따라 달라질 수 있습니다. .

엔지니어는 실제 배포 된 서버에서만 발생하는 문제를 추적하기 어려울 수 있으므로 TCP 서버 코드를 작성할 때이 드문 상태의 연결을 시뮬레이션하여 서버의 반응 시간을 분석하는 것이 중요합니다 이 상황에 직면했다. 예를 들어 TCP 서버가 고정 된 수의 작업자 스레드를 사용하는 경우 프로덕션에 배포 할 때 좀비 연결에 소비되는 모든 스레드를 찾을 수 있습니다. 연결에 많은 작업 메모리가 필요한 경우 최종 결과는 메모리 누수와 유사하게 나타날 수 있습니다. 등

100 % 실행 가능한 연결 유지 솔루션이 없으면 TCP는 사용자 계층에 맡겨서 반 개방 / 폐쇄 연결 처리 방법을 결정하므로 코드에 감지, 시간 초과 및 정리를위한 계획 / 메커니즘이 있어야합니다. 이 상황이 발생했을 때 리소스를 ... 즉, 이것은 여러분이 발명 한 프로토콜이라고 가정하고 프로그래머가 일반적으로 사용하는 많은 (나쁜) 공개 표준 중 하나가 아니라고 가정합니다. 물론 TCP를 통해 독점적으로 실행되는 HTTP와 같은 프로토콜을 언급하고 있습니다. 이 프로토콜은이 프로그래머의 의견에 따라 과대 평가되었습니다.

똑똑한 회사는 TCP의 약점과 HTTP / 웹 트래픽 전송에 대한 불행한 인기를 인식하여 대체물을 찾고자했습니다. 예를 들어 Google은 UDP를 통해 HTTP를 전송하는 QUIC라는 프로토콜을 실험했습니다. TSCP라는 개방형 프로토콜도 있습니다. 그러나 이러한 프로토콜 중 어느 것도 널리 채택되지 않았습니다.

원칙적으로, 나는 내 자신의 UDP 기반 프로토콜에 대해 독점적으로 대화하기 위해 모든 자신의 서버를 구축합니다. UDP는 당신이 생각하는 것보다 까다 롭고 항상 더 빠르고 똑똑하고 지연 시간이 적고 혼잡이 적도록 조정하고 있다고 생각하지만 적어도 반 열린 연결을 처리 할 필요는 없습니다. )


9

TCP가 연결을 설정하면 핸드 셰이크가 발생하므로 보장되는 것으로 간주됩니다.

  1. 시작 컴퓨터가 SYN을 전송하는 연결 요청을 보냅니다.
  2. 응답 컴퓨터가 SYN-ACK로 응답하여 요청을 승인합니다.
  3. 시작 컴퓨터는 ACK로 응답하여 승인을 보냅니다.

이 시점에서 연결이 설정되고 데이터가 흐르기 시작합니다. 대조적으로, UDP 패킷은 보장되지 않으며, 그것이 도착하기를 희망하여 전송됩니다.

http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_establishment

여기에 이미지 설명을 입력하십시오

공식적으로 RFC에 따르면 반 열린 TCP 연결은 설정된 연결의 한쪽이 충돌하고 연결이 종료되었다는 알림을 보내지 않은 경우입니다. 이것은 오늘날 일반적인 사용법이 아닙니다.

비공식적으로, 설립 과정에서 연결 인 배아 연결을 언급 할 수 있다면.

http://en.wikipedia.org/wiki/Embryonic_connection

반 닫힘은 비공식적 정의와 반대입니다. 컴퓨터가 설정된 연결을 해제하고있는 중간의 상태입니다.


4
절반 마감에 대한 귀하의 의견은 오해의 소지가 있습니다
artistoex

0

TCP 연결 종료에 대한 최상의 설명

TCP 3-way Handshake Process에서 SYN 비트 세그먼트를 사용하여 TCP (Transmission Control Protocol)에서 클라이언트와 서버간에 연결이 설정되는 방법을 연구했습니다. 이 기사에서는 클라이언트와 서버 간의 TCP 연결이 어떻게 이루어지는 지에 대해 학습합니다. 여기서 FIN 비트가 1로 설정된 서버로 비트 세그먼트를 보내야합니다.

11 여기에 이미지 설명을 입력하십시오

TCP에서 메커니즘 작동 방식 :

Step 1 (FIN From Client) – Suppose that the client application decides it wants to close the connection. (Note that the server could also choose to close the connection). This causes the client send a TCP segment with the FIN bit set to 1 to server and to enter the FIN_WAIT_1 state. While in the FIN_WAIT_1 state, the client waits for a TCP segment from the server with an acknowledgment (ACK).
Step 2 (ACK From Server) – When Server received FIN bit segment from Sender (Client), Server Immediately send acknowledgement (ACK) segment to the Sender (Client).
Step 3 (Client waiting) – While in the FIN_WAIT_1 state, the client waits for a TCP segment from the server with an acknowledgment. When it receives this segment, the client enters the FIN_WAIT_2 state. While in the FIN_WAIT_2 state, the client waits for another segment from the server with the FIN bit set to 1.
Step 4 (FIN from Server) – Server sends FIN bit segment to the Sender(Client) after some time when Server send the ACK segment (because of some closing process in the Server).
Step 5 (ACK from Client) – When Client receive FIN bit segment from the Server, the client acknowledges the server’s segment and enters the TIME_WAIT state. The TIME_WAIT state lets the client resend the final acknowledgment in case the ACK is lost.The time spent by client in the TIME_WAIT state is depend on their implementation, but their typical values are 30 seconds, 1 minute, and 2 minutes. After the wait, the connection formally closes and all resources on the client side (including port numbers and buffer data) are released.

자세한 정보 : https://www.geeksforgeeks.org/tcp-connection-termination/


-1

반 폐쇄 연결은 서버와 클라이언트의 한쪽 끝이 연결을 종료 할 때 설정되는 프로세스입니다. TCP는 연결 지향 프로세스이므로 특정 응용 프로그램을 위해 각 소켓이 열립니다. TCP에서는 응용 프로그램을 종료 할 압력이 없습니다. 따라서 연결 지향 프로세스는 대기 신호로 종료를 연장합니다. 이것은 TCP에서 반 닫힘이라고합니다 (연결)


1
절반 닫힌 연결은 '프로세스'가 아닙니다. TCP는 '연결 지향'프로세스 '가 아닙니다. TCP는 응용 프로그램 종료와 관련이 없습니다. 그리고 TCP에는 '대기 신호'가 없습니다. 이것은 혼란스럽고 잘못되었습니다.
Johannes Overmann
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.