본문 바로가기
개발공부 개발새발/Network

Network ) TCP / UDP

by 휴일이 2024. 5. 30.

TCP 와 UDP

4계층 프로토콜, 여러 애플리케이션 프로세스 중 통신해야 할 목적지 프로세스를 정확히 찾아가고 패킷 순서가 바뀌지 않도록 잘 조합해 원래 데이터를 잘 만들어내기 위한 역할을 한다.

4계층 프로토콜의 목적

(목적지 주소가 아니라)애플리케이션에서 사용하는 프로세스를 정확히 찾아가고 데이터를 분할한 패킷을 잘 쪼개 보내고 잘 조립하기.

4계층 프로토콜(TCP, UDP)과 서비스 포트

인캡슐레이션, 디캡슐레이션 과정에서 가장 중요한 두 가지 정보는?

  • 각 계층에서 정의하는 정보
    • 수신 측 동일 계층에서 사용하기 위한 정보
    • 4계층에서는 ACK 번호 시퀀스 번호
  • 상위 프로토콜 지시자 정보
    • 상위 계층의 프로토콜이나 프로세스를 정확히 찾아가기 위한 정보
    • 4계층에서는 포트 번호
      • 출발지와 목적지를 구분해 처리해야 함.
💡 HTTP TCP 80, HTTPS TCP 443, SMTP TCP 25 같이 잘 알려진 포트를 웰 노운 포트(Well Known)라고 한다.

 

💡 서비스 요청 시와 응답 시에는 출발지 IP 와 목적지 IP가 반대가 되듯이, 출발지와 도착지 포트 번호도 요청 패킷과 응답 패킷이 반대가 된다.

TCP

신뢰할 수 없는 공용망에서도 정보유실 없는 통신을 보장하기 위해 세션을 안전하게 연결하고 데이터를 분할하며 분할된 패킷이 잘 전송되었는지 확인할 수 있다. 또, 한꺼번에 얼마나 보내야 수신자가 잘 받아 처리할 수 있는지 전송크기까지 고려해 통신한다.

패킷 순서와 응답 번호

TCP 에서는 분할된 패킷을 잘 분할하고 수신 측이 잘 조합하도록 패킷에 순서를 주고 응답 번호를 부여한다.

시퀀스 번호

패킷에 순서를 부여

ACK 번호

응답 번호를 부여

두 번호가 상호작용해 순서가 바뀌거나 패킷이 손실된 것을 파악할 수 있다.

패킷 요청, 응답 과정 (ACK, Seq 번호)

  1. 출발지(송신 측) 에서 SEQ 번호 0으로 보냄.
  2. 수신 측 - 0번 패킷 잘 받았다는 표시로 ACK = 1 로 응답, 본인이 처음 보낸 패킷이므로 자기 패킷에는 SEQ = 0 부여해 송신
  3. 송신 측 - SEQ = 1 로 (ACK 번호로 1번 패킷을 달라고 했으므로), ACK = 1 로(0번 시퀀스를 잘 받았다는 의미) 송신한다.

윈도 사이즈, 슬라이딩 윈도

TCP 는 일방적으로 패킷을 보내지 않고 상대방이 얼마나 잘 받았는지 확인하기 위해 ACK 번호를 확인하고 다음 패킷을 전송한다. 하지만 송신자/수신자가 먼 거리에 떨어져있으면 왕복 지연시간(RTT) 가 늘어난다. 그래서 패킷을 한꺼번에 여러 개 보내고 응답을 하나만 받는다.

 

윈도 사이즈 한 번에 데이터를 받을 수 있는 크기
슬라이딩 윈도 네트워크 상황에 따라 윈도 사이즈의 크기를 조절하는 것.

윈도 사이즈 사용법

  • TCP 헤더는 변경이 불가능하므로 헤더 사이즈를 늘리지 않고 뒤의 숫자를 무시함.

데이터 유실이 발생할 경우

  • 윈도 사이즈를 절반으로 떨어뜨린다.
  • 정상적으로 통신이 되는 경우 서서히 하나씩 늘린다.

작아진 윈도 사이즈로 데이터 통신 속도가 느려져 회선을 제대로 사용하지 못하는 상황

경합을 피하기 위해 …

  • 회선 속도 증가 시키거나,
  • 임시로 피하기 위해 버퍼가 큰 네트워크 장비 사용.
  • TCP 최적화 솔루션 사용.

3방향 핸드셰이크

TCP 에서 유실 없는 안전한 통신을 위해 통신 시작 전 각 통신에 필요한 리소스를 미리 확보하기 위해 3번의 패킷을 주고 받으며하는 사전 연결 작업.

 

상태

 

상태 명 설명
LISTEN 클라이언트의 접속을 받아들일 수 있는 상태.
SYN-SENT 통신을 시도할 때 클라이언트가 Syn 패킷을 보냄.
SYN-RECEIVE 서버가 Syn 을 받음, Ack 로 응답.
ESTABLISHED 서버와 클라이언트 연결이 성공적으로 완료.

Flag

어떤 패킷이 새로운 연결 시도인지, 기존 통신에 대한 응답인지 구분하기 위에 헤더에 넣는 값. 플래그를 넣어 통신함.

종류

 

종류 용도 설명
SYN 연결 시작 용도. 연결이 시작될 때 1로 표시
ACK ACK 번호는 몇 번을 달라는 의미기도 함. 시퀀스 번호에 +1 을 추가해 10번+1번 하여 11번째 데이터부터 달라는 뜻으로 줌. 초기 SYN 이 아닌 모든 패킷은 기존 메시지에 대한 응답이므로 ACK 플래그가 1, ACK 번호가 유효할 경우
FIN 데이터 전송을 마치고 정상적으로 양방향 종료시 사용. 연결 종료시 1로 표시.
RST 연결 강제 종료를 위해 연결을 일방적으로 끊을 때. 연결 종료시 1로 표시.
URG 긴급 데이터인 경우 표시. 1
PSH 서버 측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 즉시 전달할 것을 지시할 때.  

UDP

데이터 전송을 보장하지 않는 프로토콜. 제한된 용도로만 사용한다.

용도

일부 데이터가 유실되더라도 시간에 맞춰 계속 전송하는 것이 중요한 데이터 주로 이용. 신뢰도는 떨어지지만 응답 시간에 민감한 환경에서 주로 사용한다.

  • 음성 데이터나 실시간 스트리밍 같이 시간에 민감한 프로토콜이나 애플리케이션
  • 사내 방송이나 증권 시세 데이터 전송에 사용되는 멀티캐스트처럼 단방향으로 다수의 단말과 통신 해 응답을 받기 어려운 환경 에서 주로 사용함.

특징

  • UDP 는 TCP 처럼 에서 3방향 핸드셰이크 같이 사전 연결 확립하는 절차가 없다. 첫 데이터는 리소스 확보를 위해 인터럽트 를 거는 용도로 사용되고 유실된다.
  • 그래서 보통 동작하거나 연결 확립은 TCP 프로토콜을 사용하고, 실제 데이터만 UDP 를 이용하는 경우가 대부분이다.
💡 넷플릭스나 유튜브같이 시간에 민감하지 않은 단일 시청자를 위한 연결은 TCP 를 사용한다. 데이터를 미리 받아놓고 네트워크에 문제가 생길 때를 대비해 캐시에 저장해놓는다. 하지만 실시간 화상 회의 등은 UDP 를 이용한다.
728x90