TCP/IP 설명 - TCP/IP seolmyeong

TCP

TCP는 Transmission Control Protocol의 약어로서 인터넷상의 데이터를 주고받는 과정을 제어하는 통신 표준을 의미합니다. 이 프로토콜은 데이터를 교환하는 기기 간 데이터의 무결성(정확성)과 전달의 신뢰성을 보장하기 때문에 거의 모든 애플리케이션 수준의 프로토콜(FTP, SSH, HTTP 등)에서 사용하고 있습니다.

IP

Internet Protocol이라고 하며 인터넷을 통해 데이터를 전송하기 위해 지켜야 하는 규칙입니다. 이 프로토콜은 183.101.195.193과 같은 IP 주소를 통해 데이터를 전달할 위치를 파악합니다. 쉽게 생각해 우리가 편지를 부칠 때 주소를 적어야 하는 것처럼, 컴퓨터에서 데이터를 전송할 때 전송할 목적지가 필요한데 그 역할을 해주는 매개체가 바로 IP 주소인 셈입니다.

데이터를 전송할 때는 하나의 완전한 데이터를 바로 보내지 않고 분할 작업을 거치게 되는데, 이때 분할되어 작아진 데이터 단위를 패킷(Packet)이라고 합니다. 여기서 데이터를 왜 패킷 단위로 나누어야 할까요? 그것은 전송 과정이 실패했을 때 처음부터 다시 데이터를 보내는 건 소모적이고 데이터가 완전히 전송될 때까지 다른 데이터가 대기해야 할 수도 있기 때문입니다. 이러한 이유로 패킷은 송신 측에서 분할 전송 후에 수신 측에서 완전한 데이터로 재결합하여 사용합니다.

참고 - What is a packet?

TCP vs IP

TCP와 IP는 각기 다른 목적을 가진 프로토콜이지만 인터넷 통신을 위해서는 대부분 두 프로토콜을 함께 사용하기 때문에 흔히 TCP/IP라고 부릅니다. 즉, TCP는 IP에 대한 대체가 아니라 보완을 목적으로 두는 프로토콜입니다. 만약 IP를 통해서만 데이터를 주고받는다면 원치 않는 이슈를 맞닥뜨릴 수 있습니다.

  • 비연결성 - 패킷을 받을 대상을 확인하지 않고 패킷을 전달
  • 비신뢰성 - 패킷이 유실되거나 잘못된 순서로 전달
  • IP 주소의 한계 - 동일 IP 내에서 구동 중인 프로그램이 두 개 이상일 때 패킷의 목적지 구분 불가

TCP는 위와 같은 문제를 사전에 방지하고자 3 Way-Handshake나 PORT와 같은 메커니즘을 주요한 특징으로 삼고 있습니다. 그리고 우리는 이러한 메커니즘을 잘 알아야 TCP가 어떻게 IP를 보완하는지 알 수 있으므로 두 메커니즘의 특징을 좀 더 살펴보도록 하겠습니다.

3 Way-Handshake

데이터를 보내는 기기와 데이터를 받는 기기 간에 데이터 교환이 이루어지기 전에, 기본적으로 두 기기는 서로 동기화되어야 합니다. 따라서 TCP는 송, 수신 측에서 데이터를 주고받기 전에 논리적인 접속을 확립합니다. 이러한 접속을 커넥션이라고 하며, 이는 양측 모두 데이터를 전송할 준비가 되었다는 것을 보장합니다.

커넥션을 확립하기 위해서는 우선 동기화 목적의 패킷을 교환해야 하는데, 해당 패킷이 담고 있는 정보 중에 비교적 중요한 정보는 다음과 같습니다.

  • SYN(synchronize sequence numbers; 일련번호를 일치시키다)
  • ACK(acknowledgement; 응답을 확인하다)

두 개의 정보는 비트로 이루어져 있으며 TCP 세그먼트 헤더에서 관리 됩니다. 이 정보들은 패킷을 전달하는 과정에서 flag 역할을 하고 TCP는 이러한 정보들을 바탕으로 ‘3 Way’라는 이름 그대로 3번의 통신을 거쳐 데이터 전송을 위한 사전 작업을 진행합니다.

ISN(Initial Sequence Number), ACK NO(Acknowledgement Number), SEQ NO(Sequence Number)는 TCP를 통해 전송되는 다른 데이터와의 충돌을 방지하기 위한 일종의 구분자로 생각하시면 됩니다.

  1. Client → Server: SYN = 1, ACK = 0과 함께 ISN을 무작위로 설정하여 Server로 전달
  2. Server → Client: ACK NO에 클라이언트 ISN + 1을 할당하고 SYN = 1, ACK = 1과 함께 새로운 ISN을 무작위로 설정하여 Client로 전달
  3. Client → Server: SEQ NO에 서버 ACK NO 할당, ACK NO에 서버 ISN + 1을 할당 후 SYN = 0, ACK = 1과 함께 Server로 전달

이러한 과정을 모두 마치게 되면 커넥션이 확립되고 두 컴퓨터는 인증된 SEQ NO와 ACK NO를 통해 데이터를 전송할 수 있습니다. 이제 TCP의 커넥션을 통해 패킷이 유실되거나 잘못된 순서로 전달되어도 패킷 재전송, 재구성이 가능하기에 컴퓨터 간 더욱 안정적으로 데이터를 교환하게 되는 것입니다.

PORT

Port라는 단어를 직역하자면 ‘항구’라고 합니다. 말 그대로 데이터가 실제로 도달해야 하는 어느 지점을 의미하는 것인데요, IP 주소를 통해 컴퓨터의 위치를 파악했다면 그 컴퓨터에서 구동되고 있는 애플리케이션의 주소를 파악하는 것은 포트의 역할이라고 할 수 있습니다. 예컨대 HTTP는 80번, HTTPS는 443번, SMTP는 25번으로 송신 측에서 전달된 데이터의 최종 행방은 이러한 포트 번호와 일치하는 애플리케이션이 됩니다. 그리고 Port 또한 위에서 언급한 TCP 세그먼트 헤더에서 관리됩니다.

TCP/IP Model

TCP/IP Model은 OSI 7 Layers Model을 참고하여 구축된 모델입니다. 이 글에서는 OSI 7 Layers Model은 깊게 다루진 않을 것입니다. 다만 이해를 돕기 위해 Layer Model에 대해 간략히 설명하자면, ‘네트워크상에서 정보 교환을 위한 여러 과정을 모듈화하여 계층으로 나눈 구조’라고 얘기할 수 있겠습니다. 그렇기에 각 계층은 서로 독립적인 동시에 상호 유기적인 성격을 띱니다. (OSI 7 Layers Model에 대해 좀 더 자세히 알고 싶다면 이 영상을 보시는 것을 추천드립니다. 😊)

현재 사용되고있는 TCP/IP Model은 기존 TCP/IP Model과 약간은 다릅니다. 기존 모델은 계층을 4개로 나누는 반면, 현재의 모델은 계층을 5개로 분리하기 때문입니다.

각 계층에 대한 설명 (Updated TCP/IP Model 기준)

  • Application Layer

    • high-level 프로토콜 담당
    • 애플리케이션의 데이터 전송
    • HTTP, SMTP, FTP
  • Transport Layer

    • 신뢰성, 흐름 제어, 데이터 수정 담당
    • TCP, UDP
  • Network Layer

    • 네트워크를 통해 패킷 전송
    • Internet Protocol - IP 주소 정의, 라우팅
    • IP, ARP, ICMP
  • Data Link Layer

    • 네트워크 계층으로부터 받은 패킷 헤더에 MAC 주소 추가 (프레임 생성)
  • Physical Layer

    • 모델의 최하단 계층으로써 비트 단위의 실질적인 데이터 전송 담당

참고

  • 대표 이미지 출처
  • What is a Transmission Control Protocol TCP/IP Model?
  • 3 Way-Handshake
  • TCP/IP vs OSI Model: What’s the Difference?
  • TCP/IP Five-Layer Software Model Overview

IP는 뭔지 알 거 같은데, 앞에 하나 추가되어 TCP/IP라고 하면 전혀 새로운 용어 같지 않나요? 저는 그랬습니다. 결론부터 말씀드리면 둘은 거의 동의어로 사용됩니다. 물론 두 용어의 개념과 역할은 다르지만, 한 몸처럼 쓰이기 때문입니다. TCP/IP는 네트워크에 대해 조금만 알아보더라도 상당히 자주 등장하는 용어입니다. 그러나 정의만 몇 줄 읽어선 단번에 이해가 어려운 개념이기도 하죠. 이 글을 통해서 “아 이런 거구나” 정도는 감이 오실 수 있도록 정리를 해보겠습니다.

TCP/IP는 네트워크 장치를 연결할 때 사용되는 통신 프로토콜(Protocol)입니다. 인터넷 같은 외부 네트워크와 인트라넷 같은 내부 네트워크 모두에서 사용됩니다. 프로토콜이란 컴퓨터 간 데이터를 통신하기 위해 정해놓은 규약을 의미합니다. TCP는 전송 제어 프로토콜(Transmission Control Protocol), IP는 인터넷 프로토콜(Internet Protocol)로 모두 ‘OOO 프로토콜’이라는 걸 알 수 있습니다.

통신 프로토콜이 TCP/IP만 있는 건 아닙니다. 다만 그중에서 가장 널리 사용되는 통신 규약이 TCP/IP입니다. 굳이 두 프로토콜을 합쳐서 부르는 이유는 네트워크 통신 시 각자 다른 역할을 수행하며 함께 사용되기 때문입니다.

통신, 표준의 가치

네트워크 통신에서 표준을 정하는 건 아주 중요합니다. 표준을 정하면 모든 회사의 제품군이 서로 호환될 수 있기 때문입니다. 과거 컴퓨터가 정보를 교환을 시작하던 초창기엔 공급 업체 별로 통신 프로토콜이 달라 통신을 할 수 없는 문제가 있었습니다. 이런 불편함에 따라 표준을 정했는데 그것이 TCP/IP입니다.

참고로 TCP/IP는 1970년대에 미국 국방부에서 만들었습니다. 이를 계기로 TCP/IP는 널리 사용됐고 현재 웹에서 가장 보편적으로 사용되고 있습니다. TCP/IP에는 HTTP, FTP, SMTP 등이 포함됩니다. 쉽게 말해 인터넷으로 구글링을 하고, 넷플릭스를 보고, 파일을 전송하고, 이메일을 보내는 등의 작업에 모두 쓰인다는 의미입니다.

시중에 판매되는 모든 컴퓨터에는 TCP/IP가 기본으로 내장되어 있습니다. 덕분에 사용자는 TCP/IP의 개념을 몰라도 마음껏 인터넷으로 다른 컴퓨터와 통신을 주고받을 수 있습니다.

TCP와 IP의 상호작용

둘은 같이 쓰인다고 언급했죠. 이걸 쉽게 이해할 수 있도록 비유를 먼저 들어보겠습니다. 완성된 퍼즐 위에 매직으로 글을 작성하고 퍼즐을 분해해서 누군가에게 보낸다고 상상해보세요. 이때 퍼즐 조각은 한 번에 묶어서 보내지 않고 하나씩 따로 보냅니다. 이렇게 하면 각 퍼즐 조각이 도착하는 시간도 다르고, 순서도 뒤죽박죽일 겁니다. 모든 퍼즐 조각이 제대로 도착하면 그것을 다시 원형으로 맞춥니다. 이제 수신자는 완성된 퍼즐에 쓰여있는 글을 확인할 수 있습니다.

위 비유에서 퍼즐 조각을 보내는 역할은 IP가, 도착지에서 퍼즐 조각을 맞추고, 만약 누락된 조각이 있으면 다시 보내달라 요청하는 등 재조립과 문제 확인을 하는 역할을 TCP가 한다고 보면됩니다. 결국 두 역할 모두 필요한 것이죠. 

만약 퍼즐을 분해해서 보내는 게 이해가 안 되신다면 패킷(packet)의 개념을 모르셔서 그렇습니다. 네트워크 간 데이터를 주고받을 땐 데이터를 블록 형태로 나눠서 보내기 때문에 그런 비유가 나온겁니다. 이런 방식을 패킷 교환 방식이라고 하며, 나눠진 블록 조각을 패킷이라고 합니다.

참고 : 네트워크 패킷(packet)이란?

마지막으로 TCP/IP 데이터 통신이 이루어지는 과정을 살펴보겠습니다.

출처 :  //docs.oracle.com/cd/E18752_01/html/816-4554/ipov-29.html

사용자에게 원격 시스템 로그인에 필요한 패킷을 전달하는 과정을 계층 별로 구분한 것입니다. TCP 와 IP는 각각 전송 계층과 인터넷 계층에 포함됩니다.

  • 응용 프로그램 계층

사용자가 통신을 시작하는 단계입니다. rlogin이라는 명령을 내렸습니다. 명령 데이터를 TCP 스트림으로 보냅니다.

  • 전송 계층

도착한 데이터는 분절(segment)되고 각 세그먼트에는 포트 송수신 정보 등을 담은 헤더가 연결됩니다. 이를 캡슐화라고 합니다. TCP 세그먼트를 통해 수신자가 데이터를 받을 수 있는지 확인합니다.

  • 인터넷 계층

IP는 IP 데이터그램이라는 단위로 패킷을 전달합니다.

  • 데이터 링크 계층

IP 데이터그램을 프레임으로 포멧하고 물리 계층으로 전달합니다.

  • 물리 네트워크 계층

프레임을 수신하고 IP 주소를 네트워크 미디어에 적합한 하드웨어 주소로 변환합니다. 그리고 네트워크 미디어를 통해 프레임을 보냅니다.

수신 시스템은 발송 시스템의 역순으로 계층을 거쳐 패킷을 전달받습니다. 모든 패킷이 전달되면 다시 조립해 수신을 완료합니다.

Toplist

최신 우편물

태그