[네트워크] TCP, UDP 총정리

HONG·2023년 8월 13일

기술면접

목록 보기
4/6
post-thumbnail

TCP

1) 정의

TCP, Transmission Control Protocol

  • transport 계층(전송계층, 4계층)의 프로토콜
  • 양 끝단(End to end)의 사용자들 간 상호 신뢰적인 연결 지향 서비스 제공
  • 하위 계층에서의 패킷 손실, 중복, 오류 등의 전송문제를 검출하고 해결
  • Byte-Stream 서비스
    • 데이터 경계를 구분하지 않음 (데이터를 원하는 사이클로 받음)

  • 데이터 전송 단위 : Segment

💡 Segment

TCP의 패킷 (Packet - 전송 수단), TCP로 연결된 세션간의 전달되는 데이터 단위

Application단에서 데이터를 전송하면, TCP프로로콜 안에서 데이터를 자르고 TCP Header를 추가한 형태(Segment : TCP Header + Data segment)로 처리된다



2) 연결 설정 과정

연결 설정 : 3-way-handshaking

  1. client → server : SYN (연결 요청)
  2. server → client : ACK + SYN (연결 요청에 대한 승인)
  3. client → server : ACK (연결 설정)

연결 해제 : 4-way-handshaking

  1. client → server : FIN (클라이언트 측에서 어플리케이션 종료 요청 전달)
  2. server → client : ACK (클라이언트 측의 연결 종료 요청 ‘확인’)
  3. server → client : FIN (서버 측 연결 종료 ‘실행’)
  4. client → server : ACK (확인 응답)


3) 특징

(a) 연결 지향적

  • Connection Oriented
  • 송신자와 수신자 사이에 먼저 연결(세션)이 설정된 후 데이터가 전송됨
  • 느슨한/유연한 연결
    • 공용 회선 (전송순서, 에러 등을 중간 연결층에서 고려하지 않고 종단에서 처리)
    • 강한 연결을 구성하는 가상회선과는 성격이 다르다 (전용회선)
  • 연결 관리를 위한 연결설정 및 연결해제 과정 필요

(b) 신뢰성

  • Reliable
  • 패킷 손실, 중복 없도록 보장
  • 데이터의 전송 순서를 보장
  • 신뢰성을 보장하는 기법들
    1. 흐름 제어, Flow control
      • 상대방이 받을 수 있을 만큼만 데이터를 전송
      • 송신(송신 전송률) 및 수신(수신 처리율) 속도를 일치시키는 것
    2. 오류 제어, Error control
      • 데이터의 오류나 누락 없이 안전한 전송을 보장
      • 오류 판단 기준: 송신측에서 계산한 체크섬을 수신측에서 검증 & ACK 반환
    3. 혼잡 제어, Congestion control
      • 네트워크의 혼잡 정도에 따라 송신자가 데이터 전송량을 제어

(c) 전이중 (양방향성)

  • Full-Duplex
  • 종단(end-to-end) 간 양 프로세스가 서로 동시에 세그먼트를 전달할 수 있음
  • 양방향 각각에 대해 ‘송수신 버퍼’ 및 ‘sequence number’ 유지

(d) 점대점

  • Point to Point
  • 각 연결이 정확히 2개의 종단점을 가짐
    • 일대일 전송 방식 : 단일 송신자와 단일 수신자 간 단일 경로 연결이 설정됨
    • 즉, 멀티캐스트가 아닌 유니캐스트


4) TCP 구조

(a) TCP 패킷

  • IP datagram 안에 TCP data가 캡슐화 됨

(b) TCP 헤더

  • 헤더 기능 설명
    1. Source Port
      • 송신 시스템의 어플리케이션 port number
        • (참고) 일반적으로 0 ~ 1023번은 예약되어 있다 (ex. HTTP - 80)
    2. Destination Port
      • 수신 시스템의 어플리케이션 port number
    3. Sequence Number
      • 패킷의 순서를 표시
      • 단위는 바이트로 표시 (이 패킷이 데이터의 몇 번째 바이트 부터인지) ⇒ 신뢰성 (순서 보장)
    4. Acknowledge Number
      • 수신하기를 기대하는 다음 바이트 번호
        • 마지막 수신 성공 seq num + 1
      • 패킷을 받고 그에 응답할 때 사용 (주로 ‘패킷을 잘 수신 받았다’는 의미)
    5. HLEN (Header Length)
      • 가변적인 TCP 헤더 길이를, 4 바이트 단위로 표시
        • 최소 4 5 = 20 바이트, 최대 4 (2^4 - 1) = 60 바이트
    6. Reserved
      • 현재는 사용되지 않지만 미래를 위해 남겨둔 공간
    7. Control Flags
      • TCP의 여러 속성들을 설정할 수 있는 비트
        • URG : 긴급 데이터 설정
        • ACK : 수신 확인 응답 설정
        • PSH : 송수신 버퍼에 있는 데이터를 즉시 처리
        • RST : 연결 중단 (강제종료, reset)
        • SYN : 연결 설정 ⇒ 신뢰성 (오류 제어)
        • FIN : 연결 종료
    8. Window size
      • 윈도우 (한 번에 보낼 수 있는 최대 버퍼 수) 사이즈 설정 ⇒ 신뢰성 (흐름 제어)
    9. Checksum
      • error bit 검출을 위한 값 ⇒ 신뢰성 (오류 제어)
    10. Urgent Pointer
      • 우선순위가 더 높은 데이터의 마지막 byte 위치를 나타냄
    11. Option
      • 최대 40 바이트까지 옵션 데이터 포함 가능
      • ex. 주어진 윈도우 크기보다 크기 늘리기, 타임스탬프 정의, 선택 확인 응답 등

5) 단점

  1. 매번 connection 연결 필요 → 시간 손실 발생
  2. 고정된 통신 선로가 최단선이 아닐 경우, 다른 프로토콜보다 느린 전송 속도
  3. 일대일 통신만 가능
  4. 패킷을 조금만 손실해도 재전송 필요





UDP

1) 정의

UDP, User Datagram Protocol

  • transport 계층(전송계층, 4계층)의 프로토콜
  • 신뢰성이 낮은 프로토콜로 완전성을 보증하지 않음
  • 가상회선을 확립할 필요 없어, 유연하며 실시간적 데이터 전송에 적합
  • Datagram 서비스
    • 데이터 경계를 구분함
    • 데이터에 처음과 끝이 있고, 데이터가 끝날 때마다 발신과 수신이 이루어짐

  • 데이터 전송 단위 : Datagram


2) 연결 설정 X

비연결형 서비스인 UDP는 연결을 위해 할당되는 논리적 경로가 없다.

따라서 연결을 설정하고 해제하는 과정 역시 존재하지 않는다.

그렇기에 각 패킷들은 서로 다른 경로로 독립적으로 전송되고, 처리된다.

+) [참고] TCP와 UDP 통신 방식 비교

(좌 TCP, 우 UDP)



3) 특징

(a) 비연결성

  • 논리적 가상회선 연결이 필요 없음 ⇒ No Handshaking
  • 데이터그램 지향의 전송계층용 프로토콜
    • Datagram : 패킷교환에서 각각 독립적으로 취급되는 각각의 패킷
    • Datagram 방식
      • 패킷교환에서 각 패킷이 독립적으로 처리되어 목적지까지 도달
      • 데이터 경계를 구분함

(b) 신뢰성 X, 순서화 X ⇒ 최선의 서비스 제공

  • 확인응답 X
    • 메세지가 제대로 도착했는지 확인하지 않음
  • 순서제어 X
    • 수신된 메시지의 순서를 맞추지 않음
    • TCP 헤더와 달리 seq num 필드 없음
  • 흐름제어 X
    • 흐름 제어를 위한 피드백을 제공하지 않음
  • 오류제어 거의 X
    • checksum을 제외한 특별한 오류 검출 및 제어 없음
    • UDP를 사용하는 프로그램 측에서 오류제어 기능을 스스로 갖추어야 함

💡 최선의 서비스, Best effort
서비스의 지연 없이 최선의 서비스를 제공
패킷 손실이 유발될 수 있으나, 서비스의 지연이 없는 것을 우선시

(c) 빠른 속도

  • 빠른 요청과 응답이 필요한 실시간 응용에 적합
  • 전송속도에 제한이 없음
  • 단순한 헤더
    • 고정크기의 8 Byte만 사용
    • 즉, 헤더 처리에 많은 시간과 노력을 요하지 않음

(d) 1:1, 1:N, N:N 통신 가능

  • TCP와 달리 다수의 지점에 동시 전송 가능


4) UDP 구조

  • 기본적으로 1개의 IP에 1개의 UDP만 수용
  • TCP 헤더에 비해 매우 단순한 헤더 구조

(a) UDP 패킷

(b) UDP 헤더

  • 헤더 기능 설명
    1. Source Port (발신 포트번호)
      • 송신 시스템의 어플리케이션 port number
    2. Destination Port (수신 포트번호)
      • 수신 시스템의 어플리케이션 port number
    3. UDP length
      • UDP 헤더와 데이터를 합친 길이
    4. UDP checksum
      • error bit 검출을 위한 값
      • UDP 헤더와 데이터를 모두 포함하여 체크





[참고] TCP vs UDP

0) 비교

TCPUDP
연결 방식연결형 서비스비연결형 서비스
패킷 교환 방식가상 회선데이터그램
전송 순서보장바뀔 수 있음
수신 여부 확인OX
통신 방식일대일일대일, 일대다, 다대다
신뢰성높음낮음
속도낮음높음

1) 가상회선 vs 데이터그램

참고 : TCP와 가상회선

TCP는 엄밀히 말해 ‘느슨한 연결’이라는 점에서 가상회선과 완전히 동일하지는 않다. 하지만 송신-수신 호스트 간 경로를 설정하고 패킷의 전송 순서를 보장한다는 점에서는 가상회선과 유사하기 때문에, 많은 경우 혼용해서 사용하고 있다. (여기에서는 가상회선과 데이터그램을 비교함.)

가상회선

  • 데이터를 전송하기 전에 논리적 연결이 설정됨 : 연결 지향
    • 경로를 설정할 때 라우팅 1번 수행
    • 경로에 포함된 노드가 다운되면, 전체 경로를 재설정
  • 각 패킷에는 식별번호가 부여됨 → 전송 순서 보장
  • 모든 패킷을 전송하면 가상회선 해제
  • 용도: 정해진 시간 안에 다량의 데이터를 연속으로 보낼 경우

데이터그램

  • 데이터 전송 전에 논리적 연결이 설정되지 않음 : 비연결 지향
  • 패킷이 독립적으로 전송
    • 패킷을 수신한 라우터는 최적의 경로를 선택해 패킷을 전송 (매번 라우팅 수행)
    • 하나의 메세지에서 분할된 패킷이 여러 다른 경로로 전송될 수 있음
    • 송신 측에서 전송한 순서와 수신 측에 도착한 순서가 다를 수 있음
  • 용도: 짧은 메세지의 일시적 전송


2) 통신 과정

(좌 TCP, 우 UDP)

1개의 댓글

comment-user-thumbnail
2023년 8월 13일

많은 도움이 되었습니다, 감사합니다.

답글 달기