TCP / IP

오성범·2022년 10월 2일
0
post-thumbnail

패킷 통신


'패킷 교환 (Packet Switching)' 방식은 미리 이동 경로를 정하지 않고, 데이터를 패킷(Packet) 이라는 작은 단위로 나누어 다중 노드로 구성된 네트워크를 통해 전송하는 개념이다. 전송될 데이터는 네트워크를 통해 전송되기 전에 패킷으로 쪼개어지고, 각 패킷에는 고유 번호가 지정되어 있어서 네트워크를 거쳐 수신지에 도착했을 때에 번호 순서대로 결합되어 원래 데이터로 완성되는 방식이다.

각 패킷은 전송 당시 가장 효율적인 경로를 설정하여 최종 목적지까지 이동하게 된다. 회선 교환 방식과 다르게 그때 그때 상황에 따라 매번 다른 경로로 갈 수 있도록 하여 효율성을 강조했다.

매번 다른 최적의 경로로 이동할 수 있도록
패킷을 수신한 중간 노드가 패킷의 최종 목적지 (수신지)를 확인하고, 목적지까지 가는 다양한 경로 중 딱 그 상황에서 가장 최적이라고 판단되는 경로를 따라 패킷을 이동시키는 '라우팅' 을 해줘야 한다. 이러한 라우팅을 수행하는 중간 노드를 '라우터' 이다.

TCP/IP

오늘날 인터넷 통신의 대부분은 패킷통신을 기본으로 하고 있다. TCP/IP는 패킷 통신을 위한 인터넷의 규약(프로토콜)이다.
TCP 프로토콜은 신뢰성 있고 무결성을 보장하는 연결을 통해 데이터를 안전하게 전달해주는 전송 프로토콜이고, IP 프로토콜은 패킷들을 가장 효율적인 방법으로 최종 목적지로 전송하기 위해 필요한 프로토콜이다.

패킷 교환 방식을 위해서는 네트워크가 사용하는 프로토콜에 의거하여 데이터를 나누어지는 과정(캡슐화) 이 필요한데, 이 때 TCP/IP가 제시하는 방식으로 데이터를 캡슐화를 한다.

-IP : node와 node간의 데이터 패킷을 전송하기 위해서는 각 node에 주소를 필요로 한다. IP는 4바이트로 이루어진 주소번호를 사용하여서 각각의 node를 구분하고, 목적지를 찾아가게 된다.
이를 IP Address라고 한다.

-TCP : 서버와 클라이언트간에 데이터를 신뢰성있게 전달하기 위해 만들어진 프로콜이다. 데이터는 네트워크 선로(session)를 통해 전달되는 과정에서 **손실되거나 순서가 뒤바뀌어서 전달될 수 있는데, TCP는 손실을 찾아내고, 이를 교정하며 순서를 재조합 할 수 있도록 해준다.

TCP / UDP

AaTransmissiion Control Protocol (TCP)User Datagram Protocol (UDP)
서비스 타입연결 지향적 프로토콜데이터그램 지향적 프로토콜
신뢰성데이터 전송 표적 기기까지의 전송을 보장한다.표적 기기까지의 전송이 보장되지 않는다.
순서 보장전송하는 패킷들이 순서가 보장된다.패키순서가 보장이 안된다. 패킷 순서를 보장하고 싶다면, 애플리케이션 레이어에서 관리되어야 한다.
속도UDP와 비교해 느리다TCP와 비교해 빠르고, 단순하며 더 효율적인 속도를 가지고 있다.
  • TCP는 연결 지향적이며, 자체적으로 오류를 처리하며, 네트워크 전송 중 순서가 뒤바뀐 메세지를 교정시켜주는 기능을 가지고 있다.
    연결 지향이라는 말은 데이터를 전송하는 측과 데이터를 전송받는 측에서 별도의 데이터 전송 선로를 만든다는 의미이다.

  • UDP : 비연결지향이며, TCP와 달리 오류를 처리하거나 순서를 재조합시켜주는 기능을 가지고 있지 않다. 단순히 데이터를 전송하고 받는 프로토콜이다.

가상의 회선을 설정하여 신뢰성을 보장하는 TCP가 UDP보다 늘 우수할까?

이 질문에 답은 No이다.

TCP는 실시간 멀티미디어 정보를 처리하는 곳에 사용할 경우 오류정정을 하는 특성으로 메세지가 도착하지 않을 경우 재전송을 요구하는 특성으로 적절하지 않는다.
반면 UDP를 사용하면 패킷이 손실이 되더라도 이를 무시하고 다음 패킷을 받아들이므로 실시간 멀티미디어에 더욱 적절하다.

예를 들어, 카카오톡으로 보이스 톡을 하고 있는데 조금씩 지연시간이 발생하면서 싱크가 맞지 않는다.

아래와 같은 이유로 많은 애플리케이션 개발자들이 UDP를 사용합니다.

  • 애플리케이션의 정교한 제어가 가능하다 : TCP의 경우 receiver가 전송 받을 준비가 될 때까지 세그먼트를 반복적으로 재전송한다. 실시간 전송에 대한 요구가 큰 애플리케이션 들은 높은 letency(지연시간)를 지양하므로 조금의 데이터 손실을 감수한다. 대신 개발자 스스로가 이를 보완하기 위해 애플리케이션에 추가 가능을 구현할 수 있다.

-연결설정에 무관하다 : TCP 3-Way handshake가 없는 UDP는 예비과정 없이 바로 전송을 시작한다. 설정단계에서 발생하는 지연이 없는 만큼, 반응속도가 빠르며 TCP가 신뢰성을 위해 많은 파라미터와 정보 전달이 필요함과 비교해 UDp는 연결설정 관리를 하지 않기 때문에 어떠한 파라미터도 기록하지 않는다.

TCP/IP 4계층


TCP/IP 계층은 크게 4개로 나누어져 있고 각각의 계층마다 하는 역할이 다르고 여러 프로토콜이 존재한다.
TCP가 속해있는 Transport Layer(전송 계층) 은 두 호스트 간에 연결을 맺고 최종적인 통신 목적지까지 데이터를 전달하는 기능을 한다.
TCP에서 연결지향적인 특성을 갖도록 해주는 것이 바로 3 Way-Handshake방식 덕분이다.

TCP 3-Way Handshake

[Step 1]

A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 클라이언트는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.

[Step 2]

이때 서버는 Listen 상태로포트 서비스가 가능한 상태여야 한다.
B서버는 SYN 요청을 받고 A클라이언트에게 요청을 수락한다는 ACK와 SYN flag가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECIEVED 상태가 된다.

[Step 3]

A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 된다. 이때 B서버 상태가 ESTABLISHED이다.

이렇게 연결이 이루어지면 모든 정식데이터는 연결된 통신선로를 통해서 교환되게 되며, 이러한 이유로 TCP를 연결 지향 프로토콜이라고 부른다.
UDP는 이러한 과정이 없이 단순히 데이터만을 전송함으로 데이터 그램 프로토콜이라고 부른다.

profile
backend

0개의 댓글