'전체 글'에 해당되는 글 108건

  1. 2005.09.20 [자바]허우적거리기..
  2. 2005.09.20 [서버]RH9에서의 톰켓..
  3. 2005.09.15 [NET]IPv6알아보기-2

얼마전에 인터넷을 통하여 Java Tutorial 3판을 구매했다. 앞으로 무엇을 해볼까? 하는 생각이 하루에 몇차례씩 머리속을 헤집어 놓을때마다 뭔가를 하기위해서 나에게 필요한 지식이 있어야 한다는 생각을 다시한번 상기하게 되었다.(반복되는 생각인듯..) 아무래도 무엇가를 하기위해서는 나에게 언어에 대한 지식이 필요하다는 생각을 하게 되었고…그리고 선택한 언어가 자바가 되어버렸다.. 구매한 책을 1장을 읽고나니 정리가 되지 않는듯하여 한동안 손을 놓고나니 다시 허탈해진다. 작심..이러한 말로 끝나지 않았으면 했는데…왠지 불안하게 만든다.. 다시한번 마음을 가다듬고 정리를 통해서 열심히 해야겠다..

Java란 Sun에서 만든 객체지향언어(Object oriented Language)로 구문이 기존의 대표적인 언어인 C,C++과 매우 유사한 형태를 취한다. Java로 개발할 수 있는 것들은 applet, application, servlet, JSP(Java Server Page)등이있다. 대부분의 사람들이 Java하면 applet을 생각하는 경우가 많은데 applet은 java로 개발할 수 있는 것들중의 일부이다. applet은 웹서버에 존재하고 있다가 브라우저를 통하여 다운로드되어서 사용자의 PC에서 수행되는 java프로그램이다.

java의 소스코드는 .java확장자로 저장되는 텍스트 파일로 컴파일을 통하여 수행가능한 bytecode라는 파일이 생성되고 이 파일의 확장자는 .class를 가진다. bytecode인 .class파일은 .exe파일처럼 실행가능한 파일은 아니고 class파일을 해독할수 있는 인터프리터가 있어야 한다. 이 인터프리터가 JVM(Java Virtual Machine)이다. 이 JVM에 의해서 java에 의하여 개발된 프로그램은 OS에 상관없이 사용가능하게 된다.

java는 thread를 쉽게 만들 수 있다는 장점이 있다. 여기서 process와 thread를 잠깐 비교를 해보면…기존의 언어는 process라는 것이 각각의 program에 할당되어 process자신의 code, data를 가지게 되므로 process가 하나씩 증가할때 마다 시스템에 부하가 늘어나게 된다. 또한, process간의 데이터 공유도 어려운 문제가 있다. process내에서 생성되는 thread들은 혼자서 자신의 고유한 작업을 할 수 있는 프로그램안의 프로그램이다. thread들이 생성될때는 process만큼 시스템에 부하를 주지않으며 code나 data공유가 쉽다.

프로그램을 개발하는 프로그램머는 자신이 사용한 메모리를 시스템에 반납해야하는 의무가 있는데 java는 thread로 구현된 garbage collection이 그 일을 자동으로 수행한다.

- java의 소스코드를 입력하기 위한 에디터는 덱스트에디터면 무엇이라도 좋다. 입력한 소스코드의 파일이름은 class의 이름과 똑같아야하고(대소문자까지) 확장자는 .java로 저장되어야 한다. 저장된 소스코드를 컴파일하기 위해서는 본인의 PC에 JDK(J2SE)가 설치되어 있어야 하고 아래와 같이 입력한다.
javac HelloWorldApp.java
위와같이 컴파일을 하면 HelloWorldApp.class라는 이름의 bytecode파일이 생성된다. 이 bytecode파일을 실행하기 위해서는 아래와 같이 입력한다.
java HelloWorldApp

- class는 사용자가 직접만들어 사용하는 것과 또 하나는 JDK(or J2SE)안에 포함되어 있거나, 혹은 기존에 누군가 만들어 놓은 class가 있다. 이런 class들이 워낙 많다보니 관련이 있는 것끼리 묶기 위하여 package라는 것이 등장하게 되었다. package(java.lang, java.io)는 class들의 묶음이라고 보면된다.
java.lang package에는 수많은 class들이 들어가 있는데 이것들은 java가 수행되는 아주 기본적인 class들이다. 따라서, 모든 java source에 이 package가 아래와 같이 import명령으로 포함되어야 하는데 이 문이 생략되어도 자동으로 포함된다.
import java.lang.*;
import문은 C언어의 include문과 유사하지만 include문처럼 copy를 해오는 것이 아니고 단지 class의 위치만 알려주는 것이다.
아래는 java source code의 일반적인 layout이다.
package xxx;
import xxx.xxx.*;
class선언부분

package구문이 생략된 경우에는 생성된 class를 package로 묶지 않겠다는 의미로 현재 폴더에 class파일만 생성된다. 만약에 아래와 같이 package구문이 포함되었다면..
package test; //compile명령: javac -d . HelloWorldApp.java
현재 폴더에 자동으로 test라는 폴더가 생성되고 그 밑에 class파일이 생성된다.

import구문에 사용되는 dot(.)의 의미는 폴더 구분자이다. 만약에 x.y라는 package를 만들었다면 실제적으로 현재폴더에 x라는 폴더가 생성되고 그 밑에 y라는 폴더가 셍성되고 그 밑에 class파일이 위치하게 된다.

Posted by salgunamu
:

[서버]RH9에서의 톰켓..

linux 2005. 9. 20. 01:38 |

관리하는 서버들중에 Redhat9에서 톰켓Ver5대를 사용중인 시스템들이 있다. 그런데 이 톰켓이 하루가 멀다하고 hang이 걸려버리는 증상이 있는데 원인을 몰라서 답답한 상태이다. 그냥 RH9상에서 톰켓의 문제라고만 하니 RH9을 CentOS로 변경을 하려고 생각중이다. 그렇게 하려고 보니 너무나 큰 작업이어서 다른 방안이 없는지 검색을 하던 도중에 아래와 같은 글을 하나 발견하게 되었다. RH9의 새로운 threading의 문제인듯하다..
사무실의 한대 서버에 적용을 해봐야지…. 이것이 해결방안이었으면 좋겠다..

Why does my tomcat server hang and have to be restarted every day?
We have had extensive problems with the Tomcat server hanging on our RedHat 9 systems. It didn’t seem to matter which version of the tomcat 5 server we were using - we saw consistent hangs with all of them. Searching through the web, we found some documentation that described the problem.
It turns out that RH 9 uses a new form of threading, which apparently was incompatible with the tomcat 5 servers. To stop the tomcat server from hanging, it is necessary to revert to an older form of threading.
To do this, insert the following into the catalina.sh file:
LD_ASSUME_KERNEL=2.2.5

export LD_ASSUME_KERNEL
And restart the tomcat server. After doing this, we have not had to restart our tomcat server for over two weeks.
The documentation we’ve seen indicates that this is only effective forRH9 systems, but we haven’t been able to verify that.

Posted by salgunamu
:

[NET]IPv6알아보기-2

network 2005. 9. 15. 08:08 |

1. 기본헤더뒤엔 확장헤더가 와요..
IPv6는 필요없는 기능을 과감히 줄이고 모든것을 구조화 해서 성능을 높이는데 집중한 흔적이 많은데 앞의 checksum을 없애것과 더불어 extension header가 또 한가지라고 할 수 있다. IPv4에도 이와 유사한 개념의 확장헤더가 있었지만 IP헤더뒤에 어떤 헤더가 오느냐에 따라 전체 길이가 들쑥날쑥했고 짜임새가 없었던과 달이 IPv6에서는 앞에오는 IP헤더의 Next Header field에서 다음오는 Extension header의 정보를 알려주고 Extension header도 64비트 단위로 되어있어 처리시간을 줄일수 있게했다. 또한 extension헤더에는 그 뒤에 오는 extension헤더의 정보를 넣는 방식을 사용하는데 데이지체인 방식으로 구성되어 있는 것도 특징이다.

사용자 삽입 이미지

그림에서 보시듯이 맨앞의 IP헤더에서 extension헤더의 정보를 가르키고, 그 extension헤더는 그 다음 extension헤더정보를 가르키는 데이지체인 방식이다.

2. 움직이는 네트워크 Network Mobility..
IPv6에서는 IPv4에 비해 Mobility기능이 훨씬 향상되어 빠르고 안정된 이동성보장이 가능해졌다. 따라서 이동하면서도 네트워크 접속이 유지되도록 해주는 네트워크 Mobility기능이 IPv6에서는 기본장착되어 있어 훨씬 사용이 편해졌고 Mobility구현역시 IPv4에 비해 효과적이 되었다.

3. IPv6의 보안
보안을 얘기하게 되면 자주 듣게 되는 단어가 IPSec(IP Security)입니다. IPSec이란 네트워크 계층에서 암호화 및 인증등의 보안을 제공해줌으로써 TCP/IP기반의 인터넷상에서 안전한 통신을 가능하도록 해주는 보안 표준이다.
이 IPSec은 물론 IPv4에서도 지원이 가능했지만 IPv6에서는 필수요소가 되었다는 것이 중요하다. 이 의미는 언제 어디서나 IPSec이 설정되어 있으며 즉시 활용가능하다는 것이다. 따라서 더욱 완벽한 보안이 이루어 졌다는 것이다. Extension Header에 헤더번호가 50번과 51번일 경우 각각, Encapsulating Security Payload와 Authentication Header가 나오게 되며, 여기서 패킷의 보안을 책임져주게 된다.

4. IPv6에서의 간단한 주소적기
IPv4에서는 십진수를 점(.)으로 분리하여 표기를 하였지만, IPv6에서는 16진수를 사용하여 주소를 표기하게 되고, 16진수 4개를 쓰고 콜론(:)을 찍고, 또 16진수 4자리를 쓰고 콜론(:)..이렇게 16진수로 4개씩 8번을 쓰고 중간에 콜론7개를 찍어 주소를 표기하게 된다.
xxxx:xxxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
예를들면,
2001:0DB8:010F:0001:0000:0000:0000:0D0C

5. IPv6의 주소쓸때 규칙
16진수 A ~ F까지의 알파벳은 문자가 아니라 16진수 숫자이므로 대소문자 구분을 안한다는 것을 알아야 한다.
2001:0DB8:010F:0001:0000:0000:0000:0D0C 와
2001:0db8:010f:0001:0000:0000:0000:odoc는 동일하다.

두번째 규칙은 앞에오는 0은 안써도 된다는 것이다.
2001:0db8:010f:0001:0000:0000:0000:0d0c 라는 주소는
2001:db8:10f:1:0:0:0:d0c 로도 쓸수있다.
하지만, 중간에 있는 0은 생략하면 안된다.

세번째 규칙은 0이 연속으로 나올때는 ::로 표시할 수 있다.
2001:db8:10f:1:0:0:0:doc를
2001:db8:10f:1::doc로 표기할 수 있다.
하지만 이러한 방식을 두번이상이 사용하면 안된다.
2001:0db8:0000:0000:ffff:0000:0000:0d0c이란 주소를
2001:0db8::ffff:0000:0000:0d0c
또는
2001:0db8:0000:0000:ffff::0d0c
로는 표기할 수 있지만,
2001:0db8::ffff::0d0c로는 표기할 수 없다.

6. IPv4 compatible address
IPv6가 아무리 좋아도 당분간은 IPv4와 같이 공존해야하는 기간이 필요하기 때문에 IPv4망위에서 어떻게 IPv6를 연결할까 하는 논의가 많이 되고 있다고 한다.
IPv4 compatible address는 IPv4망에서 IPv6트레픽을 전송하기 위한 방법중 자동 터널링을 구성해 줄때 사용하는 주소방식으로 IPv4주소를 자동으로 IPv6주소형식으로 만들어 주는 것이다.

IPv4 compatible address의 예는:
0:0:0:0:0:0:192.0.2.100
= ::192.0.2.100
= ::c000:0264

또 다른 주소방식은 IPv4-mapped방식이다.
0:0:0:0:0:FFFF:192.0.2.100
= ::ffff:c000:0264
IPv4-compatible주소와 다른점은 IPv4주소앞에 FFFF를 넣는 다는것이다.
또, URL주소를 넣을때 도메인 이름대신 IP주소를 쓸때는 IPv6에서는 아래와 같인 대괄호[]로 묶어준다.
http://[2001:df0:1003::f]:8080/index.html

7. IPv6주소의 삼형제
우선, IPv4 주소종류에는 받는 사람이 한명인 unicast와 받는 사람이 한명이 아닌 특정그룹인 multicast, 그리고 모든 호스트들에게 다 받으라고 하는 broadcast가 있다.
그런데, IPv6에서는 달라졌다. 말도많고 탈도 많던 broadcast가 사라지고 좀더 강력해진 multicast가 그 역할을 대신하게 되었고, 새로운 anycast가 등장했다.
anycast는 말그대로 아무나 받으라는 것인데 그룹멤버중에 가장 가까이 있는 녀석에게 패킷을 보내는 방식으로 가장 가까운 포인트를 찾는 탐색메카니즘을 위해 사용되어진다고 한다.

8. 유니캐스트라고 다 같은게 아니다??
IPv4에서 유니캐스트의 종류를 나눠보면 아래과 같이 나눌 수 있다.
- 공인IP주소
- 비공인 IP주소
- 기타주소
0.0.0.0 : 디폴트 네트워크 구성을 해줄때 사용하는 주소로 나머지 모든것을 의미한다. 즉, 라우팅 경로를 찾지못한 나머지 모든 것을 나타내는 의미로 쓰인다.
127.0.0.1 : loopback 주소

IPv6에서 역시 유니캐스트 주소는 몇가지 종류로 구분된다.
- Global unicast address
: IPv4의 공인IP주소와 같다. 가장 일반적인 IP주소이다.
- Site-local address
: 어떤 사이트내에서만 사용할 수 있는 주소로써 IPv4의 비공인 IP주소와 비슷한 개념이다.
- Link-local address
: Site-loca주소보다 그 영역이 조금더 줄어든 그 링크안에서만 통용되는 주소이다. 즉, 그 링크
를 벗어나선 사용될 수 없는 주소이다.
- 기타 address
: IPv4처럼 loopback, IPv4호환주소가 있다.
아래의 그림은 범위에 대한 개념을 나타낸 것이다.

사용자 삽입 이미지

9. 유니캐스트란 찐빵에 들어가는 단팥^^

유니캐스트 주소를 배우기전에 먼저 알아야 하는 것이 있는데 바로 주소를 만들때 꼭 따라다니는 interface ID(identifier)이다. interface ID는 링크상에서 인터페이스를 identify,즉 링크상에서 그 인터페이스를 딱 꼬집어 지정하기 위해 사용되는 인터페이스별 이름이다. 따라서, 인터페이스 ID는 그 링트상에서 만큼은 유일해야 한다.

interface ID는 64비트로 만들어 지며 모든 유니캐스트 주소에 사용되고 128비트 주소중에 뒤에오는 64비트는 interface ID가 차지한다. (예외적으로 유니캐스트에서 interface ID를 사용하지 않는 경우도 있다.)

그럼, interface ID는 어떻게 만들어 지는가? 이더넷의 경우에는 48비트의 MAC주소를 이용해서 만드는데 이 방식을 Modified EUI-64포멧이라고 한다. 프레임 릴레이 구성에서는 DLCI주소를 이용해서 interface ID를 만들게 된다.

사용자 삽입 이미지
10. IPv6 유니캐스트 주소하나.. 링크로컬 주소는..

Link-local address는 말그대로 링크상에서만 사용되는 주소이다. 즉, 링크안에서만 구분할 수 있다면 된다는 뜻이다. 링크는 예를들면 1대1연결의 경우는 호스트가 2개만 존재할 수 도 있구..여러개의 호스트가 연결되는 링크일수도 있는데 collision domain정도로 이해하면 될것 같다.

이러한 Link-local address는 특징이 있는데 그것은 주소의 맨앞이 FE80(1111 1110 1000 0000)으로 시작된다는 것이다. 그런데 좀더 정확이 Link-local address의 앞부분은 FE80::/10이 맞고, 이것의 의미는 일단 맨앞은 FE80으로 시작하는데 prefix가 10비트까지라는 의미 이므로 앞에서 2진수로 만들었던 주소중에 맨 왼쪽에서 10개까지만 prefix로 사용한다는 의미이다. 그럼 앞에 10자리가 정해졌는데 나머지 118비트는 어떻게 정해지는가? 그것은 아래의 그림과 같다.

사용자 삽입 이미지
이렇게 만들어진 Link-local address는 Neighbor discovery, Router discovery등의 용도로 사용되어지며 나중에 배우게될 global주소나 site-local주소없이 동일 링크상에서 접속이 필요할 경우에도 사용되는 주소이다.

11. IPv6에서의 공인주소는?

IPv4에서 주로 공인IP주소라고 불렀던 인터넷 사용을 위한 주소가 IPv6에서는 Global Unicast Address라고 부른다. Global Unicast Address는 아래의 그림과 같이 구성된다.

사용자 삽입 이미지
Global Unicast Address는 그림에서 보듯이 3가지 부분으로 나누어진다.

- Provider부분 : 48비트이고 맨앞이 이진수 001로 시작된다. 이것은 IANA(Internet Assigned Numbers Authority)라는 단체에서 정해놓은 약속이다. 따라서, IPv6에서 2000::/3은 global unicast address를 나타내는 것이다.

Provider부분의 나머지 45비트는 IANA에서는 각 대륙에 배분하고 각 대륙에서는 각 ISP에 배정하는 용도로 사용된다.

-Site부분: ISP에서 48비트를 배정받게되면 각 사이트에서는 그 사이트의 상황에 따라 다시 네트워크를 분해해주게 되는데 이때 나머지 16비트의 Subnet ID를 사용한다. 이 부분은 다른말로 LAN prefix라고도 한다.

-Interface부분: 이전에 언급한 Interface ID

이렇게 global unicast address는 각 대륙별, ISP별, SITE별로 배정되기 때문에 IPv4와는 달리 여러개의 라우팅 테이블을 하나로 묶어주기가 용이해서 훨씬 효과적인 라우팅이 가능하게 된다.

12. Uunicast의 기타주소 시리즈

- Unspecified address : 무기명주소, 어떤 특정주소를 사용하지 못하는 경우(예. 초기 DHCP request를 한다거나, duplicate address detection(DAD)를 수행)는 출발지 주소를 정해줄 수 없으므로 unspecified address를 사용한다. unspecified address는 0:0:0:0:0:0:0:0(::)을 사용한다.

- Loopback address: IPv4에서 127.0.0.1로 사용되어 IP스택내부의 로컬 인터페이스를 표기하던 것과 같이 IPv6에서도 loopback주소가 있는데 0:0:0:0:0:0:0:1(::1)이다.

- IPv4 compatiable address

Posted by salgunamu
: