Socket & Port

김상훈·2023년 11월 20일
0

network

목록 보기
3/4

Socket

  • 소켓은 네트워크 상에서 돌아가는 두 개의 프로그램 간 양방향 통신의 하나의 엔드 포인트
  • 응용 계층에 속하는 프로세스들은 데이터 송수신을 위해 반드시 소켓을 거쳐 전송 계층으로 데이터를 전달해야함
    • 즉, 소켓은 전송 계층과 응용 프로그램 사이의 인터페이스 역할을 하며 떨어져 있는 두 호스트를 연결
  • 소켓의 3요소
    • Protocol
    • IP
    • Port

소켓 통신의 흐름

Server

  1. 소켓 생성
  2. 바인딩 (IP, Port 번호 설정)
  3. listen()으로 클라이언트 요청에 대기열을 만들어 몇 개의 클라이언트를 대기시킬지 결정
  4. accept()로 클라이언트와 연결
  5. 데이터 송수신
  6. 소켓 닫기

Client

  1. 소켓 생성
  2. 서버에 설정된 IP, Port로 연결 시도
  3. accept()로 클라이언트의 Socket Descriptor 반환
  4. 데이터 송수신
  5. 소켓 닫기

소켓 종류

스트림 소켓

  • TCP(Transmission Control Protocol)를 사용하는 연결 지향 방식의 소켓
  • 송수신자의 연결을 보장하여 신뢰성있는 데이터 송수신이 가능
  • 데이터의 순서 보장
  • 소량의 데이터보다 대량 데이터 전송에 적합
  • 점대점 연결

Server

  1. 소켓 생성
  2. 바인딩
  3. listen (연결되지 않은 소켓을 대기 모드로 전환)
  4. 클라이언트 요청 수락 후 통신을 위한 실질적인 소켓 생성 (처음에 생성한 소켓은 새로운 클라이언트 요청을 대기하기 위해 쓰임)
  5. 데이터 송수신
  6. 소켓 닫음

Client

  1. 소켓 생성
  2. 서버가 설정한 IP, Port로 연결
  3. accept()로 클라이언트의 Socket Descriptor 반환
  4. 데이터 송수신
  5. 소켓 닫음

데이터그램 소켓

  • UDP(User Diagram Protocol)를 사용하는 비연결형 소켓
  • 데이터의 순서와 신뢰성을 보장하기 어려움
  • 점대점 뿐만 아니라 일대다 연결도 가능
  • UDP 소켓은 TCP 소켓과 달리 연결 설정이 필요 없기 때문에 listen(), accept() 함수를 호출 하지 않음

HTTP 통신 vs Socket 통신

HTTP 통신

  • 클라이언트의 요청이 있을 때만 서버가 응답
  • JSON, HTML, Image 등 다양한 데이터를 주고 받을 수 있음
  • 서버가 응답한 후 연결을 바로 종료하는 단방향 통신이지만 Keep Alive 옵션을 주어 일정 시간동안 커넥션을 유지할 수 있음
  • 실시간 연결이 아닌 데이터 전달이 필요한 경우에만 요청을 보내는 상황에 유리

Socket 통신

  • 클라이언트와 서버가 특정 포트를 통해 양방향 통신을 하는 방식
  • 데이터 전달 후 연결이 끊어지는 것이 아니라 계속해서 연결을 유지
    • HTTP에 비해 더 많은 리소스 소모
  • 클라이언트와 서버가 실시간으로 계속하여 데이터를 주고 받아야하는 경우에 유리
  • 실시간 동영상 스트리밍이나 온라인 게임 등에 사용

Port

  • 서버 어플리케이션을 특정할 때 사용하는 번호
  • 서버에서 제공되고 있는 서비스의 창구
  • 동일 호스트에서 프로그램을 식별
  • 16비트로 구성된 가상적 주소
  • 운영체제에서 응용 계층에 속하는 프로토콜을 고유한 식별자 번호호 인식할 때 사용하는 번호
  • 포트는 Transport Layer (L4)
    • Transmission Control Protocol (TCP) 또는 User Datagram Protocol (UDP)과 같은 전송 프로토콜이 패킷의 목적지인 포트를 나타낼 수 있음
  • IANA 기구에서 관리
  • 예시
    • 일반적으로 http 프로토콜은 80번을 사용
구분명칭비고
0~1023잘 알려진 포트 번호주로 서버 측에서 사용
1024~49151등록 포트 번호주로 클라이언트 측에서 사용
49152~65535사설 또는 동적 포트 번호주로 클라이언트 측에서 사용

Port Scanning

  • 네트워크에 어떤 포트가 열려 있고 데이터를 주고 받을 수 있는지 확인하는 방법
  • 또는 호스트의 특정 포트에 패킷을 보내고 응답을 분석하여 취약점을 식별하는 과정
  • 포트 스캔은 먼저 액티브 호스트 목록을 식별하고 해당 호스트와 해당 IP 주소를 매핑하여 수행
    • 이는 네트워크 스캔인 호스트 검색(Host discovery)이라고 하는 작업을 수행하는 것으로 부터 시작
  • 포트 및 네트워크 스캔의 목표는 IP 주소, 호스트 및 포트를 식별하여 오픈되었거나 취약한 서버 위치를 파악하고 보안 수준을 진단
    • 네트워크 및 포트 스캔 모두 서버와 사용자 기기 사이에 방화벽과 같은 보안 조치가 있는지 확인할 수 있음
  • 네트워크 스캔을 완료하여 액티브 호스트 목록을 찾은 다음 포트 스캔을 수행하면 무단으로 접근이 가능한 네트워크의 오픈 포트를 알아낼 수 있음

Port Forwarding

  • 포트 포워딩은 라우터 또는 Firewall을 통해 인터넷으로부터 내부 네트워크로 데이터를 전송하는 프로세스를 의미
  • 특정한 포트(예: 80번 포트는 웹 서버를 위한 포트)로 들어오는 외부 요청을 내부 네트워크에 있는 특정한 장치로 라우팅하도록 설정하는 것을 포함

0개의 댓글