WHEREIS

웹서버 2대를 L4 에 등록 후 테스트 하던 중 특이한 점을 발견하였다.


서버가 2대이고 round robin 으로 SLB 를 설정했을 때

아는 바로는 순서대로 번갈아 가면서 각각 서버에 연결이 되어야 하는데


계속 동일한 서버로만 접속이 되었다.


L4 에서 세션을 보니, 나 혼자 접속하는데 2개의 세션이 들어오고

실제 해당 클라이언트에서 패킷덤프를 떠봐도 syn 패킷이 2회 전송되는 것으로 보였다


그래서, 순차적으로 syn 패킷이 배분되면서 

한 개 서버로만 접속이 되는 것 이었다.


처음에는 HTTP/1.1 의 Pipeline 기능인 줄 알았으나

안정성 문제로 대부분 브라우저에서 기본적으로 해당 기능을 사용하지 않는다는 것 같다. (파폭의 경우 해당 기능의 제어가 가능하긴 했음)

https://www.chromium.org/developers/design-documents/network-stack/http-pipelining


더구나 HTTP/2 에서 안정적인 병렬처리를 지원하여 해당 기능은 더 쓸 일이 없다는 것 같다..


그렇다면 왜 syn 패킷을 2회를 보낼까..

정말 많이 찾아보았는데 원인은 정말 간단한 거였다 ㅠㅠ


"더 빠른 인터넷 사용과 검색을 위해 페이지 미리 로드" 라는 설정이 기본적으로 활성화 되어 있는데

말로는 사용자가 방문할 페이지를 미리 예측하여 캐싱하는 기능이란다.. 크롬 성능 개선을 위해 활성화 하라고 하지만

실상 보안에는 안 좋은? 기능이라고 평하는 사용자도 있는 것 같다.



아래는 해당 옵션에 대한 자세한 설명이다.


                                                        출처 : https://support.google.com/chrome/answer/9116376?hl=ko



이제, 해당 옵션을 꺼보고 다시 한 번 패킷덤프를 떠봤다.


이제는 syn 패킷이 한 번만 나가는 것을 볼 수 있다.



2016년 1월에 시작한 궁금증이 2019년 11월에 풀렸다.. 휴


참고한 사이트: 

http://stackoverflow.com/questions/14810890/what-are-the-disadvantages-of-using-http-pipelining

http://stackoverflow.com/questions/23541298/tcp-syn-double-on-http-access

https://en.wikipedia.org/wiki/HTTP_pipelining

https://stackoverflow.com/questions/30477476/why-is-pipelining-disabled-in-modern-browsers

https://wiki.mikejung.biz/Chrome

https://stackoverflow.com/questions/985431/max-parallel-http-connections-in-a-browser

https://stackoverflow.com/questions/4761913/server-socket-receives-2-http-requests-when-i-send-from-chrome-and-receives-one




이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band
loading