본문 바로가기
개념/Web

TCP와 UDP

by Hwanii_ 2023. 12. 20.
728x90

 

TCP와 UDP는 OSI 7계층에서 4계층인 전송 계층에 속하는 프로토콜 이다.

 

전송 계층에는 다양한 프로토콜이 존재하지만, 제일 중요하고 자주 사용되는 프로토콜은 TCP와 UDP 이다.

 

TCP와 UDP는 서로 상반되는 특징을 가지고 있다.

 

아래에서 확인해보자.

 

참고 : 

더보기

 

* TCP : Transmission Control Protocol == 전송 제어 프로토콜

* UDP : User Datagram Protocol == 사용자 데이터그램 프로토콜

 

* Tranmission : 전송 / 송신

* Transport : 수송

* Transfer : 이동 / 이송

 

Web 관련 용어 공부를 하다보면 위의 단어를 굉장히 많이 마주 하게 되는데, 사전 상으로 의미는 비슷 하다.

특히 Transport랑 Transfer은 뒤에 port랑 fer 차이인데, port (나르다), fer (보내다) 정도의 차이인듯.

 

 

 

TCP (Transmission Control Protocol)

 

TCP 프로토콜의 기본 전송 개념

 

TCP는 데이터를 안정적으로 전송 하기 위한 연결 지향형 프로토콜 이다.

 

TCP는 데이터를 여러 세그먼트로 분할 해서 전송 한다.

 

각 세그먼트는 TCP 헤더와 실제 데이터로 구성 된다.

 

전송 계층으로 캡슐화된 데이터 : 이더넷 헤더 ~ FCS

 

위의 이미지를 확인 하면 먼저 MSS 라는 용어에 대해 알아둘 필요가 있다.

 

MSS : TCP 세그먼트로 보낼 수 있는 최대 크기.

( * MSS : Maximum Segment Size)

( * Segment : 부분 / 한 조각 / 나누다 / 분할 하다)

 

이미지에서 볼 수 있듯이, TCP의 MSS는 헤더는 포함 하지 않는다.

 

오직, 페이로드에만 해당 되는 정보를 의미 한다.

 

참고 : 페이로드

 

 

반면에 IP의 MTU는 IP 헤더, TCP 헤더, 페이로드를 모두 포함하는 정보를 의미 한다.

 

 

 

아래에서 TCP 세그먼트의 구조에 대해 확인해보자.

 

 

 

TCP 세그먼트의 구조

 

각 세그먼트는 TCP 헤더와 실제 데이터로 구성 된다고 했다.

 

TCP 세그먼트의 구조는 UDP에 비해서 상대적으로 훨씬 복잡 하다.

 

물론 모든 것을 알면 좋겠지만, 우선적으로 중요한 부분을 살펴보려고 한다.

 

아래 이미지 에서 빨간색 영역들이 우선적으로 알아볼 중요한 부분들 이다.

 

1) 출발지 포트

2) 목적지 포트

3) 순서 번호

4) 확인 응답 번호

5) 제어 비트

6) 윈도우

 

 

차례대로 정리해보자.

 

1 & 2) 출발지 포트 & 목적지 포트 :

 

포트는 어플리케이션 프로세스를 식별할 수 있는 고유한 번호 이다.

 

전송 계층의 역할은 출발지 프로세스와 목적지 프로세스를 식별할 수 있도록 하는 것 이다.

 

따라서, 전송 계층에서 동작 하는 TCP 세그먼트 내부에는 출발지 포트와 목적지 포트가 당연히 존재할 수 밖에 없다.

 

 

 

3) 순서 번호 (Sequence Number) :

 

송수신되는 각 세그먼트 데이터의 첫 바이트에 부여 되는 번호 이다.

 

각 세그먼트를 식별 하기 위한 번호 이다.

 

데이터가 여러 세그먼트로 분할 되서 보내질 때, 누락 되지 않고 순서대로 잘 보내지도록 하는 개념 이다.

 

 

위와 같이 전송할 데이터가 1900 바이트 크기라고 해보자.

 

위에서 MSS (Maximum Segment Size) 개념에 대해 정리 했다.

 

TCP는 데이터를 각 세그먼트로 분할 해서 전송 하는데, MSS에 의해 보낼 수 있는 세그먼트의 크기가 정해져 있다.

 

만약 세그먼트를 500 바이트씩 보낼 수 있다고 한다면,

 

1900 바이트 짜리 데이터를 500 / 500 / 500 / 400 으로 데이터 크기를 끊어서 보내야 할 것이다.

 

즉, 원본 데이터를 여러 세그먼트로 분할 해서 보내게 될 때,

세그먼트 데이터의 첫 바이트에 부여 되는 번호를 순서 번호 라고 한다.

 

 

위의 이미지와 같이 세그먼트 A의 첫 바이트의 순서 번호를 100 이라고 랜덤 하게 부여 됬다고 하면,

 

 

500 바이트씩 끊겠다고 했으니까, 위의 이미지와 같이 순서 번호가 매겨질 것이다.

 

 

 

4) 확인 응답 번호 (Acknowledgment Number == ACK Num) :

 

순서 번호 (Sequence Number) 에 대한 응답 이다. (다음으로 수신 받길 기대 하는 바이트 번호)

 

위에서 순서 번호는 각각의 여럿 세그먼트들 마다 첫 바이트에 부여 되는 세그먼트를 식별할 수 있는 번호 라고 했다.

 

 

TCP에서 데이터 전송이 MSS로 지정된 크기가 1이라고 해보자.

 

처음에 순서 번호 8000번의 세그먼트를 전송 하면,

다음으로 8001번의 세그먼트를 보내달라고 확인 응답 번호로 8001번을 전송 한다.

이게 ACK Num의 개념 이다.

 

이렇게 순차적인 순서 번호를 통해서 데이터를 안정적으로 전송 및 수신을 할 수 있게 된다.

 

 

 

 

5) 제어 비트 :

 

ACK : 세그먼트 승인을 나타내는 비트. (세그먼트를 승인 했다)

SYN : 연결 수립을 위한 비트. (처음에 데이터를 주고 받을 때 사용 되는 비트)

FIN : 연결을 끝내기 위한 비트. (데이터 통신이 끝나면 통신을 끝내기 위해 사용 되는 비트)

RST : 연결을 리셋하기 위한 비트. (말 그대로 연결을 리셋 하기 위해 사용 되는 비트)

..

 

TCP는 UDP와 다르게 연결성 프로토콜 이기 때문에, 위와 같이 연결 수립을 위해 제어 비트가 존재 하는 개념 이다.

 

 

 

6) 윈도우 : 

 

수신지 윈도우 크기 이다. 한 번에 수신 받고자 하는 양을 의미 한다.

(나중에 추가 학습 예정)

 

 

 

참고 : 

 

더보기

 

1) 출발지 포트 및 목적지 포트 : 각각 16비트의 크기 이다. 통신할 때 양쪽의 포트 번호를 의미 한다.

 

2) 순서 번호 (Sequence Number) : 전송 되는 데이터의 순서 이다. 이 순서 번호는 32비트의 숫자 이다.

 

3) 확인 응답 번호 (Acknowledgment Number == ACK Num) :

상대로부터 수신한 마지막 유효한 세그먼트의 순서 번호에 1을 더함.

 

이것을 통해 상대방이 제대로 데이터를 받았는지 확인할 수 있다.

 

4) 데이터 오프셋 ( == 헤더 길이) : TCP 헤더의 길이를 나타내는 필드. 4비트 크기 이다. 헤더의 길이를 알 수 있다.

 

5) 제어 비트 ( == Control Bits == 컨트롤 비트) : TCP의 여러 기능을 제어 하기 위한 비트.

 

예) SYN (Synchronize) 비트는 연결을 초기화 할 때 사용.

예) ACK (Acknowledgment) 비트는 확인 응답 번호가 유효함을 나타낼 때 사용.

 

6) 윈도우 (Window Size) : 데이터를 얼마나 많이 수신할 수 있는지를 나타내는 값.

 

7) 체크섬 (CheckSum) : 오류 검출을 위한 값. 세그먼트 내의 오류를 찾는 데 사용 된다.

 

8) 긴급 포인터 (Urgent Pointer) : 긴급 데이터가 있는 경우, 해당 데이터의 위치를 나타낸다.

 

9) 옵션 (Options) : TCP 헤더에 추가적인 옵션 정보를 포함할 때 사용 된다.

 

 

 

UDP (User Datagram Protocol)

 

UDP는 IP 패킷을 감싸는 껍데기에 불과 하다.

 

비연결성 / 비신뢰성 프로토콜 이다.

 

TCP가 가지고 있는 재전송 / 흐름 제어 / 혼잡 제어 등의 기능이 존재 하지 않는다.

 

UDP는 TCP보다 단순 하기 때문에, 빠른 성능으로 최근에는 각광 받고 있다.

 

HTTP 3.0 버전, NTP, RIP, DNS, DHCP 등에서 사용 되고 있다.

 

 

UDP는 위의 이미지와 같이 굉장히 단순한 구조 이다.

 

 

반응형

'개념 > Web' 카테고리의 다른 글

네트워크 액세스 계층 - 이더넷  (0) 2023.12.20
DNS (Domain Name System)  (1) 2023.12.19
네트워크 포트 (Port) 번호  (0) 2023.12.19
쿠키와 세션  (0) 2023.10.25
HTTPS  (0) 2023.10.25