보통 네트워크 통신을 진행할 때, NAT를 이용하여 공인IP를 사설IP로 나눠서 사용하곤 한다.
(A
클래스에서는 10.~, B클래스에서는 172.16.~, C클래스에서는 192.168.~ 등으로 나뉘는, 그 주소이다.)

OSI 7계층이라는 말을 많이 들어 보았을 것이라고 생각한다.
OSI 7
계층은 통신 계층을 수직적으로 7개의 각각 다른 계층으로 나누어 놓은 것으로,
각 계층을 독립적으로 구성하여 변경이 필요할 시 해당 모듈만을 변경해도 되도록 만든 것이다.


OSI 7계층은 낮은 순서대로 물리데이터 링크네트워크전송세션표현응용 계층으로 구성된다.

OSI 7계층을 좀더 기능별로 압축하여 만든 TCP/IP 계층 구조도 있는데,
이는 낮은 순서대로 네트워크 인터페이스인터넷전송응용 계층으로 구성된다.


TCP로 데이터를 전송하는 통신을 할 때, OSI 7계층 기준으로 세션/표현/응용 계층에 Data가 전달되고
전송 계층의 대표적인 프로토콜인 TCP에 해당 어플리케이션의 Port TCP 통신에 필요한 정보들이 지정되며,
네트워크 계층의 대표적인 프로토콜인 IP에 말 그대로 IP 주소가 지정된다.


한 단계 더 내려가 네트워크 인터페이스 계층까지 내려가 보면 실질적인 통신을 위한 MAC Address 네트워크 계층에서 사용하는 프로토콜에 대한 정보 등을 담고 있다.
그 밑인 물리 계층은 캡슐화 종류, 전체 패킷의 길이 등을 담고 있다.

이해를 돕기 위해 계층의 중요한 저장되는 정보를 연결하여 나타내면 다음과 같다.


세션/표현/응용 : Data
전송 : Dest_port, Src_port
네트워크 : Dest_ip, Src_ip
데이터 링크 : Dest_MAC, Src_MAC


네트워크의 통신에 대해 생각하는 도중, 의문이 든 것이 바로 이 부분이었다.

사설망 내부에서 내 PC가 서버로 보낸 패킷은 네트워크 계층에 다음과 같은 정보가 담겨서 나간다.
네트워크 : Src_ip = “192.168.0.6”, Dest_ip = “8.8.8.8”
이는 와이어샤크로 직접 확인해 봤을 때도 나타난 결과이다.





그런데 우리는 당연하게 생각하고 있는 것이,
우리는 사설 네트워크 내부에 있는데 바깥의 서버와 통신을 할 때는 공인IP를 이용한다는 것이다.
내 패킷이 저대로 전달된다고 가정하면 “8.8.8.8”에서는 내 패킷을 받고, Src_ip “192.168.0.6”였으므로 당연히 저 주소로 Response를 하게 되는데, 조금만 생각해도 될 리가 없다. 사설 네트워크의 주소이기 때문이다.


“8.8.8.8”
과의 통신을 위해서는 사설 네트워크의 주소가 아닌 공인IP를 이용하여 통신해야 한다.

그런데 패킷 구조 어디를 봐도 공인IP로 통신을 하기 위해 공인IP를 저장하는 공간이 없다.

라우터 측에서 네트워크계층의 src_ip 부분을 공인IP로 변경한다고 가정할 수도 있는데, 이렇게 되면 Response 패킷의 dest_ip 부분이 공인IP 주소로 바뀌어야 한다.


하지만 실제로 들어온 패킷을 wireshark를 이용해 잡아본 결과,
dest_ip
에는 사설 네트워크 내부의 내 IP 주소가 들어있다.

이게 가능하기 위해서는 패킷이 PC를 떠나 라우터를 거쳐 서버로 향하는 과정에 라우터의 공인IP 주소를 담는 부분이 패킷에 추가되어야 한다.


또는 다른 방식을 이용하여 어떻게든 공인IP와 사설IP를 모두 저장할 방법이 필요하다.

그런데, 직접 서버에서 사설망 내부에서부터 보내진 패킷을 잡아서 분석해 봤더니

이렇게, 공인IP 주소가 찍혀 있는 것을 볼 수 있었다.


마찬가지로 Response 패킷을 확인해 보니

Dest_ip에 공인IP 주소가 적혀 있다.

이를 통해 내가 보낸 패킷이나 내가 받는 패킷은 라우터를 기점으로 네트워크계층의 프로토콜에 변동이 일어나고,


사설망->외부망 : 사설IP->공인IP

외부망->사설망 : 공인IP->사설IP


형식으로 바뀐다는 것을 알 수 있었다.

그럼 대체 이건 어떻게 작동하는 것일까.
그나마 예측하자면 라우터에 통신 내역이 저장되거나, MAC Address를 보고 거기에 맞춰 IP Address를 넣어주던가, 두가지 가능성이 있는데,
후자같은 경우 데이터 링크 계층의 MAC Address같은 경우 통신의 주체가 바뀔 때마다 바뀌어버리기 때문에 불가능하다.
따라서 전자라는 의미인데, 과연 라우터 내부에서 어떻게 저런 일이 가능한지가 궁금하다.


이 부분은 나중에 더 공부하도록 하자.


공부해서 알아낸 내용을 정리하였다.


'Knowledge' 카테고리의 다른 글

RC4 Stream Cipher  (0) 2016.07.19
스트림 암호 (Stream Cipher)  (0) 2016.07.18
사설망-외부망 통신에 대한 공부  (0) 2016.07.02
Greedy Algorithm + 회의실 배정  (0) 2016.06.21
Kernel/User mode  (0) 2016.04.15
마이크로/모놀리식 커널 (Micro/Monolithic Kernel)  (0) 2016.04.02
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

댓글을 달아 주세요