CS

[Network] TCP/UDP

KJihun 2023. 8. 4. 23:13
728x90

 

 

TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는

네트워크에서 데이터를 전송하는 주요 프로토콜이다.

 

TCP (Transmission Control Protocol)

데이터 단위: Segment

1 : 1 전송

 

통신을 시작하기 전에 세션을 설정하고, 데이터를 전송하고 받은 후 세션을 정리하는 방식으로 통신을 한다.

 

데이터 전송 중에 손실이나 오류가 발생하면 재전송을 요청하여 확실하게 데이터를 전달한다.

 

데이터를 보낸 순서대로 받아들이고 재조립하여 순서를 보장한다.

 

파일 전송, 웹 페이지 로딩 등 대용량 데이터 전송에 적합하며 주로 사용된다.

 

3-way handshake로 연결, 4-way handshake로 연결을 해제함으로써 신뢰성과 데이터의 정확성을 보장한다.

 

3-way Handshaking

서버 - 클라이언트 간 안정적인 데이터 송수신을 위해 연결 시 사용한다

 

 

  1. 클라이언트 → SYN → 서버
    • SYN : 연결 요청(임의의 난수를 보냄)
  2. 서버 → ACK + SYN → 클라이언트
    • ACK : 요청을 정상적으로 받았다는 대답(임의의 난수 +1의 값)
    • SYN : 클라이언트에게 포트개방을 요청
  3. 클라이언트 → ACK → 서버
    • ACK : 요청을 정상적으로 받았다는 대답 전달 후 클라이언트 포트 개방
    • ACK를 받은 서버는 포트를 개방하여 연결

 

4-way Handshaking

서버 - 클라이언트 간 데이터 전송 후 연결을 종료하기 위해 수행한다

 

 

 

  1. 클라이언트 → FIN → 서버
    • FIN : 연결을 종료하겠다
  2. 서버 → ACK → 클라이언트
    • ACK : 응답신호를 보내고 포트를 닫을 준비 함
  3. 서버 → FIN → 클라이언트
    • FIN : 연결종료 준비 후 클라이언트에게 준비가 되었음을 알림
  4. 클라이언트 → ACK → 서버
    • 해지 준비가 되었다는 ACK를 확인했다는 메시지를 보냄
    • ACK를 받은 서버는 포트를 닫음
    • TCP 세그먼트가 인터네트워크 시스템에 존재할 수 있는 시간(2분) 후 클라이언트도 포트를 닫음

 

 

TCP를 사용하는 대표적인 프로토콜로는 HTTP, HTTPS가 있다.

 

[CS] HTTP/HTTPS의 차이, SSL/TLS란?

HTTP/HTTPS HTTP와 HTTPS는 클라이언트와 서버 간 통신에 사용되는 프로토콜이다. 프로토콜이란 컴퓨터나 디지털 장치 등 다양한 기기간에 통신하기 위한 규칙과 규약이다. 사용자의 요청(주소창에 UR

developerhun.tistory.com

 

 

헤더 구조

  • Source Port/Destination Port : 송/수신지 Port번호, 양쪽 호스트 내 종단 프로세스 식별 (각 16bit)
  • Sequence Number : 데이터 순서를 의미하며 신뢰성 및 흐름제어 제공 (32bit)
  • Ack Number : 확인응답번호/승인번호, 상대 호스트에서 받으려는 바이트 번호를 정의 (32bit)
  • HLEN : 헤더 길이를 4바이트(32bit) 단위로 표시 (4bit)
  • Flag Bit : TCP연결 설정과 연결 해제 메세지를 구분(URG, ACK, PSH 등 6개로 구성) (1bit)
  • Window Size : 해당 세그먼트의 송신 측이 현재 수신하고자 하는 윈도의 크기(16bit)
  • CheckSum : 헤더 및 데이터의 에러 확인을 위해 사용 (16bit)
  • Urgent Pointer : 긴급 포인터(URG 플래그가 1이라면 수신 측은 이 포인터가 가르키고 있는 데이터를 우선 처리) ( 16bit)

 

 


 

UDP (User Datagram Protocol)

데이터 단위: Datagram

1 : 1, 1 : N, N : M

 

데이터를 전송하기 전에 연결 설정 과정이 없고, 데이터를 받을 준비가 되어 있어야 한다.

 

데이터 전송 중에 오류가 발생해도 재전송을 요청하지 않는다.

 

데이터가 보낸 순서와 상관없이 받은 순서대로 처리된다.

 

속도가 빠르며 데이터를 빠르게 전송해야 하는 음성, 영상 스트리밍 등에서 주로 사용된다.

 

비연결이므로 패킷마다 최적의 라우팅 경로로 보내기 때문에 순서를 보장하지 않는다.

 

전송 시, 패킷 손실의 우려가 있다.

 

헤더구조

  • Source Port,Destination Port (각각 16 bits)
  • Length (16 bits): 헤더와 데이터를 포함한 전체 길이를 바이트 단위로 나타내며 최소값은 8바이트
  • Checksum (16 bits): 데이터의 오류를 감지. 그러나 오류가 발견되어도 복구를 시도하지 않는다


UDP 헤더의 총 길이는 8 바이트입니다. 추가적인 오류 검출 및 복구 기능이 없으므로, 신뢰성 있는 데이터 전송을 보장하지 않습니다. 그러나 이로 인해 TCP보다 빠른 전송이 가능하며, 일부 애플리케이션에서는 신뢰성이 보다 적은 중요성을 가질 수 있기 때문에 선택적으로 사용됩니다.

 

UDP를 사용하는 대표적인 프로토콜로는 DNS, DHCP가 있다.

 

DNS (Domain Name System)

IP 주소를 사용자가 기억하기 쉽게 작성한 DomainName과 매핑하는 역할

빠른 응답 시간을 얻으면서도, 패킷 손실이나 순서 변경에는 유연하게 대응할 수 있다.

  • 재시도 (Retransmission): 클라이언트가 응답을 받지 못하면 같은 쿼리를 다시 보낼 수 있다.
    • 타임아웃(Timeout, 응답을 기다리는 시간)을 설정 후, 시간 내에 응답이 오지 않으면 재시도 요청을 한다.
  • 캐싱 (Caching): 응답을 캐시에 저장하여, 같은 쿼리가 들어왔을 때 요청을 보내지 않고 저장된 응답을 반환한다.
  • 다중 서버 및 로드 밸런싱: DNS는 여러 개의 서버를 사용하여 한 서버에서 응답을 받지 못하면 다른 서버로 요청을 보낼 수 있다.
  • 데이터 무결성 검사 (Data Integrity Check): 체크섬 필드를 포함하여 데이터 무결성을 확인, 데이터가 올바르게 전송되었는지 확인한다. 

 

DHCP (Dynamic Host Configuration Protocol)

네트워크 장치에 IP 주소를 자동으로 할당해주는 프로토콜

사용자가 수동으로 IP 주소를 설정할 필요 없이 자동으로 IP 주소를 할당받아 네트워크에 접속할 수 있게 해준다.

 

 

패킷 손실에 대비하기 위한 방법

  • 재시도 (Retransmission): DNS와 같다.
  • ACK(Acknowledgement, 응답 문자): DHCP 클라이언트는 DHCP 서버로부터 응답을 받기 전까지 IP 주소를 사용하지 않는다. IP 충돌을 방지한다.

'CS' 카테고리의 다른 글

[Network] 웹 통신의 큰 흐름  (0) 2023.10.05
Java Sort Algorithm  (0) 2023.09.30
[CS] NoSQL vs RDMBS  (0) 2023.08.02
[CS] 쿠키와 세션의 차이  (0) 2023.08.01
[CS] TDD(Test-Driven Development)란?  (0) 2023.07.31