Nice programing

WebSockets ping / pong, TCP keepalive가 아닌 이유는 무엇입니까?

nicepro 2020. 11. 23. 20:00
반응형

WebSockets ping / pong, TCP keepalive가 아닌 이유는 무엇입니까?


WebSocket 에는 다른 쪽 끝이 퐁으로 응답해야하는 다른 쪽 끝으로 핑을 보내는 옵션 이 있습니다.

Ping 프레임을 수신 한 엔드 포인트는 이미 Close 프레임을 수신하지 않은 경우 응답으로 Pong 프레임을 전송해야합니다. 가능한 한 빨리 퐁 프레임으로 응답해야합니다 (SHOULD).

TCP 킵 얼라이브 형태로 비슷한 것을 제공합니다 .

데이터가없고 ACK 플래그가 켜져있는 연결 유지 프로브 패킷을 피어에 보냅니다. TCP / IP 사양 때문에 일종의 중복 ACK로이 작업을 수행 할 수 있으며 TCP는 스트림 지향 프로토콜이므로 원격 끝점에는 인수가 없습니다. 반면에 데이터와 ACK 세트가없는 원격 호스트 (keepalive를 전혀 지원할 필요가없는 TCP / IP 만 지원)로부터 응답을받습니다.

TCP keepalive는 사용자 공간까지 데이터를 전송하고, 웹 소켓 프레임을 구문 분석하고, 응답 프레임을 만들고, 전송을 위해 다시 커널에 전달할 필요없이 커널 내에서 처리 할 수 ​​있기 때문에 더 효율적이라고 생각합니다. 또한 네트워크 트래픽이 적습니다.

또한 WebSocket 항상 TCP를 통해 실행되도록 명시 적으로 지정 됩니다. 전송 계층에 구애받지 않으므로 TCP keepalive는 항상 사용할 수 있습니다.

WebSocket 프로토콜은 독립적 인 TCP 기반 프로토콜입니다.

그렇다면 TCP keepalive 대신 WebSocket 핑 / 퐁을 사용하려는 이유는 무엇입니까?


TCP Keepalive의 문제점은 다음과 같습니다.

  1. 기본적으로 꺼져 있습니다.
  2. Ping / Pong 프로토콜이 제공하는 주문형 대신 기본적으로 2 시간 간격으로 작동합니다.
  3. 그것은 끝에서 끝까지가 아니라 프록시 사이에서 작동합니다.

EJP의 답변 외에도 HTTP 프록시 메커니즘과 관련이 있다고 생각합니다. Websocket 연결은 (HTTP) 프록시 서버를 통해 실행할 수도 있습니다. 이러한 경우 TCP keepalive는 종단 간 연결이 아닌 프록시까지의 연결 만 확인합니다.


http://www.whatwg.org/specs/web-apps/current-work/multipage/network.html#ping-and-pong-frames

.3.4 Ping 및 Pong 프레임

WebSocket 프로토콜 사양은 연결 유지, 하트 비트, 네트워크 상태 프로빙, 대기 시간 계측 등에 사용할 수있는 Ping 및 Pong 프레임을 정의 합니다. 현재 API에 노출되어 있지 않습니다.

사용자 에이전트는 예를 들어 로컬 네트워크 NAT 매핑을 유지하거나 실패한 연결을 감지하거나 사용자에게 대기 시간 메트릭을 표시 하려는 시도에서 원하는대로 핑 및 요청하지 않은 퐁 프레임을 보낼 수 있습니다 . 사용자 에이전트는 서버를 지원하기 위해 핑 또는 요청하지 않은 퐁을 사용해서는 안됩니다. 서버는 서버의 필요에 따라 적절할 때마다 퐁을 요청한다고 가정합니다.

WebSocket은 RTC를 염두에두고 개발되었으므로 핑 / 퐁 기능을 살펴보면 지연 시간을 측정하는 방법도 있습니다. 퐁이 핑과 동일한 페이로드를 반환해야한다는 사실은 타임 스탬프를 전송 한 다음 클라이언트에서 서버로 또는 그 반대로 지연 시간을 계산하는 것이 매우 편리합니다.


TCP keepalive는 웹 프록시를 통해 전달되지 않습니다. 웹 소켓 핑 / 퐁은 웹 프록시를 통해 전달됩니다. TCP keepalive는 TCP 엔드 포인트 간의 연결을 감독하도록 설계되었습니다. 웹 소켓 끝점은 TCP 끝점과 동일하지 않습니다. 웹 소켓 연결은 두 개의 웹 소켓 끝점 사이에 여러 TCP 연결을 사용할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/23238319/websockets-ping-pong-why-not-tcp-keepalive

반응형