※사설 네트워크와 공중 네트워크의 차이VPN을 정확히 이해하기 위해 우선 사설 네트워크와 공중 네트워크의 차이점이 무엇인지 짚어보자.사설 네트워크는 한 집단의 목적에 의해 만든 자체 네트워크로, 은행에서 구축한 본점과 지점간의 전용회선을 예로 들 수 있다. 이 전용회선은 은행 고객 정보를 교환하기 위해 물리적으로 폐쇄된 회선을 이용해, 네트워크 장비를 자체적으로 구축한다. 전용회선을 이용한 사설 네트워크는 보안성을 높이기 위한 최선의 방법이지만, 투자비가 많이 들고 운영 관리도 별도로 해야 하는 단점이 있다.공중 네트워크는 전화 통신처럼 모든 이에게 빌려주고 공개되는 것으로, ADSL, ISDN, 다이얼업 모뎀 등이 있다. 이용료는 저렴하지만 회선의 신뢰도, 보안성 등이 사설 네트워크보다 떨어지는 것이 사실이다.VPN은 공중 네트워크인 ADSL, ISDN, 다이얼 업 등의 방법으로 인터넷에 접속하고, VPN을 이용해 회사내의 사설 네트워크처럼 폐쇄적인 네트워크를 구성해 회사 내의 중요한 정보를 주고 받는다는 것이다. 인터넷을 이용해 VPN을 구성하면 인터넷 회선과 사설 회선을 별도로 구성해야 하는 번거로움이 사라질 뿐 아니라 전용회선을 도입하는 비용도 아낄 수 있다.따라서 대리점, 협력업체 간의 대금 지불, 구매, 발주 정보 등의 정보를 확인하는 익스트라넷(extranet)이 인터넷으로만 구성돼 있다면 VPN을 이용해서 보안성을 높일 수 있다.부서원이 출장, 교육, 재택 근무를 할 때 집에서 개인적으로 ADSL, 케이블 모뎀, 다이얼업 모뎀 등으로 회사내의 게시판 정보나 급여 등을 인터넷을 통해 안전하게 볼 수 있다는 장점이 있다. 또한 VPN을 이용하면 지방이나 해외 지점에서 비싼 국제 전용 회선이 아닌 인터넷 회선을 이용해 본사 서버에 있는 게시판 등의 정보를 볼 수 있다.(그림 1) VPN 적용 전과 적용 후 네트워크 구성※VPN시장 상황●국내의 웬만한 기업들은 회선을 임대하여 지사나 공장 또는 해외지사와 연결한 사설 네트웍을 구축하여 필요한 데이터를 주 구조이다.외부의 협력업체와 공급자에게 기업의 내부에 있는 데이터에 접근할수 있도록 허용함으로 터널링 기법은 정보의 안전한 보호외에도 내부 네트워크를보호해야하는 어려움이 있다.③ Remote Access VPN원격지에 있거나 이동하는 직원들이 자신이 속한 네트워크에 접속하기 위한 구조이다.2) VPN Design별 분류①CPE 기반 VPN②네트워크 기반 VPN3) VPN Unit별 분류①하드웨어 기반 VPN②방화벽 기반 VPN③라우터 기반 VPN④서버 기반 VPN4) VPN 기술별 분류①IPSec 기반 VPN②FR 기반 VPN③MPLS 기반 VPN3. VPN의 장점 및 특징내 용장점- 적은 비용으로 넓은 범위의 네트워크 구성이 가능- 구성 네트워크의 관리 및 운영비용의 절감- 외부에서의 접속사에 저렴한 가격으로 접근이 가능 전통적인 WAN의 사용에 비하여 20~30%의 사용료 감소)- 전용선이나 mordem pool등의 관리에 대한 필요성의 소멸- 네트워크의 관리 및 제어의 가능성 증가- 인터넷과 같은 공개 IP 네트워크의 안전성 확보- 기업 네트워크의 유동성의 확보단점- 인터넷 인프라는 임대 전용선과 같은 정도의 신뢰성을 주지 못함- 라우터 기반의 VPN 인프라는 확장성이 없음- 사설망에 비해 완벽한 보안 처리를 못함- VPN 서비스 개발에 대한 투자 및 책임성이 회의적임 -> 네트워크 속도 저하(암호화)Ⅱ. VPN(Virtual Private Network)의 특징 및 장단점?Internet의 개방적이고 분산된 하부구조 사용?ISP에 POP(Points of Presence)으로 연결?전송되는 데이터에 Encryption, Authentication 등 보안기능 제공? 첫째 : 본사와 지사, 지사와 지사간 전용선을 직접 연결하는 대신, 단지 인터넷 접속만을 위한 전용선을 설치하기 때문에 고가의 전용선 의 대여 비용이 대폭 감소된다.? 둘째 : 원격 사용자가 지사와 거리가 먼 곳에서 본사 네트워크에 접속이 필요할 때, 이전에는 장거리 전화요금이 필요했으나 Vuser group, network user 인증, 안전한 address 교환 등과 같은 보안 기능들에 의해 보장된다. EWSP는 VPN 내에sub-VPN의 구현을 용이하게 하므로서 User의 조직 구조에 맞는 적절한 네트워크를 구현할 수 있도록 한다.[그림 3]은 VPN에 Private Switching node를 할당하므로서 독립적인 네트워크를 만드는 방법을 나타내고 있다. 이것은 인증되지 않은 접속에 대해 높은 수주느이 보안을 보장한다.[그림 3] VPN을 통한 Private Network 구성[그림 3]과 같은 구성은 전용 임대 네트워크라고 말할 수 있다. 특히 독립적인 VPN은 대형 VPN 또는 네트워크의 보안이 특별히 요구되는 사이트에 적합한 구성이다. 이러한 네트워크의 구조는 PSDN 네트워크 관리 시스템과 병행하여 private VPN 네트워크 관리 시스템의 운영을 가능케 한다. 반면 International VPNs에 비해 보다 많은 비용을 부담하여야 한다.VPN 기능은 National PSDN과 Transit PSDN, forign PSDN을 통해서 International한 VPN을 구성할 수 있고 transpatency한 traffic 접속을 보장할 수 있다. [그림 4]는 International한 VPN Topology이다. 현재 VPN 서비스에 관련한 국제 표준이 없는 상태다. 따라서 폐쇄적인 NMS로 인하여 forign PSDN의Switching system으로부터 H/W, S/W 자원을 VPN에 통합시키기란 거의 불가능하다.[그림4] International VPN TopologyISDN의 등장은 PSDN을 대신할 새로운 가능성 있는 대안으로 대두되고 있다. 일반적으로 비용과 Data 처리 대역폭에 있어서 ISDN은 PSDN에 비해 우수하다. VPN은 각각의 ISDN 가입자를 관리하는 Packet Server Module(PSM)을 통해서 만들어지며, ISDN의 D, B 채널을 통해 PSM에 접속함으로써 수행된다.Ⅳ. VPN에 관유용한 정보를 보호하기 위한 쿠키기법 사용?nffie-Hellman 키 교환 방식과 사전 수행 기법을 사용(속도 향상)?교환된 키는 인스턴스한 random키로 사용후 폐기3. VPN관리기술VPN관리기술은 VPN자원의 원활한 운영과 관리를 손쉽게 하기 위한 것으로 보안 및 성능에 중점을 두어 개발된 시스템이다. 사용자에게 QoS와 안정성을 제공하기 위한 기술이다.?Remote Access(Dial-up) VPN?본사와 원격지 허가 받은 사용자간의 네트워킹?Client-to-LAN 방식 사용?사용이나 관리상의 용이성이 중요한 부분?Intranet VPN?본사와 지사간의 네트워킹?LAN-to-LAN 방식 사용?Extranet VPN?본사와 사업 파트너 또는 고객 등과의 네트워킹?보안 정책이 다른 subnet들을 상호 연결?높은 보안 위험성 ? 복잡한 구현 형성Ⅴ. VPN Protocol① 역할?Packet Encapsulation?Tunnel 생성 및 관리?Cryptographic Key 관리② 종류?Layer 2 프로토콜Client-to-LAN VPN을 관리하는 데 주로 사용예) PPTP, L2F, L2TP?Layer 3 프로토콜LAN-to-LAN VPN을 관리하는 데 주로 사용예) IPSec?Session Layer 프로토콜응용 계층에서 필터링을 지원하는 데 주로 사용예) SOCKS V51. Layer2 Protocal1) Layer2 Tunneling 방식① Voluntary TunnelingClient-initiated TunnelingClient가 직접 Tunnel 서버와 Tunnel 형성? end-to-end Tunnel클라이언트에 PPTP/L2TP 가 탑재되어 있어야 함동시에 TCP/IP를 이용하여 다른 Internet 호스트에 접근 가능② Compulsory TunnelingISP-initiated TunnelingISP Remote Access Switch가 Client 대신 Tunnel 형성ISP가 VPN 제공하는 경우 주로 사용말단 사용자에게 투컴퓨터는 이러한 네트워크를 지나는 모든 데이터를 암호화 하며 게이트웨이 하부에서 복호화 하게 된다. 이러한 VPN은 신뢰할수 없는 네트워크에 연결된 다른 컴퓨터에 쉽게 연결할수 있지만 실질적으로는 통신보안이 되는 신뢰성있는 네트워크가 된다.*AH(Authentication Header) : 패킷 레벨의 인증서비스 제공*ESP(Encapsulating Security Payload) : 암호화와 인증기능 제공*lKE(internet Key Exchange) : 게이트웨이에서 연결하기위한 키 협상4) IPSec ProtocolTCP/IP규격은 원래는 보안에 허술한 프로토콜이다. 따라서 이러한 취약점을 보안하고자 보통 상위계층인 어플리케이션 레벨에 보안규격을 따로 만들어 놓았었다. 이러한 예로는 SSL,SSH등이 있다. 하지만 IPSec Protocol은 이와는 다른개념으로 보안을 담당하게 된다. 방법은 TCP/IP위에 암호화된 TCP/IP를 덮어 씌우는 것이다. 이것이바로 VPN이 되며 여러가지 장단점이 있으며 이는 위에 언급하였다. 암호화된 방법을 사용하기 떄문에 자연스레 네트웍속도가 떨어지며 고가의 장비가 필요하게 되고, 대신 싼값에 공중망을 암호화방식을 이용하여 사설망처럼 사용할 수 있다는 것 이다.IPSec은 기본적으로 인증헤더(AH)와 캡슐보안페이로드(ESP)등2개의 프로토콜로 구성되어 있다.①AH : 가능한 한 많은 IP헤더에 대한 인증을 제공한다. AH인증은 패킷인 전송중에 있을 때, 즉 NAT(Network Address Translation)종단간 환경에서 헤더를 조작할수 없도록 만들어 준다.②ESP : 이프로토콜은 데이터의 기밀성을 제공하게 된다. 암호화는 되어 있지만 인증되지 않은 데이터의 공격을 막기 위해 AH의 모든기능을포함하고 있다. IPSec의 사양은 AH를 제외한 ESP를 허용하고 있지만, 이를 정확하고 적절히 사용하기 위해서는 하고있는 작업에 대한 정확한 이해도를 필요로 하고있다.3. Session layer Protocol SOCK
/** Main.java** Created on 2007년 4월 15일 (일), 오전 10:53** To change this template, choose Tools | Template Manager* and open the template in the editor.*/package postfix;import java.util.Stack;import java.util.Scanner;/***public class PostfixCalculate {private final int LPAREN = 0 , RPAREN =1 , PLUS =3, MINUS =3, DIVIDE =4, MUL=4, MOD=4 ,OPERAND =5;/** Creates a new instance of Main */public PostfixCalculate() {}/*** @param args the command line arguments*/public static void main(String[] args) {// TODO code application logic heredouble resultOutPut = 0;PostfixCalculate postfixCalculate = new PostfixCalculate();resultOutPut = postfixCalculate.From_Infix_TO_Postfix();System.out.println("계산된 결과 값 => " + resultOutPut);}public double From_Infix_TO_Postfix(){//String infix = "(2*(3+6/2)+2)/4+3";Scanner input = new Scanner(System.in);String infix = input.nextLine();Stack stack = new Stack();String resultProstfix = " ";char symbol;double result = 0;for(int i=0 ; i < infix.length(); i++ ){symbol = infix.charAt(i);if (symbol == '('){stack.push(new Character(symbol));}else if (symbol == ')'){// while ( stack.empty() && ((stack.peek()) != '(')) /* 왼쪽 괄호가 나올 때까지 */while(!stack.empty() && (symbol = ((Character)stack.pop()).charValue()) != '('){resultProstfix += symbol;resultProstfix += " ";}}else if( symbol == '+' || symbol == '-' ||symbol == '*' || symbol == '/'){while (!stack.empty() && getToken(((Character)stack.peek()).charValue()) >= getToken(symbol)){resultProstfix += ((Character)stack.pop()).charValue();resultProstfix += ' ';}stack.push(new Character(symbol));}else if(symbol >= '0' && symbol = '0' && symbol