티스토리 뷰

 *소켓의 정의

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


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


네트워크 프로그래밍 == 소켓 프로그래밍


소켓은 시스템내에 내장 되어 있기 때문에 운영체제에 종속적이다. 

그렇기 때문에 HTML5,자바,윈도우,리눅스용 소켓 API가 모두 다르지만 개념은 똑같다.


유닉스,자바가 api가 많고 윈도우,html5는 api가 작다.


포트와 소켓


소켓은 어플리케이션에 종속적이다. 


네트워크를통해 데이터를 주고받고 하려면 소켓을 만들어줘야 하고, 한 어플리케이션에 여러개의 소켓을 만들 수 있다.


포트(항구)는 용도에 따라서 미리 정해져있고 따로 막 새로 만들기가 어렵다.(포트번호가 용도에 따라 미리 정해져있다.)

->국제선,국내선,부산 항구 등등..


소켓은 그냥 만들면 됨.


IP Address -> port num -> socket


소켓을 쓰겠다는것 -> 응용프로그램이 네트워크를 통해 데이터를 주고 받을것이다.


소켓

파일 i/o 개념을 네트워크 i/o개념으로 확장 시킨것


시스템 콜이란?

os(시스템)내에 있는 함수(api) 호출 -> socket(),bind(),listen()등..아래에 있는 함수들

전화기 설치 예제

집전화를 설치하려고 한다.

1.전화기를 사야한다.(소켓을 연다 == socket())

2.전화기에 전화번호를 할당해야한다.== 소켓에 IP와PORT NUM할당(bind())

3.전화기에 코드를 꼽아 전화가 오기를 기다린다 == 소켓에서 데이터가 오기를 기다린다 (listen())

4.전화가 오면 전화를 받는다 == 소켓에서 데이터가 오면 수신한다(accept())


유닉스 소켓 프로그래밍 api

socket() -> 소켓을 연다.


bind() -> 소켓을 만들고나서 서버에게 이런 소켓을 만들었다고 알려줌.(공지)

ex) 교수가 어떤 수업을 개설했는데 그걸 학생들에게 알리지 않으면 아무도 

그 강좌를 신청하지 않을것임 따라서 bind()메소드를 통해서 학생들에게 이런 수업이 만들어 졌다고 알려야함.


listen() -> 데이터가 들어오기를 기다린다.

accept() -> 데이터를 받아 들인다.

close() -> 소켓 종료.



tcp/ip에서 제일 어려운 것이 언제 데이터를 받아들여야 되고 언제 데이터를 보내야 하는지를 아는일이다.

상대방이 데이터를 받을 준비가 되어있을때 데이터를 보내야 한다.



UDP는 클라이언트와 서버 모두가 bind()를 사용해야 서로를 인식할수있다.



자바에서는 i/o 스트림만 생성해주고 read(), write()만 해주면 된다. 위의 유닉스 기반 소켓프로그래밍보다 훨씬 간결하다.

i/o스트림에 엄청 많은 데이터가 들어오는데, 그 중에서 필요한 데이터만 뽑아서 보내주고 이런것이 어렵다.








댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함