1. 소켓(Socket)

 소켓은 응용 계층에서 프로세스간 통신을 쉽게 행하기 위한 창구의 역할을 한다. 사용자는 소켓이라는 형태로

통신할 대상과의 연결을 확립하고 소켓과의 송/수신으로 대상과의 송/수신을 하는 것과 마찬가지인 결과를

얻게된다. 즉, 소켓을 사용하는 법만 알면 하위 계층에 대한 지식이 없더라도 쉽게 통신이 가능해지는 것이다. 

서버와 클라이언트가 특정 port 를 통해 실시간 양방향 통신을 하는 방식이기에 실시간 통신이 필요한

스트리밍이나 채팅 등의 서비스에 사용된다.

 

2. 소켓의 종류

① 스트림(TCP 소켓)

출처: https://www.cs.dartmouth.edu/~campbell/cs60/socketprogramming.html

  • 서버측 흐름
    1. 소켓 생성(socket)
    2. 포트번호 설정(bind)
    3. 수신 대기열 생성(listen)
    4. 연결 대기(accept) - 연결 요청이 들어올 때 까지 block 상태
    5. 연결 요청이 들어오면 handshaking 과정을 거쳐 연결수립
    6. 이후 양방향 통신 가능
    7. 연결 종료 요청이 들어오면 종료과정을 거쳐 연결종료(close)

  • 클라이언트측 흐름
    1. 소켓 생성(socket)
    2. 연결 요청(connect) - handshaking 과정을 거쳐 연결수립
    3. 이후 양방향 통신 가능
    4. 통신 종료시 종료 요청(close) - 종료 과정을 거쳐 연결종료
                        
  • 연결 지향성 양방향 통신을 위한 소켓

  • 데이터를 스트림 형태로 전송하기에 데이터간의 경계가 없음

  • 데이터의 순서유지와 무결성 보장

  • 대량의 데이터를 안전하게 주고받기 위해 사용

 

② 데이터그램(UDP 소켓)

출처: https://www.cs.dartmouth.edu/~campbell/cs60/socketprogramming.html

  • 서버측 흐름
    1. 소켓 생성(socket)
    2. 포트번호 설정(bind)
    3. 요청 대기(recvfrom) - request 데이터그램을 수신할 때 까지 대기
    4. 요청이 들어오면 응답(sendto)

  • 클라이언트측 흐름
    1. 소켓 생성(socket)
    2. 요청(sendTo)
    3. 응답 대기(recvfrom)
    4. 통신 완료시 연결 종료(close)

  • 비연결형 통신을 위한 소켓

  • 한번의 전송으로 보낼 수 있는 데이터의 크기에 제한이 있다.

  • 데이터의 순서유지와 무결성을 보장하지 않음

  • 신뢰성보다는 속도가 중시되는 경우, 작은 데이터를 자주 보내야하는 경우 등에 사용(RTP 등)

 

'CS > 네트워크' 카테고리의 다른 글

#5 Application Layer 2 - HTTP  (0) 2021.11.01
#4 Socket Programming  (0) 2021.10.29
#2 OSI 7계층  (0) 2021.10.28
#1 네트워크 구성 2 - Network Core  (0) 2021.10.28
#0 네트워크의 구성 1 - Network Edge  (0) 2021.05.29

+ Recent posts