반응형

이전 포스팅에서 OSI 7 계층의 구성 요소와 특징에 대해 살펴봤습니다. 그렇다면 이번에는 이 구조를 통해 어떻게 통신이 이루어지는지 간단하게 살펴보겠습니다.

 

인터넷 통신 방법

클라이언트가 서버에 A라는 명령을 요청한다고 가정해 봅시다. 그렇다면 다음 그림과 같은 형태를 띨 것입니다.

 

 

 

이렇게 서버와 클라이언트를 이어주는 인터넷 망이 이와 같이 단순하다면 편하겠지만 안타깝게도 저희가 사는 세상은 훨씬 복잡한 인터넷 망 체계를 가지고 있습니다.

 

 

그렇다면 이와 같은 상태에서는 어떻게 데이터를 주고 받을 수 있을까요?

 

1. IP(Internet Protocol)

첫 번째는 전송하고자 하는 데이터에 IP 패킷을 추가해 전달하는 방법입니다. 출발지 IP와 목적지 IP 등 정보를 데이터에 붙여 전달하는 방식입니다.

데이터에 IP 패킷을 부착해 전송합니다.
출발지와 목적지 IP를 지정해 명령을 주고 받습니다.

 

 

이와 같은 방법으로 데이터를 주고 받을 수 있게 됐지만 다음과 같은 한계가 있습니다.

 

  1. 비연결성
    직접적으로 연결이 돼있지 않다보니 상대가 패킷을 받을 수 있는 상황인지 구분할 수 없습니다. 때문에 패킷을 받을 대상이 없거나, 서비스 불능 상태라고 하더라도 패킷을 전송하게 됩니다. 

  2. 비신뢰성
    중간에 패킷이 소실되거나, 보낸 패킷의 순서가 바뀌어 전송될 경우 처리에 문제가 발생할 수 있습니다. 또한 한 서버에 애플리케이션이 2개가 동작하고 있다고 가정했을 때, 이를 구분할 방법이 없습니다.

 

2. TCP(Transmission Control Portocol)

IP의 한계를 극복하기 위해 트렌스포트(전송) 계층의 TCP를 사용하게 됐습니다. 우선 TCP/IP의 계층 구조는 다음과 같습니다.

 

TCP/IP와 OSI 모델을 비교한 것. 프로토콜은 더 다양하게 존재하지만 나중에 알아보겠다.

 

 

TCP/IP 모델은 다음과 같이 데이터를 전송하게 됩니다.

 

 

 

TCP의 특징은 다음과 같습니다.

 

2-1. TCP 3-way handshake

TCP는 데이터 전송을 시작하기 전 다음 과정을 통해 두 시스템이 연결이 잘 됐는지 확인하는 작업을 진행합니다.

 

조금 쉽게 설명하자면 다음과 같이 설명할 수 있을 것 같습니다.

  1. SYN 전송: 아 혹시 지금 연결 가능할까요?(SYN)
    - 클라이언트가 서버에 연결을 요청하는 패킷을 보냅니다.
  2. SYN + ACK  전송: 네 요청(SYN) 잘 받았구요. 지금 연결 가능합니다(ACK).
    - 서버가 요청을 잘 받았고, 연결 요청을 수락한다는 신호를 함께 보냅니다.
  3. ACK 전송: 연결됐습니다. 감사합니다.(ACK)
    - 클라이언트가 서버의 응답을 받고, 연결이 잘 이루어졌다고 알려줍니다.

 

이 과정을 통해 연결 상태를 확인하고, 데이터를 주고받으며 전달이 잘 되었는지 확인하게 됩니다. 이를 통해 전달받은 데이터가 신뢰성을 갖게 됩니다.

 

2-2 TCP 순서 보장

데이터가 전달되는 과정에서 여러 패킷으로 쪼개 전달하게 됩니다. 이 때 패킷에 순서가 부여됨으로 전송 중 순서가 뒤바뀌더라도 걱정할 필요가 없습니다.

 

 

3. UDP(User Datagram Protocol)

UDP는 TCP는 달리 신뢰성을 보장할만한 기능들이 전혀 없습니다. 데이터 전송은 신뢰성이 바탕이 돼야 하는 것이 핵심입니다. 때문에 UDP는 제한적인 용도로 사용됩니다.

 

음성 데이터나 실시간 스트리밍과 같이 시간에 민감한 프로토콜이나 애플리케이션을 사용하는 경우, 사내 방송아니 증권 시세 데이터 전송에 사용되는 멀티캐스트처럼 단방향으로 다수의 단말과 통신해 응답을 받기 어려운 환경에서 주로 사용됩니다.

 

이와 같은 경우 데이터 신뢰도 보다는 신속성에 민감한 경우입니다. 실시간 스트리밍을 예시로 들면 영상은 초당 30~120회의 정지된 사진이 빠르게 바뀌며 움직이는 듯한 영상처럼 보이는 원리를 이용합니다. 이때에는 패킷이 1~2개 소실된다고 하더라도 우리가 시청하는 데는 큰 영향이 없습니다.

 

하지만 이 수많은 패킷을 하나하나 확인하고 다듬게 되면 버퍼링이 걸리거나 멈칫 거리는 증상이 생길 것입니다. 사람들이 서비스를 평가할 때는 패킷이 1~2개 소실되는 것보다 버퍼링 걸리는 것을 더 안좋은 시선으로 보기 때문에 UDP를 사용하고 있습니다.

반응형