해당 내용을 자주 잊어버려 한번 정리해 둔다. (AWS VPC 사용하기 위해서 알아야 함)

먼저 TCP, UDP, IP 같은 거를 프로토콜이라 하는데 프로토콜이 뭐냐?
검색해보면 프로토콜은 메시지를 주고 받는 양식, 규약이라고 나온다.
쉽게 말하면 규칙이다. 데이터를 주고받기 위해서는 0과1을 주고받아야하는데
몇번째 구간에 어떤 정보들이 들어가는지들을 정해놓은 거라고 생각하면 된다.

그전에 패킷(여러 프로토콜을 캡슐화한 것)을 캡쳐할 수 있는 프로그램이 있다. 'pcap'이라는 라이브러리를 사용

네트워크는 크기에 따라 분류될 수 있는데 LAN과 WAN이 있다.
LAN은 스위치 또는 공유기를 기준으로 형성된다. ('LAN선'이라는 단어)
WAN은 여러개의 LAN을 묶어놓은것이다. 만약 내 집에서 롤을 한다하면 RIOT의 LAN을 찾아야한다.

2계층은 LAN내에서 통신하기 위한 규약을 정해놓은 것이다.
대표적인 프로토콜인 이더넷을 보면

- 보내는사람 mac add + 받는사람 mac add + Ethernet Type
- Ehthernet Type에는 data에 들어있을 상위 프로토콜에 대한 정보 알려줌
- data안에는 상위 프로토콜이 들어있음
MAC주소는 물리적인 장비가 부여받은 고유한 값이다. (제조사 식별 ID-제조사 부여한 고유번호)
3계층은 서로 다른 LAN(WAN)에서 통신하기 위해 만들어졌다. 즉 패킷의 경로를 제어하는 정보들이 담겨져 있다.
*IPv4는 프로토콜, IP는 3계층에서 쓰는 주소체계 ^&^

그전에 IP 주소체계를 한번 짚고 가자. (당연히 IPv4의 주소체계)

MAC주소는 : 으로 필드를 구분했는데 IP는 . 으로 필드를 구분한다.
기본적으로 3자리 숫자가 4마디씩. 내부적으로는 32bit로 처리된다.
위는 주소는 11000000.10101000.01111011.0111011로 표시된다.

옛날에는 IP주소를 Class 별로 나누어서 사용했다.
예를 들어 A는0 0000000.00000000.00000000.00000000 ~
0 1111111.11111111.11111111.1111111
이때 A클래스의 경우 첫번째 필드를 기준으로 네트워크를 구분했고,
나머지는 하나의 네트워크 대역 안에 있는 PC를 구분하는데 사용하였다.
(0.0.0.0 ~ 127.255.255.255) -> 가능한 A대역의 네트워크 갯수는 128개 하나의 네트워크 대역에는 2^24개의 PC가..
B같은 경우에는 두번째까지 네트워크 대역을 구분하고 나머지를 PC에 할당한다.
예를 들어 B의 경우 128.0.0.0 ~ 191.255.255.255 라고 했을 때 앞의 2필드가 네트워크 대역을 구분한다.
당연히 비효율적이다. (옛날에는 PC가 별로 없어가지고 ^^;)
그래서 나온게 Classless한 IP 주소이다.
기존의 네트워크 대역은 필드 단위로 구분했다면 (.이 찍혀있는 부분) 이제는 자르고 싶은 부분을 정할 수 있도록 하자
-> 서브넷 마스크. (네트워크 대역을 어디서부터 구분할것인지 정한것)
이제 하나의 주어진 네트워크를 작은 네트워크로 쪼갤 수 있다.

1과 1사이에는 0이 올 수 없고 1에서 0으로 바뀌는 지점이 네트워크 대역 구분하는 기준
그래도 IP가 부족하다 (세상에 올마나 많은 공유기들이 있는지 생각해보면..)
그래서 나온게 사설 IP와 공인 IP -> 이게 현재 사용하는 IPv4의 내용 (subnet)과 같이 사용하고 있다.
IP주소 하나당 0.0.0.0 ~255.255.255.255의 주소가 생겼다.

공인 IP는 인터넷과 통신하기 위해 사용하는 IP주소이고 사설 IP는 같은 네트워크 대역에서 사용하는 IP주소이다.
따라서 사설 IP가 외부 세상과 통신하기 위해서는 공인 IP로 바꿔야한다.


이 때 사설 IP에서 공인 IP로 바꾸는 것을 NAT라고 한다. (NAT는 원래는 특정 IP를 다른 IP로 변환해주는 기술)
같은 네트워크 대역은 사설 IP로, 나갈 때는 공인 IP라고 하는 하나의 IP로만 -> IP 부족 문제 해결!
외부에서 볼때는 나의 IP주소가 구분되지 않는다. (서버로부터 데이터 받는다고 생각해보자)
공유기는 우리가 데이터를 보낸다하면 NAT 테이블에 기록하고 응답이 왔을 때 그 대상한테 전달해준다.
만약 나간적이 없는(NAT 테이블에 없는) 데이터가 들어온다면? 그냥 공유기가 받고 끝난다.
그러면 서버는 어떻게 해야할까? 서버는 나가는 값 없이 우선 요청을 받아야하지 않는가.
① 서버에 사설 IP 말고 공인 IP를 부여한다.
② 아니면 공유기에 설정을 한다. 데이터 공유기에 들어오면 여기로 보내라고 -> 포트 포워딩
사설 IP는 외부에서 안보이기 때문에 나갔다가 들어오는것만 통신이 된다.
즉 밖의 네트워크에서 바로 안쪽으로는 들어올 수 없다.
포트포워딩이라는 것을 해줘야지 외부에서 안으로 들어올 수 있다.