본문 바로가기
Computer Science/Network

TCP 프로토콜 & UDP 프로토콜 (TCP Protocol & UDP Protocol)

by weero 2020. 8. 15.

1. TCP/IP 4 계층

TCP/IP란 인터넷 프로토콜 스위트(IP Suite, 인터넷과 관련된 프로토콜 T집합)를 의미하며, OSI 7 계층을 4 계층으로 단순화한 모델이다.

 

* 계층화하는 이유?

계층별로 담당하는 역할을 나눠 계층에 존재하는 각 프로토콜의 독립성을 보장해 각자의 기능만을 충실히 하도록 하기 위함이다. 문제가 발생했을 때에도 해당 계층을 파악하면 해결이 더욱 쉬워진다.

 

 

2. TCP 프로토콜      vs. UDP 프로토콜

전송 제어 프로토콜(Transmission Control Protocol)은 인터넷 프로토콜 스위트(IP Suite)의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP라는 명칭으로 널리 불린다.

  • TCP 프로토콜은 연결 지향 프로토콜이다.
  • TCP 프로토콜에서는 데이터 송수신을 위해 클라이언트와 서버의 소켓이 연결되어 있어야 하며, 데이터가 유실되면 데이터 재전송을 요청함으로써 신뢰성을 보장한다.
  • 신뢰성 있는 데이터 전송이 가능하다는 장점으로 인해, HTTP, FTP, TELNET 등 대부분의 응용 계층 프로토콜의 전송 계층 프로토콜로 사용된다.

2-1. TCP 연결/해제

TCP 프로토콜은 정확한 전송을 보장한다.

따라서 클라이언트와 통신을 하기 전에 3 way handshake(3번의 악수)를 통해 연결을 맺고,

연결을 종료할 때는 4 way handshake를 통해 연결을 끊는다.

 

3 way handshake (연결 성립)

0. 클라이언트 : Closed 상태, 서버 : LISTEN 상태

1. 클라이언트가 서버에게 연결을 요청하는 SYN 패킷을 보낸다. (sequence : x)

2. 서버가 SYN(X)를 받고, 클라이언트로 받았다는 신호인 ACK와 클라이언트 쪽도 포트를 열어달라는 SYN 패킷을 보낸다. (sequence : y, ACK: x+1)

  • 서버 : LISTEN 상태 → SYN_RCV 상태 (요청 후 상대방의 응답을 기다림)

3. 클라이언트는 서버의 응답인 ACK(X+1)과 SYN(Y)를 패킷을 받고, 응답인 ACK(Y+1)를 서버로 보낸다.

  • 클라이언트 : ESTABLISHED
  • ACK 패킷을 받은 서버 : ESTABLISHED → 연결 성립!

4 way handshake (연결 종료)

0. 양 쪽 : ESTABLISHED

1. 클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보낸다.

  • 클라이언트 : FIN_WAIT1 (상태 종료 요청 후 ACK를 기다림)

2. 서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보낸다.

  • 서버 : CLOSE_WAIT (자원 정리에 시간이 소요되므로 소켓을 닫는데 기다림)
  • 클라이언트 : FIN_WAIT2 (연결 종료 요청 상태, 서버로부터 응답을 기다림)

3. 데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보낸다.

  • 서버 : LAST_ACK (클라이언트로부터 마지막 ACK를 기다림)

4. 클라이언트는 FIN을 받으면 TIME_WAIT 상태로 바꾸면서, 확인했다는 ACK를 서버에게 보낸다.

  • 서버는 ACK를 받은 이후 소켓을 닫는다. (Closed)
  • TIME_WAIT 시간이 끝나면 클라이언트도 소켓을 닫는다. (Closed)

2-2. TCP 프로토콜 혼잡 제어/흐름 제어

1) 혼잡 제어 (Congestion Control)

  • 호스트와 네트워크 상의 데이터 처리를 효율적으로 하기 위한 기법이다.
  • 송신 측의 데이터 전달과 네트워크의 처리 속도 차이를 해결하기 위한 기법이다.

송신 측의 데이터는 지역 망이나 인터넷으로 연결된 대형 네트워크를 해결하기 위한 기법이다.

하지만 이러한 네트워크 상의 라우터가 항상 한가로운 상황은 아니다.

만약, 한 라우터에 데이터가 몰릴 경우, 다시 말해 혼잡할 경우 라우터는 자신에게 온 데이터를 모두 처리할 수 없다.

그렇게 되면 호스트들은 또다시 재전송을 하게 되고 결국 혼잡을 가중시켜 오버플로우나 데이터 손실을 발생시킨다.

따라서, 이러한 네트워크의 혼잡을 피하기 위해 송신 측에서 보내는 데이터의 전송 속도를 강제로 줄이게 된다.

 

1-1) Slow Start

윈도우 크기를 2배로 늘린다.

그러다 혼잡현상이 발생하면 창 크기를 1로 떨어뜨린다.

그 후 혼잡 현상이 발생했던 창 크기의 절반까지는 이전처럼 지수 함수 꼴로(2배) 창 크기를 증가시키고 그 이후부터는 완만하게 1씩 증가시킨다.

 

1-2) Fast Recovery

혼잡한 상태가 되면 창 크기를 1로 줄이지 않고 반으로 줄이고 선형 증가시키는 방식이다.

 

2) 흐름 제어 (Flow Control)

  • 호스트와 호스트 간의 데이터 처리를 효율적으로 하기 위한 기법이다. End to End
  • 송신 측과 수신 측의 데이터 처리 속도 차이를 해결하기 위한 기법이다.

수신 측이 송신 측보다 속도가 빠른 것은 문제가 되지 않는다.

하지만 송신 측이 수신 측보다 속도가 빠르면 문제가 발생한다.  수신 측에서 제한된 저장용량(큐)을 초과해 이후에 도착하는 데이터의 손실을 가져올 수 있다.

이런 위험을 줄이기 위해 강제로 송신 측의 데이터 전송을 줄인다.

 

2-1) Stop and wait 방식

   매번 전송한 패킷에 대해 확인 응답을 받아야만 다음 패킷을 전송한다.

 

2-2) 슬라이딩 윈도우 기법

   수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여 데이터의 흐름을 동적으로 조절하여 제어하는 기법이다

   이처럼 슬라이딩 윈도우 기법을 통하여 송신 버퍼의 범위는 수신 측의 여유 버퍼 공간을 반영하여 동적으로 바뀜으로써 흐름 제어를 수행한다.

 

 

 

3. UDP 프로토콜

  • UDP 프로토콜은 비연결 지향 프로토콜이다.
  • 전송한 데이터가 잘 전달되었는지 확인하지 않고 단지 데이터만 보낸다는 점이 TCP 프로토콜과의 차이점이다. (비신뢰성)
    • 신뢰성이 아예 없는 것은 아님 (헤더에 checksum)
  • 속도가 빠르다는 장점이 있다.
  • 음악이나 동영상 스트리밍(streaming)과 같은 서비스에 적합하다.