ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TCP PSH 플래그
    네트워크 2019. 12. 23. 11:30
    반응형

    PSH 플래그

    PSH 플래그의 기능을 이해하려면 우선 TCP가 데이터를 버퍼링하는 방법을 이해해야 한다. 

     

    기본적인 이야기 부터 해보자. TCP는 OSI Layer 4에서 동작한다. 그것은 패킷 기반 통신의 복잡성을 감추고, 들어온 데이터를 읽어내거나, 혹은, 내보낼 데이터를 쓸 수 있는 간단한 소켓 인터페이스를 상위 Layer에 제공한다. 그리고 TCP는 응용 프로그램(OSI Layer 7)이 언제든지 이 소켓으로부터 읽거나 쓸 수 있도록 버퍼를 제공한다. 버퍼는 TCP 연결 양쪽(송신자와 수신자)의 들어오고 나가는 양쪽 방향 모두에서 구현된다. 말이 헷갈린다면 간단히 생각하자. 송신자의 TCP도 read buffer, write buffer 를 가지고, 수신자의 TCP도 read buffer, write buffer를 가진다.

     

    아래 다이어그램은 송신 전에 송신자가 데이터를 버퍼링하는 방법과 수신자가 수신 시 데이터를 버퍼링하는 방법을 보여준다.

     

     

     

     

    MSS (Maximum Segment Size)를 초과하는 데이터 보낼때를 상상해 보라. 예를 들면 큰 파일 전송 같은 것 말이다. 버퍼는 이런 큰 데이터를 보다 효율적으로 전송할 수 있게 해주는 역할을 한다. 그러나 데이터를 가능한 한 빨리 전송해야 하는 실시간 응용 프로그램을 처리 할 때는 큰 버퍼가 좋지 않다. 예를 들어 TCP가 패킷을 보내기 전에 패킷의 버퍼를 데이터가 가득 채울때까지 기다리다가 전송한다면.. 텔넷 세션에 어떤 일이 발생하는지 생각해보라. 첫 번째 패킷이 원격 장치로 전송되게 하려면 그 전에 먼저 문자 타이핑을 1000자 넘게 해야할 것이다. 이럴땐 별로 유용해 보이지 않는다. 

     

    만약 텔넷의 예가 어렵다면, 카카오톡이나 채팅 프로그램 같은걸 상상해 보면 된다. 짧은 메세지 몇글자 보내려 하는데, TCP버퍼가 가득 찰때까지 기다렸다가 전달된다면? 답답할 것이다.

     

    바로 이것이 PSH 플래그가 필요한 경우다.

    응용프로그램(Application Layer) 에서는 소켓에  "Push"하는 옵션을 사용하여 데이터를 쓸 수있다. 이 옵션은  추가 데이터가 버퍼에 들어갈 때까지 기다리지 않고 즉시 데이터를 내보낸다. 이 경우 송신 TCP 패킷의 PSH 플래그가 1로 설정된다. 연결의 반대편인 '수신측' 종단에서는 PSH 플래그가 설정된 패킷을 수신하면 TCP세그먼트를 응용프로그램에 즉시 전달하도록 동작한다. PSH 플래그가 없다면 수신측에서도 버퍼에 일정량의 데이터가 모일때까지 기다렸다가 응용프로그램에 전달할 것이다.

     

    설명이 어렵고 이해가 안된다면 아래 요약만 일단 기억하자

    TCP의 push 기능은 다음 두 가지를 수행한다.

    • 송신측에서의 PSH 기능: 호스트의 응용프로그램(Application Layer)은 '이 데이터는 버퍼에 쌓지 말고 즉시 보내라' 고 TCP Layer에 알리는 역할을 한다.
    • 수신측에서의 PSH 기능: '이 데이터는 버퍼에 쌓지 말고 즉시 응용프로그램(Application Layer) 에 올려야 되겠군' 하고 수신측 호스트의 TCP Layer가 인식하게 하는 역할을 한다.

     

    아래 패킷 캡쳐 예를 보자.

    패킷 #36은 HTTP GET 요청인데, PSH 플래그를 사용하는 예를 볼 수 있다. 이 HTTP 요청에는 PSH 플래그가 설정되어 클라이언트에 추가 할 데이터가 더 이상 없고 요청이 애플리케이션 (이 경우 웹서버 데몬)에 즉시 전송되어야 함을 나타낸다. 다시 말하면, PSH 플래그는 송신기가 더 이상 송신 할 데이터가 없다는 것을 수신기에 알리기 위해 사용된다 (현재로서는).

     

     

     

     

     

    앞서 언급 했듯이, PSH 플래그는 TCP를 통한 실시간 통신을 용이하게하기 위해 사용된다. 관심이 있다면 한가지 실험을 해보면 좋을것 같다. 텔넷의 패킷을 캡쳐해서 wireshark로 살펴보길 바란다. 텔넷 세션의 패킷 캡처는 텔넷 데이터를 전송하는 모든 패킷이 키 누름이 TCP에 의해 버퍼링되는 것을 방지하기 위해 PSH 플래그를 1로 설정되어 있음을 보여줄 것이다.

    반응형

    '네트워크' 카테고리의 다른 글

    /26 서브넷 주소 범위  (0) 2020.01.02
    네트워크 회선 속도 이슈  (0) 2020.01.02
    네트워크 Zero Window 발생 원인  (0) 2019.12.23
    인터넷 속도 단위 Mbps와 MB와의 관계  (0) 2019.11.14
    네트워크 트러블 슈팅  (0) 2019.10.21
Designed by Tistory.