본문 바로가기

Computer Science/Network

네트워크 기초 5. 실제 구현에서의 소켓

728x90

Socket

  • Application(process)이 시스템의 기능을 마음대로 사용하는 것은 불가능
  • 대신 System은 네트워크 통신을 위한 Interface를 제공
  • Application(process)이 Socket을 통해 데이터를 주고 받음(=통신)
  • 개발자는 Socket Programming을 통해 네트워크 상의 다른 Process와 데이터를 주고 받을 수 있도록 구현한다.
  • 대부분의 System(OS)은 Socket 형태로 네트워크 기능을 제공(Linux, Window 등)

 

  • 개발자로서 일하면서 Socket Programming을 한 적이 없는 이유
    • 대체로 Application Layer의 프로토콜을 라이브러리로 가져와 사용하게 된다. 이 라이브러리가 보통 Socket을 사용한 네트워크 통신을 구현하고 있음. 즉, 실제로는 사용하고 있지만 잘 모르고 있는 것임.
    • 따라서 일반 Application 개발자는 Socket Programming을 직접할 일이 적다.

 

  • Socket = < Protocol , IP address, Port number >
    • Port number는 Socket을 구분하기 위한 숫자
    • UDP는 3개(protocol, ip, port)로 식별할 수 있지만 TCP는 불가능
  • TCP에서의 동작

- Connection A와 Connection B는 source의 IP, Port와 target의 IP, Port의 조합으로 연결을 식별한다.

- 그래서 서로 다른 프로세스(socket C1, socket C2)가 같은 정보의 소켓을 가지고 동일한 서버 프로세스와 연결을 생성하려고 하면 에러가 발생할 것이다. 

- 표준 문서에서는 TCP Socket이 IP address와 Port만으로 식별할 수 있다고 써있지만 실제 구현에서는 위와 같이 Connection을 구별하기 위해 양 프로세스의 Socket 정보를 모두 활용한다.

 

*UDP는 Connection 개념이 없이 그냥 데이터 주고 받는다.

 

TCP, UDP 각각의 사용처

  • TCP : Connection(연결) 기반, 신뢰성 보장, 데이터 순서 보장 => 느림
    • 웹 - HTTP, HTTPS 통신
    • 파일전송 - FTP, SFTP
    • 이메일 - SMTP, IMAP, POP3
    • 원격접속 - SSH, Telnet
    • 데이터베이스와 클라이언트간 통신
  • UDP : 신뢰성보다 속도효율성 중시, 비연결 지향 => 빠름
    • Streaming 서비스 - Youtube, Netflix
    • 온라인 게임
    • VoIP(Voice over Internet Protocol) - Skype, Zoom 
    • DNS(Domain Name Service) <= 도메인 이름을 IP주소로 바꿔주는 건 가볍고 빠르게 처리해야 함.
    • IoT 통신 - MQTT-SN, CoAP <= IoT 장치들은 제한된 리소스를 가지고 있어 빠른 UDP를 주로 사용

 

 

728x90