해결된 질문
작성
·
48
·
수정됨
0
첫번째 질문은 네트워크 통신시
클라이언트-> 공유기-> 포워드 프록시 서버-> 로드밸런서->웹 서버
이렇게 요청이 전달된다면 패킷은
1. 클라이언트 -> 공유기
출발지 mac : 클라이언트 mac
출발지 ip : 클라이언트 ip
출발지 port : 클라이언트 랜덤 port
도착지 mac : 공유기 mac
도착지 ip : 로드밸런서 ip? 포워드 프록시 서버 ip?
-> 만약 포워드 프록시 서버 ip라면 공유기에서 포워드 프록시 서버로 요청이 전달될 때 내가 서비스 받고자 하는 ip가 로드밸런서인지 대체 어떻게 아는지...
도착지 port : 80
2. 공유기 -> 포워드 프록시 서버
출발지 mac : 공유기 mac
출발지 ip : 공유기 ip
출발지 port : 공유기 랜덤 port
도착지 mac : 포워드 프록시 서버 mac
도착지 ip : 로드밸런서 ip? 포워드 프록시 서버 ip?
도착지 port : 80
3. 포워드 프록시 서버 -> 로드밸런서
출발지 mac : 포워드 프록시 서버 mac
출발지 ip : 공유기 ip? 포워드 프록시 서버 ip ?
출발지 port : 공유기 랜덤 port? 포워드 프록시 서버 랜덤 port?
도착지 mac : 로드밸런서 mac
도착지 ip : 로드밸런서 ip
도착지 port : 80
4. 로드밸런서 -> 웹서버
출발지 mac : 로드밸런서 mac
출발지 ip : 공유기 ip? 포워드 프록시 서버 ip ? 로드밸런서 ip?
출발지 port : 공유기 랜덤 port? 포워드 프록시 서버 랜덤 port? 로드밸런서 port?
도착지 mac : 웹서버 mac
도착지 ip : 웹서버 ip
도착지 port : 80
이렇게 정리해 봤는데 통신시 네트워크 장치를 지날 때 패킷이 정확히 어떻게 변화되는지 잘 모르겠습니다. 중간중간에 어떤 데이터가 되는건지 헷갈리는 부분이 있는데 그 부분을 알려주실 수 있을까요?
두번째 질문은 tcp connection은클라이언트 -> 공유기
, 공유기 -> 프록시 서버
, 프록시 서버 -> 로드밸런서
,로드밸런서 -> 웹서버
이렇게 4개가 생기게 되는건지.. 모르겠습니다.
ip가 변경되는 순간에 tcp 연결을 해야된다거나 tcp connection이 생기는 기준이 있나요?
세번째 질문은 만약 tcp 연결이 저런식으로 생성된다면
프록시 서버 -> 로드밸런서
, 로드밸런서 -> 웹서버
이 구간에서 우선 클라이언트 요청마다 새로운 프록시 서버 port로 요청되어 클라이언트를 식별하게되고, 이후에 로드밸런서가 웹서버에게 요청을 전달할 때 sticky session 옵션을 안하면 통신했던 웹서버로 계속 요청이 전달되지 않고 새로운 웹서버로도 통신할텐데 그럴 때마다 로드밸런서는 새로운 웹서버와 tcp 연결을 계속해서 새롭게 생성을 하는건가요?
답변 2
0
첫 번째
1. 도착지 IP는 포워드 프록시 서버 IP 입니다. 언급한 구조라면 DNS 서버가 응답해주는 IP주소는 포워드 프록시 서버 IP입니다.
2. 포워드 프록시 서버 IP 입니다.
3. 출발지는 프록시 서버 IP + 포트이고 목적지는 로드밸런서 IP + 포트 입니다.
4. 출발지는 로드밸런서 IP + 포트이고 목적지는 여러 웹 서버 중 로드밸런서가 선택한 웹 서버의 IP와 포트 입니다.
두 번째
클라이언트와 공유기간에 TCP 연결이 생성되는 것은 아닙니다. 클라이언트의 TCP 연결은 프록시 서버와 이루어집니다. 그리고 프록시 서버, 로드밸런서, 웹 서버 셋은 소켓으로 통신합니다. 이 경우에만 TCP 연결이 생성됩니다.
세 번째
네. 설정에 따라 다를 수 있지만 로드밸런서는 새로운 웹서버와 계속 TCP 연결을 생성합니다. 그리고 HTTP 세션유지를 위해 특정 클라이언트와 부하분산을 위한 여러 웹 서버 중 특정 웹서버와 통신하도록 할 수도 있습니다. 그러나 분산된 여러 WAS간에 세션 클러스터링 설정이 되어 있다면 어떤 웹 서버와 로드밸런서가 연결되건 상관이 없습니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. 김민정님!
네트워크 통신 시 여러 요소들 간의 패킷 전달 및 TCP 연결에 대해 헷갈리실 수 있는 부분을 정리해드리겠습니다.
각 네트워크 장치를 거칠 때 패킷의 IP와 포트 변화는 다음과 같습니다:
클라이언트 -> 공유기: 실제 공유기는 IP를 변환하지 않습니다. 패킷은 기존 IP와 포트를 그대로 두고, MAC 주소만 변환합니다.
공유기 -> 포워드 프록시 서버:
포워드 프록시 서버 -> 로드밸런서:
로드밸런서 -> 웹서버:
각각의 통신 경로에서 별도의 TCP 연결이 생성됩니다:
- 클라이언트 -> 공유기
- 공유기 -> 포워드 프록시 서버
- 포워드 프록시 서버 -> 로드밸런서
- 로드밸런서 -> 웹서버
총 4개의 TCP 연결이 작동하게 됩니다. 각 영역마다 네트워크의 요청에 따라 별도의 연결이 설정됩니다.
로드밸런서와 웹서버 사이 통신에서는 일반적으로 “Sticky Session”이 없을 경우, 클라이언트의 각 요청은 웹서버 간의 라운드 로빈 또는 기타 알고리즘에 따라 새롭게 분배됩니다. 로드밸런서는 새로운 웹서버와의 통신을 위해 신규 TCP 연결을 생성하게 됩니다.
여기에서 관련한 네트워크 질문에 대한 내용을 참고하시면 더 도움이 될 것입니다.
지금까지의 설명이 김민정님에게 도움이 되길 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
클라이언트에서 프록시 서버로 요청을 보낸다고 했는데 애초에 처음에 내가 서비스 받고자하는 ip는 로드밸런서 ip임에도 불구하고 프록시 서버로 목적지 ip로 설정한다면 대체 내가 서비스 받고자 하는 ip를 어떻게 아는건가요?