kakaoChannel: false
<body>
<div class="notion-page-content padding">
<div id="darass"
data-project-key="MGxNT547E7u0i1i466"
data-dark-mode="false"
data-primary-color="#10DF99"
data-show-sort-option="true"
data-allow-social-login="true"
data-show-logo="true"
style="flex-shrink:0;flex-grow:1;display:flex;align-items:center;flex-direction:column;color:rgb(55, 53, 47);padding-top:5px;padding-bottom:var(--page-content-padding-bottom);margin:0 auto;"
>
<script type="text/javascript" defer>
(function () {
var $document = document;
var $script = $document.createElement("script");
$script.src = "<https://reply-module.darass.co.kr/embed.js>";
$script.defer = true;
$document.head.appendChild($script);
})();
if (window.matchMedia("(min-width: 400px)").matches) {
document.getElementById("darass").style.maxWidth = "730px";
} else {
document.getElementById("darass").style.maxWidth = "400px";
}
</script>
</div>
</div>
</body>
⬅️ 이전 글 : TCP 성능
‣
➡️ 다음 글 : 없음
이번 포스팅에서는 **HTTP 완벽가이드, 네트워킹과 웹 성능 최적화 기법, 리눅스 커널 이야기, 와이어샤크를 활용한 실전 패킷 분석** 책을 활용하였습니다.
패킷 유실에 따른 비정상적인 통신흐름이 발생할 수 있다. 가령, 아래 그림과 같이 마지막 ACK가 중간에 유실될 경우 FIN에 대한 ACK를 받지 못했기에 LAST-ACK상태이고, SYN 요청에 대해 RST를 보낸다.
반면, TIME_WAIT이 있을 경우에는 이상을 감지하여 한번 더 FIN 패킷을 요청한다.
active closer(먼저 연결을 끊는) 쪽에서 TIME_WAIT 소켓이 생성된다.
TIME_WAIT 소켓이 많아지면, 로컬의 포트 고갈에 따른 애플리케이션 타임아웃, 잦은 TCP connection 생성/해제로 인해 서비스의 응답속도가 낮아진다. (TIME_WAIT 소켓의 기본 타임아웃은 1분이다.)
커널 파라미터(tcp_tw_reuse
)를 사용하여 TIME_WAIT 소켓을 재사용할 수 있다. 하지만 불필요한 TCP 3way handshake가 일어날 수 있으므로 요청할 때마다 소켓을 새로 연결하는 방식(Connectionless)가 아닌, 미리 **소켓을 열어놓고 처리하는 방식(Connection Pool)**으로 해결할 수 있다.