'자바배우기'에 해당되는 글 67건

  1. 2008.01.23 Socket-2.프로토콜

프로토콜

 

 네트워크에 참여하는 컴퓨터는 네트워크에 참여하기 위해서 지켜야할 규칙이 있습니다.

이를 프로토콜이라고 합니다.

현재 가장 방대하고 가장 많은 컴퓨터가 참여하고 있는 네트워크는 대문자 “I” 로 시작하는

Internet입니다. Internet이라는 네트워크에 참여하고자 하는 컴퓨터는 당연히 지켜야할

규칙, 즉 프로토콜을 준수해야 하는데 Internet에서 지켜야하는 프로토콜은 흔히 TCP/IP

(TCP 프로토콜과 IP 프로토콜을 합쳐서 부른 이름입니다) 프로토콜이라고 부릅니다.

Internet에 참여하기 위해서 지켜야할 규칙은 TCP/IP 프로토콜 수트(protocol suite) 라고

하는 것이 좀더 정확할 것입니다. Internet에서 지켜야하는 프로토콜은 비단 TCP 프로토콜

IP 프로토콜 뿐만이 아니라 외우기도 힘든 이름의 프로토콜이 몇가지 더 있으니까요.

하지만 그중에서도 가장 근간이 되는 프로토콜은 TCP IP이므로 흔히 Internet

프로토콜은 TCP/IP 프로토콜이라고 합니다. TCP/IP 프로토콜에 대해서 세세한 부분까지

알아야 할 정도는 아니지만 TCP 프로토콜, IP 프로토콜의 가장 기본적인 특징에 대해서는

반드시 알아 두어야 하겠습니다.

왜냐하면 TCP/IP프로토콜의 특징에 대해서 알지 못한다면 TCP/IP프로토콜의 기본적인

특성을 기반으로 해서 만들어진 자바 객체를 이해할 수 없을 것인데, 바로 그 자바

객체들이 네트워크 기반 프로그램의 핵심들이기 때문입니다.

 

TCP 프로토콜

 

 TCP 프로토콜은 네트워크 컴퓨터의 스트림으로부터 읽고,쓰기를 하는 경우, 데이터를

쓰는 쪽에서 데이터를 쓴 순서대로 데이터를 읽는 쪽에서 한 비트의 데이타도 빠짐없이

한 비트도 틀리지 않게, 쓴 순서대로 읽도록 해줍니다.

 

TCP 프로토콜을 준수하는 네트워크 컴퓨터에서는 100G byte를 네트워크를 통해서 100시간

동안 읽고,써도 한비트도 틀리지 않게,한 비트의 순서도 틀리지 않게 읽고 쓸수 있습니다.

TCP 프로토콜을 준수함으로써 네트워크에서 읽고,쓰는 프로그램은 마치 로컬 컴퓨터에서

읽고 쓰는 것과 같은 안정성을 얻습니다.

실제로도 데이터 소스별로 읽어들이는 속도의 차이는 있을지 몰라도 로컬 컴퓨터에 있는

파일시스템 (하드 디스크)로부터 이미지 파일을 읽는 것과 네트워크 컴퓨터에 있는 파일

시스템으로부터 이미지 파일을 읽는 것과 별반 다르지 않습니다.

 

자바에서 TCP 프로토콜을 이용해서 읽고,쓰기를 하는 객체는 로컬 컴퓨터에서 읽고,쓰는 것과 구별하지 않아도 됩니다.

자바에서 읽고,쓰기는 InputStream으로 읽고,OutputStream으로 씁니다. 읽고,쓰는것에

네트워크가 포함되더라도 별반다르지 않습니다.

만약 InputStream,OutputStream이 로컬 컴퓨터의 데이터 소스로부터 생겨난 것이라면

로컬 컴퓨터에 읽고,쓰기가 되고,네트워크 컴퓨터의 데이터 소스로부터 생겨난 것,

,TCP 프로토콜을 준수함으로써 얻어진 것이라면 네트워크 컴퓨터에 읽고,쓰기가 됩니다.

다시 말하면 TCP 프로토콜을 준수함으로써 얻게 되는 혜택은 로컬 컴퓨터에서 읽고,쓰는

것이나 네트워크 컴퓨터에서 읽고,쓰는 것이나 결국엔 같은 방법으로 읽고,쓴다는 겁니다.

이런 이치에서 본다면 자바에서 네트워크 프로그램은 별 것 없겠습니다.

로컬 컴퓨터에서 읽고,쓰는 것은 자바에서 지원하는 풍부한 I/O관련 객체들이 많아 쉽게

이용할 수 있는데, 네트워크 컴퓨터에서 읽고,쓰는 것이나 로컬 컴퓨터에서 읽고,쓰는 것

이나 프로그래머의 입장에서는 꼭 같으니까 말입니다.

 

이처럼 TCP 프로토콜을 준수하면 얻게 되는 혜택은 명백하므로 현재 Internet에서

기본적인 서비스는 대부분 TCP 프로토콜을 준수하고 있습니다. 

Internet에서 제공하는 서비스는 TCP 프로토콜을 준수함으로써 TCP 프로토콜의 서비스를

받는다는 뜻이며, 이는 한마디로 로컬 컴퓨터에서 데이터를 마음껏 읽고,쓰는 것처럼

Internet에서도 꼭 같은 방법으로 읽기,쓰기가 가능하다는 것입니다.

웹 브라우저와 웹 서버간에 데이터를 주고 받는 프로토콜인 HTTP (Hyper Text Transfer

Protocol) TCP 서비스를 받고 있으며, 인터넷에서 파일을 주고 받는 프로토콜인 FTP

(File Transfer Protocol) TCP 서비스를 받고 있습니다.

메일을 주고 받기 위해서 필요한 프로토콜인 SMTP(Simple Mail Transfer Protocol) TCP

서비스를 받습니다.

이런 유명한 서비스들이 TCP의 서비스를 받는다는 뜻은 네트워크를 사이에 두고 읽고,

쓰는데 TCP 프로토콜을 이용하고 있다는 뜻이고, 그로 인해서 TCP가 제공하는 서비스의

혜택을 누리고 있다는 뜻입니다.

, 읽고,쓰는 데이터들이 네트워크를 가운데 두고 데이터를 쓰는 순서대로 데이터를

읽을 수 있고,읽은 데이터는 원래 데이터와 한 비트도 틀리지 않고 정확하게 같아야 할

필요가 있다는 뜻입니다.

이런 TCP가 제공하는 서비스가 필요하다면 반드시 TCP프로토콜 기반의 네트워크 프로그램

을 해야합니다.

 

UDP 프로토콜

 

UDP TCP가 제공하는 서비스와는 다릅니다.

UDP가 제공하는 서비스는 네트워크 사이에 두고 읽고 쓰기를 하면 읽고,쓰는 데이터를

최선을 다해서 전달해 주기는 하겠지만 그 결과에 대해서는 책임을 지지 않습니다.

, 한쪽에서 쓴 데이터가 다른 한쪽에 도착하지 못하고 없어질 수 있습니다.

간혹은 한쪽에서 쓴 데이터가 순서가 뒤바뀌어서 전달 될 수 있습니다.

, 읽는 쪽에서는 순서가 뒤바뀌어서 읽게 될 수 있다는 것입니다.

TCP와 비교하면 아주 무책임하고 짜증나는 서비스를 제공하고 있습니다.

 

UDP를 이용해서 프로그램 할 수 있는 모든 것은 TCP를 이용해서 할 수 있습니다.

UDP를 이용해서 프로그램 할 수 있는 모든 것은 TCP를 이용하면 오히려 쉽고 간명하게

할 수 있는 부분이 많습니다.  그렇다면 적자생존의 법칙에 따르면 UDP는 사라져야 할텐데

실제로는 그렇지 않습니다. 왜 그럴까요?

여기는 단 한가지 이유 밖에 없습니다.  TCP는 비싸기 때문입니다.

얼마나 비쌀까요?  말도 못하게 비쌉니다.

UDP를 이용해서 네트워크 프로그램을 하는데는 모두 그럴만한 이유가 있습니다.

예를 들어 동영상 서비스를 하는 웹사이트가 있습니다.

만약 이 동영상 서비스를 하는 웹사이트에서 동영상을 보여주기 위해서 TCP 기반의

프로그램을 한다면 동시 1000명 정도에게 서비스하기 위해서는 엄청난 하드웨어와

네트워크 대역폭을 필요로 합니다.

TCP는 기본적으로 1 1의 통신이므로 꼭 같은 데이터를 1000명에게 모두 보내어야

하는 상황이기 때문입니다.  하지만 UDP를 이용한다면 그 가격의 반의 반의 반의 반도

들이지 않고 몇 배의 효과를 거둘수 있습니다. IP 멀티캐스팅을 이용할 수 있기 때문입니다.

동영상 서비스를 하는 웹사이트에서 언뜻 들어보면 대책없이 보이는(UDP의 특성상) UDP

기반의 서비스를 제공하는데는 그만한 이유가 있습니다.

동영상 보여주는 것에는 몇 프레임의 정보가 누락되어도 동영상 보는데는 큰 지장이

없습니다. (동영상 내용이 재미 없으면 불평이 있겠지요. 하지만 그거는 UDP하고는 상관

없지 않습니까? 그쵸?) 초당 수십 프레임이 움직이고, 한 프레임에도 수십개의 데이터

그램이 필요한데 한두개가 빠져서 그림이 조금 찌그러져도, 픽셀의 위치가 조금 바뀌어도

별 문제가 없다는 겁니다.

그리고 하루에도 수백번 사용하는 DNS 요청 응답도 UDP를 이용하는 프로그램중

하나입니다.

물론 DNS요청도 TCP를 이용해서 하기는 합니다만 일단 UDP를 이용하고 만약 UDP

읽고,쓰기에 정보가 방대할 경우는 TCP를 이용해서 다시 합니다.

왜냐하면 UDP기반은 주고 받는 데이터 단위가 메시지 단위(Datagram)로 크기가 제한된

반면 TCP기반은 주고 받는 데이터 단위가 있는 것이 아니라 스트림이기 때문입니다.

크기가 제한이 없지요.

독자들은 네트워크 프로그램의 대부분을 TCP기반으로 하게 될것으로 생각합니다.

Posted by
,