개요
Socket을 이용해 서버-클라이언트 간 데이터를 주고 받는 양방향 연결 지향성 통신을 말한다.
Socket을 이용해 PC 와 PC 끼리 데이터를 주고 받을때 TCP/IP프로토콜을 사용하여 통신한다.
한쪽은 서버이고 나머지 한 쪽은 클라이언트가 되며 통신 방식은 Full-Duplex이다.
두 PC는 네트워크로 연결 되어 있어야 한다.
Socket
TCP/IP 기반 네트워크 통신에서 데이터 송수신의 마지막 접점이다.
데이터가 통과하는 마지막 관문
전기 소켓을 예로 든다면 발전소에서 생성한 전기가 가정으로 도착한 마지막 접점으로 볼 수 있다.
소켓의 내부구조는 어떻게 이루어져 있는지 자세히 모르지만, 콘센트를 꽂으면 전기를 쓸 수 있다.
소켓은 인터페이스이다, Socket이라는 소프트웨어 인터페이스가 존재하며, 사용법만 익히면 통신이 가능하다.
이미 프레임워크화 되어 있기 때문에 프로그래밍 구조도 이미 다 정해져 있다.
Protocol
컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙으로 통신 규약이다.
통신을 하는 양쪽 기기(노드) 는 같은 프로토콜을 사용해야 된다.
다양한 프로토콜이 있으며, 네트워크 용어 중 ~P로 끝나면 대개 프로토콜이다.
IP(Internet Protocol)
인터넷 프로토콜을 의미한다, 패킷 혹은 데이터그램이라고 하는 덩어리로 나뉘어 전송된다.
주소와 전송 방식을 지정하여 통신한다. 비신뢰성, 비연결성의 특징을 가진다.
IP Address
인터넷상에 있는 컴퓨터의 고유한 주소를 의미한다.
- IPv4 : 현재 통용되는 주소 사용법 ( 32bit, 43억 개 )
- IPv6 : 주소 확장 ( 128bit )
TCP (Transmission Control Protocol)
전송 제어 프로토콜이다, IP의 핵심 프로토콜 중 하나로 IP의 단점을 보완하였다.
기존 IP는 데이터를 막 던졌다면 TCP는 3 way handshake를 통해 데이터를 3번을 검증한다.
전송한 데이터가 누락되었거나 변조되었을 경우 재전송 하는 과정을 거친다.
다만, 해당 작업을 거침으로서 통신 속도가 IP대비 느려질 수 밖에 없다.
소켓은 TCP/IP 기반 프로토콜을 사용한다.
Server 와 Client
네트워크를 통해 다른 컴퓨터에게 서비스나 정고를 제공한다면 서버이다.
서비스를 사용하는 사용자 혹은 사용자의 단말기는 클라이언트이다.
주로 클라이언트가 서버에 정보를 요청하고, 서버는 클라이언트의 요청에 응답한다.
서버와 클라이언트의 동작 방식
통신 방식
데이터 전송이 한 방향으로만 발생하는 단방향 통신 방식이 있다. 예를 들어 TV방송같은 경우
데이터 전송이 양쪽 방향으로 발생하는 통신 방식인 양방향 통신 방식이 있다.
데이터가 전송될 때, 송/수신이 별도로 발생하는 방식인 반이중 방식이 있고, 예를 들어 무전기가 있다.
무전기를 사용할 때 누군가 말하고 있으면 상대방은 통신이 불가한 것을 생각하면 된다.
데이터가 전송될 때, 송/수신이 함께 발생하는 방식인 전이중 방식이 있다.
전화기를 생각하면 이해가 빠르다.
Socket과 Data
네트워크의 데이터는 흔히, 랜선이라 부르는 이더넷 케이블을 통해 Data가 송수신 되고 있다.
랜선은 실제 물체가 있으므로 하드웨어에 해당된다. 해당 케이블을 통해 App이 네트워크에 접근하기 위해선 OS내부에서의 작동이 필요하다.
궁극적으로 App에서 이더넷 케이블을 활용해 네트워크의 데이터를 받아오기 위해선 OS단의 도움이 필요하다.
시스템 콜을 통해 커널에 요청을 하고, 커널의 도움을 받아 하드웨어에 접근할 수 있다.
결국 네트워크 프로그래밍은 시스템 프로그래밍의 연장선이라고 볼 수 있다.
Socket과 Port
그렇다면 커널의 도움을 받아 이더넷 케이블로 수신된 데이터는 어떻게 특정 프로그램으로 데이터를 전달할까?
포트 번호를 통해 어떤 서비스를 어디로 부터 받아올지에 대한 정의를 내릴 수 있다.
예를 들어 IP 를 통해, 어떤 컴퓨팅 장치가 통신을 할 지 결정이 된다.
각 Node의 어떤 App에서 처리를 할 지 결정을 짓는데 Port가 사용된다.
웹서비스에서, 어떤 서비스를 선택할 지 포트번호에 따라 서버를 선택할 수 있다.
Socket 은 포트 내부에서 동작하는 부품이며, 포트 번호를 부여 받는다.
'임베디드 > 리눅스(Linux)' 카테고리의 다른 글
리눅스 소켓 프로그래밍 Linux socket programming (0) | 2024.10.11 |
---|---|
리눅스 네트워크 이더넷 Linux network ethernet (0) | 2024.10.10 |
리눅스 네트워크 기초 Linux network (4) | 2024.10.10 |
리눅스 심볼릭 링크 Linux Symbolic link (0) | 2024.09.13 |
리눅스 다양한 쉘 명령어 Linux Shell Command (0) | 2024.09.13 |