컴퓨터(Computer Science)/네트워크, Network

TCP vs UDP 비교

게임이 더 좋아 2021. 9. 13. 23:11
반응형
728x170

 

TCP, Transmission Control Protocol

UDP, User Datagram Protocol

 

정확히 무엇인지 알아보자.

또한 각각의 특징들을 알아보자

 

또한 위의 것들은 통신에서의 프로토콜이다.

여기서 통신이란 호스트 컴퓨터에 있는 프로세스 간의 통신이라고 하는 것이 더 정확하다.

 

**IP는 호스트와 호스트 간의 통신에만 책임이 있는 것이다. 

TCP, UDP와는 다른 프로토콜임을 인지하자 -> 포트번호에 대해서 알면 더 쉽다.

 

 


 

우선 TCP부터 알아보자

 

OSI 참조 모델에서 전송 계층에서는 신뢰성이 높은 통신을 보증해야 한다.

**신뢰성이란 데이터 손실 없이 정확하게 전달하는 것을 의미한다.

위의 그림을 설명하자면 3단계로 나눌 수 있다.

1. 클라이언트는 초기 순서 번호를 선택한 SYN 세그먼트를 SYN 플래그를 1로 설정하여 전송한다.

2. 서버는 두 번째 세그먼트로 SYN, ACK 플래그 비트가 1인 SYN+ACK 세그먼트를 전송한다.

3. 클라이언트는 세 번째 세그먼트를 전송한다. ACK 세그먼트로 두 번째 세그먼트의 수신을 확인하는 것이다.

 

**이 3단계가 끝나면 연결되어있다고 판단하고 통신을 시작한다.

이렇게 서로 간에 연결이 되었음을 확인하고 통신을 시작한다.

 

**여기서 SYN Flooding이라는 공격이 발생할 수 있는데

송신지의 IP를 위장하여 여러 클라이언트가 서버에 세그먼트를 보내는 듯이 가장한다.

이러한 갑자기 막대한 서비스를 요구하게 되어 시스템을 망가뜨리는 것을 의도한다.

 

**그래서 TCP에서는 SYN 공격을 막기 위해 정해진 시간 동안 오는 연결의 수를 제한하거나

발신지 주소를 필터링하기도 하고 쿠키를 이용해서 연결이 설정되기 전까지는 자원 할당을 연기하는 기법을 쓴다.

-> 우리가 짧은 시간에 어떤 페이지에 많은 접속을 시도할 경우 Access Denied가 뜨는 원인 중의 하나다.

 

 

TCP에서, 세션계층(5계층) 이상의 프로토콜로부터 통신 데이터를 받아 패킷으로 분할한다.

해당 패킷을 네트워크 계층(3계층)으로 보내 해당 IP로 전달한다.

 

패킷은 원래의 데이터에서 분할한 것이기 떄문에 합칠 때도 순서에 맞게 합쳐야 한다.

즉, 패킷 송신순서대로 수신을 해야 정확한 통신이 된다.

 

하지만 IP만으로는 패킷을 순서대로 받을 수 없다.

네트워크의 혼잡도에 따라 수신 순서가 달라질 수 있을 터였다.

그래서 TCP는 통신의 신뢰성을 확보하기 위해 다양한 방법을 시도했다.

 

통신 데이터를 패킷으로 분할할 때 Sequence Number를 붙여서 보낸다.

수신은 받아서 정렬해서 사용하도록 하고

다 받았다면 ACK, Acknowledge(다 받았다는 신호)를 다시 보내어 수신했다는 것을 송신자에게 알린다.

 

3 - way handshake 라고도 한다.

 

TCP는 데이터의 전송과 순서를 보장하고

 

전송할 데이터가 큰 경우 TCP는 이를 Segment라는 단위로 나누어

TCP가 다룰 수 있는 Header를 Seg에 붙여서 Stream data를 버퍼에 저장하고

데이터를 나누어 송수신하는 방식이다.

수신한 쪽은 Seg를 다시 결합하여 Application 계층에 전달한다.

 

데이터가 작은 경우에는 TCP 버퍼에 모아서 시스템이 최적인 환경에서 송신하게 된다.

그렇기 때문에 어플리케이션이 송신을 지시해도 TCP 버퍼가 꽉차거나 시간이 지나기 전까지는

송신이 되지 않는다.

 

작은 데이터의 경우는 모아서 TCP 버퍼에서 모아서 보내기 때문에 

다시 말해서 수신 데이터는 송신된 때와 상태가 같지 않기 때문에

데이터를 전송하기 쉽게 결합해서 보내야하고 그대로 수신해야 한다.

따라서 수신하는 쪽의 어플리케이션에서는 결합한 데이터를 다시 나누어야 한다.

-> 큰 데이터를 결합해서 Application에서 받는 것과 차이가 있음.

 

또한 혼잡, Congestion 을 제어할 수 있다.

 


 

다음은 UDP에 대해 알아보자

 

OSI 4계층인 전송 계층에 위치하는 네트워크 프로토콜이다.

Connectionless 라고도 불리는데

이는 수신될 상대에게 통지하지 않고 그냥 보내고 받았는지도 확인하지 않는다.

하지만 프로토콜 자체가 TCP하고 다르게 가벼워서 통신속도가 빠르다는 장점이 있다.

**Flow Control, Error Control의 최소한으로 진행된다.

 

UDP는 3계층(네트워크)의 IP를 5계층(세션) 이상에서 직접 사용할 수 있게 하기 위한 역할을 한다.

즉, 상위 계층의 어플리케이션으로부터 받은 데이터를 패킷으로 분할하여 IP를 이용해서 송신한다.

**수신은 확인하지 않는다.(ACK 확인 X) 때문에 손실이 일어나기도 한다.

-> 프로세스에 대한 연결 메커니즘 제공하지 않는다.

다시 말해서 신뢰성이 없이 전달만 한다.

네트워크가 불안정하다면 온전하게 전달되지 못하는 상황도 발생한다.

 

신뢰성 면에서는 뒤떨어지지만 처리가 가벼워서

** 오버헤드가 최소한으로 하는 통신이라고 말할 수 있다.

주로 작은 크기나 시간적으로 연속적으로 일어나야하는 어플리케이션에서 활용된다.

예를들어 총 패킷 수가 적거나

LAN 같은 특정네트워크에 한정된 Application, 멀티캐스트나 브로드캐스트가 필요한 통신

또는 DNS,DHCP와 같이 작은크기나 음성 통화, 동영상과 같은 연속적인 어플리케이션에 쓰인다.

 

전달과 순서는 보장하지 않는다.

 

 

 

 


 

그래서 두 가지를 나누어 쓰는데.. 어떻게 쓰며 왜 쓸까?

위의 내용을 반복할 예정이다.

 

 

 

앞서 말한대로 패킷을 보내는데

TCP는 신뢰도가 높지만 속도가 조금 느리고

UDP는 신뢰도가 낮지만 속도가 빠르다는 것이 특징이다.

 

시간적인 성능을 요구할 때 UDP를 쓸 것이고

정확한 성능을 요구할 때 TCP를 쓸 것이다.

 

UDP는 위에서 설명했던 대로

동영상, 음성, DNS, DHCP와 같이 시간적 연속성을 요구하거나 정말 작은 크기의 패킷을 다룰 때 사용한다.

그 외에는

TCP를 사용한다.

속도가 충분히 빠르기 때문에 거의 나머지는 TCP를 사용하곤 한다.

728x90
반응형
그리드형