일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- java
- 혼공챌린지
- 코틀린
- Android
- 카카오코테
- 티스토리챌린지
- 인프런
- select
- 자료구조
- 오블완
- 정처기
- join
- 혼공파
- 기술면접
- 알고리즘
- 코테
- 혼공단
- Kotlin
- 프로그래머스
- CS
- 안드로이드
- 스터디
- 자바
- 정보처리기사
- SQL
- MySQL
- 안드로이드스튜디오
- doitandroid
- Til
- groupby
- Today
- Total
Welcome! Everything is fine.
[CS 발표_03] HTTP Keep Alive vs TCP Keep Alive 본문
HTTP Keep Alive와 TCP Keep Alive의 차이에 대해 설명해보세요.
HTTP
HTTP는 데이터 전송을 위한 클라이언트-서버 구조의 요청/응답 프로토콜이다.
특징
- 비연결성 : 클라이언트의 요청에 대해 서버가 응답한 후 연결을 끊음 → 이를 보완하기 위해 HTTP Keep Alive 사용
- 무상태성 : 서버에서 클라이언트의 상태에 대한 데이터를 저장하지 않음 → 이를 보완하기 위해 쿠키/세션 사용
Keep Alive?
A keepalive (KA) is a message sent by one device to another to check that the link between the two is operating, or to prevent the link from being broken.
위키백과에 따르면 Keep Alive란 디바이스간의 데이터 링크가 잘 동작하고 있는지 확인하거나 데이터 링크가 끊어지는 것을 방지하기 위해서 디바이스 간에 서로 주고받는 메시지라고 한다. 간단하게 클라이언트와 서버 간에 연결을 유지하기 위한 방법! 이라고 생각하면 편할 것이다. Keep Alive는 L7(HTTP), L4(TCP) 각각 다른 계층에서 이루어지고, 연결 유지 방식 역시 각각 다르다.
HTTP Keep Alive vs TCP Keep Alive
HTTP는 클라이언트에서 요청을 보낸 후 서버로부터 응답을 받으면 연결을 끊는다.(=비연결성) 서버에서 응답을 받은 후에도 연결을 유지하려면 자원을 그만큼 쓰게 되므로 응답을 받고 연결을 끊으면 자원을 아낄 수 있다. 하지만 서버가 클라이언트를 기억하지 못한다는 단점이 있다. 또한 동일한 클라이언트에서 연속적으로 요청이 오면 연결과 연결 해제 과정을 반복해 자원을 낭비하게 된다. 이런 단점을 보완하기 위해 HTTP Keep Alive를 사용한다. 클라이언트에서 HTTP 요청을 보낼 때 연결 헤더에 Keep Alive를 추가해서 보내면 서버에서 연결을 유지할 시간을 Keep Alive 헤더에 추가해 응답한다.
HTTP Keep Alive는 기능의 활성화 여부와 TimeOut 시간을 설정할 수 있다.
#cat /etc/httpd/conf/httpd.conf | grep -i keepalive
KeepAlive On
KeepAliveTimeOut 60
반면 TCP Keep Alive는 3-way handshaing으로 연결된 세션을 계속 유지하기 위한 방식으로, 일정시간동안 패킷 교환이 없으면 연결 유지 여부를 확인하는 아주 작은 크기의 패킷을 던진다. 이에 대해 응답이 있으면 추가로 일정 시간 동안 연결을 유지한다.
TCP Keep Alive는 Keep Alive 유지 시간, Keep Alive 패킷 재전송 시간, 패킷 전송 빈도수를 설정할 수 있다.
[root@localhost ~]# sysctl -a | grep keepalive
...(중략)
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 7200
정리
HTTP Keep Alive와 TCP Keep Alive 모두 클라이언트와 서버 간에 연결을 유지하기 위한 방법이다. HTTP Keep Alive는 HTTP 프로토콜의 연결을 정해진 시간동안 유지하는 방식으로, 정해진 시간이 끝나면 연결을 해제한다. 반면 TCP Keep Alive는 3-way handshaing으로 연결된 세션을 계속 유지하기 위한 방식으로, 일정시간동안 패킷 교환이 없으면 연결 유지 여부를 확인하는 패킷을 던진다. 이에 대해 응답이 있으면 추가로 일정 시간 동안 연결을 유지한다. 이런 방식을 통해 클라이언트와 서버 간에 불필요한 연결과 해제의 반복을 줄일 수 있다.
'CS 스터디 > 발표' 카테고리의 다른 글
[CS 발표_06] 인덱스란? (0) | 2024.05.31 |
---|---|
[CS 발표_05] 데이터베이스에서 락이란? (0) | 2024.05.31 |
[CS 발표_04] UDP의 특징과 UDP에서의 오류 검출 방법 (0) | 2024.05.27 |
[CS 발표_02] OS의 메모리 관리 전략(페이징 & 세그멘테이션) (0) | 2024.05.09 |
[CS 발표_01] 메모리의 힙 영역과 스택 영역 (0) | 2024.05.06 |