2. TCP 와 UDP 의 특징 및 차이점

SJH·2024년 6월 10일
0
post-custom-banner

TCP와 UDP

OSI 4계층에 해당하는 전송 계층에 해당하는 대표적인 예로
TCP와 UDP가 존재

TCP = Tranmission Control Protocol 의 약자
장점 - 신뢰성 O / 단점 - 속도가 느림
Ex) 웹 브라우징, 이메일, 파일 전송 등 데이터의 정확성과 신뢰성이 중요한 서비스

UDP = User Datagram Protocol 의 약자
장점 - 속도가 빠름 / 단점 - 신뢰성 X
Ex) 실시간 스트리밍, 온라인 게임 등 빠른 전송과 지연 최소화가 필요한 서비스

TCP의 헤더구조

총 20바이트 = 160비트로 구성되어 있으며
각각 어떤 필드가 있고 얼마만큼의 데이터를 할당받는지 알아보자.

Source Port, Destination Port

Source Port : 송신 측의 포트번호
Destination Port : 수신 측의 포트번호

각각 16비트를 할당

Sequence Number

전송하는 데이터의 순서를 의미

  • 32비트 할당
  • 최대 4,294,967,296 까지의 수를 담을 수 있음 => 시퀀스 번호가 쉽게 중복 X
  • 송신자가 최초로 데이터를 전송할 때는 이 번호를 랜덤한 수로 초기화
  • 데이터의 1 bytes당 시퀀스 번호를 1씩 증가
  • 데이터의 순서를 표현하다 4,294,967,296를 넘어갈 경우 다시 0부터 시작

Acknowledgment Number

데이터를 받은 수신자가 예상하는 다음 시퀀스 번호를 의미

  • 32비트 할당
  • Handshaking 과정에서 상대방이 보낸 시퀀스 번호 + 1로 자신의 승인 번호를 만들어낼 때 사용

Data Offset

전체 세그먼트 중에서 헤더가 아닌 데이터가 시작되는 위치가 어디부터인지를 표시

  • 4비트 할당
  • Offset을 표기할 때는 32bit 워드 단위를 사용하며, 32bit 체계에서의 1 Word = 4 bytes를 의미
  • 즉, Offset 필드에 할당된 4 bits로 표현할 수 있는 값의 범위는 0000 ~ 1111, 즉 0 ~ 15 Word이므로
    기본적으로 0 ~ 60 bytes의 오프셋까지 표현
  • 하지만 Offset필드를 제외한 나머지 필드는 필수로 존재해야 하기 때문에 최소 값은 20 bytes, 즉 5 Word로 고정

Reserved

미래를 위해 예약된 필드로, 모두 0으로 채워져야 함.

  • 6비트 할당
  • 현재는 쓰이지 않음

Window Size

자신의 수신 버퍼 여유용량 크기를 통보하여 얼마만큼의 데이터를 받을 수 있는지 상대방에게 알려주어 흐름제어를 수행하게 되는 필드

  • 16비트 할당

Checksum

데이터를 송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값

  • 16비트 할당

Urgent Pointer

말 그대로 긴급 포인터
URG 플래그가 1이라면 수신 측은 이 포인터가 가르키고 있는 데이터를 우선 처리

  • 16비트 할당
  • TCP Flags의 URG와 세트

Flag (URG ~ FIN)

  • URG (Urgent) : 긴급 비트, 내가 지금 보내는 데이터를 빠르게 보내라고 요청 시 사용. Urgent Pointer와 세트

  • ACK (Acknowledge) : 승인 비트, 물어본거에 대한 응답을 해줄 때 사용

  • PSH (Push) : 수신 측에게 이 데이터를 최대한 빠르게 응용프로그램에게 전달해달라는 플래그

  • RST (Reset) : 초기화 비트, 상대방과 연결이 되어있는 상태에서 어떤 문제 등이 발생하여 연결 상태를 리셋

  • SYN (Synchronization) : 동기화 비트, 상대방과 연결을 시작할때 무조건 사용되는 플레그

  • FIN (Finish) : 종료 비트

(NS, CWR, ECE 비트는 잘 쓰이지 않으므로 생략)

TCP의 연결방식 : 3-way Handshaking

연결 지향적인 TCP는 3-way Handshaking으로 통신을 시작함.

  1. 클라이언트는 SYN (동기화) 패킷을 서버에게 보냄.
  2. 서버클라이언트의 요청에 승인하는 SYN + ACK (동기화 + 승인) 패킷을 클라이언트에게 보냄.
  3. 클라이언트서버의 승인 패킷을 확인했다는 의미로 ACK 패킷을 서버에게 보냄.

이렇게 3단계를 거치면 클라이언트서버의 상태는 연결 생성(Established)

위 그림 설명

  1. 서버 측에서 클라이언트로부터 받은 seq 번호가 100일 때 서버클라이언트에게 ‘seq 번호 + 1’ 의 ack 번호를 전달

  2. 서버는 seq 번호를 처음 보내므로 서버만의 랜덤한 값을 생성해서 클라이언트에게 전달 ex) 200

  3. 그럼 클라이언트 측에서 서버로부터 받은 seq 번호가 200이므로 클라이언트서버에게 200+1인 201의 ack 번호를 전달

  4. 클라이언트서버로부터 받은 ack 번호 101은 다시 서버로 seq 번호를 보낼 때 101로 그대로 유지

이러한 방식을 이용한 취약점으로 ‘Section Hi-jacking’ 이라는 공격 방법이 존재

만약 악의적인 해커가 seq과 ack값을 계산해서 서버가 받아야 하는 응답을 해커가 보내면, 서버는 해커를 클라이언트로 착각해 해커와 서버가 연결됨.

TCP의 해제 방식 : 4-way Handshaking

TCP의 연결은 3-way Handshaking 방법을 사용한 반면에,
TCP의 해제는 4-way Handshaking 방법을 사용

4-way Handshaking의 과정

  1. 클라이언트서버에게 연결을 끊고자 Fin(Finish, 종료)패킷을 전송

  2. 서버는 그 응답으로 ACK 패킷과 FIN 패킷을 클라이언트에게 각각 전송

  3. 마지막으로 클라이언트는 서버의 종료 패킷에 대한 확인으로 ACK패킷을 서버에게 전송

  4. 연결 해제

TCP의 재전송 기능

재전송이 발생할 수 있는 상황은 크게 3가지로 나뉘는데,

  1. Retransmission : Packet lost
    송신자는 패킷을 보냈지만, 어떤 이유에서인지 중간에 유실되어 수신측에 도달하지 못함.
    수신측은 당연히 패킷이 도착하지 않았으므로 ACK를 보내줄리가 없고, 송신자의 Timer는 만료

  2. Retransmssion : ACK lost
    송신자가 패킷을 보냈고, 수신 측 또한 응답으로 ACK를 보냄.
    그러나, 이번에는 중간에 ACK가 유실되어 송신자에게 도착하지 못했고, 송신자의 Timer는 만료

  3. Retransmission : Early Timeout
    송신자가 패킷을 보냈고, 수신 측에서 응답으로 ACK를 보냄.
    그러나, 네트워크 지연이 발생해서 송신자의 Timer가 만료되어버린 후에 ACK가 송신자에게 도착

즉, TCP는 앞의 3가지 사례처럼
데이터 또는 ACK 패킷이 손실되면 재전송을 수행하게 되는데,
TCP는 데이터 전송 후 타이머를 설정하고 타이머 종료까지
ACK 패킷을 받지 못하면 timeout이 발생
이 때 timeout은 Retransmission Time Out (RTO)라고 부르는 시간이 지난 후 발생

RTO란?
Timeout 시간이 지나치게 짧으면 재전송 패킷의 낭비가,
지나치게 길면 패킷이 손실되었을 때 기다려야하는 시간이 너무 길어짐.
따라서 어떤 기준을 통해서 정의된 적절한 시간이 필요한데,
이때 RTO (Rtransmission Timeout)라는 개념 사용

UDP의 헤더 구조

총 8 byte = 64 bit 로 구성

  • 출발지 포트 (16bit) : 송신 측의 포트 번호

  • 목적지 포트 (16bit) : 수신 측의 포트 번호

  • 길이 (16bit) : UDP 헤더와 데이터를 합친 길이. 단위는 8 byte ~ 65507 byte

  • 체크썸 (16bit) : 헤더와 데이터를 모두 포함한 데이터그램 전체에 대해 오류를 탐지하기 위해 사용

TCP와 UDP 헤더의 Checksum 필드의 차이

Checksum : 데이터를 송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값

TCP의 Checksum :
세그먼트 데이터 송신 시도 중에 발생될 비트의 오류를 검출함으로써 필수적으로 해야함.

UDP의 Checksum :
송신측에서 Checksum 값을 전부 0으로 송출하면 수신측은 체크섬을 하지 않아도 되는 선택사항임.

UDP의 통신 방식

  • TCP와는 달리 연결을 위해 할당되는 논리적 경로가 X

  • 각각의 패킷이 다른 경로로 전송

  • 정보의 송수신에 대한 신호 절차가 X

  • 최소한의 오류만을 검증하여 패킷의 손실이 상대적으로 많은 편

TCP와 UDP의 차이점 정리

프로토콜 종류TCPUDP
연결 방식연결형 서비스 (패킷 교환 방식)비연결형 서비스 (데이터그램 방식)
전송 순서전송 순서 보장전송 순서가 바뀔 수 있음
수신 여부 확인수신 여부를 확인함수신 여부를 확인하지 않음
통신 방식1:1 통신1:1 or 1:N or N:N 통신
신뢰성높다낮다
속도느리다빠르다

보완점

TCP의 Checksum 구동방식

  • 신뢰성의 특징으로 인해 모든 통신간에 Checksum 기능을 통해 올바르게 통신이 되는지 오류와 관련된 부분 체크

UDP의 Checksum 구동방식

  • 선택적으로 일어나기 때문에 송수신하는 과정에서 Checksum의 발생 기준이 명확 X

가장 큰 차이점은 신뢰성이 있냐(TCP) 없냐(UDP), 속도가 느리냐(TCP) 빠르냐(UDP)

Sequence Number : 순서가 바뀌지 않도록, 고유한 식별번호 부여해서 중복되지 않도록 하는 역할
Acknowledge Number : 올바르게 통신이 되고 있는지 확인

RST 플래그 비트 - 정상적인 경로 x 비정상적인 부팅 o - 중간에 패킷을 가로채거나 끊어버리는 용도로 해커들이 악의적인 목적으로 자주 사용

재전송이 일어나는 case
1234순서로 데이터를 보냈는데 목적지에 도착할 땐 1243으로 순서가 바뀌어서 도착했을 때 or 하나 빠져서 124로 도착했을 때 정상적으로 통신이 되지 않았다고 판단하여 재전송 기능 사용

참고

https://evan-moon.github.io/2019/11/10/header-of-tcp/#checksum
https://itwiki.kr/w/TCP_%ED%97%A4%EB%8D%94
https://itwiki.kr/w/TCP#3-Way_Handshaking
https://godjiblog.co.kr/tcp%EC%99%80-udp%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-4%EA%B0%80%EC%A7%80/https://godjiblog.co.kr/tcp%EC%99%80-udp%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-4%EA%B0%80%EC%A7%80/
https://velog.io/@ragnarok_code/Network-TCP-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%97%B0%EA%B2%B0%EC%A2%85%EB%A3%8C-%EA%B3%BC%EC%A0%95
https://blog.naver.com/nhrunner/222741116609
https://go-ahead.tistory.com/7
https://www.extrahop.com/company/blog/2016/retransmission-timeouts-rtos-application-performance-degradation/
https://mangkyu.tistory.com/15

profile
보안, 클라우드 공부정리 블로그
post-custom-banner

0개의 댓글