2013년 9월 14일 토요일

Network Security #02

제10강.네트워크성능 관리
PING (Packet Internet Groper)
TCP/IP 프로토콜 중 ICMP(Internet Control Message Protocol) 사용
ICMP(Internet Control Message Protocol)
  • ICMP는 호스트 서버와 인터넷 게이트웨이 사이에서 메시지를 제어하고 에러를 알려주는 프로토콜
  • OSI 3계층인 네트워크 계층에 속함.
  • RFC 792에 정의됨.
  • ICMP는 IP 테이터그램을 사용
  • 메시지는 TCP/IP 소프트웨어에 의해 처리되며 응용프로그램 사용자에게 직접 분명하게 보이지는 않는다. 일례로서 ping 명령어는 인터넷 접속을 테스트하기 위해 ICMP를 사용한다.


PING 구조


TYPE ( 0 or 8)
Code (0)
Checksum

Identifier

Sequence Number

Option Data









  • 타입 : ICMP 메시지 유형 구분
  • 코드 : 메시지에 대한 추가 정보 (ping은 0)
  • 오류검사 : ICMP 메시지에 대한 오류만 검사
  • 식별자 : 패킷을 보낸 ID로 응답 시 확안. 같은 서버에 요청되는 각종 PING Request에 대한 소유권 구분
  • 번호순서: ‘0’에서 부터 시작하여 증가하는 값. 응답 패킷에 복사
>ping www.yahoo.co.kr
Pinging sg-rc.g01.yahoodns.net [203.84.219.114] with 32 bytes of data:


Reply from 203.84.219.114: bytes=32 time=309ms TTL=49
                                   -----------------
RTT(Round Trip Time)와 TTL(Time to Live) 값
Reply from 203.84.219.114: bytes=32 time=307ms TTL=49
Reply from 203.84.219.114: bytes=32 time=311ms TTL=49
Reply from 203.84.219.114: bytes=32 time=312ms TTL=49


Ping statistics for 203.84.219.114:
   Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
   ----------------------------------------------------
   Packet 손실율
Approximate round trip times in milli-seconds:
   Minimum = 307ms, Maximum = 312ms, Average = 309ms
   -------------------------------------------------
RTT 최대, 최소값  


PING 출력 형태
  • 첫번째 RTT 값이 다른 RTT 값들보다 높은 경우 :: ping을 수행한 장비의 ARP 캐시에 대상 호스트의 IP에 관련된 MAX가 없는 경우, 주로 발생
PING 형식과 옵션(windows)
  • -t : 사용자가 프로그램을 끝낼 때 까지, PING 명령을 계속 수행
  • -a : 입력된 IP 주소를 호스트 이름으로 바꾸어 줌
  • -n count : count에 지정된 수 만큼 패킷을 보냄
  • -w timeout : timeout 시간을 연장
  • -l size : 패킷 사이즈를 변경


TTL(Time-To-Live)::
  • IP 패킷 내에 있는 값, 네트워크내에 얼마 오래 있었으며 폐기 여부를 라우터에게 알려줌.
  • 패킷들이 정상적으로 목적지까지 배달되지 않는 여부를 나타낸다.
  • 초기치는 8비트 헤더에 설정됨.
  • 각 라우터는 TTL필드로 부터 적어도 하나의 숫자를 빼도록 되어 있음. 그 계산은 대개 패킷이 버려지기 전에 허용되는 라우터의 홉수를 의미(홉 : 라우터 <-> 라우터 사이)
  • 패킷을 받는 각 라우터는 TTL 필드 내의 값에서 1을 뺀다. 그 값이 0이 되었을 때, 라우터는 그것을 감지하여 그 패킷을 버리고 ICMP 메시지를 발신지 호스트로 보냄.
  • 원도우9x의 기본 TTL은 32홉 , 만약 어떤 사이트에 도달하기 어려움을 느끼는 사용자라면 이 값을 128 정도로 바꾸는 것도 하나의 방법.
  • tracert - 수신 경로를 따라 이어지는 각 라우터에 의해 그 패킷이 버려지도록 하기 위해,의도 적은 낮은 TTL값을 이용
  • TTL 값
    • 0은 같은 호스트 ,1 은 같은 서브넷으로 제한
    • 32은 같은 사이트 , 64은 같은 지역으로 제한
    • 128은 같은 대륙 ,255는 제한 없다.



tracert(Trace Route)
  • 특정 호스트를 찾아가기 위하여 거치는 홉을 기록하는 프로그램.
  • 해당 라우터의 라우팅 데이블이 정상적인지 점검
  • ICMP의 메시지 두 종류와 IP헤더 내의 TTL을 사용
Tracert 옵션 사용 예
  • 홉 마다 주소에 대한 호스트 이름을 알아 보는 것을 제외하여 trace 실행 시간을 빠르게 하고자 하는 경우
    예) tracert -d www.yahoo.co.kr
  • 대상 호스트까지 연결되는 홉 중 5개만의 경로를 알고자 하는 경우
    예) tracert -h 5 www.yahoo.co.kr
netstat
  • 네트워크 인터페이스 카드의 네트워크 통계치와 현재의 TCP/IP 네트워크의 연결상황을 나타내는 프로그램
  • 이를 통하여
    • 현재 발생하고 있는 Collision Rate 계산
    • 접속 케이블/인터페이스의 양호 상태
    • Broadcast 율, Discard 율, 네트워크 I/O 트래픽 율
    • 라우팅 데이블 등을 알 수 있음
    • 또한, 현재 접속되어 있는 호스트의 어드레스와 포트 번호를 알 수 있음.
참고 : 브로드캐스트(broadcast)
  • 영역안에 모든 노드에 동일한 신호를 보내는 것
  • 비교
    • 유니캐스트 : 특정 수신자(대부분의 전자우편이 그렇다)에게만 전송
    • 멀티캐스트 : 다중 수신자(전자우편 메일링 리스트 또는 MBone네트웍을 통한 웹전송 등)들에게 전송
    • 애니캐스트 : 라우터들의 그룹에서 가장 가까이 있는 것들에게 전송


Netstat 출력 양식
  • Proto: 연결된 네트워크의 프로토콜 이름
  • Local Address : 연결에 사용되는 로컬 단말의 IP주소와 포트번호 표시 (포트 지정이 안된 경우 * 표시)
  • Foreign Address : 연결된 원격 컴퓨터의 호스트 이름이나 IP 주소 표시
  • State : 연결 TCP 프로토콜의 연결 상태 표시
    • 연결 시 : established
    • 연결 대기 중인 경우 : listening


netstat 옵션 사용예
  • 현재 이더넷 환경에서 해당 단말의 broadcast와 unicast 패킷 비율, 폐기되는 패킷 율, 에러등의 통계치를 알고 싶은 경우
    ::netstat -e
  • 네트워크 연결 상황을 IP주소와 패킷 번호 별로 나타내고자 하는 경우
    ::netstat -a -n  (결과에 이상한 포트번호가 (12345,1245 등) 나타나면 트로이의 목마에 감염된 것임.
  • 해당 단말의 라우팅 형태와 연결 접속 사황을 보고자 하는 경우 (라우팅 테이블을 보여줌)
    ::netstat -r
라우팅 테이블


설명
Network Address
Netmask
Gateway
Interface
Metric
Default
Route
0.0.0.0
0.0.0.0
192.168.1.1
192.168.1.100
20
Loop Back
127.0.0.0
255.0.0.0
127.0.0.1
127.0.0.1
1
Subnet
network
192.168.1.0
255.255.255.0
192.168.1.100
192.168.1.100
20
Lan Card
192.168.1.100
255.255.255.255
127.0.0.1
127.0.0.1
20
Subnet
Boradcast
192.168.1.255
255.255.255.255
192.168.1.100
192.168.1.100
20
Multicast
224.0.0.0
240.0.0.0
192.168.1.100
192.168.1.100
20
Limited
broadcast
255.255.255.255
255.255.255.255
192.168.1.100
192.168.1.100
1


Routing Table 보는 법

  • default route
    • 여러 라우팅 데이블을 확인해서 일치하지 않을 경우, default route의 gateway로 보낸다
    • 일반적으로 라우터의 주소에 해당
  • loopback
    • 127.0.0.1은 software loopback 주소로서, 자기 자신을 가리킨다.
  • subnet network
    • ip 주소의 subnet network 주소를 가르킨다.
    • ip 주소가 192.168.1.100 이고 subnet mask가 255.255.255.0 인 경우 AND 연산을 통해 192.168.1.0이 network 주소가 된다.
  • LAN card : 자신의 IP주소를 의미한다.
  • subnet broadcast : 위의 subnet mask 연산결과 나온 192.168.1.0 의 마지막 주소인 192.168.1.255를 broadcast로 사용.
  • multicast
    • D class의 multicast를 나타내는 행이다.
    • 특정한 그룹에게 메시지를 전달 할 때 사용되는 주소
  • limited broadcast
    • 라우터를 통과하지 못하는 broadcast 주소
    • 같은 subnet 상의 모든 host에 전달

Network Security #01

06강 요약::
- OSI : Open System Interconnection
- BASIC Reference Model : ISO-7498
계층 구조 ,
  • Application Layer
  • Presentation
  • Session
  • Transport :: 신뢰성 ,
  • Network :: 단위 패킷(Packet), 관련 서비스 제공
    • (스위칭과 라우터)
    • 스위칭 :: 물리적인 일시적 연결
    • 라우팅 :: 가장최적의 경로 선택
    • 논리적인 주소지정 , 라우팅 , 주소 변환 , 다중화
  • Data Link :: 헤더와 트레일러 추가 (프레임) , 헤더에는 보내는 사람,받는 사람 주소가 있다.
  • source address, destination address |data | trailer
  • Physical Layer :: 비트스트림을 전자기 신호로 변환
계층의 기본구조
  • 1~3 : 네트워크 지원 계층
  • 5~7 : 사용자 지원 계층
  • 4 : 트랜스포트 계층 :: 하위층 <-> 상위층이 사용할 수 있는 형태로 변환
  • 2계층 : 헤더와 트레일러가 동시 붙는다.

9강.TCP/IPv4

IPv4 :: 32 비트  (8 x 4) , 4 byte
IPv5 :: 128 비트 (8  x 16) , 16 byte
IP 주소 :: 네트워크ID + 호스트ID
A class : 1 ~ 126 , 네트워크 1 개, 최상 비트가 0 , 127번은 루프백 용도로 특수하게 사용하므로 제외
B class : 128.1 ~ 192.254  , 최상위 두 비트를 1|0 으로 설정,
C class : 192.0.1 ~ 223.255.254 , 최상위 세 비트를 1 | 1 | 0
D class : 멀티 캐스트용 , 최상위 네비트 1110 , 나머지 비트로 클라이언트가 속해 있는 그룹을 지정 함.
E class : 연구용

127.X.X.X (루프백 예정) 을 사용할 수 없다.
네트워크ID, 호스트 ID 모두가 1이 될수 없다. (브로드캐스팅)
네트워크ID, 호스트 ID 모두가 0이 될수 없다.

서브넷팅 : 네트워크 분할, 여러개의 세그먼트로 분활
서브넷 마스크의 목적 : 네트워크 ID 와 HOST ID를 구분, 목적지 호스트 IP주소가 동일한 네트워크인지 확인 학기 위해서

  • IP를 효율적으로 사용
  • Traffic 관리 및 제어 기능 (LAN분할을 통해 Ethernet의 Collision을 방지)
  • 불필요한 브로드캐스팅 제한
    • 네트워크 세그먼트는 브로드캐스팅을 통해 통신
    • 세그먼트는 IP주소와 subnet mask를 AND 연산을 통해 동일 세그먼트를 인식

2013년 9월 13일 금요일

자바7 NIO.2 - 내용정리 4장

chapter 4. 파일과 디렉토리
4장의 주요 내용
  • 각종 검사 (읽기,쓰기,실행,일반 파일,숨김)
  • 디렉토리 목록 보기,생성,읽기
  • 파일시스템 루트의 목록을 보기
  • 디렉토리 와 임시디렉토리 생성
  • newDirectoryStream() 메소드를 사용한 디렉토리 내용 나열 하기
  • 버퍼 스트림 과 비버퍼 스트림
  • 삭제 , 복사 ,이동
  • 이전 Java6에 비해 많은 부분이 ‘재디자인' 됌


4.1 파일과 디렉토리를 위한 검사 메소드

  • exists() : 파일 있는지 여부를 검사
  • notExists() : 파일 없는지 여부를 검사
주의 : !exists() == notExists()와 동등 하지 않는다. 또한 두 메서드다 false 반환 하는 경우 상태를 알수 없는 경우 이다. 예를 들면 파일에 접근 권한이 없는 경우


스트림 방식
  • 비버퍼 스트림 - 각각의 읽기 요청이나 쓰기 요청은 기반 운영체제에서 바로 처리
  • 버퍼 스트림 - 버퍼로 알려진 메모리 영역에서 데이터 작업 한 후 버퍼가 비었거나 버퍼가 꽉 찼을 때만 Native API를 호출 한다.


Glob 패턴
  • * : 0개 이상의 문자
  • ** : * 과 비슷하지만, 디렉토리의 경계를 넘을 수 있음.
  • ? : 정확하게 1 문자
  • { } : 콤마로 나뉜 하위 패턴의 컬렉션. 예) {A,B,C}는 A,B,C와 일치함.
  • [ ] : 대체할 문자 집합 표현 한다. - 문자를 사용하면 문자의 범위를 표현한다.
  • [ ] 내부에서 *,?,\ 는 문자 그대로 매칭
  • 이외의 문자는 모두 문자 그래로 매칭
  • *, ?를 비롯한 특수 문자와 일치하는 것을 찾으려면 역슬래시 문자를 사용해서 이스케이프 해야 한다.
  • \\는 \문자 하나와 매칭하면, \?는 ?문자 하나와 매칭한다.


StandardOpenOption 종류
옵션
설명
READ
읽기용으로 파일을 연다.
WRITE
쓰기용으로 파일을 연다.
CREATE
파일이 없다면 새 파일을 생성한다.
CREATE_NEW
새 파일을 만든다. 파일이 이미 있으면 예외와 함께 실패한다.
APPEND
파일 끝에 데이터를 추가한다(WRITE나 CREATE와 함께 사용됨)
DELETE_ON_CLOSE
스트림을 닫을 때 파일을 삭제한다(임시파일을 삭제할 때 사용)
TRUNCATE_EXISTING
파일을 0바이트로 잘라낸다(WRITE 옵션과 함께 사용됨)
SPARSE
새로 생성하는 파일이 희소(sparse)할 수 있다?
SYNC
파일 내용과 메타 데이터를 기반 저장소 디바이스와 동기화 한다.
DSYNC
파일 내용을 기반 저장소와 동기화 한다.


라인 종결 문자

  • \u000D\u000A : 캐리지 리턴 + 라인 피드
  • \u000A : 라인 피드
  • \u000D : 캐리지 리턴

- 참고 문헌 : 한빛미디어 , 자바7 NIO.2 파일&네트워크 프로그램밍

Java 1.6 JDK [SunOS에서 설치 가이드]

0. 문서 목적
본 문서는 SunOS 10에 대한 JDK 1.6 설치 가이드 입니다.
설치 OS : SunOS 5.10 i86


** 참고 - 실제 설치 가이드 URL : http://java.sun.com/javase/6/webnotes/install/jdk/install-solaris.html


1. JDK 1.6 설치 파일 다운로드
 - 바이너리 설치 방법을 사용하여 설치 함.
 다운로드 URL : https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-6u14-oth-JPR@CDS-CDS_Developer
아래과 같이 선택
=====================================================================
Platform : Solaris X86
Language : Multi-language


[V]    I agree to the Java SE Development Kit 6u14 License Agreement
=====================================================================
다음 페이지
Java SE Development Kit 6u14  -- Size ( 76.88 MB)
jdk-6u14-solaris-i586.sh
위 것을 반드시 다운로드 하시기 바랍니다.



2. JDK 1.6 설치


설치 진행은 root 계정으로 진행 해야 함.
1) 실행 권한 주기
root# chmod +x jdk-6u14-solaris-i586.sh
2) 실행하기
root# ./jdk-6u14-solaris-i586.sh
3) 라이센스 동의 및 자동 압축 해제
압축 해제 후 "jdk1.6.0_14"  디렉토리가 생성됨.


4) 파일 복사
root# cp -r jdk1.6.0_14 /usr/jdk/instances
5) 링크 생성 작업
root#cd /usr/jdk
root#ls -alt
   2 drwxr-xr-x  41 root     sys         1024  7월 29일  19:41 ../
   2 drwxr-xr-x   4 root     bin          512  7월 29일  19:40 ./
   2 lrwxrwxrwx   1 root     root          11  7월 29일  19:40 latest -> jdk1.5.0_06/
   2 drwxr-xr-x   4 root     bin          512  7월 29일  19:38 instances/
   2 drwxr-xr-x   7 root     bin          512 2003년  6월 14일 packages/
   2 lrwxrwxrwx   1 root     other         18 2003년  6월 14일 jdk1.5.0_06 -> instances/jdk1.5.0/
   2 lrwxrwxrwx   1 root     other          7 2003년  6월 14일 j2sdk1.4.2_11 -> ../j2se/
여기서
root#ln -s instances/jdk1.6.0_14 jdk1.6.0_14
root#rm latest
root#ln -s jdk1.6.0_14 latest


root#cd /usr
root#ls -alt java
    2 lrwxrwxrwx   1 root     root          15  7월 29일  19:41 java -> jdk/jdk1.5.0_06/


root#rm java
root#ln -s jdk/jdk1.6.0_14/ java
root#cd /usr/bin
root#ls -alt java
  2 lrwxrwxrwx   1 root     root          16  8월  4일  11:45 java -> ../java/bin/java
위와 같지 않다면 심볼릭 링크를 삭제하고 새로운 심볼릭 링크를 생성해야 합니다.
root#ln -s ../java/bin/java java


3. 설치 여부 검증


root#java -version
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode, sharing)


** 간혹 환경변수 JAVA_HOME이 설정되어 있는 경우가 있다면..
$JAVA_HOME/bin/java -version 으로 위와 같은 결과가 나와야 한다.
다르다면 $JAVA_HOME 변수를 설정해 주어야 한다.


4. 원복 하기
설정한 모든 링크를 이전 버젼 Java로 변경 해야 한다.
root#cd /usr/jdk ; rm latest
root#ln -s jdk1.5.0_xxx -> latest


root#cd /usr
root#rm java
root#ls -s jdk/jdk1.5.XXXX /java


root#cd /usr/bin
root#rm java

root#ln -s ../java/bin/java java