본문 바로가기

Network

Socket

Socket

Socket이란 응용 계층과 전송 계층 사이를 이어주는 도구이다. 수많은 클라이언트 앱과 서버 앱이 존재하기에 클라이언트 앱과 서버 앱은 각각의 소켓을 만듦으로써 서로를 구분하게 만들고 특정한 클라이언트 앱과 서버 앱 사이에 단일한 연결이 생성 될 수 있게끔 만든다. 그리고 이 구분을 만들어 주는 것이 port number이다. 따라서 하나의 socket에는 하나의 port number가 지정되야하는데 이것을 서버 소켓에서는바인딩(Binding)이라 한다. 또한 바인딩 과정에서는 IP주소도 소켓에 추가적으로 연결된다. 이렇게 서버 소켓에 바인딩 과정을 거치면 클라이언트 앱에서는 특정 호스트(IP주소)의 특정 앱(Port Number)으로 연결 요청을 할 수 있는 것이다.

 

IP : network 단에서 하나의 노드(node)를 특정하게해줌

port : 노드안에서 하나의 프로세스(process)를 특정해줌

 

아래 표는 클라이언트 소켓과 서버 소켓에서 사용하는 소켓API를 정리한 것이다.

클라이언트 소켓

 

서버 소켓

socket()

소켓 생성

socket()

 

os에
"이 소켓에는 이 IP와 PortNumber 지정해줘"
라고 요청하는 API

bind()

connect()

connect 요청이 오는지 대기하고 있음

listen()

connect요청을 받아들이면 accept() 실행하여 데이터 송수신용 소켓을 새로 만듦

accept()

send() / receice()

데이터 송수신

send() / receive()

close()

연결종료

close()

소켓에는 프로토콜, IP주소(src, dest), 포트넘버(src, dest)에 대한 정보가 있어야한다.

 

또한 소켓은 각각의 연결마다 새로운 소켓을 생성해줘야한다.(UDP소켓은 아님) 그리고 새롭게 생성한 소켓은 클라이언트IP와 클라이언트 포트넘버로 구분함으로써 서버 단에서 무분별하게 포트 넘버를 사용하지 않도록 한다. 서버 단에는 자주 사용하는 포트 번호가 정해져있지만(http: 80와 같은) 클라이언트 단에서는 os에서 임의로 포트넘버를 지정해준다.

'Network' 카테고리의 다른 글

HTTP  (0) 2019.12.12
OSI 7계층  (0) 2019.12.12
URL, DNS, PortNumber  (0) 2019.12.12
Open API  (0) 2019.12.10