티스토리 뷰

Programming/Socket

socket : socket이란?

글그리 2017. 1. 30. 23:17

인터넷은 프로그램프로그램이 서로 연결되어 이루는 네트워크다.


socket 계층

네트워크 프로그램 개발을 위한 TCP/IP 4계층에서 더 추상화 해서 만들어진 계층이다. 프로그래머를 위해 만들어진 계층으로 소켓 계층은 소켓 함수 라이브러리를 말하며, 소켓 프로그래밍이란, 이 라이브러리를 사용해서 프로그래밍 하는 것을 말한다.


버클리 소켓(BSD 소켓)

1989년에 버클리 대학에서 만들어져서 이름이 버클리 소켓이다. BSD 소켓 이라고도 부른다. C언어로 만들어졌으며 자유롭게 사용할 수 있어서 네트워크 프로그램에서 가장 범용적으로 사용되고 있다. 일반적으로 socket이라고 하면 BSD 소켓을 말한다.

소켓은 프로그램과 프로그램을 연결하는 도구로, 현실 세계에서 가전제품이 소켓으로 연결되어있는 것과 비슷하여 소켓이라는 이름을 가지게 되었다.

BSD 소켓은 유닉스, 리눅스, mac, windows를 포함한 여러 운영체제에서 사용하고 있으며, Linux, Unix는 전통을 따라서 BSD 소켓을 100% 지원하지만 windows, mac 등에서는 자체적인 socket 함수들을 만들어서 제공하고 있다.


소켓 통신의 흐름

소켓 통신을 하는 프로그램은 일정한 흐름을 가지고 돌아가지만, 서버 프로그램과 클라이언트 프로그램은 그 흐름에 조금 차이가 있다.


 Server

 socket()

 bind()

 listen()

 accept()

 read()/write()

 close()

 Client

 socket()

 connect()

 read()/write()

 close()

* 파랗게 음영된 부분은 반복되는 구간이다.


각 함수들의 역할은 다음과 같다.


 Server

 Client

 

 socket()

 socket을 만든다. 만들어진 소켓은 소켓 지정번호를 가지며 아직 아무런 ip주소, port번호와  도 연결되지 않은 상태이다. 


 

 bind()

 만들어진 소켓을 ip주소, port번호와 연결  (bind)한다. 연결된 소켓으로 이제 통신이 가  능하다.


 connect()

 클라이언트가 서버에 서버의  ip주소와 port번  호로 연결을 시도한다.

 

 listen()

 서버가 클라이언트의 연결을 기다린다.


 

 accept()

 서버가 클라이언트의 연결을 받아들인다.


 

 read()/write()

 서버와 클라이언트가 서로에게 데이터를 주고 받는다.


 

 close()

 다 사용한 소켓을 종료한다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함