Open utterances-bot opened 2 years ago
안녕하세요, 관련해서 저도 관심이 있어서 검색중에 질문드립니다. NodeJS로 express 웹서버를 구성해놓고 단순히 다음과 같이 router를 구성 하였습니다.
router.get("/abc" (req, res) =>{
setTimeout((() => {
res.send("hello");
}),3000);
}
이때 위 서버로 localhost:포트번호/abc 형태로 curl로 Get 요청을 진행하고 tcpdump 명령어를 통해 실제 'active close"를 client가 하는지 server가 하는지 확인을 해보았습니다.
결과를 다음과 같았습니다.
curl 요청시 req 헤더에
Connection : "keep-alive" - client가 active close
Connection : "close" - service가 active close (server입니다 오타 이네요.)
Connection 생략 - client가 active close
로 확인되었습니다. 설명해주신 내용과 다르게 동작하는듯하여 궁금하여 질문드립니다.
저는 참고로, active_close가 서버측에서 일어나기때문에, 어떻게하면 client에서 active_close가 발생하게 해야하는지 고민하는 중입니다.
안녕하세요 @qkrgksqkr 님
먼저, 긴 글 읽고 댓글 남겨주셔서 감사합니다.
제가 말씀해주신 내용을 가지고 테스트 해봤습니다.
먼저 말씀드리지만, 질문에 명확한 답 못드렸습니다. (이 글을 express, axios, curl에 대해 완전히 이해하고 작성한게 아니라 직접 손으로 테스트해가면서 작성했기 때문입니다)
"client가 active close"
정상입니다.
curl
을 사용하지 않고 setTimeout 후 response 보냈습니다
해당 테스트 환경은 글에도 나오지만, Repository를 통해 재현 가능합니다.
172.25.0.3
이 클라이언트입니다. (먼저 연결을 시작하는 쪽)
보면 Keep-alive
패킷을 주고 받다가, 서버측에서 먼저 연결을 끊는 것을 확인할 수 있습니다.
curl server -H "Connection: keep-alive" -H "Keep-Alive: timeout=10000, max=100000"
명령어를 통해 요청보냈습니다.
이번엔 Client측에서 먼저 연결을 끊네요
일단 제가 생각했을때 Client Active Close가 정상입니다. (재연1번은 왜 다른지 모르겠네요)
Connection : keep-alive
로 서버에게 요청했기때문입니다."service가 active close"
아마 server 말씀하시는거겠죠?
클라이언트에서 Connection 값으로 close를 넣었으니 정상 동작한것으로 생각됩니다.
이때 본문에서는 아래와 같이 적었습니다. 하지만 해당 케이스때는 정상동작한것 같습니다.
Q. 혹시 서버가 Response 헤더에 Connection: close를 넣는다면?
아니다. 서버가 먼저 연결을 끊지 않는다.
서버가 클라이언트에게 “연결을 끊어주세요”라고 요청한것. 서버가 연결을 먼저 끊는 행위가 아니다
그런데
"저는 참고로, active_close가 서버측에서 일어나기때문에, 어떻게하면 client에서 active_close가 발생하게 해야하는지 고민하는 중입니다."
라고 해주셨는데 제 글과 동일하게 client측이 먼저 Active Close하고싶으신건가요?
curl server -H "Connection: close"
로 l재연했는데 Client측이 Active Close하네요client가 active close
위 1번과 마찬가지로 연결을 종료하지 않고, 필요없어진 client측이 socket close() 한것으로 보입니다.
일단 제가 본문에 작성한 내용과 다른 부분은 2번 정도라고 생각합니다. (하지만 제가보기엔, 오히려 @qkrgksqkr 님이 보신 결과가 더 정상적이네요)
웹서버가 먼저 Socket Close 해보기 | Devkly
도전 목표는 간단하다 환경 서버가 먼저 소켓 연결을 끊어보는 것이다. 그리고 실제 을 확인해보겠다. 4 Way Handshake 먼저 가장 기본이 되는 지식인 TCP 연결종료에 대해 간단히 설명하겠다. 가 측에게 ‘연결 종료’를 의미하는 패킷 전송 는 ‘연
https://devkly.com/network/nodejs-server-socket-close/