Computer Network

[Network Layer] IP, Routers, NAT ...

Sara.H 2020. 10. 13. 13:58

[네트워크 레이어 1번째 수업]

* 네트워크 레이어 : 트랜스포트 레이어에서 전달받은 패킷을 IP패킷으로 감싸서 목적지까지의 경로에 있는 다른 라우터들로 전달하는 레이어이다.

 

라우터의 역할

1. Forwarding : 어떠한 목적지까지 갈 때 가는 그 행위 자체를 의미한다. router-local 한 것이며, 보통 하드웨어로 구현한다.

2. Routing : 어떠한 목적지까지 갈 때 가기 위한 경로를 정하는 행위이다. network-wide 한 것이며 소프트웨어로 구현된다.

 

IP주소 : 아이피 주소의 정확한 정의는 머신이 갖고 있는 "네트워크 인터페이스"이다. 머신 자체를 지징하는 것이 아니다. 즉, 호스트 하나가 여러개의 IP주소를 가족 있을 수 있는 것. 대표적으로 라우터가 있다. 라우터는 인풋 인터페이스와 아웃풋 인터페이스가 여러개이며, 각각의 서브넷이 다르다.

 

서브넷 : IP주소의 24bit 는 네트워크 아이디이고, 그 뒤의 8bit 가 호스트 아이디로 사용된다.

 

---

 

[네트워크 레이어 2번째 수업]

 

(복습)

IP 주소는 호스트가 아니라 호스트 인터페이스를 지칭한다.

- 가장 대표적으로 라우터는 여러개의 인터페이스 갖고 있는 애. 여러개의 IP주소+각 각 마다 네트워크 아이디도 다르다.

- 이론적으로는 글로벌하게 unique 해야 하는데, 2^32 개 의 한계를 극복해야 한다. IPv6 는 라우터를 바꾸기 쉽지 않아 20년 넘게 제대로 도입되고 있지 않음.

 

IPv4 => 패킷 헤더의 주소 공간이 32bit => 2^32 개의 고유한 주소 사용 가능

IPv6 => 패킷 헤더의 주소 공간이 128bit => 2^128 개 주소

 

80년대 초에는 40억개가 부족하지 않은 줄 알았으나, 90년대 들어와서 위기감을 느낌. 하지만 현실은 NAT로 땜빵질.

 

서브넷 아이디 (IP주소의 호스트 아이디 부분. prefix 라고도 함.)

subnet

 

subnet

 

Network address translation

내부적으로 유일한 소스 아이피가 붙은 패킷은 나갔다가 돌아올 수 없으므로, Gateway 의 아이피로 들어올 때 살짝 바꿔서 온다.

게이트웨이 주소는 globally unique 하다.

 

- 어드레스를 살짝 바꿔준다는 의미에서 NAT이라고 부른다.

 

게이트웨이에 동작하고 있다가 패킷이 나갔다가 들어올 때 살짝 바꿔줌.

주소 공간이 재사용이 가능해짐에 따라 부족 문제가 해소되었음.

 

어떻게 바꿔주는가?

* 패킷이 나간다고 하자.

나갈 때 게이트웨이에서 주소를 살짝 바꿈.

NAT Translation table 에다가 뭐를 어떻게 바꾸었는지 주소를 적어둠.

웹 서버에 갔다가 돌아올 때 테이블에 적어둔대로 바뀌어서 돌아옴.

질문 : 변환할 때 왜 포트 번호까지 바꾸었을까?

내부 망 안에서 사용하는 컴퓨터들 사이에 포트 번호가 같을 수 도 있는데, 겹치면 안되니까 NAT 테이블에서 겹치지 않는 포트 번호로 배정을 해준다.

 

IP주소는 동일하고 포트 번호만 다르게 된다.

결국, 포트 번호를 가지고 누군지 판단하게 되는 것.

 

NAT 를 사용하지 않는 곳은 이제 없다.

거의 99%이상의 기관에서 사용.

지금 우리는 다 네트워크에 연결되어 있다. 학교의 NAT 뒤에서 네트워킹을 하는 것.

구글 서버에 우리가 접속을 하면 구글이 보는 IP주소는 한양대학교 IP주소로 동일하다. NAT을 사용하기 때문에 어쩔 수 없다.

* 만약 SKT LTE 로 네트워킹을 하면 SKT의 NAT로 보이게 되는 것.

 

SKT가 우리 집에 IP주소를 하나 배정해 주었다고 하자.

무선 공유기를 어떻게 사용할 수 있냐?

무선 공유기에서 NAT가 또 동작해서 이 안에서 네트워크를 마구 사용하게 됨. NAT뒤에 NAT 뒤에 ...

무궁무진하게 주소를 사용할 수 있게 되었음.

 

But, 생각해보자.

문제를 근본적으로 해결하지 않고 trick 을 사용한 것. 부작용이 없겠는가?

NAT 뒤에서 서버를 운영한다고 하면 어떻게 될까?

예를들어, MyServer 와 같은 프로그램을 짜서 실행시킨 경우?

- 외부에서 10.0.0.3:7777 이렇게 접속을 할 수 있는가? NO, golbally unique 한 주소가 아님.

- 그러면 게이트웨이의 IP주소를 알려주면 어떻게 될까?

  - 외부에서 해당 주소로 접속해서 NAT 테이블을 조회하면 해당 포트를 찾을 수 없음.

  - 나갈 때 적히고, 들어올 때 사용하는 것이기 때문. 하지만 서버라는 것은 밖에서 누가 먼저 날 찾아서 들어오는 것.

- 그래도 서버를 돌리고 싶다면?

  - NAT 에다가 어떻게 주소를 변환해야 하는지 미리 적어두어야 함.

  - 어떻게 하면 적을 수 있지?

    - 전산실에 전화해서 ... 부탁해야 ;;; '홀 펀칭' 이라는 것을 요청해야. 일반적으로는 요청을 들어주지 않을 것.

 

=> 즉, 내부에서 서버를 운영할 수 없는 단점이 존재.

 

+ 디자인적으로 매주 지저분해지는 상황

 

네트워크를 계층화 한 것의 핵심 => 레이어간의 독립성이 매우 중요함. 서로가 서로에 대해서 몰라야됨.

NAT 가 보고 주소를 바꿔서 안으로 패킷을 들여보내 주는 상황...

우편배달부가 주소를 바꾼것과 마찬가지. 봉투를 뜯어서 포트 번호까지 봄. TCP의 IP데이터 안에 들어있는 포트번호를!

해서는 안될 짓을 하는 것이다...

TCP는 end-to-end. 클라이언트와 서버만 볼 수 있는 건데, 네트워크 레이어 violation 이 문제임.

 

외부에서 패킷이 들어오게 되면 destination IP 는 더 이상 의미가 없다.

포트 번호가 중요함. 들어와서 포트번호를 보고 호스트를 판별함.

하지만 원래 호스트를 구분하는 데 사용하는 것은 IP주소임!

=> IP의 용도가 바뀌어서 내부에서 서버 운영이 안되는 것.

 

물론 사용자들의 99프로 이상이 클라이언트의 역할로 만족하기 때문에 이 문제가 심각하게 느껴지지 않는 것 뿐.

하지만 그렇다고 해서 문제 해결을 올바르게 한 것은 아님. 😖

 

 

내가 내 IP주소를 어떻게 아는가?

=> Dynamic Host Configuration Protocol

어딜 가든 알맞은 IP를 할당해주는 프로토콜.

 

* 어플리케이션 레이어 프로토콜임.

 

(동적으로 할당하지 않고)한양대에서 부여해주는 고정 IP가 있다면?

직관적이기는 한데, 한양대학교가 관리하는 IP의 수가 학생 수와 동일해질 것.

생각해보면 또 모든 학생들이 항상 캠퍼스 안에 있는 것도 아님.

따라서 들어올 때 마다 동적으로 IP주소를 할당해 주는 방식을 사용함.

 

예) 스타벅스에 들어가서 노트북을 열면, 스타벅스의 IP주소가 할당되어야 한다.

IP주소 주세요 ~ 라고 노트북이 외치고, 이 외침을 모든 사람이 듣는다.

그 중 한명은 DHCP서버임.

(DHCP서버가 어떤 네트워크이던 간에 다 존재함)

어쨌든 우리는 DHCP 클라이언트이고, DHCP서버에서 IP를 배정받음.

'Computer Network' 카테고리의 다른 글

서브넷 (Subnet)  (0) 2022.02.04
TCP 혼잡제어 (Congestion Control)  (0) 2020.07.27
[Lecture 7, 8] TCP Service  (0) 2020.07.15
[Lecture 6] RDT : Pipelined Protocols  (0) 2020.07.03
[Lecture 5] RDT : Reliable Data Transfer  (1) 2020.07.02