[데이터 통신] 소켓 프로그래밍 개념

지환·2022년 9월 14일
0
post-thumbnail

소켓

OSI 7계층, 혹은 5계층이 있다. 우리가 흔히 "인터넷"을 언급할 때에는 주로 트랜스포트 계층을 이야기한다. TCP/UDP의 프로토콜로 구현되며, 인터넷 상의 모든 정보가 이 계층을 반드시 이용하여 출입을 하므로, 인터넷을 사용하는 프로그램을 만들기 위해선 트랜스포트 계층에 접근하지 않을 수가 없다.

우리가 프로그램 개발을 할 때에 보통 손댈 수 있는 범위는 애플리케이션 계층에 한정되어 있다. 앞서 인터넷을 사용하는 프로그램은 트랜스포트를 쓸 수밖에 없다고 했는데, 어떻게 하면 애플리케이션 계층에서 트랜스포트 계층을 조작할 수 있을까. 이를 해결하기 위한 방법이 소켓(Socket)이라 불리는 인터페이스다.

2. 소켓의 작동방식

소켓은 OS에서 제공하는 인터페이스다. 실제로 프로그램에서 소켓에 관련된 작업을 수행하면, OS는 그 요청을 받아들여서 새로운 소켓을 만든다. 우리는 오로지 이 소켓으로만 외부 네트워크와 통신을 할 수 있다.

두 개의 transport services를 위한 두 개의 소켓 타입

  • UDP: Unreliable datagram

  • TCP: reliable, byte stream-oriented

자세한 내용은 참고

socket programming with UDP

  • UDP: 클라인트와 서버 사이에 연결이 없다

    • 데이터 보내기 전에 handshaking 없다
    • 각 패킷에 IP 목적지 주소랑 port 명시적으로 부착하고 보냄 (따로따로)
    • rcvr은 수신한 패킷에서 발신자 Ip주소와 포트 번호를 추출
  • UPD: 전송된 데이터가 솔실되거나, 뒤죽박죽으로 도착 가능(out of order)

    • 패킷 단위로 보내서 상황에 따라 뒤에 순서인 것이 먼저 도착 가능
    • 이럴때는 그냥 버리고 다시 받음
  • Application 측면:

    • UDP는 클라인트와 서버 사이에서 바이트 그룹의 믿을만하지 않은 전송을 제공

(1) UDP 개념 및 구현

(2) UDP 개념 및 구현

Socket programming with TCP

  • client는 반드시 서버와 연결해야한다.

    • 서버 프로세스는 반드시 먼저 작동해야한다.

    • 서버는 클라이언트의 연결을 받기 위해 반드시 소켓을 만들어야한다.

  • 클라이언트는 다음을 통해 서버와 연결한다:

    • 서버 프로세스의 IP 주소와 포트번호를 지정하여 TCP 소켓 생성
    • 클라이언트가 소켓을 만들면 클라이언트 TCP는 서버 TCP와 연결을 설립한다.
    • 클라이언트와 연결되면 서버 TCP는 서버 프로세스가 해당 특정 클라이언트와 통신 할 수 있도록 새로운 소켓을 만든다.
    • 서버가 여러 클라이언트와 대화할 수 있다.
      클라이언트를 구별하는데 사용되는 source port numbers
  • application 관점:
    TCP는 클라이언트 서버 사이에서 믿을만하고, 순서대로 byte-stream 전송("pipe")을 제공한다

(1) TCP 개념 및 구현

(2) TCP 개념 및 구현

코드 및 구현은 밑 주소 참고
https://seolin.tistory.com/97

참고 | https://seolin.tistory.com/97
https://hororolol.tistory.com/277

profile
아는만큼보인다.

0개의 댓글