[통신] CH. 9 소켓(Socket)

Kwaaaaan·2023년 3월 22일
2

통신

목록 보기
9/11

소켓(Scoket)

네트워크를 경유해서 통신을 하기 위한 도구입니다. 소켓을 이용하여 컴퓨터간 통신을 할 수 있습니다.

다시말해 클라이언테에서 요청이 오면 소켓을 생성해 통신이 가능하도록 하며, 연결을 담당하는 서버와 실제로 데이터의 송/수신이 일어나는 클라이언트를 연결해주는 도구라고 생각하면됩니다.
소켓은 IP주소, 포트번호, 프로콜로 구성됩니다.

연결지향 TCP소켓

TCP/IP소켓이라고도 하는 TCP소켓은 속도는 느리지만 안정성이 높은 장점이 있으며, 데이터가 손실되면 안되는 경우 모두 TCP소켓을 사용하게 됩니다. 또한, 데이터를 잘 받았는지 중간중간 확인해 안정적으로 데이터를 모두 보낼 수 있으며, 연결된 상태에서 통신, 연결된 대상 외에 대라느 대상과는 통신이 불가능합니다.

비연결지향 UDP소켓

동영상 스트리밍 서비스가 대표적인 UDP소켓의 예시입니다. 속도가 빠르지만 데이터가 소실될 수 있으며, UDP헤더의 체크섬 필드를 통해 최소한의 오류만을 검출할 수 있습니다. 또한, 데이터를 보낸 후 확인작업이 없어 데이터가 다 수신되었는지는 확인 불가능하다는 단점이 있습니다. 궁극적으로 UDP소켓은 연결되지 않은 상태에서 내가 원하는 주소에 데이터를 보낼 수 있는 통신방법입니다.

UDP/TCP 소켓 서버 비교

TCP 서버

• 서버소켓은 연결만을 담당
• 서버와 클라이언트 1대1로 연결
• 스트림전송 -> 전송 데이터의 크기가 무제한
• 패킷에 대한 응답으로 인한 시간지연, CPU 소모
• 스트리밍 서비스에 불리(손실될 경우 재전송 요청)

UDP 서버

• 1대1, 1대N, N대M 연결 가능
• 성능이 중요한 서비스에 사용

소켓 주소체계

소켓 주소체계 중 가장 많이 쓰이는 주소체계는 AF_UNIX이며, 이외의 주소체계는 아래의 표와 같습니다.

소켓 주소 예시

  1. 유닉스 주소예시 struct sockaddr_un { sun_family; // family라는 주소체계 sun_path[-]; //내부 경로(파일경로) }
  2. 인터넷 주소예시 struct sockaddr_in { sin_family; sin_port; //port 포트번호 sin_addr; //ip 아이피 주소 }

통합 주소 체계

여러 소켓 구조체를 통합하여 하나로 정의 하는것이 통합 주소 체계이며, 할당된 공간이 다른 주소체계에서 필요한 공간보다 커야합니다. 이는 위에 소켓주소 예시에서 나온 sun_path[-], sin_port등을 합친 공간보다 커야 한다는것을 의미합니다.
struct sockadd // 형변환 { u_short sa_family; char sa_data[-]; }

소켓 서비스

소켓 서비스는 크게 연결형인 TCP와 비연결형인 UDP통신이 있습니다. TCP의 'SOCK_STREAM' 연결형 서비스를 의미합니다. 또한, UDP의 'SOCK_DGRAM'은 비연결형 서비스를 의미합니다. 또한, 실제로 자주 사용되지는 않지만, 'SOCK_RAW'라는 IP프로토콜을 직접 사용하기도 합니다.

프로토콜

프로토콜은 아래의 표와 같이 사용됩니다.

profile
스마트팩토리 개발자(를 꿈꾸며)

0개의 댓글