본문 바로가기
Computer Science

패킷 통신, TCP

by songmoro 2024. 8. 14.
728x90

패킷 통신

패킷 교환 (Packet Switching) 방식은 미리 이동 경로를 정하지 않고, 데이터를 패킷 (Packet)이라는 작은 단위로 나누어 다중 노드로 구성된 네트워크를 통해 전송하는 개념이다.

 

  • 전송될 데이터는 네트워크를 통해 전송되기 전에 패킷으로 쪼개지고, 각 패킷에는 고유 번호가 지정되어 네트워크를 거쳐 최종 수신지에 도착했을 때, 번호 순서로 결합되어 데이터로 완성된다.
  • 각 패킷은 전송 당시 가장 효율적인 경로를 설정하여 최종 목적지까지 이동하게 된다.
  • 회선 교환 방식과 다르게 상황에 따라 매번 다른 경로로 갈 수 있도록 하여 효율성을 강조
  • 이게 가능하려면 출발지부터 목적지까지 가는 과정에서 거치는 모든 중간 노드들이 상황에 따라 이동 경로를 안내해야 한다.
    • 즉, 패킷을 수신한 중간 노드가 패킷의 최종 목적지를(수신지) 확인하고, 목적지까지 가는 다양한 경로 중 그 상황에서 최적이라고 판단되는 경로를 따라 패킷을 이동시키는 라우팅을 해줘야 한다.
    • 이러한 라우팅을 수행해주는 중간 노드가 라우터
  • 데이터를 송신하는 호스트에서는 해당 네트워크가 사용하는 프로토콜을 기반으로 데이터를 작은 단위로 분할하고, 분할된 데이터들 각각의 앞에 패킷 번호, 송신지 및 수신지 정보 등 다양한 정보를 담은 패킷 헤더를 붙여 '패킷'이라는 형태로 변환하여 데이터를 전송하게 된다.
  • 데이터들이 패킷이라는 단위로 변환되는 과정을 '캡슐화'라고 한다.

  • 패킷 각각의 라우팅은 중간 노드들의 혼잡도, 역량에 따르기 때문에, 패킷이 순서대로 수신 호스트에 도착한다는 보장이 없다.
    • 따라서, 수신 호스트에서는 송신 호스트가 전송한 패킷이 모두 도착했음을 인지했을 때, 해당 네트워크의 프로토콜에 의거하여 패킷 헤더를 읽고, 패킷들의 순서를 정리해서 원래 데이터 형태로 정립하게 된다.
  • 이러한 패킷 전송 방식을 사용하게 되면, 중간 노드 각각에서 다른 노드로 이동할 때마다 최적의 경로를 통해 이동하기 때문에 전송 효율이 매우 높고, 노드들 간의 경로를 어느 한 패킷이 독점하는 것이 아닌 공유하는 형태이기 때문에 회선 교환 방식보다 효율적이다.
  • 현재 거의 모든 통신이 패킷 전송 방식을 사용하고 있다.
  • 현대의 정보통신 네트워크에서 데이터는 패킷으로 분할되어 라우터를 거쳐 전송되는 것이 기본 원리로 작용된다.

 

 

TCP/IP

TCP/IP는 컴퓨터 사이의 통신 표준 및 네트워크의 라우팅 및 상호연결에 대한 자세한 규칙을 지정하는 프로토콜 스위트이다.

 

  • 인터넷에서 광범위하게 사용되며 이를 통해 학회, 대학, 정부, 기업에서 서로 통신할 수 있다.
  • 네트워크에 연결된 여러 컴퓨터(호스트) 사이의 통신을 허용한다.
  • 각 네트워크는 해당 네트워크의 호스트와 통신하는 다른 네트워크에 연결될 수 있다.
  • 패킷 교환 및 스트림 전송으로 작동하는 많은 유형의 네트워크 기술이 있지만, TCP/IP는 하드웨어에 구애받지 않는다는 하나의 큰 장점이 있다.
  • 인터넷 프로토콜이 전송 단위를 정의하고 해당 전송 방법을 지정하기 때문에, 정보를 연결하고 교환하는 많은 유형의 네트워크 기술을 허용하며, 네트워크 하드웨어의 세부사항들을 숨길 수 있다.
  • 인터넷 주소는 네트워크의 모든 머신이 네트워크상의 다른 머신과 통신할 수 있도록 한다.
  • 사용자가 필요로 하는 많은 통신 서비스에 대한 표준을 제공한다.
  • 컴퓨터 시스템을, 네트워크에 접속하여 다른 인터넷 호스트와 통신할 수 있는 인터넷 호스트로 만드는 기능을 제공한다.
  • 수행할 수 있는 명령과 기능
    • 시스템 사이에서 파일 전송
    • 원격 시스템에 로그인
    • 원격 시스템에서 명령 실행
    • 원격 시스템에 파일 인쇄
    • 원격 사용자에 이메일 전송
    • 원격 사용자와 대화식 통신
    • 네트워크 관리

 

관련 용어

  • 클라이언트: 네트워크 프로세스나 다른 컴퓨터의 데이터, 서비스 또는 자원들을 액세스 하는 컴퓨터 또는 프로세스
  • 호스트: 인터넷 네트워크에 접속되고 다른 인터넷 호스트와 통신할 수 있는 컴퓨터
    • 특정 사용자에 대한 로컬 호스트는 해당 사용자가 작업 중인 컴퓨터
    • 원격 호스트는 네트워크에 있는 임의의 다른 호스트 이름
    • 통신 네트워크에서 보면 호스트는 패킷의 소스이면서 대상
    • 모든 호스트가 클라이언트, 서버 또는 둘 다 일 수 있다.
    • 인터넷 네트워크에서 호스트는 인터넷 이름과 주소로 식별된다.
  • 네트워크: 둘 이상의 호스트 및 이들 사이의 연결 링크 조합
    • 물리적 네트워크는 네트워크를 구성하는 하드웨어이다.
    • 논리적 네트워크는 전체 또는 일부의 하나 이상의 물리적 네트워크에 있는 추상적 구조이다.
    • 인터넷 네트워크는 논리적 네트워크의 한 예
    • 인터페이스 프로그램은 논리적 네트워크 작업을 물리적 네트워크 작업으로 변환시키는 일을 처리한다.
  • 패킷: 호스트와 네트워크 사이의 한 트랜잭션에 대한 제어 정보 및 데이터 블록
    • 패킷은 인터넷 네트워크를 통하여 데이터를 송수신하는 프로세스에 의해 사용되는 교환 미디어이다.
    • 패킷은 소스에서 대상으로 전송된다.
  • 포트: 프로세스에 대한 논리적 연결 지점
    • 데이터는 포트(또는 소켓)을 통해 프로세스 사이에서 전송된다.
    • 각 포트는 데이터 송수신을 위한 큐를 제공
    • 인터페이스 프로그램 네트워크에서 각 포트는 사용 방법에 기초하여 인터넷 포트 번호를 가진다.
    • 특정 포트는 인터넷 호스트 주소 및 포트 번호의 조합인 인터넷 소켓 주소로 식별된다.
  • 프로세스: 실행 중인 프로그램
    • 프로세스는 컴퓨터에서 활동 중인 요소
    • 터미널, 파일, 기타 입출력 장치는 각기 다른 프로세스를 통해 통신
    • 따라서 네트워크 통신은 프로세스 간 통신
  • 프로토콜: 물리적 또는 논리적 레벨로 통신을 처리하는 규칙 세트
    • 프로토콜은 다른 프로토콜을 사용하여 서비스를 제공하는 경우도 있다.
    • 예를 들어, 연결 레벨 프로토콜은 전송 레벨 프로토콜을 사용하여 두 호스트 사이의 연결을 유지하는 패킷을 전송한다.
  • 서버: 네트워크상의 다른 컴퓨터 또는 프로세스가 액세스 할 수 있는 데이터, 서비스 또는 자원을 제공하는 컴퓨터 또는 프로세스

 

TCP/IP 4계층

TCP/IP 프로토콜 계층

  • 애플리케이션 프로그램은 메시지나 데이터 스트림을 인터넷 전송 계층 프로토콜인 UDP(User Datagram Protocol) 또는 TCP(Transmission Control Protocol) 중 하나로 전송한다.
  • 해당 프로토콜은 애플리케이션으로부터 데이터를 수신하고 이를 Packet(패킷) 보다 작은 조각으로 나누어 대상 주소를 추가한 후 다음 프로토콜 계층인 인터넷 네트워크 계층을 따라 패킷을 패스한다.
  • 인터넷 네트워크 계층은 패킷을 IP(Internet Protocol) 데이터그램에 포함한 후 데이터그램 헤더 및 트레일러에 넣고 데이터그램 전송 위치를 결정한 후 네트워크 인터페이스 계층으로 데이터그램을 패스한다.
  • 네트워크 인터페이스 계층은 IP 데이터그램을 승인하고 이더넷이나 토큰 링 네트워크 같은 특정 네트워크 하드웨어를 통해 이들을 frame(프레임)으로 전송한다.

 

TCP(Transmission Control Protocol)

위 이미지는 TCP 기반의 프로토콜인 HTTPS의 'SSL handshake'를 도식화한 것이다.

 

파란색 상자는 TCP의 '3-way handshake'이고 노란색 상자는 HTTPS의 'SSL handshake'이다. HTTPS는 TCP 기반의 프로토콜이기 때문에 SSL handshake를 하기에 앞서 3-way handshake를 실시함을 알 수 있다.

 

 

TCP의 작동(3-way handshake)

TCP로 이루어지는 모든 통신은 반드시 3-way handshake를 통해 시작한다.

TCP는 TCP Header 내의 'SYN', 'SYN/ACK', 'ACK' Flag을 사용하여 통신을 시도한다.

  1. 송신자가 수신자에게 'SYN'을 날려 통신이 가능한지 확인한다.(이때 Port가 열려 있어야 한다.)
  2. 수신자가 송신자로부터 ‘SYN’을 받고 ‘SYN/ACK’을 송신자에게 날려 통신할 준비가 되어있음을 알린다.
  3. 송신자가 수신자의 ‘SYN/ACK’을 받고 ‘ACK’를 날려 전송을 시작함을 알린다.

이 밖에 주로 사용하는 Flag으로는 RST, FIN, FIN/ACK, PUSH 등이 있다.

 

 

TCP의 특징

  • 흐름 제어: 송신자는 자신이 한 번에 얼마나 보낼 수 있는지, 수신자는 자신이 데이터를 어디까지 받았는지 끊임없이 확인하고 TCP Header 내의 Window size를 사용해 한번에 받고/보낼 수 있는 데이터의 양을 정한다.
    • Window size는 수신자가 정하고 자신의 상황에 따라 Window size를 조절한다.
    • window: 일정량의 데이터
    • Acknowledgment Number: 자신이 지금까지 받은 데이터 양을 확인하여 송신자에게 보내는 숫
    • Sequence Number: Acknowledgment Number의 순서 번호를 표기한 것
  • 혼잡 제어: 데이터를 주고받는 양 단말(Endpoint)도 중요하지만 데이터가 지나가는 네트워크망의 혼잡 또한 중요하다.
    • 혼잡 제어에는 많은 방식이 존재하는데 그중 Slow Start
    • Slow Start : 송신자는 연결 초기에 데이터 송출량을 낮게 잡고 보내면서 수신자의 수신을 확인하며 데이터 송출량을 조금씩 늘린다. 이런 방식을 통해 현재 네트워크에서 가장 적합한 데이터 송출량을 확인할 수 있게 된다.

 

참고

물 흐르듯 읽어보는 TCP/IP

주니어 개발자를 위한 TCP/IP 주요 프로토콜 알아보기 | 요즘IT

TCP/IP 프로토콜

TCP/IP 쉽게 이해하기

 

 

 

 

728x90

'Computer Science' 카테고리의 다른 글

Client Server 모델  (0) 2024.08.16
Echo Server  (0) 2024.08.15
SQL, Database  (0) 2024.08.12
HTTP  (0) 2024.08.12
VCS, Git  (0) 2024.08.12