목차
1. TCP/IP network stack 간단 소개 및 정리
2. Ack Sending Mode 란?
3. Delayed Ack & Quick Ack 소개, 차이점
4. Linux 코드에서는 어떻게 구현이 되어있는가? 코드 분석
5. 관련 RFC
이번에 공부하며 알게된 리눅스 커널의 Ack Sending Mode에 대해서 정리도 할겸, 이렇게 블로그 포스트를 남겨봅니다.
TCP/IP Network Stack에서의 ACK
TCP 통신에서는 "신뢰성"을 가장 최우선에 두고 통신을 합니다. 때문에 UDP같은 프로토콜과는 달리 패킷이 수신자(받는이)에게 잘 도착하였는지, 또는 중간에 유실은 되지 않았는지 확인하는 기능과 옵션들이 있는데요, 이중의 대표적인 기능중 하나가 바로 "Ack 에 기반한 통신"입니다. TCP에서는 수신자에게 보낸 payload data(데이터)에 대한 Ack(Acknowledgement)을 받아야 정상적으로 데이터가 수신자에게 도착을 하였다고 판단합니다. 만약 Ack 이 돌아오지 않는다면 송신자(보낸이)는 수신자가 해당 payload data를 받지 못했다고 판단하고 retransmit(재전송)을 합니다.
때문에 TCP 프로토콜에서는 ACK이 굉장이 중요한 역할을 해주고 있으며, 안정적인 통신을 할 수 있도록 도와주는 기능입니다. 초창기 TCP의 경우, 수신자는 받은 payload data에 대해서 모두 Ack을 보냈었습니다. 그 당시에는 end-point 장비들도 많지 않았고, 유저수도 적었기에 별 문제없이 가능했었지요. 하지만 지금의 네트워크 현황을 본다면, 수신자가 받은 payload data마다 Ack 패킷을 보낸다면, 한정된 대역폭(bandwidth) 자원을 많이 사용하게 되어서 데이터를 보내고 받는데 더 오랜 시간이 걸리게 됩니다. 그리고 이 문제를 해결하고자 나온 기능이 바로 Delayed Ack 입니다.
Ack Sending Mode란?
Delayed Ack & Quick Ack
Linux Kernel 코드의 Ack Sending은?
관련 RFC 문서
'Development > Linux & Kernel' 카테고리의 다른 글
systemd 관련 문서 (0) | 2018.11.15 |
---|---|
Linux Booting Process (0) | 2018.11.15 |
Linux Crash Dump 분석하기 (0) | 2015.06.01 |