Socket
- 소켓은 네트워크 상에서 돌아가는 두 개의 프로그램 간 양방향 통신의 하나의 엔드 포인트
- 응용 계층에 속하는 프로세스들은 데이터 송수신을 위해 반드시 소켓을 거쳐 전송 계층으로 데이터를 전달해야함
- 즉, 소켓은 전송 계층과 응용 프로그램 사이의 인터페이스 역할을 하며 떨어져 있는 두 호스트를 연결
- 소켓의 3요소
소켓 통신의 흐름
Server
- 소켓 생성
- 바인딩 (IP, Port 번호 설정)
- listen()으로 클라이언트 요청에 대기열을 만들어 몇 개의 클라이언트를 대기시킬지 결정
- accept()로 클라이언트와 연결
- 데이터 송수신
- 소켓 닫기
Client
- 소켓 생성
- 서버에 설정된 IP, Port로 연결 시도
- accept()로 클라이언트의 Socket Descriptor 반환
- 데이터 송수신
- 소켓 닫기
소켓 종류
스트림 소켓
- TCP(Transmission Control Protocol)를 사용하는 연결 지향 방식의 소켓
- 송수신자의 연결을 보장하여 신뢰성있는 데이터 송수신이 가능
- 데이터의 순서 보장
- 소량의 데이터보다 대량 데이터 전송에 적합
- 점대점 연결
Server
- 소켓 생성
- 바인딩
- listen (연결되지 않은 소켓을 대기 모드로 전환)
- 클라이언트 요청 수락 후 통신을 위한 실질적인 소켓 생성 (처음에 생성한 소켓은 새로운 클라이언트 요청을 대기하기 위해 쓰임)
- 데이터 송수신
- 소켓 닫음
Client
- 소켓 생성
- 서버가 설정한 IP, Port로 연결
- accept()로 클라이언트의 Socket Descriptor 반환
- 데이터 송수신
- 소켓 닫음
데이터그램 소켓
- UDP(User Diagram Protocol)를 사용하는 비연결형 소켓
- 데이터의 순서와 신뢰성을 보장하기 어려움
- 점대점 뿐만 아니라 일대다 연결도 가능
- UDP 소켓은 TCP 소켓과 달리 연결 설정이 필요 없기 때문에 listen(), accept() 함수를 호출 하지 않음
HTTP 통신 vs Socket 통신
HTTP 통신
- 클라이언트의 요청이 있을 때만 서버가 응답
- JSON, HTML, Image 등 다양한 데이터를 주고 받을 수 있음
- 서버가 응답한 후 연결을 바로 종료하는 단방향 통신이지만 Keep Alive 옵션을 주어 일정 시간동안 커넥션을 유지할 수 있음
- 실시간 연결이 아닌 데이터 전달이 필요한 경우에만 요청을 보내는 상황에 유리
Socket 통신
- 클라이언트와 서버가 특정 포트를 통해 양방향 통신을 하는 방식
- 데이터 전달 후 연결이 끊어지는 것이 아니라 계속해서 연결을 유지
- 클라이언트와 서버가 실시간으로 계속하여 데이터를 주고 받아야하는 경우에 유리
- 실시간 동영상 스트리밍이나 온라인 게임 등에 사용
Port
- 서버 어플리케이션을 특정할 때 사용하는 번호
- 서버에서 제공되고 있는 서비스의 창구
- 동일 호스트에서 프로그램을 식별
- 16비트로 구성된 가상적 주소
- 운영체제에서 응용 계층에 속하는 프로토콜을 고유한 식별자 번호호 인식할 때 사용하는 번호
- 포트는 Transport Layer (L4)
- Transmission Control Protocol (TCP) 또는 User Datagram Protocol (UDP)과 같은 전송 프로토콜이 패킷의 목적지인 포트를 나타낼 수 있음
- IANA 기구에서 관리
- 예시
구분 | 명칭 | 비고 |
---|
0~1023 | 잘 알려진 포트 번호 | 주로 서버 측에서 사용 |
1024~49151 | 등록 포트 번호 | 주로 클라이언트 측에서 사용 |
49152~65535 | 사설 또는 동적 포트 번호 | 주로 클라이언트 측에서 사용 |
Port Scanning
- 네트워크에 어떤 포트가 열려 있고 데이터를 주고 받을 수 있는지 확인하는 방법
- 또는 호스트의 특정 포트에 패킷을 보내고 응답을 분석하여 취약점을 식별하는 과정
- 포트 스캔은 먼저 액티브 호스트 목록을 식별하고 해당 호스트와 해당 IP 주소를 매핑하여 수행
- 이는 네트워크 스캔인 호스트 검색(Host discovery)이라고 하는 작업을 수행하는 것으로 부터 시작
- 포트 및 네트워크 스캔의 목표는 IP 주소, 호스트 및 포트를 식별하여 오픈되었거나 취약한 서버 위치를 파악하고 보안 수준을 진단
- 네트워크 및 포트 스캔 모두 서버와 사용자 기기 사이에 방화벽과 같은 보안 조치가 있는지 확인할 수 있음
- 네트워크 스캔을 완료하여 액티브 호스트 목록을 찾은 다음 포트 스캔을 수행하면 무단으로 접근이 가능한 네트워크의 오픈 포트를 알아낼 수 있음
Port Forwarding
- 포트 포워딩은 라우터 또는 Firewall을 통해 인터넷으로부터 내부 네트워크로 데이터를 전송하는 프로세스를 의미
- 특정한 포트(예: 80번 포트는 웹 서버를 위한 포트)로 들어오는 외부 요청을 내부 네트워크에 있는 특정한 장치로 라우팅하도록 설정하는 것을 포함