[완료] jvm에서 네트워크 스택 처리에 관한 질문입니다.
글쓴이: uviczz / 작성시간: 목, 2008/08/07 - 6:18오후
안녕하세요,
java를 이용해 소켓 프로그래밍을 하던 중 의문사항이 생겨
KLDP 유저 여러분께 질문을 올리게 되었습니다.
질문의 요지는
tcp socket 프로그래밍을 java로 구현하게 되면..
tcp 프로토콜 스택이 동작 할 텐데.. 이것이 jvm 내에서 동작하는건지.. 아니면
jvm은 단순히 커널과 인터페이스만 제공해주고 커널에서 프로토콜 스택을 처리하는 것인지 궁금합니다.
이런 의문이 생긴 이유는 소켓 API를 지원하는 새로운 프로토콜을 동작시킬 때,
java로 소켓 프로그래밍 하기 위해선 어떠한 일이 필요한 가에 대해 생각해 보았기 때문입니다.
표준 소켓 API를 지원하는 tcp 이외의 다른 프로토콜을 java기반 응용프로그램에서
사용하려면(이 프로토콜은 커널에서 지원 가능하다고 가정합니다) jvm을 수정해서 새로운 프로토콜이
jvm내에서 동작하도록 완전히 추가해야 하는 것인지, jvm이 커널과 인터페이스 역할을 해 줄 수 있도록만
수정하는 것인지 궁금합니다.
제가 리눅스 환경에서 C 프로그래밍을 위주로 일을 해오던 중
java 기반 응용프로그램을 이용해야 할 일이 생겨 질문 드립니다.
그리고 이러한 일의 복잡도 및 로드는 얼마 정도 될 것인지도 궁금합니다.
의견 있으시면 답글 남겨주시면 감사하겠습니다.
그럼 고운하루 되세요.
Forums:
답변
JVM이 O/S와 interface하기 위해서는
반드시 JNI(JAVA NAtive Interface)란 것을 거치게 되어 있습니다.
JAVA를 쓰는 사람들이야 그냥 구현되어 있는 클래스를 갖다 쓰면 되지만
단순히 Socket Class 하나만 상요한다고 하더라도 JNI로 interface 되어 있는 것을 끌어다 쓸 뿐입니다.
따라서 JAVA에서 지원하지 않는 Network Protocol Stack을 올릴 경우에 반드시 JNI를 써야 합니다.
먼저 C로 dll이나 so를 JNI규격에 따라 만들고 java에서 이를 호출하면 됩니다.
JNI쓰는 방법은 인터넷 뒤지면 예제가 많이 나와 있으니 참고하시길 바라고
단 naming convetion이 까다로우니 유의하시기 바랍니다.
친절한 답변
감사합니다.
댓글 달기