UFO ET IT

TCP에서 푸시 플래그와 긴급 플래그의 차이점

ufoet 2021. 1. 14. 07:49
반응형

TCP에서 푸시 플래그와 긴급 플래그의 차이점


나는 국기와 함께 TCP 세그먼트 사이의 차이를 이해하기 위해 노력하고있어 PSH및 플래그를 URG. RFC를 읽었지만 여전히 가져올 수 없습니다. 그들 중 하나는 데이터를 프로세스로 보내기 전에 버퍼링하고 다른 하나는 그렇지 않습니까?


그것들은 크게 다른 두 가지 메커니즘입니다.

PSH 및 PUSH 기능

데이터를 보낼 때 TCP버퍼링합니다. 따라서 캐릭터를 보내면 즉시 보내지는 않지만 더 많은 것이 있는지 기다려야합니다. 그러나 아마도 당신은 그것을 유선으로 똑바로 가고 싶을 수도 있습니다. 이것은 PUSH 기능이 들어오는 곳입니다. 데이터를 PUSH하면 TCP는 즉시 세그먼트 (또는 몇 개의 세그먼트)를 생성하고 푸시 합니다.

그러나 이야기는 여기서 끝나지 않습니다. 피어 TCP가 데이터를 수신하면 자연스럽게 버퍼링하여 각 바이트마다 애플리케이션을 방해하지 않습니다 . 여기에서 PSH플래그가 시작됩니다. 수신 TCP가 PSH 플래그를 확인하면 즉시 데이터를 응용 프로그램에 푸시 합니다.

PSH플래그 를 설정하는 API가 없습니다 . 일반적으로 커널이 버퍼를 비울 때 설정합니다. TCP / IP 그림에서 :

이 플래그는 일반적으로 패킷을 보내는 쪽의 버퍼가 패킷을 보내는 것과 함께 비워 졌음을 나타내는 데 사용됩니다. 즉, PSH 비트 필드가 설정된 패킷이 보낸 사람을 떠났을 때 보낸 사람은 더 이상 보낼 데이터가 없습니다.

그러나 Stevens는 또한 다음과 같이 말합니다.

푸시 (수신자는이 데이터를 가능한 한 빨리 애플리케이션에 전달해야합니다. 안정적으로 구현되거나 사용되지 않음 )

URG 및 OOB 데이터

TCP는 스트림 지향 프로토콜입니다. 따라서 한 쪽에서 64K 바이트를 푸시하면 결국 다른 쪽에서는 64K 바이트가됩니다. 따라서 많은 데이터를 푸시 한 다음 "이봐, 내가 방금 보낸 모든 데이터를 알고 계십니까? 그래, 버려라"라는 메시지가 있다고 상상해보십시오. 문제의 요지는 일단 연결에 데이터를 푸시하면 수신자가 새 데이터에 도달하기 전에 모든 데이터를받을 때까지 기다려야한다는 것입니다.

여기에서 URG플래그가 시작됩니다. 긴급 데이터를 보낼 때 TCP는 URG 플래그와 긴급 포인터 필드를 설정하는 특수 세그먼트를 만듭니다. 이로 인해 수신 TCP가 별도의 채널에있는 긴급 데이터를 애플리케이션에 전달합니다 (예 : Unix에서 프로세스가를 얻음 SIGURG). 이를 통해 애플리케이션 은 대역 외 ¹ 데이터를 처리 할 수 ​​있습니다 .


참고로, 긴급한 데이터는 오늘날 거의 사용되지 않고 잘 구현되지 않는다는 점을 아는 것이 중요합니다. 별도의 채널이나 다른 접근 방식을 모두 사용하는 것이 훨씬 쉽습니다.


¹ : RFC 6093 은 이러한 "대역 외"사용에 동의하지 않으며 다음과 같이 명시합니다.

TCP 긴급 메커니즘은 "대역 외"데이터를 전송하는 메커니즘이 아닙니다. 소위 "긴급 데이터"는 TCP 사용자에게 "인라인"으로 전달되어야합니다.

그러나 다음을 인정합니다.

기본적으로 "긴급 데이터"의 마지막 바이트는 응용 프로그램에 "대역 외"로 전달됩니다. 즉, 일반 데이터 스트림의 일부로 전달되지 않습니다.

애플리케이션은 SO_OOBINLINE표준을 준수하는 긴급 시맨틱을 얻기 위해 들어 그 방식을 벗어나서 지정해야 합니다.

이 모든 것이 복잡하게 들리면 긴급 데이터를 사용하지 마십시오 .


이미 답변 한 정보에 더 많은 정보를 추가합니다.

  • URG세트함으로써 의미 대신 앞서 "긴급"데이터 인 전송되는 전체 바이트 스트림을 기다리는 데이터를 최우선하는 경우 비트는, 상기 긴급 데이터는 긴급 기초하여 전송되며, 전체 바이트 스트림을 기다릴 것이다 전송 될 것입니다.

  • URG비트가 긴급 포인터도 설정되어 설정합니다 (의 TCP헤더 옵션 필드 : 16 비트).

  • URG포인터가 도착했습니다 세그먼트에서 긴급 얼마나 많은 바이트의 데이터를 말한다. 예를 들어 데이터 크기가 100 바이트이고 처음 50 바이트 만 긴급한 경우 긴급 포인터의 값은 50입니다.

  • 이제 PSH비트에 도달합니다 . PSH비트 의 목적은 버퍼가 가득 찰 때까지 기다리지 않고 즉시 데이터를 전송하도록 TCP에 알리는 것입니다. 마찬가지로 수신자가 PSH플래그가 설정된 세그먼트를 수신하면 수신 버퍼가 가득 찰 때까지 기다리지 않고 즉시 상위 계층으로 데이터를 전송해야합니다. 이것의 실제적인 예는 응용 프로그램이 몇 번의 키 입력 형태로 데이터를 보내는 텔넷 응용 프로그램입니다. 텔넷은 버퍼가 가득 찰 때까지 기다린 다음 데이터를 수신자에게 전송하면 사용할 수 없게됩니다.


RFC의 모든 것을 너무 엄격하게 받아들이지는 않을 것입니다. 이러한 플래그의 구현에 대해 모호한 부분이있는 것 같습니다. URG는 버퍼를 채우기 전에 패킷을 보내는 것과 관련이 있으며 PSH는 수신 측에서 데이터 스택 위로 이동하는 것을 제어합니다 .

참조 URL : https://stackoverflow.com/questions/9153566/difference-between-push-and-urgent-flags-in-tcp

반응형