※ 본 게시물은 개인이 공부 과정 중 복습을 위해 정리한 글이며, 일부 부정확한 정보가 포함될 수 있습니다.
※ 참조 자료의 출처는 게시물 최하단에 표기하며, 일부 누락된 출처의 경우 댓글로 남겨주시면 즉시 조치하겠습니다.
01. TCP와 UDP의 개념
TCP와 UDP는 OSI 7Layer 기준 L4(Transport Layer)에서 TCP/IP 4Layer 기준 L3(Transport Layer)에서
사용되는 프로토콜이다. 두 프로토콜 모두 네트워크 상에서 데이터를 주고 받을 때 사용된다.
지금부터 중요한 키워드 별로 분류하여 정리해 보도록 하겠다. TCP와 UDP의 차이만 보려면 제일 아래로.
02. 데이터
네트워크 상에서 데이터는 패킷(Packet)이라는 단위로 분할되어 전송된다. 데이터를 분할하지 않고 그대로
전송하게 될 경우 네트워크 경로의 제약(대역폭, 혼잡 등)으로 인해 전달이 어렵거나 지연이 발생할 수 있기 때문이다.
하지만 데이터를 패킷이라는 단위로 분할하여 전송하면, 각 패킷을 독립적으로 전송할 수 있게 된다.
이를 통해 제약을 극복하고, 패킷 손실이나 오류가 발생하더라도 손실된 패킷만 재전송하면 되는 것이다.
네트워크 계층에서 패킷이라는 단위로 데이터를 주고받았다면, 전송 계층에서는 다른 단위로 데이터를 주고받는다.
그전에 패킷이라는 단어에 대해 헷갈릴 수도 있기에, 이를 잘 정리해 둔 한 블로그의 자료를 첨부하겠다.
(출처 하기에 첨부)
우선 패킷은 네트워킹에서의 모든 데이터의 단위라면 PDU(Protocol Data Unit)는 각 프로토콜에서 사용되는
데이터의 단위를 의미한다. 즉, 각 네트워크 계층에서의 "헤더+페이로드(=실제 데이터)"를 지칭하는 용어이다.
TCP에서는 세그먼트, UDP에서는 데이터그램이라는 단위를 사용한다. 이 데이터의 단위란 "헤더+페이로드"라고 했다.
그렇다면 TCP와 UDP에 붙는 헤더가 다르다는 의미로 해석할 수도 있겠다. 각 프로토콜 별 헤더를 살펴보자.
02. 헤더
하기에 그 이유를 설명하겠지만, TCP 헤더와 UDP 헤더는 상당히 다른 구조를 가지고 있다.
여기서는 각 헤더에서 중요한 요소에 대해서만 설명하도록 하겠다.
<공통>
ㆍSource Port/Destination Port : 소스 포트와 목적지 포트 정보가 저장된다. 통신에 관여하는 프로세스를 식별한다.
<TCP Header>
ㆍSequence Number : 바이트 스트림의 순서를 나타내어 데이터의 순서를 보장한다.
ㆍAcknowledgment Number : 확인 응답 번호로 수신 측에서 다음에 받아야 할 바이트 번호를 명시한다.
ㆍWindow Size : 수신 측 버퍼의 크기를 알려 흐름 제어를 수행한다.
ㆍFlags : 총 6비트로 구성된 논리적인 tcp 연결회선 제어 및 데이터 관리를 위해 사용된다.
중요한 몇 가지 플래그에 대해서만 설명하도록 하겠다.
ㆍACK : 확인 응답 번호 필드가 유효한지 나타냄.
ㆍSYN : 동기화 시퀀스 번호를 차지하며 연결 설정을 나타냄.
ㆍFIN : 연결 종료를 나타냄.
<UDP Header>
ㆍChecksum : 전송 중 데이터 무결성 검사를 위해 사용됨.(구현 방법이나 자세한 내용은 별도로 찾아보는 것을 추천)
03. 각 프로토콜의 특징
TCP와 UDP 헤더의 구조가 이렇게나 차이 나는 이유는 각 프로토콜의 특징 때문이다.
TCP의 특징은 연결 지향/신뢰성/순서 보장/흐름 제어&혼잡 제어이고, UDP의 특징은 비연결성/비신뢰성/빠른 전송이다.
신뢰성이 중요한 TCP는 당연히 Header에 저장해야 할 정보가 많아지는 것이고, 속도가 중요한 UDP는 당연히
Header에 최소한의 정보만 담아 경량화해야 하는 것이다. TCP와 UDP는 헤더 외에 연결 방식에도 차이가 있다.
지금까지 언급한 특징들을 잘 기억해 두고, 각 프로토콜 별 연결 방식을 살펴보도록 하자.
04. 패킷 교환 방식
*라우터와 라우팅 개념을 선행 학습 후 아래 내용을 보는 것이 보다 이해하기 쉬울 것이다.
패킷 교환 방식은 라우팅(경로 배정) 방식에 따라 데이터 그램 방식과 가상 회선 방식으로 구분된다.
(메시지 교환 방식이라는 것도 존재하지만 위 2가지 방식만 알아도 상관없다고 본다.)
두 방법 중 TCP는 가상 회선 방식을 UDP는 데이터 그램 방식을 사용한다는 것을 인지하고, 아래 이미지를 살펴보자.
가상 회선 방식의 이미지를 보면, 송신 측과 수신 측이 이미 하나의 회선으로 연결되어 있고,
그 경로로만 패킷을 전송하고, 패킷도 순서대로 도착하는 것을 확인할 수 있다.
(말 그대로 "가상" 회선 방식이기에 실제 회선이 연결되는 것은 아니고, 회선이 연결된 것처럼 동작할 뿐이다.)
반면, 데이터 그램 방식에서는 일정한, 하나의 경로가 아닌 수신 측으로 도착만 할 수 있다면 어느 경로로든
패킷을 보내 버린다. 그렇기에 패킷이 순서대로 도착하지 않을 수도 있다.
(이런 방식을 Connection Less 방식이라고도 부른다고 한다.)
05. 3way handshaking / 4way handshaking
TCP는 가상 회선 방식을 사용한다. 이는 송신측과 수신 측 사이에 논리적인 경로(가상 회선)가
먼저 설정되어야 한다는 것을 의미한다. 이때 사용되는 개념이 바로 3way handshaking이다.
위 이미지에서 사람 모양의 이미지가 클라이언트, 반대에 있는 것이 서버이다.
3way handshaking은 TCP 연결을 설정하기 위한 과정이며, 위 이미지처럼 3단계의 과정을 거친다.
[1] 클라이언트 -> 서버 : SYN(연결 요청) 플래그를 세팅한 세그먼트를 전송
[2] 서버 -> 클라이언트 : SYN(요청 승낙) + ACK(확인 응답) 플래그를 세팅한 세그먼트를 전송
[3] 클라이언트 -> 서버 : ACK(확인 응답) 플래그를 세팅한 세그먼트를 전송
이 과정이 무사히 완료되었다면, 위의 가상 회선 방식처럼 데이터를 주고받을 수 있게 된다.
데이터를 주고받는 과정이 완료되었다면, 연결된 회선을 끊어주는 단계도 필요하다.
이때 사용되는 개념이 4way handshaking이다.
3way handshaking을 이해했다면, 이 과정도 이해가 쉬울 것이다.
[1] 클라이언트 -> 서버 : FIN(연결 종료 요청) 플래그를 세팅한 세그먼트를 전송
[2] 서버 -> 클라이언트 : ACK(확인 응답) 플래그를 세팅한 세그먼트를 전송
[3] 서버 -> 클라이언트 : FIN(연결 종료 요청) 플래그를 세팅한 세그먼트를 전송
[4] 클라이언트 -> 서버 : ACK(확인 응답) 플래그를 세팅한 세그먼트를 전송
이러한 과정들을 통해 TCP의 특징인 신뢰성/연결 지향/순서 보장이 가능한 것이다.
06. Unicast / Multicast / Broadcast
위 3가지 용어는 네트워크에서 데이터를 전송할 목적지의 범위를 구분하는 용어 정도로 생각하면 된다.
Unicast는 단일 목적지 즉, 1대1 통신을 의미한다. 이와 반대되는 개념인 Broadcast는 현재 소속된 대역의
모든 Host에게 신호를 전송하는 1대多 혹은 1대ALL 통신을 의미한다. 자세한 내용은 다른 게시물에서
다루겠지만, Broadcast 방식은 굉장히 비효율적이기에 자주 사용하는 것이 권장되지 않고, 그나마 덜
비효율적인 Multicast는 동일하게 1대多 통신을 하지만, IGMP라는 프로토콜을 통해 소속한 대역의 특정
그룹에게만 신호를 전송하는 통신을 의미한다.
각 전송 방식의 특징을 보면 어느정도 유추했겠지만, Unicast에는 주로 TCP가 Broadcast나 Multicast에는
주로 UDP가 사용된다.
07. TCP와 UDP의 차이 정리표
TCP | UDP | |
연결 지향 | O | X |
패킷의 순서 보장 | O | X |
신뢰성 | O | X |
속도 | (상대적) 느림 | 빠름 |
패킷 교환 방식 | 가상 회선 방식 | 데이터그램 방식 |
데이터의 단위 | 세그먼트 | 데이터그램 |
연계되는 개념 | Unicast | Multicast, Broadcast |
08. 마치며
TCP와 UDP에 대해 설명하는 글이지만, Transport Layer에서 사용되는 개념뿐만 아니라
Network Layer에서 사용되는 개념도 섞여 있다. 애초에 TCP/IP라고 묶여 불릴 만큼 떼려야 뗄 수 없는
관계이기에 그냥 묶어서 스스로 잘 정리해 가며, 이해하는 수 밖에 없다. 레이어가 분리되어 있다고
개념을 계층 별로 분리하여 암기하려고 하면 오히려 더 헷갈린다.
09. 참조 링크
- 그림 1 : https://www.geeksforgeeks.org/tcp-ip-model/
- 그림 2 : https://arcadia.tistory.com/28
- 그림 3 : https://www.researchgate.net/figure/TCP-and-UDP-Headers_fig56_305506264
- 그림 4,5 : https://life-of-panda.tistory.com/73
- 그림 6 : https://www.techopedia.com/definition/10339/three-way-handshake
- 그림 7 : https://velog.io/@yhm8622/TCP-4-way-Handshake
- 그림 8 : https://www.eletronet.com/blog/entenda-a-diferenca-entre-unicast-multicast-e-broadcast/
- http://www.ktword.co.kr/test/view/view.php?m_temp1=2437
'~2024.10' 카테고리의 다른 글
[JAVA][0단계] 배열의 평균값 (0) | 2024.04.15 |
---|---|
[자바] try-with-resource (0) | 2024.04.10 |
[Android 기초] EditText 개념과 사용 방법 (0) | 2024.04.02 |
[자바] 자바의 메모리 구조(Stack / Heap / Method Area) (0) | 2024.03.31 |
[GPT4 답변 공유] 안드로이드 git ignore 사용법 (0) | 2024.03.31 |