[네트워크] TCP & UDP

2023. 7. 17. 14:27·CS 지식/[네트워크]

 

TCP

  • 연결 지향형 프로토콜로 신뢰성있는 데이터 전송을 보장
  • 신뢰적인 연결방식
  • 서버와 클라이언트의 함수 호출 순서가 중요

서버 : socket() 생성 → bind() 소켓 주소 할당 → listen() 연결 요청 대기 상태 → accept() 연결 허용 → read/write() 데이터 송수신 → close() 연결 종료

클라이언트 : socket() 생성 → connect() 연결 요청 → read/write() 데이터 송수신 → close() 연결 종료

 

서버와 클라이언트의 차이

  • 클라이언트 소켓 생성 후 서버로 연결을 요청하는 과정에서 차이가 존재
  • 서버는 listen() 호출 이후부터 연결 요청 대기 큐를 만들어 놓고, 그 이후에 클라이언트가 연결 요청을 할 수 있음
  • 이때 서버가 바로 accept()를 호출할 수 있는데, 연결되기 전까지 호출된 위치에서 블로킹 상태에 놓이게 됨

특징

  1. 연결형 서비스로 가상 회선 방식을 제공
  2. 3 way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제
  3. 흐름 제어 및 혼잡 제어
  4. 높은 신뢰성을 보장
  5. UDP보다 속도가 느림
  6. 전이중(Full-Duplex), 점대점(Point to Point) 방식
  • 흐름 제어 : 송신 측과 수신 측의 데이터 처리 속도 차이 조절해줌
  • 혼잡 제어 : 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것

TCP 서버 특징

  1. 서버 소켓은 연결만 담당
  2. 연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용되는 서비스로 가상 회선 방식 제공
  3. 서버와 클라이언트는 1대 1 연결
  4. 스트림 전송으로 전송 데이터의 크기 무제한
  5. 패킷에 대한 응답을 해야하므로 성능 낮음
  6. 스트리밍 서비스에 불리(손실된 경우 재전송 요청하기 때문)

UDP

  • 무접속 프로토콜로 빠르지만, 데이터의 유실 가능성이 존재

특징

  1. 비연결형 서비스로 데이터그램 방식을 제공
  2. 정보를 주고 받을 때 정보를 보내거나 받는다는 신호 절차를 거치지 않음
  3. UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
  4. 신뢰성이 낮음
  5. TCP보다 속도가 빠름

UDP 서버 특징

  1. UDP에는 연결 자체가 없어서(connect 함수 불필요) 서버 소켓과 클라이언트 소켓의 구분이 없음
  2. 소켓 대신 IP를 기반으로 데이터를 전송
  3. 서버와 클라이언트는 1대1, 1대N, N대M 등으로 연결될 수 있음
  4. 데이터그램(메세지) 단위로 전송되며 그 크기는 65535바이트로, 크기가 초과하면 잘라서 보냄
  5. 흐름제어(flow control)가 없어서 패킷이 제대로 전송되었는지, 오류가 없는지 확인할 수 없음
  6. 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용됨
저작자표시 비영리 변경금지 (새창열림)

'CS 지식 > [네트워크]' 카테고리의 다른 글

[네트워크] HTTP & HTTPS  (0) 2023.07.17
[네트워크] GET & POST  (0) 2023.07.17
[네트워크] 대칭키 & 공개키  (0) 2023.07.17
[네트워크] TCP 3 way handshake & 4 way handshake  (0) 2023.07.17
[네트워크] OSI 7계층  (0) 2023.07.17
'CS 지식/[네트워크]' 카테고리의 다른 글
  • [네트워크] GET & POST
  • [네트워크] 대칭키 & 공개키
  • [네트워크] TCP 3 way handshake & 4 way handshake
  • [네트워크] OSI 7계층
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    백준
    Linux
    Flutter
    CS지식
    pcce 기출문제
    Spring Security
    데이터베이스
    리눅스
    baekjoon
    JPA
    스프링
    데이터
    스프링 부트 쇼핑몰 프로젝트 with JPA
    python
    리눅스마스터
    DB
    자바
    스프링부트
    backjoon
    리눅스마스터 1급
    programmers
    spring
    시큐리티
    플러터
    springboot
    CS
    Oracle
    Java
    postgresql
    프로그래머스
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[네트워크] TCP & UDP
상단으로

티스토리툴바