336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

네트워크 및 소켓 통신.


1. Network Programming 정의

네트워크 프로그래밍이란 서로 떨어져 있는 호스트(컴퓨터)들 간에 데이터를 주고 받을 수 있도록 프로그램을 구현하는 것입니다. 다만 통신할 대상이 멀리 떨어져 있기 때문에 소프트웨어 차원에서 호스트들간에 연결해주는 장치가 필요하고 이러한 기능을 해주는 장치를 소켓(socket)이라고 합니다. 일반적으로 소켓 프로그래밍과 네트워크 프로그래밍이라는 용어는 같은 의미로 사용됩니다.

 

 *소켓의 정의

소켓(socket)은 1982년 BSD(Berkeley Software Distribution) UNIX 4.1에서 처음 소개되으며 현재 널리 사용되는 것은 1986년의 BSD UNIX 4.3에서 개정된 것입니다.소켓은 소프트웨어로 작성된 추상적인 개념의 통신 접속점이라고 할 수 있는데 네트웍 응용 프로그램은 소켓을 통하여 통신망으로 데이터를 송수신하게 된다. 소켓은 응용 프로그램에서 TCP/IP를 이용하는 창구 역할을 하며 응용 프로그램과 소켓 사이의 인터페이스 역할을 하고 있습니다.

*소켓의 구조

클라이언트 어플리케이션은 서버와 통신을 하기위해 어떠한 메시지 또는 데이터를 서버에게 보내려 할 것 입니다. 그러하기 위해서는 네트워크에 연결하여 서버에 접속하여야 합니다. 그러기 위해서는 소켓을 통하여 네트워크에 접속하여야 합니다.

소켓은 이렇게 어플리케이션에게 네트워크 접속을 위한 연결장치, 인터페이스 역할을 하는것입니다. 네트워크 어플리케이션이 보낸 데이터를 소켓을 거쳐 운영체제상에 존재하는 TCP/IP 소프웨어에게 전달하게 됩니다. 다시 하드웨어 상인 랜카드를 거쳐 네트워크에 전달하게 됩니다. 서버의 경우는 클라이언트와 정 반대되는 개념입니다. 네트워크는 서버에게 보낸데이터를 서버의 랜카드에게 보내지게 됩니다. 다시 운영체제의 TCP/IP소프트웨어를 거쳐 어플리케이션과 연결개념인 소켓을 통해 최종적으로 서버 어플리케이션에게 전달되는것입니다.소켓은 이렇게 어플리케이션과 TCP/IP 사이에 존재 하고 있습니다.

 

2. 소켓의 정의 및 종류

Socket이란?

두 프로그램이 네트워크를 통해 서로 통신을 수행 할 수 있도록 양쪽에 생성되는 링크의 단자입니다.

두 소켓이 연결되면 서로 다른 프로세스끼리 데이터를 전달 할 수 있습니다. 결국 소켓이 구현됨으로써

네트워크 및 전송 계층의 캡슐화가 가능해 집니다. 소켓은 원래 캘리포니아 버클리 대학 분교에서

UNIX용으로 개발 되었으며 UNIX에서의 입출력 메소드의 표준인 개방/읽기/쓰기/닫기 메커니즘을 따릅니다.

소켓의 종류는 다음과 같습니다.

 

- 스트림

스트림 소켓은 양방향으로 바이트 스트림을 전송 할 수 있는 연결 지향형 소켓으로 양쪽 어플리케이션이 모두 데이터를 주고 받을 수 있다는것을 의미한다. 스트림소켓은 오류수정, 전송처리, 흐름제어등을 보장해 주며 송신된 순서에 따른 중복되지 않은 데이터를 수신하게 된다. 이 소켓은 각 메세지를 보내기 위해 별도의 연결을 맺는 행위를 하므로 약간의 오버헤드가 존재한다. 그러므로 소량의 데이터보다는 대량의 데이터를 보내는 경우에 적당하다. 스트림소켓은 이러한 품질의 통신을 수행하기 위해서 TCP를 사용한다.


- 데이터그램

명시적으로 연결을 맺지 않으므로써 비 연경형 소켓이라고 한다. 메세지는 대상 소켓으로 전송되며 대상 소켓은 메세지를 적절히 수신한다. 스트림소켓을 사용하는것이 데이터그램 소켓을 사용하는것보다 더 신뢰성이 높은 방법이지만 연결을 수립하는데 드는 오버헤드는 무시할 수 없다. 데이터그램 소켓을 사용하려면 클라이언트에서 서버로 데어터를 전송 할때 UDP를 사용한다. 이 프로토콜에서는 메세지의 크기에 약간의 제한이 있으며 메세지의 확실한 전달 역시 보장하지 않으며 통신 중 데이터를 읽어 버리더라도 오류를 되돌리지 않는다.


- RAW

RAW소켓은 패킷을 가져오면 TCP/IP스택상의 TCP,UDP계층을 우회하여 바로 어플리케이션으로 송신하는 소켓이다. 이런 소켓에서 패킷은 TCP/IP필터를 통해 전달 되지 않으으로 원형 그대로의 패킷을 볼 수 있다. 이는 모든 데이터를 적절히 처리하거나 헤더를 제거하고 이를 파싱하는 과정은 모두 수신 어플리케이션에서 담당해야 하는 것이다. 실제 RAW소켓을 이용하여 프로그래밍을 하는 일은 거의 드물며 만약 시스템 소프트웨어나 패킷을 분석하는 프로그램을 개발할 경우 필요 할수도 있다.

 

3. IP 주소와 포트

IP 주소는 1바이트 4자리의 주소로 이루어집니다. (예 : 202.131.293.70)

이를 기억하기 힘들기 때문에 naver.com 과 같은 문자로 변환해서 사용하는데 이를 DNS(Domain Name Server)라 합니다. 하나의 IP 주소에서는 여러가지 작업을 동시에 할 수 있어야 하는데, 이 때 포트를 사용하여 여러 서비스를 사용하게 됩니다. 0부터 1023 사이의 포트는 시스템에 예약되어 있으며, 1024부터 65535가지의 포트는 사용자가 임의를 사용할 수 있습니다.

 

 

 

4. TCP 와 UDP

포트를 사용하여 통신을 하는 방법에는 TCP 와 UDP 프로토콜 두가지가 있습니다

TCP 는 두 프로그램 간의 토인이 처음 시작될 때부터 끝날 때까지 계속 연결을 유지하는 연결지향(Connection oriented) 방식으로 전화와 비유할 수 있습니다.

 

UDP 는 연결을 설정하지 않고 데이터를 보내는 방식으로 우편물에 비유할 수 있습니다. 보낸 데이터가 제대로 갔는지, 순서대로 갔는지 동의 여부에 대해 전혀 신경쓰지 않는 신뢰성이 결여된 프로토콜 입니다. 그렇다고 필요 없는 프로토콜은 아니며 TCP처럼 연결을 하고 끊는 번거로운 작업이 필요 없고, TCP보다 빠르며 데이터의 순서가 별로 중요하지 않고 패킷의 일부가 손상되어도 큰 영양을 미치지 않는 음성이나 영상 데이터를 전송할때 많이 이용되어 집니다.

 

5. 소켓 프로그래밍의 절차

- TCP Client

 1) 소켓을 생성한다.

 2) 서버로 connect한다.

 3) 접속이 성공됐다면 read 및 write 함수를 통해 서버와 패킷을 주고 받는다.

 4) 사용을 마치면 close로 소켓을 닫는다.

 

- TCP server

 1) 듣기 소켓을 생선한다.

 2) bind한다. (내선 부여)

 3) listen한다. (내선 연결)

 4) accept() 클라이언트가 connect할 경우 소켓을 생성 하고 연결한다.

 5) read와 write 함수를 이용해 메시지를 주고 받는다.

 6) 사용된 연결 소켓을 닫는다.

 7) 사용을 마쳤을 경우 듣기 소켓을 닫는다.


'IT' 카테고리의 다른 글

301 redirect, 302 redirect.  (0) 2017.01.24
소켓(Socket) 설명. 이해.  (0) 2017.01.18
UI 라이브러리  (0) 2016.08.31
저장 버튼(save button) 더블클릭 방지.  (1) 2015.04.28
이클립스 주요 기능  (0) 2015.03.12
Posted by 당양부부34

블로그 이미지
주요 토렌트를 블로깅하고 있습니다. 토렌트 순위 등은 다른 사이트를 찾아보세요. 주요 웹툰 순위도 게재했어요 경제를 좋아하는 일산의 행복한 프로그래머입니다.
당양부부34
Yesterday
Today
Total

달력

 « |  » 2024.3
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함