[5주차] TCP/IP(흐름제어, 혼잡제어, 3way handshake, 4way handshake) , TCP vs UDP
TCP/IP
- 인터넷 프로토콜 슈트(Internet Protocol Suite)의 핵심 프로토콜로서, 패킷 통신 방식의 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP로 이루어져 있다. (프로토콜: 데이터 통신을 원할하게 하기 위한 통신 규약)
- IP는 OSI 7계층에서 3계층(Network Layer)에 해당하며, 한 Endpoint가 다른 Endpoint로 가고자 하는 경우 경로와 목적지를 찾아주는 역할을 한다. (이를 Routing이라 한다.)
- IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다.
- TCP는 OSI 7계층에서 4계층(Transport Layer)에 해당하며, 송신자와 수신자의 논리적 연결을 담당하며 신뢰성있는 연결을 유지할 수 있도록 도와준다. 즉 Endpoint(사용자) 간의 연결을 생성하고 데이터를 얼마나 보냈는지 얼마나 받았는지, 제대로 받았는지 등을 확인한다.
- TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다.
- TCP/IP를 사용하겠다는 것은 IP 주소 체계를 따르고 IP Routing을 이용해 목적지에 도달하며, TCP의 특성을 활용해 송신자와 수신자의 논리적 연결을 생성하고 신뢰성을 유지할 수 있게 하겠다는 것을 의미한다.
흐름제어 (Flow Control)
- 흐름제어는 데이터를 전송할 때, 송신측과 수신측 사이의 데이터 흐름을 조절하는 기능이다.
- TCP 프로토콜에서 사용되며, 수신측에서 받을 수 있는 데이터 양을 송신측에 알리고, 송신측은 그에 맞춰 데이터를 전송한다.
- 수신 측이 송신 측보다 데이터 처리 속도가 빠르면 문제가 없지만, 송신 측의 속도가 더 빠를 경우 문제가 생긴다. 수신 측에서 제한된 저장 용량을 초과한 이후에 도착하는 패킷은 손실될 위험이 있으며, 손실된다면 불필요한 추가 패킷 전송이 발생하게 된다.
- 이를 통해 수신측의 버퍼 오버플로우를 방지하고, 데이터 손실을 최소화할 수 있다.
- 즉, 송신측과 수신측 사이의 패킷 수를 제어하는 기능이라 볼 수 있다.
- Stop and Wait (정지-대기): 매번 전송한 패킷에 대해 확인 응답(ACK)을 받으면 다음 패킷을 전송하는 방법이다. 그러나 패킷을 하나씩 보내기 때문에 비효율적이다.
- Sliding Window (슬라이딩 윈도우): 수신측에서 자신이 받을 수 있는 최대 데이터 양을 알리기 위해 설정한 윈도우(window) 크기 만큼 세그먼트에 포함시켜 송신측에 전송하고, 송신측은 이를 받아 자신이 전송할 수 있는 데이터 양을 결정한다. 윈도우 크기는 수신측에서 송신측으로 확인 응답을 보낼 때 TCP 헤더(window size)에 담아서 보낸다.
혼잡제어 (Congestion Control)
- 데이터 전송 속도가 너무 빨라져서 발생할 수 있는 혼잡을 방지하기 위해 사용되는 기능이다.
- TCP 프로토콜에서 사용되며, 송신측과 네트워크 사이의 혼잡을 감지하여 전송 속도를 조절한다.
- TCP는 데이터 전송 시, 일정 크기의 세그먼트 단위로 나누어 전송하고, 혼잡제어는 세그먼트의 전송 속도를 조절하여 네트워크 내의 혼잡을 방지한다.
- 즉, 네트워크 내의 패킷 수를 조절하여 네트워크의 오버플로우를 방지하는 기능이다.
- AIMD (Additive Increase/Multicave Decrease)
- Slow Start (느린 시작)
- Fast Retransmit (빠른 재전송)
- Fast Recovery (빠른 회복)
3-way handshake
- TCP로 이루어지는 모든 통신은 반드시 3-way handshake를 통해 시작한다.
- TCP를 사용하는 송신자와 수신자는 데이터를 전송하기 전 서로 통신이 가능한지 의사를 묻고 한번에 얼마나 받을 수 있는지 등의 정보를 먼저 확인한다.
- 양쪽 모두 데이터를 주고받을 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한 쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.
- 양쪽 모두 상대편에 대한 초기 순차일련번호를 얻을 수 있도록 한다.
3-way handshake는 TCP 프로토콜을 사용하여 컴퓨터간에 연결을 설정하는 과정입니다. 이 과정은 TCP/IP 프로토콜에서 가장 기본적인 연결 설정 방식으로, 다음과 같은 세 단계로 이루어집니다.
- SYN (Synchronize): 클라이언트가 서버에게 연결을 요청하는 메시지를 보내며, 이때 SYN 플래그를 설정합니다. 이를 통해 클라이언트는 서버에게 연결을 요청하고, 서버는 클라이언트의 요청을 받았음을 확인합니다.
- SYN-ACK (Synchronize-Acknowledge): 서버가 클라이언트의 요청을 받은 후, 연결을 수락할 준비가 되었음을 알리는 메시지를 보냅니다. 이때 SYN과 ACK 플래그를 모두 설정하여, 클라이언트가 연결을 수락하는 것을 확인합니다.
- ACK (Acknowledge): 클라이언트는 서버의 응답 메시지를 받은 후, 연결을 수락했음을 알리는 메시지를 보냅니다. 이때 ACK 플래그를 설정하여, 서버가 클라이언트의 연결 요청에 응답하였음을 확인합니다.
이러한 3-way handshake 과정을 거치면, 클라이언트와 서버는 안정적인 연결을 설정하고 데이터 전송을 시작할 수 있게 됩니다. 이 과정에서 플래그를 통해 연결 설정과 응답에 대한 정보를 주고받으며, TCP는 이러한 정보를 기반으로 안정적이고 신뢰성 높은 데이터 전송을 보장합니다.
4-way handshake
- 3-way handshake는 TCP의 연결을 초기화할 때 사용한다면, 4-way handshake는 세션을 종료하기 위해 연결을 해제하는 과정이다.
- 여기서는 세션을 종료시킬 때 사용되는 FIN 플래그를 사용한다.
4-way handshake는 TCP 프로토콜을 사용하여 컴퓨터 간에 연결을 종료하는 과정입니다. 이 과정은 TCP/IP 프로토콜에서 기본적인 연결 종료 방식으로, 다음과 같은 네 단계로 이루어집니다.
- FIN (Finish): 클라이언트가 서버에게 연결을 종료하겠다는 메시지를 보냅니다. 이때 FIN 플래그를 설정하여, 클라이언트가 연결을 종료하겠다는 것을 알립니다.
- ACK (Acknowledge): 서버는 클라이언트의 연결 종료 요청을 받은 후, 해당 요청을 수락했음을 알리는 메시지를 보냅니다. 이때 ACK 플래그를 설정하여, 클라이언트가 보낸 FIN 메시지를 수신했다는 것을 알립니다.
- FIN (Finish): 서버는 클라이언트에게 연결을 종료하겠다는 메시지를 보냅니다. 이때 FIN 플래그를 설정하여, 서버가 연결을 종료하겠다는 것을 알립니다.
- ACK (Acknowledge): 클라이언트는 서버의 연결 종료 요청을 받은 후, 해당 요청을 수락했음을 알리는 메시지를 보냅니다. 이때 ACK 플래그를 설정하여, 서버가 보낸 FIN 메시지를 수신했다는 것을 알립니다.
이러한 4-way handshake 과정을 거치면, 클라이언트와 서버는 안전하게 연결을 종료할 수 있습니다. 이 과정에서 클라이언트와 서버는 서로에게 연결 종료에 대한 정보를 주고받으며, TCP는 이러한 정보를 기반으로 안정적인 연결 종료를 보장합니다.
TCP (Transmission Control Protocol)
- 인터넷 상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
- TCP는 연결지향적인 프로토콜로서 신뢰성 있는 데이터 전송을 위해 설계되었다.
- TCP는 3-way handshake을 통해 안정적인 연결을 설정하며, 데이터 전송 중에도 오류를 검출하고 복구한다. 이를 위해 패킷의 순서를 관리하고 재전송과 흐름제어를 수행하여 안정적이고 신뢰성 높은 프로토콜의 역할을 수행한다.
- 주로 웹, 이메일, 파일 전송 등의 애플리케이션에서 사용된다.
UDP (User Datagram Protocol)
- 비연결형 프로토콜로서 데이터 전송 중에 오류를 검출하거나 복구하지 않는다.
- 할당되는 논리적인 경로가 없고 각각의 패킷이 다른 경로로 전송되며 이 각각의 패킷은 독립적인 경로를 지니게 되는데, 이렇게 데이터를 서로 다른 경로로 독립 처리하는 프로토콜을 의미한다.
- 서로 다른 경로로 독립적으로 처리함에도 패킷에 순서를 부여하여 재조립하거나 흐름제어, 혼잡제어를 수행하지 않아 속도가 빠르며 네트워크 부하가 적다는 장점이 있지만 데이터 전송의 신뢰성이 낮다.
- 주로 연속성이 중요한 실시간 애플리케이션(동영상 스트리밍, 온라인 게임 등)에 활용하기 좋다.
TCP vs UDP
TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)는 둘 다 인터넷 프로토콜 스위트(IP Suite)의 일부로서, 데이터를 전송하는 데 사용되는 프로토콜입니다. 둘의 차이점은 다음과 같습니다.
- 연결 지향성 TCP는 연결 지향적인 프로토콜로서, 3-way handshake를 통해 안정적인 연결을 설정하며 데이터 전송 중에도 오류를 검출하고 복구합니다. 반면, UDP는 비연결성 프로토콜로서, 연결 설정이 필요 없으며, 오류 검출 및 복구 기능이 없습니다.
- 신뢰성 TCP는 데이터 전송 중에 오류를 검출하고, 복구하기 위한 기능이 있기 때문에, 데이터 전송의 신뢰성이 높습니다. UDP는 데이터 전송에 대한 검사와 복구 기능이 없기 때문에, 신뢰성이 낮습니다.
- 흐름 제어와 혼잡 제어 TCP는 흐름 제어와 혼잡 제어를 통해 데이터 전송의 효율성을 높이기 위한 기능이 있습니다. 반면, UDP는 이러한 기능이 없기 때문에, 네트워크 혼잡이 발생할 경우 데이터 손실이 발생할 수 있습니다.
- 전송 속도 UDP는 TCP보다 빠른 전송 속도를 가지고 있습니다. 이는 TCP가 흐름 제어와 혼잡 제어 등의 기능 때문에 전송 속도가 느릴 수 있다는 것을 의미합니다.
따라서, TCP와 UDP는 각각의 장단점이 있으며, 사용되는 애플리케이션의 특성에 따라 선택적으로 사용됩니다. TCP는 웹, 이메일, 파일 전송 등의 애플리케이션에서 사용되며, UDP는 실시간 애플리케이션 (예: 동영상 스트리밍, 온라인 게임 등)에서 자주 사용됩니다.
1. TCP와 UDP의 차이점 서술
TCP는 연결 지향적이고 신뢰성이 높으며, 에러 검출과 재전송 기능을 제공합니다. UDP는 비연결성이며, 빠른 전송 속도와 작은 패킷 오버헤드를 가지지만, 신뢰성 있는 데이터 전송을 보장하지 않습니다.
1. 연결 지향성 vs 비연결성
- TCP는 연결 지향적인 프로토콜로, 3-way handshake를 통해 연결을 설정한 후 데이터를 전송합니다. 연결 설정 과정에서 에러 체크와 혼잡 제어 등 다양한 기능이 수행되며, 신뢰성 있는 데이터 전송을 보장합니다.
- UDP는 비연결성 프로토콜로, 연결 설정 과정 없이 데이터를 전송합니다. 이로 인해 빠른 전송 속도와 작은 패킷 오버헤드를 가지지만, 신뢰성 있는 데이터 전송은 보장하지 않습니다.
2. 신뢰성
- TCP는 데이터 전송의 신뢰성을 보장하기 위해 에러 검출 및 재전송 기능을 수행합니다. 이로 인해 전송 속도가 느릴 수 있지만, 데이터 손실을 최소화할 수 있습니다.
- UDP는 신뢰성 검사나 재전송 기능을 제공하지 않으므로, 데이터 손실이나 중복 전송 등의 문제가 발생할 수 있습니다.
3. 패킷 크기 제한
- TCP는 패킷의 크기가 제한되어 있지 않으며, 큰 파일이나 데이터를 전송할 때 적합합니다.
- UDP는 패킷의 크기가 제한되어 있으며, 작은 데이터를 빠르게 전송할 때 적합합니다.
4. 속도
- TCP는 연결 설정과정과 에러 체크 등 다양한 기능을 수행하기 때문에, UDP보다 느린 속도를 보입니다.
- UDP는 데이터 전송에 필요한 최소한의 오버헤드만 가지고 있기 때문에, TCP보다 빠른 속도를 보입니다.
5. 용도
- TCP는 데이터 신뢰성이 중요한 애플리케이션에 적합합니다. 예를 들어, 파일 전송, 이메일, 웹 브라우저 등이 이에 해당합니다.
- UDP는 실시간성이 중요한 애플리케이션에 적합합니다. 예를 들어, 스트리밍 서비스, 온라인 게임 등이 이에 해당합니다.
이러한 차이점으로 인해, TCP와 UDP는 각각의 용도와 상황에 맞게 선택하여 사용해야 합니다.
2. IP 주소와 포트번호의 차이점
IP 주소는 네트워크 상에서 컴퓨터를 식별하는 데 사용되는 숫자로, 고유한 주소를 가집니다.
포트 번호는 컴퓨터 내에서 프로세스를 구분하는 데 사용되는 숫자로, 0부터 65535까지의 범위를 가지며, 특정 프로세스에 할당됩니다.