네트워크는 데이터를 주고받는 규약 등을 포함한 통신 과정 전체를 의미합니다.
데이터를 주고 받으려면 서로의 위치를 알아야 통신이 가능하지 않을까요?
이때 서로의 위치를 알려주는 게 IP인데요. IP에는 공인 IP와 사설 IP가 있습니다.
공인 IP는 전세계에서 유일한 IP입니다. 공인 IP는 전세계를 기준으로 어디 있는지 찾을 수 있는 고유 번호인셈이죠.
하지만 우리는 인구 80억 시대를 살아가고 있기 때문에 현재 IPv4(최대 IP 갯수 42억개)로는 할당하기 부족해서 나온게 IPv6와 사설망입니다. IPv6는 32개의 비트를 사용하는 IPv4와 달리 128개의 비트를 사용해 사실상 무한개로 볼 수 있습니다. 하지만 IPv6는 전세계적으로 보급되지 않아 호환성이 부족하기에 사설망을 사용합니다.
앞서 공인 IP에 대해 이야기해 보았는데요 공인망에서는 공인 IP가 쓰이듯이 사설망에서 쓰이는 IP를 사설 IP라고 합니다.
사설 IP가 어디 쓰이는 건진 알겠는데 사설망이랑 공인망은 뭐야? 라고 생각하실 것 같아 설명드리자면 공인망은 인터넷 상에서 직접 접근 가능한 망, 사설망은 외부(인터넷)에서는 직접 접근할 수 없는 망이라고 생각하시면 됩니다.
사설망은 보통 회사, 학교, 가정용 공유기에서 사용됩니다.
외부에선 접근이 안되고 내부에서만 접근이 가능하기에 보안에도 용이합니다.
아래 이미지는 사설망의 IP대역입니다. 
| 클래스 | 사설 IP 대역 | CIDR 표기 | 네트워크 수 | 호스트 수 |
|---|---|---|---|---|
| A | 10.0.0.0 ~ 10.255.255.255 | 10.0.0.0/8 | 1 | 약 16,777,216 |
| B | 172.16.0.0 ~ 172.31.255.255 | 172.16.0.0/12 | 16 | 약 1,048,576 |
| C | 192.168.0.0 ~ 192.168.255.255 | 192.168.0.0/16 | 256 | 약 65,536 |
CIDR(Classless Inter-Domain Routing) 표기법의 /숫자는 IP 주소에서 네트워크를 식별하는 비트 수를 나타냅니다.
10.0.0.0/8은 앞의 8비트(10)가 네트워크 주소라는 의미로, 남은 24비트를 호스트 주소로 사용할 수 있습니다.
네트워크 인터페이스는 네트워크 연결을 위한 컴퓨터나 장치의 출입구 역할을 하는 장치 입니다. IP는 여기에 할당되게 됩니다.
포트는 하나의 네트워크 인터페이스에 여러 애플리케이션이 돌아갈 때 어떤 애플리케이션에 접속할지를 구분하는 번호입니다.
컴퓨터에 랜선을 꼽으면 인터페이스에 IP가 할당되고 그 컴퓨터 속에 돌아가는 애플리케이션에 접근하려면 IP:포트번호로 접근할 수 있게 되는겁니다. 하지만 IP가 사설IP면 외부에서 접근할 수 없겠죠? ㅎ_ㅎ

OutBound는 내 서버에서 다른 서버에 요청을 보내는 것이고
InBound는 내 서버로 들어오는 요청을 받을 때이다.
OutBound 후에 오는 결과를 내 서버로 받아야 하기에 사설망을 사용중인 내 서버를 공인망과 연결해주는 역할을 하는 녀석이 필요한데 그 역할을 해주는게 바로 NAT 테이블이다. 하지만 이 NAT 테이블은 OutBound가 되야 기록되기에 그냥 InBound가 올때는 내 서버가 어디있는지 모른다. 그래서 나온게 포트포워딩이다.

포트포워딩은 테이블에 공인포트번호를 지정해서 한자리를 먹어놓는다.(공인포트번호는 중복x)
이렇게 포트포워딩을 해놓으면 외부에서 얼마든지 접근할 수 있게 된다. 만약 같은 사설망을 사용하는게 아니라면 다른 사설망에 있는 서버에 접근하려면 이렇게 포트포워딩을 해줘야겠죠?
DNS는 Domain name server의 약자로 Domain name과 Ip를 매핑해 가지고 있는 녀석이다.
예시를 들어보면 naver로 접속하고 싶으면 url에 naver.com을 치면 DNS서버로 가서 DNS서버가 naver.com과 매핑되어있는 Ip를 반환해주기에 그냥 naver.com만 쳐도 naver에 들어갈 수 있는 것이다.
호스트 OS 위에서 격리된 컨테이너을 만들어 실행하는 기술이에요.
VM은 OS까지 가상화시키지만 docker는 프로세스만 격리해서 빠릅니다.
컨테이너가 인터넷 쓸 수 있도록 만들어주는 가짜 랜선
브릿지 네트워크를 docker0라하고 새로 생긴 컨테이너를 Veth1이라 하면 docker0와 연결되서 컨테이너끼리 통신, 외부와의 통신이 가능해지게 됩니다.
docker network ls # 네트워크 목록 확인
docker network inspect # 네트워크 상세 정보
docker network create # 사용자 정의 네트워크 생성
docker network connect # 컨테이너 네트워크 연결
docker network disconnect # 컨테이너 네트워크 연결 해제
docker network rm # 네트워크 삭제
docker run --network # 컨테이너 생성 시 네트워크 지정