본문 바로가기
카테고리 없음

[네트워크] TCP와 UDP, Broadcast와 unicast, socket

by hbIncoding 2024. 8. 7.

1. Content-type과 Content-length 헤더

  1. content-Type
    • HTTP 요청 및 응답의 본문 데이터 미디어 타입을 지정하는 데 사용
    • 클라이언트와 서버는 이 헤더를 전송하여 전송되는 데이터의 형식을 이해하고 처리할 수 있다.
    • 예시
      • 'Content-Type: text/html; charset=UTF-8' : HTML 문서
      • `Content-Type: application/json; charset=UTF-8` : JSON 데이터
      • `Content-Type: image/png` : PNG 이미지
    • 주요 미디어 타입
      • `text/plain` : 일반 텍스트
      • `text/html` : HTML 문서
      • `application/json` : JSON 데이터
      • `application/xml` : XML 데이터
      • `image/jpeg` : JPEG 이미지
      • `image/png` : PNG 이미지
      • `multipart/form-data` : 파일 업로드 등 여러 데이터 타입을 포함하는 양식 데이터
  2. Content-Length 헤더
    • HTTP 요청 및 응답 본문의 크기를 바이트 단위로 지정한다
    • 클라이언트와 서버는 이 헤더를 통해 전송되는 데이터의 크기를 파악하고, 연결을 유지하거나 닫는 등의 처리를 할 수 있다.
    • 주요 역할
      • 데이터 크기 파악 : 서버는 클라이언트로부터 전송된 요청의 본문 크기를 알고, 이를 바탕으로 데이터 처리를 시작
      • 연결 관리 : 클라이언트와 서버는 본문의 크기를 알고, 데이터 전송 후 연결을 종료하거나 유지할 수 있다
      • 정확한 데이터 전송 : Content-Length 헤더는 데이터의 정확한 크기를 명시함으로써, 데이터의 일부만 전송되거나 더 많은 데이터가 전송되는 문제를 방지

2. TCP 와 UDP

 > 두 가지 주요 전송 계층 프로토콜로 각각의 특성과 용도에 따라 다르게 사용된다.

  1. TCP(Transmission Control Protocol
    • 연결 지향적
      • 데이터 전송을 시작하기 전에 송신자와 수신자 간에 연결을 설정합니다. 이를 위해 TCP는 "3-way handshake"라는 과정을 사용
      • 연결이 설정되면, 데이터는 양방향으로 전송
    • 신뢰성
      • TCP는 데이터의 전송이 성공적으로 이루어졌는지 확인하고, 손실된 데이터가 있으면 이를 재전송
      • 데이터가 올바른 순서로 도착하도록 보장
    • 흐름 제어
      • 송신자가 수신자의 데이터 처리 속도를 초과하지 않도록 조절
      • 수신자는 자신의 버퍼 크기에 따라 송신자에게 데이터를 더 보내도 되는지 알려준다
    • 혼잡 제어
      • 네트워크 혼잡을 줄이기 위해 데이터 전송 속도를 조절
    • 장점
      • 데이터 전송의 신뢰성과 순서를 보장
      • 데이터 손실, 중복, 순서 문제를 자동으로 처리
    • 단점
      • 초기 연결 설정 (3-way handshake)로 인해 시작 시간이 지연될 수 있음
      • 추가적인 헤더 정보와 제어 메시지로 인해 오버헤드가 발생
    • 사용 예시
      • 웹 브라우징 (HTTP/HTTPS)
      • 이메일 (SMTP, IMAP, POP3)
      • 파일 전송 (FTP)
      • 원격 로그인 (SSH, Telnet)
  2. UDP (User Datagram Protocol)
    • 비연결 지향적
      • 송신자와 수신자 간에 연결을 설정하지 않고 데이터를 전송
      • 각 데이터그램은 독립적으로 처리
    • 비신뢰성
      • 데이터그램이 손실되거나 중복되거나 순서가 뒤바뀔 수 있다
      • 데이터의 도착을 보장하지 않으며, 수신 여부를 확인하지 않는다
    • 단순성
      • 헤더가 간단하여 오버헤드가 적음
      • 연결 설정 과정이 없으므로 지연 시간이 적음
    • 장점
      • 낮은 지연 시간 (low latency)
      • 오버헤드가 적어 빠른 데이터 전송이 가능
      • 실시간 응용 프로그램에 적합
    • 단점
      • 데이터 전송의 신뢰성과 순서를 보장하지 않음
      • 손실된 데이터의 재전송을 보장하지 않음
    • 사용 예시
      • 실시간 스트리밍 (음성, 비디오)
      • 온라인 게임
      • DNS 조회
      • 간단한 메시지 전달
  3. 간단한 비교 표
특성 TCP UDP
연결 지향성 연결 지향적 비연결 지향적
신뢰성 신뢰성 있음 신뢰성 없음
흐름 제어 있음 없음
혼잡 제어 있음 없음
오버헤드 높음 낮음
데이터 전송 순서 보장 있음 없음
사용 사례 웹 브라우징, 이메일, 파일전송, 원격 로그인 실시간 스트리밍, 온라인 게임, DNS 조회

 

3. Echo Server

  • 클라이언트로부터 받은 메시지를 그래도 돌려주는 서버
  • 동작 원리
    1. 클라이언트가 서버에 연결
      • 클라이언트는 특정 IP 주소와 포트를 통해 서버에 연결을 시도
    2. 서버가 클라이언트의 연결을 수락
      • 서버는 클라이언트의 연결 요청을 수락
    3. 데이터 수신 및 전송
      • 클라이언트가 서버에 데이터를 전송
      • 서버는 해당 데이터를 수신한 후 그대로 클라리언트에게 다시 전송
    4. 연결 유지 또는 종료
      • 이 과정은 클라리언트가 연결을 종료할 때 까지 반복
      • 클라이언트 또는 서버가 연결을 종료하면, 서버는 다른 클라이언트의 연결 요청을 기다린다.

4. BroadCast와 UniCast

>네트워크 통신에서 데이터를 전송하는 두 가지 주요 방식, 데이터가 전송되는 대상과 범위에 따라 구분된다.

  1. Broadcast
    • 네트워크 상의 모든 장치에게 데이터를 전송하는 방식
    • 특정한 대상 없이 네트워크에 연결된 모든 장치가 동일한 데이터를 받는다.
    • 특징
      • 범위: 동일한 네트워크 세그먼트 내의 모든 장치가 데이터를 수신
      • 목적: 일반적으로 네트워크 구성 요소들이 서로를 식별하거나 설정 정보를 전달할 때 사용
      • 주소: IPv4의 경우, 일반적으로 255.255.255.255 또는 서브넷의 브로드캐스트 주소(예: 192.168.1.255)가 사용
    • 사용 사례
      • ARP (Address Resolution Protocol): IP 주소를 MAC 주소로 변환하기 위해 사용됩니다.
      • DHCP (Dynamic Host Configuration Protocol): 클라이언트가 IP 주소를 요청할 때 사용됩니다.
    • 장단점
      • 장점: 모든 장치에게 빠르게 정보를 전달할 수 있습니다.
      • 단점: 네트워크 트래픽이 증가하고, 네트워크 대역폭을 많이 사용하게 됩니다.
  2. Unicast
    • 네트워크 상의 특정한 하나의 장치에게 데이터를 전송하는 방식
    • 송신자와 수신자가 명확히 구분되어 있고, 데이터는 특정 수신자에게만 전달
    • 특징
      • 범위: 네트워크 내의 특정 장치 하나가 데이터를 수신합니다.
      • 목적: 일반적인 1:1 통신에서 사용됩니다.
      • 주소: 수신자의 IP 주소가 사용됩니다.
    • 사용 사례
      • 웹 브라우징: 웹 서버에서 클라이언트로 HTML 페이지를 전송할 때.
      • 파일 전송: FTP 또는 다른 파일 전송 프로토콜에서 파일을 전송할 때.
    • 장단점
      • 장점: 네트워크 대역폭을 효율적으로 사용할 수 있습니다.
      • 단점: 다수의 장치에 동일한 데이터를 전송할 때는 비효율적일 수 있습니다.

5. Socket과 Socket관리

  • 네트워크 상의 두 노드 간 통신의 끝점(Endpoint)을 나타내는 추상화된 개념
  • 네트워크 프로그래밍에서 소켓은 플라이언트와 서버가 데이터를 주고 받기 위해 사용하는 통신 채널
  • 소켓의 종류
    1. 스트림 소켓
      • TCP 프로토콜을 사용하여 신뢰성 있는 데이터 전송
      • 연결 지향적이며 데이터의 순서보장
    2. 데이터그램 소켓
      • UDP 프로토콜을 사용하여 비신뢰성 데이터 전송
      • 연결 비지향적(연결 성정 불필요)이며, 데이터의 순서 비보장
  • 소켓 통신의 기본 과정
    1. 소켓 생성 : `socket()` 함수를 사용하여 소켓 생성
    2. 주소 바인딩  : 
    3. 연결 대기
    4. 연결 수락
    5. 데이터 송수신
    6. 연결 종료
const net = require('net');

// 서버 생성
const server = net.createServer((socket) => {
  console.log('Client connected');

  // 클라이언트로부터 데이터 수신
  socket.on('data', (data) => {
    console.log(`Received: ${data}`);
    socket.write('Hello, client!'); // 클라이언트에게 응답
  });

  // 클라이언트 연결 종료
  socket.on('end', () => {
    console.log('Client disconnected');
  });

  // 에러 처리
  socket.on('error', (err) => {
    console.error(`Socket error: ${err}`);
  });
});

// 서버 바인딩 및 리스닝
server.listen(8080, '0.0.0.0', () => {
  console.log('Server is listening on port 8080');
});

// 서버 에러 처리
server.on('error', (err) => {
  console.error(`Server error: ${err}`);
});

 

 

  • 소켓 관리
    • 소켓의 생성, 유지, 모니터링, 종료와 관련된 모든 작업을 포함
    • 효율적인 소켓 관리는 네트워크 애플리케이션의 성능과 안정성을 보장하는데 중요
    • 주요 소켓 관리 작업
      1. 소켓 설정 및 초기화
      2. 비동기 소켓 관리
      3. 다중 소켓 관리
      4. 연결 수명 주기 관리
      5. 에러 처리