왜 알아야되는지 얼마전에 있던 일 알려줌
클라이언트 개발자가 서버에서 자꾸 웹소켓을 끊어서 연결에 실패한다는거야
근데 내가 만든 테스트용 클라는 서버랑 존나 잘붙는데 이상하잖아
그래서 저는 잘돼요~ 라고 할수는 있겠지만 영 찝찝하지
여기서 tcp지식이 있고 tcpdump나 wireshark를 쓸줄 안다면
tcp 패킷을 분석해서 누가 먼저 shutdown(close)을 시도해서 연결이 끊기는지 다 알 수 있다
일단 tcp는 연결할때도 핸드쉐이크 하고 연결 끊을때도 핸드쉐이크 한다
close handshake는 graceful close 기준으로 연결 끊는 쪽이 먼저 fin을 보내고 반대쪽에서 ack랑 fin 보내고 연결 마무리 하는거임
(graceful 말고 강제종료시에는 rst로 끝나게 되고 프로그램 레벨에서 connection reset이라고 나옴)
따라서 위 와이어샤크 화면을 보면 서버쪽 포트가 5500이고 반대는 로드밸런서인데 로드밸런서가 FIN을 먼저 보냈으니 클라가 먼저 종료 요청을 했다는걸 알 수 있다
우리가 만들어둔 웹소켓 프로토콜 상 서버도 클라도 유저가 종료하고 싶은 경우 빼면 종료요청 하면 안되는데 저런다는건 클라에서 뭔가 잘못처리해서 에러나고 있다는 뜻임
이렇게 tcp 패킷 분석해서 클라 개발자한테 가져가면 설명도 가능하고 서버에 문제 찾느라 삽질할 필요도 없고 그 시간에 클라 개발자 디버깅 하는거 도와줄 수도 있음
그리고 연결 시도할때도 마찬가지다 중간에 어떤 과정으로 인해 연결이 실패했는지 tcp 패킷 분석해서 어디서 문제가 발생하는지
클라쪽에서도 패킷 따서 보고 그러다보면 로드밸런서가 문제인 경우도 가끔 나옴
프레임워크만 믿고 이런거 모르고 서버 개발한다? 자기 이슈 아닌데 삽질 존나게하고 결국에 클라에서 해결됐다는말 듣고 시간 낭비한거 깨닫고 현타오고 작업 효율 떨어지고 그런거다 ㅇㅇ
꼭 공부해라 학교에서 괜히 가르쳐주는거 아님
tcpdump나 wireshark도 필수로 알려줘야한다고 생각함
중요하지 - dc App
ㄹㅇ
이게 맞다
어떻게 공부하면 됨?
궁금한 프로토콜 와이어샤크로 다 뜯어보는게 좋음 . 기본적으로 알아야될건 tcp udp http dns tls 등등 . 요즘 보안이 좋아져서 암호화 걸린건 뜯기 힘드니 암호화 안걸린거부터 까보는게 좋음 (사실 키만 있으면 와이어샤크가 다 풀어준다)
http 프로토콜이 get이 어쩌고 헤더가 어쩌고 다 배웠겠지만 와이어샤크로 직접 눈으로 보는건 또 다름 훨씬 이해가 잘되니까 꼭 경험해봐 tcp도 핸드쉐이크 과정 다 관찰해보고 ㅇㅇ
책이나 인강추천좀
난 그런거 안봄..
니가 웹소켓을 쓰면 http레이어에서 핸드쉐이크 에러관련 에러날텐데 굳이 tcp까지 갈일이있나? 에러부터 나올텐데 그걸분석하면 될거같은디
응 아니야
핸드쉐이크 문제가 아니라 그냥 앱 자체적으로 레이스컨디션으로 인한 오류로 꺼진거라 서버에선 프로토콜 에러가 안나와
udp가 속도 훨빠르지않냐 - dc App
ㅇㅇ
장단이있지
wireshark 쓸 줄 알면 이득 보는게 많나보네
무슨 문제생기면 어디가 문제인지 파악하기 쉬워짐
쓰기 어려워 잘쓰는 분 한테 들으면 된다.
넌…. 아니다
세상은 분업의 시대다 네트워크 문제는 네트워크 관리자에게
코드만 짜기도 힘든 세상 패킷스택까지 풀스택 환상이냐 너도 ㅋ
3~4학년 개론과목 수준임 강의 하나만 찾아들어두면 됨
이거 왜하냐는 떡밥 돌앗음 그리고 강의듣는다고 왜하는지 알기 쉽지않음
네트워크 막 배우고 있는데, 글 고맙다 공감이 많이되네