본 자료는 잘 읽어보시면 도움이 많이 되실 겁니다.
인터넷 붐이 일던 2000년대 초반에 네트워크 강의를 목적으로 정리했던 자료입니다.
자료 정리 : 2001년도
클라이언트A에서 서버B로 접속을 하는 방법에는 여러 가지가 있겠지만
서버B가 웹서버라고 가정을 하고서 접속하는 과정을 한번 알아보도록 하자.
먼저, 라우터 R1에 속한 망이 공인IP주소를 사용하고
있다고 가정하면,
녹색원에 해당하는 부분이 broadcast domain이다.
클라이언트A가 웹 브라우저를 기동하고서 http://www.mk.co.kr이라는
매일경제신문 사이트인 서버B에 접속을 하기위해 엔터키를 친다.
여기서 실제적으로 어떠한 과정을 통해서 접속을 하는지 한번
알아보자 물론 상세하게 모든 과정을 설명드리지는 못하지만 기본적으로 필요한 사항에
대해서 알고서 넘어가자.
웹서버에 접속하는 과정은 TCP/IP통신 프로토콜을 이용하여 통신을
하게된다.
잘 아시다시피 TCP/IP통신과정은 클라이언트A에서 어플리케이션
계층과 TCP계층간에는 TCP 헤더구조에 보면 Source Port와 Destination Port라는
헤더부분이 있다.
이 부분에서 우리가 알고 넘어가야 할 부분은 목적지 포트는 웹서버를
사용하는 경우즉 WWW일 때는 80번 포트, telnet 데몬 접속시는 23번 포트, FTP서버에
접속시는 21번 포트를 사용한다는 것이다.
이 외에도 많은 포트들이 Reserved되어 있는데 보통 예약된 포트번호는
1~1023번 사이에 존재하여 이 부분을 well-known 포트넘버라고 한다.
소스포트는 통상적으로 1023번 이후부터 65535번 포트사이에 있는
임의의 번호를 랜덤하게 할당받게 되는데 예를 들어 10,000번 포트번호를 할당받았다고
한다면, 목적지 포트번호는 이미 접속하는 서버가 웹서버이므로 80번으로 세팅이
된다.
TCP계층에 또다른 헤더부분에 대한 것은 생략하기로 한다. 이유는
오늘 설명하고자 하는 초점과 거리가 멀기 때문이다.
그러면 네트워크 계층의 IP헤더구조에서는 상대방의 목적지주소와
자신의 주소가 설정된다.
물론 IPv4이므로 각각32비트로 설정된다.
여기서 소스주소가
210.100.100.10이라고 가정하고 목적지주소는 매경사이트 주소인 211.40.179.98이다.
여기서도 또한 다른 헤더는 생략한다. 자세한 것은 본인이 정리한
기술자료란에서 자세히 보시면 된다.
3계층까지 만들어진 패킷은 이제 하위계층인 MAC주소 계층에서
필요한 프레임을 만들 게 된다.
물리계층에서는 실제적으로 전기적인 신호로 데이터가 전송된다.
패킷을 전송하기 위해서는 어디로 전송할 것인지를
결정해야 한다.
만들어진 패킷이 같은 broadcast domain에 존재하는지 확인은
어떻게 하는가?
자신의 컴퓨터에 보게되면
IP주소 및 서브넷 마스크, 기본 게이트웨이가 세팅되어 있을 것이다.
개인컴퓨터에도 TCP/IP프로토콜이 동작하여 라우팅
테이블이 존재한다.
호스트에 존재하는 라우팅 테이블은 라우터처럼 패킷이 들어오면
어떤 경로로 패킷을 전송할 것이지 결정하는 기능은 존재하지 않지만 상위계층에서
만들어진 패킷을 라우팅 테이블을 참조하여 어디로 보낼 것이지를 결정한다.
목적지 경로가 같은 서브넷 영역안에 존재하는지 다른 영역에
존재하는지 판단은 어떻게???
먼저 시스코 라우터를 예로 들어 세팅하는 부분중에 이런부분이
있을 것이다.
ip route 0.0.0.0 0.0.0.0 serial0
여기서 0.0.0.0 0.0.0.0가 의미하는 것은 무엇인가?
앞에 있는 0.0.0.0는 목적지 네트웍이고 뒤에 있는 0.0.0.0는
서브넷 마스크이다.
위의 그림에서 보게되면 기본 게이트웨이가 존재할 것이다. 이
기본게이트웨이는 라우터의 이더넷IP주소를 뜻한다.
개인컴퓨터에서 목적지 경로를 찾는 과정은.....
자신의 주소와 서브넷마스크간에 AND gate연산을 하게된다. 위의
그림에 나온 숫자로 연산된 결과값은 210.100.100.0이다.
그리고 목적지주소와 서브넷마스크간에 AND gate연산을 하게되면
211.40.179.0가 나온다.
이 두 개의 값을 비교하여 연산된 결과값이 서로같으면 같은 서브넷
영역에 속하는 것이고
다르면 다른 영역에 존재하는 것이다.
같은 영역에 존재할시에는 상대방의 주소를 모를 경우에는 arp동작을
실행하여 목적지 하드웨어주소를 알아서 목적지로 패킷을 보내게 되는 것이고 다른
영역에 존재할시에는 라우터 MAC주소를 2계층 프레임에 설정하여 프레임을 라우터로
보내게 된다.
라우터에서는 도착한 프레임을 2계층에서 3계층으로 전달시에
헤더를 제거하고 3계층에서 목적지 주소를 확인하고서 라우팅 테이블에서 적당한
경로를 찾아서 패킷을 전송한다.
물론 전송시에는 라우터와 라우터간에 설정된 프로토콜이 HDLC로
설정이 되어있으면 HDLC프레임으로 만들어서 상대방 라우터로 전송을 하게 되는 것이다.
패킷이 R2라우터에 도착하게 되면 라우터R2는 목적지 서버로 패킷을
전송한다.
목적지 서버에서는 클라이언트에 응답하여 패킷을 만들어 보내게
된다.
이때 보내게 되는 소스포트 번호는 랜덤하게 설정이 될 것이며
목적지포트는 클라이언트 소스포트번호인 10,000번을 할당하게 되고
목적지 주소는 210.100.100.10번을 설정하여 반대의 과정을 거쳐서
원래의 클라이언트A에 패킷이 도착하여 원하는 응답을 받게된다.
그러면 여기에서 간단히 정리를 해보면
공인IP주소를 가지고 통신할 시에 필요한 것은
(소스포토번호, 목적지포트번호, 소스IP주소, 목적지IP주소)로
압축하여 볼 수가 있다.
라우터는 목적지IP주소를 보고서 경로설정을 하는
것이다. 라우터와 라우터간에 주고받는 라우팅 프로토콜이라든가
이런 개념은 본 설명의 취지와는 거리가 멀기 때문에 생략한다.
먼저, 라우터 R1에 속한 망이 사설IP주소를 사용하고
있다고 가정하면,
라우터에서 사설IP주소를 공인IP주소롤 바꾸어주는 기능이 설정되어있지
않다고 가정한다면
IP주소가 192.168.10.10이라고 하는 사설IP주소라고 하자.
클라이언트A에서 만들어진 패킷은 라우터로 보내지게 될 것이다.
라우터는 목적지IP주소를 보고서 경로설정을 하여 패킷을 전송하여
목적지인 서버B에 도착하였다고 한다면 다시 역으로 응답을 하게될 때 상대방의 IP주소를
설정하여 보내게 될 때 이 패킷은 다시 클라이언트A로 찾아오게 될 수가 없다.
왜냐하면 인터넷상에서는 공인IP주소만이 찾아갈 수 있는 경로가
설정되어 있기 때문이다.
라우터에서 사설IP주소를 공인IP주소로 변경해 주는 기능을 해주어야만
사설IP주소를 사용하는 클라이언트A가 서버B와 통신을 할 수가 있는 것이다.
그러면 라우터에서는 어떻게 이러한 기능을 하게되어 통신이 가능하도록
하는 것인가?
먼저 클라이언트A가 생성한 패킷을 라우터로 전송된다. (소스포트번호,
목적지포트번호, 사설 소스IP주소,목적지IP주소)
라우터는 클라이언트A의 사설IP주소를 공인IP주소로 변경한다.
즉 NAT(Network Address Translation)을 하게된다.
이러한 IP주소변환을 한 결과를 라우터 엔트리에 저장을 한다.
엔트리 테이블에 (No, 소스포트번호, 목적지포트번호, 사설
소스IP주소,목적지IP주소, 공인
소스IP주소)를 만들어 저장하고서 다시 만들어진 패킷을 서버B로
전송하여 서버B로부터 응답을 받게된 패킷이 도착할시에는 반대의 과정을 거쳐서
목적지 주소를 공인IP주소 → 사설IP주소로 바꾸어 클라이언트A로 전송해준다.
그럼 여기서 아무런 문제가 발생하지 않을까?
소스포트번호와 목적지포트번호가 생성된 것은 어떤 계층인가?
Transport Layer인 4계층이다. 아시다시피 라우터는 3계층까지의
정보를 가지고 패킷을 전송한다.
그런데 4계층에서 만들어진 소스포트번호는 클라이언트A만 생성할
수 있는 것은 아니라는 것이다.
인접한 다른 클라이언트들도 같은 소스포트번호를 생성할 수가
있다는 것이다.
즉 10,000번 이라는 소스포트번호를 다른 클라이언트도 생성할
수가 있기 때문에
(No1, 소스포트번호 = 10,000,
목적지포트번호, 사설 소스IP주소=192.168.10.10,목적지IP주소,
공인 소스IP주소=210.100.100.5)
(No2, 소스포트번호 = 10,000,
목적지포트번호, 사설 소스IP주소=192.168.10.11,목적지IP주소,
공인 소스IP주소=210.100.100.5)
와 같은 엔트리 테이블이 존재할 수가 있다는 것이다.
목적지로부터 도착한 패킷을 과연 어디로 다시 주소변환을 하여
보내야 할 것인가?
1번 엔트리인가? 아니면 2번 엔트리에 등록된 것인지 알 수가 없게 된다. 방법은 다음과 같이 하면 해결이 된다.
(No, 소스포트번호, 목적지포트번호, 사설
소스IP주소,목적지IP주소, 공인
소스IP주소, 라우터생성 소스포트번호)
로 엔트리 테이블을 만들게되면 목적지인 서버B에서 도착한 응답이
다시 클라이언트A로 주소변환을 하여 보내게 될 때 명확해진다.
즉 라우터에서 생성된 소스포트번호는 각각 다르기 때문에 같은
엔트리테이블 정보가 생성될 수 없다는 것을 알 수 있다.
패킷을 내보내게 될 경우에는 사설소스IP주소 → 공인소스IP주소,
클라이언트 소스포트번호 → 라우터생성 소스번호
패킷을 클라이언트로 응답시에는 목적지주소 및 목적지포트번호만
역변환과정을 거쳐서 Translation을 해주면 해결된다.
참고적으로 말씀을 드리자면 공인 IP주소를 가지고 인터넷통신시 컴퓨터 여러대가 통신을 하는 경우에 필요로
하는 소프트웨어인 IPTime 도 이러한 NAT처리를 해주는 소프트웨어입니다.
그리고 방화벽에서 내부는 사설IP를 사용하고 외부와 통신시에
사용하는 경우에도 마찬가지로 이러한 과정이 필요한 것이죠..
지금까지 설명드린 NAT동작과정이 이해가 되셨는지 모르겠습니다.
개념은 이정도면 충분히 이해가 되셨을 줄로 아는데 혹시라도
잘 이해가 안되시면 제가 그동안 정리한 파일들중에
이더넷 동작원리, arp동작원리, IP계층에서의 헤더구조 및 동작처리과정,
TCP계층 헤더구조 및 동작과정등을 참조하기시 바랍니다