학습 목표
이번 프로젝트에서 하나의 인스턴스에 레디스와 스프링 서버를 같이 띄우는 과정이 있었다.
하나의 도커 엔진에 각각의 컨테이너를 포함시키고 이를 EC2에 올렸다.
나는 윈도우를 사용 중이어서 윈도우에 가상머신(리눅스)를 띄워 테스트를 했다.
이 포스팅으로
1. 윈도우 스프링 서버 + 가상머신 레디스
2. 도커(스프링 컨테이너 + 레디스 컨테이너)
3. EC2(스프링) + EC2(레디스)
4. EC2(스프링) + ElastiCache(레디스)
5. JMeter에서 각각의 요청들을 각각의 TCP로 할당(??)하는 과정
이 5가지 환경에 대해 비교해보고자 한다.
1. 윈도우 스프링 서버 + 가상머신 레디스
일단 위의 그림처럼 송신자와 수신자가 네트워크 I/O를 거친다.
그렇다면, 가상 머신과의 통신에서도 이러한 일련의 과정을 거칠까?
이제부터 알아보도록 하자.
[네트워크] 호스트pc와 가상머신 연결하기
호스트pc에서 가상머신의 네트워크 모드를 먼저 설정 해야함. 크게 두 가지가 있다.가상머신이 호스트pc를 통해 외부 네트워크와 통신함. 호스트pc 내부에서 동적으로 ip를 할당 받음. 결론적으로
velog.io
이 글을 보면,
외부 IP와 내부 IP와의 차이를 이해할 수 있다.
대충 이런식인 것 같다.
=> 외부에서는(다른 송신자) 192.xxx.xx.1 + {포트} 로 데이터 전송
=> 만약, 포트가 특정(가상머신) 포트라면, 가상 머신에 데이터 전송
이게 어떻게 가능할까?
내부 NAT 네트워크를 이해해보자.
1-1. 주소 체계 간단 이해
이런식으로 되어있다.
이걸 좀 더 세분화시키자면,
이렇게 나눌 수 있겠다.
각 인터페이스가 가져야하는 IP 정보를 나열해본다.(HTTP에서는 수신자가 받는 것만 하는것이 아니라, 응답을 주기도 한다는 것 명심)
1. 수신 라우터 인터페이스1(WAN?)
=> 외부 네트워크의 IP 할당 받음, 그쪽에서 들어오는 패킷 수신 목적이다.
=> 송신자 IP를 갖고 있다.
=> 이전 라우터의 IP 또한 갖고 있다.
2. 수신 라우터 인터페이스2(LAN?)
=> 수신자 네트워크 게이트 웨이 역할이다.
=> 수신자들 중 어떤 IP로 보내야하는가?
=> 수신자 IP
3. 수신자 인터페이스
=> 디폴트 게이트웨이를 두어, 라우터로 응답을 보내준다.
=> 수신 라우터 인터페이스2 IP(응답을어디로 보낼 것인가?)
=> 자기 자신 IP
이렇게 되어있다.
즉, 수신 라우터 인터페이스 2 하나에 여러개의 수신자 인터페이스를 갖는다.
=> 서브넷을 구성한다! 라고 한다고 한다고 한다.
1-2. 주소 할당 간단 이해
각 수신자들은 ISP에 의해 주소를 할당받는다.
주소를 할당받는다는게 뭘까?
ISP를 통해 IP 주소 블록을 할당받는다는 것을 말한다.
**디스크의 단위 블록과 다르다.**
예를들어,
하나의 수신 라우터 인터페이스가 가질 수 있는 주소의 시작점이
11001000 00010111 00010000 xxxx xxxx 이라고 치자.
11001000 00010111 00010000 xxxx xxxx 1번 주소
11001000 00010111 00010010 xxxx xxxx 2번 주소
11001000 00010111 00010100 xxxx xxxx 3번 주소
11001000 00010111 00010110 xxxx xxxx 4번 주소 .....
이런식으로 비트 값들을 1씩 증가시켜가며 주소를 얻어오는 것이다.
(이런것도 알아야하나? 싶다.)
저것들이 서브넷을 구성한다! 에서 서브넷의 주소를 맡고 있다.
여기에 뭐.. 뒤에, /길이가 붙으면, 개사이다 CIDR 블록이라고 한다고 한다.
1-3. 서브넷과 NAT
다시 돌아와서,,,,
수신자들은 저런 방식으로 주소를 할당 받는다.
수신 라우터 인터페이스는 수신자들이 할당 받은 주소들을 저장한다.
즉, 모든 네트워크를 사용하는 장치들은 IP 주소가 필요하다.
너무도 많은 장치가 하나의 송신 라우터 인터페이스에 할당된다고 가정해보자.(WAN 환경)
할당할 수 있는 주소 블록이 가득차, 넘어버린다면?
더 이상 송신자들이 연결될 수 없는 것일까?
아니다.
이제, NAT이 등장할때가 되었다.
**이제부터 중요**
NAT은 그냥 매핑이라 보면된다.
인터넷 서버는 203.X~으로 시작하는 IP를 갖고 있을것이고,
공유기(컴퓨터)는 192.X~으로 시작하는 IP를 갖고 있을 것이다.
또한, 그 컴퓨터의 여러 장치(VM)들은 10.X~이런 IP를 갖고 있을 것이다.
그림으로 보자.
가정용 공유기는 WAN 포트 -> LAN 포트 이렇게 연결된다.
각 컴퓨터는 192.XX라는 주소를 갖고, 각 VM 마다 10.0.0.X 주소를 갖는다.
이런식으로 연결되는 것 같다.
즉, WAN에 대한 서브넷, LAN(컴퓨터)에 대한 서브넷 이게 NAT을 통해 구성된다.
1-4. WireShark에서 NAT의 동작 확인(컴퓨터 IP <-> VM IP)
이제 위의 그림에서 장치에 해당하는 VM 장치들이 192.XX -> (10.XX, 172.XX 등)으로 변환되는지 WireShark에서 확인해보자.
현재 인터페이스들의 목록이다.
Ubuntu(VM 환경)에서 Window으로 명령어를 요청하고, 오는 응답을 볼 것이다.
VM 환경 IP에서 Window IP로 잘 NAT 매핑이 되는지만 확인하면 되겠다.
젠장 뭐가 이리 파바박 올라오냐?
이제 와이어 샤크로 함 찾아보자.
이 그림을 기억하자.
=> 내 인터페이스 상황이다.(상당히 더럽다.)
=> 이 명령어를 실행시켜주자, vEthernet에서 반응이 왔다.
=> 그리로 들어가주자.
=> 192.168.56.1로 핑을 보내줘보자.
=> 핑이 정상적으로 간다.
=> 왼쪽 172.19.191.28에서 -----> 192.168.56.1 로 핑이 잘 간다.
=> 핑 중 하나를 분석해보면, WSL 내부 네트워크(172.19.x.x) → Host-Only(192.168.56.x) 이렇게 NAT 매핑되어 잘 가고 있음을 볼 수 있다.
1-5. 윈도우(스프링)에서 Ubuntu(레디스)로 명령어 요청...하기 전에
자 이제, 때가 되었다...긴 아직 이르다.
먼저, CS 부터 확인하자.
생각을 해보자.
가상 머신이라 하더라도, 결국, 윈도우라는 운영체제 위에 운영체제이다. 즉, 하드웨어는 하나이다.
위에서 확인 한 바로는, NAT을 통해 매핑을 해주었다.
체크섬 어쩌고 까지 있는 것을 보니, 일단 네트워크 계층까지는 내려왔다.
Ethernet 2가 표시되어있는 것을 보니까, 일단 링크 계층까지 내려왔다는 것 또한 확인할 수 있다.
즉, 요청을 패킷으로 나누고, TCP 연결, IP 확인, NAT 적용까지 확인한 것이다.
이 그림을 봤을 때, WAN의 영역인 가정 공유기에서 네트워크 문제가 발생해도, 컴퓨터 내부 네트워크는 살아있으니, VM과 윈도우 간 통신은 가능할 것이다.(누가 물어봤었는데, 누군지는 모르겠다.)
데이타 링크 계층
=> 하드웨어가 한개인데, MAC 주소가 필요한가?(IP <-> MAC 매핑을 좀 더 공부해보자.)
물리 계층
=> 하드웨어가 한개인데, 전기적 신호?? (이 부분은 감이 잘 안온다.)
일단 IP까지 인식을 했고, 이제 MAC 주소에 대하여 알아보자.
1-6. MAC과 링크 계층
기본적으로 가상머신(레디스)와 스프링은 스위치 근거리 네트워크 통신이다.
브로드 캐스트는 아니니까..
MAC은 하나의 가정용 공유기 안에서만 유효하다.
이게 무슨 뜻이냐면, 위에 보이는 그림에서 컴퓨터 IP 연결 <- NAT 적용 -> VM별 연결 바로 이전에 링크 계층 스위치가 있다는 뜻이다.
이것도 무슨 뜻이냐면, 한 가정 내의 모든 VM, 컴퓨터 등이 모두 하나의 링크 계층 스위치에 연결되어있다는 것을 의미한다.
아직도 헷갈린다.
다시 정확하게 알아보자.
일단, MAC을 사용할때의 플로우를 알아보자.
1. 공유기에 새로운 장치 연결, ARP 요청
=> 내 컴퓨터가 공유기에 연결되고자 할 시점(LAN 범위 안에 추가되고자 할 시점), 해당 LAN에 연결된 모든 장치에 ARP 요청을 브로드 캐스팅
=> 내 컴퓨터의 상황 : 누구에게 보내?
=> 공유기의 상황 : 평화롭다.
=> 내 컴퓨터 : 아 누구한테 보낼지 모르니까 그냥 LAN 안에 모든 장치에 보내보자.(편지: 이거 받는 사람이 공유기면 회신 좀 주쇼)
==브로드 캐스팅
=> 공유기 : 편지 왔네? 해당 포트에, 해당 컴퓨터...메모... 회신 보내기(편지: 이제 나한테 보내면 됨)
=> 브로드 캐스팅으로 LAN 내의 모든 라우터에 데이터(ARP 요청)를 보내보고, 공유기에서 응답이 오면, 그 MAC 주소를 내 컴퓨터 링크 계층 스위치에 캐싱(저장)해둔다.
=> 이로, 두번째 데이터 전송부터는 브로드 캐스팅을 안해도 된다.(내 컴퓨터에 공유기 MAC이 저장되어있기 때문에 그리로 유니 캐스트 하면 되기 때문)
**혼동하지 말 포인트는, 일련의 데이타그램 전송이 있을때, 필요한 LAN 서브넷 한 개만 캐싱한다는 것이다.**
**브로드 캐스팅이라고 한 번의 ARP로 모든 LAN 서브넷이 모든 서브넷의 MAC을 알게 되는 것이 아니다.**
**외부로 데이타 그램을 보내고 싶을때는, 한 번의 ARP로 내 컴퓨터와 공유기가 각각의 MAC을 알게 되는 것이다.**
**내부 서브넷으로 데이타 그램을 보내고 싶을때는, 한 번의 ARP로 내 컴퓨터와 다른 장치가 각각의 MAC을 알게 되는 것이다.**
**ARP 발생으로 MAC을 알게되면, 그제서야 TCP를 생성할 수 있다.**
**ARP는 LAN 서브넷간의 MAC을 인식하기 위한 것이다.**
2. 내 컴퓨터가 데이터를 전송하려 함(분기의 시작)
분기의 시작을 알기 전 아래 그림을 보자.
그림은 링크 계층 스위치가 추가되었다.
링크 계층 스위치는 라우터(공유기)와 따로 있을 수도 있고, 공유기 자체일 수도 있다.
어쨋튼, 링크 계층 스위치는 LAN 서브넷에서 ARP를 통해 모든 MAC 주소를 캐싱해두고 있을 수도 있고, 아닐 수도 있다.
3. 외부(WAN)로 데이터를 주고 받는 경우(서브넷에 없는 노드로의 전송)
=> 내 컴퓨터는 공유기 라우터로 데이타그램을 전송한다.(ARP로 공유기 어뎁터의 MAC을 알고 있으니, 가능하다.)
=> 이제, TCP로 외부 WAN의 IP를 알고 있으니, 그냥 공유기는 송신을 해주면 될것이다.
4. 가정용 공유기(내부 LAN)에서만 데이터를 주고 받는 경우(서브넷에 있는 노드로의 전송)
=> ARP로 공유기 어뎁터 MAC만 알고 있으니, 다시 ARP를 통해 VM이나 해당 장치의 라우터 어뎁터 MAC을 알아낸다.
=> TCP를 생성하고, 데이타그램을 송신, 수신한다.
1-7. 지금까지 지식으로 웹 서버 접속 시 과정 정리해보기
https://icanchangeworld.tistory.com/183
웹 페이지 요청이 있을 때 플로우
1-7-1. 내가 브라우저를 클릭 : 내 컴퓨터(OS가) 브라우저 Process를 시작윈도우 커널이 브라우저 스크립트를 로드, 메모리에 올림브라우저 Process 생성 Main() 함수 호출(브라우저 프로그램 시작)1-7-2.
icanchangeworld.tistory.com
1-8. WireShark에서 링크 계층 확인해보기
1-9. 드디어 스프링(내 컴퓨터) + 레디스(가상 머신) WireShark로 확인해보기
내일 계속...
'네트워크' 카테고리의 다른 글
TCP에 대하여 (0) | 2025.05.24 |
---|---|
웹 페이지 요청이 있을 때 플로우 (1) | 2025.05.24 |
데이터 링크 계층 (0) | 2023.11.07 |
데이터 전송 (0) | 2023.11.06 |
라우팅 시스템, 네트워크의 구조 (0) | 2023.11.06 |