질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

Timeout & keepalive 추가질문2(이어서..)

작성자 정보

  • 최우혁 작성
  • 작성일

컨텐츠 정보

본문

성실한 답변 정말 너무 감사 드립니다.
이제 좀더 확실해 지는군요.
클라이언트에서도 여러 창을 띄워 놓고 접속할수 있단걸 생각하지 못했습니다.
하나 궁금해 지는것이 있는데요,

한 방문자(익스플로러창) 가 세션연결을 성공했다면 (사이트 접속)
(자식프로세스와 연결되는 것이겠죠?) 3 way handshake 를 마쳤을테니
페이지를 불러오는데 필요한 여러 텍스트들, 그림파일들을 받아 올것입니다.
마침내 페이지가 모두 로드 될 것이고, KeepAlive on 상태라면

1) KeepAliveTimeout 에 설정된 시간 이전에 다른 페이지를 요청 한다면,
처음 이 방문자와 3 way handshake 를 마친
자식 프로세스가 계속 요청을 받아들여 처리해줄텐데요,

2) KeepAliveTimeout 에 설정된 시간을 초과 한후 다른 페이지 요청한다면,

다른 자식 프로세스가 상대 하게 된다 .. 라고 하셨는데
이때 다시 3 way handshake 가 이루어 지나요?
기존의 자식 프로세스와는 다른 프로세스와 연결되는 것인데.. 그래서 이런 생각을
해봣습니다만, 왠지 너무 비효율 적인가 싶기도 해서요..

아니면 3 way handshake 는 생략되고 단지 다른 프로세스가 넘겨받는 건가요?

최초에 "세션 연결"이라는 것이 자식프로세스와의 연결 그자체가 아닌 건가요;

이어서 질문하자면 KeepAlive Off 상태라면 페이지 하나하나를 요청할때마다
새로운 자식 프로세스와 연결될텐데, 이때는 어떻게 돌아가는건가요..?

간지러운 부분 긁고나니 딴데가 또 간지럽네요 -;
시원하게 긁어주실런지;
부탁드립니다.. 건강하세요!!

관련자료

댓글 2

최우혁님의 댓글

  • 최우혁
  • 작성일
..음.. 그런데 뭔가 ;;

# netstat -anp |grep http
tcp 0 0 :::80 :::* LISTEN 3241/httpd

현재 아파치 서버가 LISTEN 중이고.

A 라는 다른 컴퓨터에서 익스플로러를 통해 접속하자마자 다시 명령을 내려보면

# netstat -anp |grep http
tcp 0 0 :::80 :::* LISTEN 3241/httpd
tcp 0 0 ::ffff:192.168.0.3:80 ::FFFF:192.168.0.5.. ESTABLISHED 3649/httpd

이렇게 자식 프로세스와 연결되네요.
또,

아파치 서버 자체에서 창을띄워(B컴퓨터) 웹에 접속 한뒤 명령을 내려보면

# netstat -anp |grep http
tcp 0 0 :::80 :::* LISTEN 3241/httpd
tcp 0 0 ::ffff:192.168.0.3:80 ::FFFF:192.168.0.5.. ESTABLISHED 3649/httpd
tcp 0 0 ::ffff:127.0.0.1:80 ::FFFF:127.0.0.1:.. ESTABLISHED 3648/httpd

---------------------------------------------------------------------------
이런게 또다른 자식 프로세스와 연결이 되는데요(PID = 3648),,,

또한 각각 ESTABLISHED 라는 부분이 있죠..
이건 3 way handshake 상태를 표시하는것으로 알고있는데요..
부모프로세스와 세션이 연결된후 자식이 처리한다.. 라는 말과 조금 혼동이;

실험결과 KeepAliveTimeout 에 지정한 시간이 지나면 위에 새롭게 생긴
두 라인들은 사라집니다. 맨 첫줄

tcp 0 0 :::80 :::* LISTEN 3241/httpd
만 남아 있는 군요.

반면,

A 컴퓨터에서 접속후 창을 여러개 띄워본뒤 살펴보면
# netstat -anp |grep http
tcp 0 0 :::80 :::* LISTEN 3241/httpd
tcp 0 0 ::ffff:192.168.0.3:80 ::FFFF:192.168.0.5.. ESTABLISHED 3649/httpd

이렇게 창을 여럿 띄워도 변함이 없습니다..

클라이언트 가 아니라 방문자 단위로 자식 프로세스가 매치 된다는 설명과는
조금 다른거 같은데요..?아..어렵군요;

최우혁님의 댓글

  • 최우혁
  • 작성일
자꾸 제가 같은 내용을 묻는 느낌이 듭니다만..
자식프로세스와는 3-hand-shake 가 일어나지 않는다는 것이 어디에
명시되어 있는가요, 이왕이면 정확히 알고싶어서.. 의심하는듯하게 질문올려서
죄송합니다 -;

막둥이 님께서
"3개의 창을 열면 3개의 http 인자가 보이고 주소도 보이고 포트도 보이고 .."
각각 ESTABLISEHD 가 뜬다는건 각 자식프로세스와 3-way-handshake 가
일어난다는것 아닐까요, 또한 TIME-WAIT 이런 state 가 뜬다면...
접속이 끊어질때 4-way-handshake 가 이루어 진다는것 같은데..
TIME-WAIT 같은 상태는 접속을 끊을때 4-way 가 이루어지면서의 상황이니
말이죠..

아님..최초 세션 연결할때만 부모 프로세스와 3-way를 거치고,
세션맺어진 ESTABLISHED 상태를 자식프로세스가 그대로 이어받기 때문에
(실제 자식프로세스와 3-way 를 거치진 않고 established 된 상태를 고스란히
받아가지 않을까 라는 뜻입니다.)
그렇기 띠문에 netstat 했을때 ESTABLISHED 된 자식프로세스들이 조회되는 것일까
라고도 생각해 봅니다.

반면 자식프로세스와 연결이 종료될때는 자식프로세스와 직접 4-way 를 거치기
때문에 FIN , Time-Wait 등이 잡히는게 아닌가요

아..산넘어 산입니다.

소중한 답변 감사해요~~

공지사항


뉴스광장


  • 현재 회원수 :  60,076 명
  • 현재 강좌수 :  36,001 개
  • 현재 접속자 :  408 명