Post

포트와 프로토콜

포트와 프로토콜

그러면 포트와 프로토콜에 대해 알아보자. 앞서서 우린 2계층과 3계층에 해당하는 내용을 살펴보았다. 2, 3계층에서는 주로 출발지와 목적지 간의 물리적인 연결 및 경로 설정, IP 주소 할당 등과 같은 네트워크의 기본적인 구성 및 라우팅과 같은 작업에 중점을 뒀었다.

그러나 4계층에서는 데이터를 패킷 단위로 쪼개고, 이를 출발지와 목적지 간에 안정적으로 전송하고자 하는데 중점을 둔다. 전송 계층에서는 이러한 데이터 전송을 위해 크게 두가지 프로토콜인 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)를 사용한다. 그래서 이번 포스팅에서는 다음의 항목으로 정리하여 설명하고자 한다.

  1. 포트와 프로토콜 개념
  2. TCP와 UDP

포트와 프로토콜 개념

포트란 무엇일까? 우린 앞서서 IP에 대해 알아보았다. IP란 컴퓨터 네트워크에서 각 장치를 식별하는데 사용되는 고유한 주소로써 마치 주민 등록증과도 같다고 하였다. 이러한 IP를 가진 걸 호스트라 하며, 이러한 호스트 하나하나마다 서비스들을 띄어서 웹 서비스를 운영한다. 그런데 생각해보자. 하나의 단일한 IP를 가진 호스트인 서버에 하나의 프로세스만 띄울까? 하나의 웹 서비스 운영을 위해서? 하나의 호스트 안에 여러 프로세스가 띄어져 있을 것이다. 바로 이때 포트가 사용된다.

이런 형태를 봤을 것이다. 111.222.333.44:80 이런 식으로 IP 다음에 :과 함께 숫자가 적혀있음을 볼 수 있는데, 이게 바로 포트라고 할 수 있다. 바로 이렇게 한 IP 내에 여러 개의 제각각 서비스들이 포트 단위로 띄어져 있다. 이러한 포트는 IP와 함께 사용되어 특정 응용 프로그램이나 서비스를 식별하는데 쓰인다. 예를 들어, 웹 서버는 일반적으로 80번 포트를 사용하며, 이메일 서버는 25번 포트를 사용한다. 따라서 IP 주소와 포트 번호를 결합하여 특정 응용 프로그램이나 서비스의 주소를 나타낼 수 있다.

포트는 특정 프로세스가 네트워크에서 통신할 때, 어떤 포트를 사용할지를 결정하고, 다른 시스템에서 해당 포트로 접근하여 통신할 수 있도록 한다. 이렇게 함으로써 하나의 IP 주소 내에서 여러 개의 서비스나 애플리케이션이 동시에 동작할 수 있게 되며, 효율적으로 네트워크 트래픽을 관리할 수 있다.

프로토콜은 뭘까? 프로토콜은 컴퓨터 내에서 통신하기 위한 규칙의 집합이라고 보면 된다. 즉, 데이터를 주고 받는 방식, 통신 중 발생하는 오류 처리 방법, 연결 설정 및 해제 등 다양한 측면을 다룬다. 간단히 말해, 프로토콜은 양쪽 장치 간의 상호 작용 방법을 규정하여 효과적이고 안정적인 통신을 가능케 한다. 컴퓨터끼리 소통할때 사용되는 약속된 규칙이라고 생각하면 된다. 컴퓨터나 장치들은 데이터를 주고 받을 때 일종의 “언어”를 사용하는데, 이 언어에는 데이터 전송 방법, 오류 처리 방식, 연결 설정 등이 정해진 규칙이 포함돼 있다. 이렇게 정해진 규칙의 집합을 프로토콜이라고 이해하면 될 거 같다. 이러한 프로토콜은 각각의 목적에 따라 다양하게 나뉘는데, 다음과 같다.

  • TCP (Transmission Control Protocol) : 연결 지향적이고 신뢰성 있는 통신을 제공하는 프로토콜이다. 데이터를 세그먼트로 나누어 전송하고, 수신 측에서는 이를 재조립하여 데이터를 전달한다.
  • UDP (User DAtagram Protocol) : 비연결성 프로토콜로, 데이터를 일방향으로 빠르게 전송한다. TCP와 달리 데이터 전송의 신뢰성을 보장하지 않는다.
  • HTTP (Hypertext Transfer Protocol) : 웹에서 정보를 주고받기 위한 프로토콜로, 주로 웹 브라우저와 웹 서버 간의 통신에 사용된다.
  • SMTP (Simple Mail Transfer Protocol) : 전자 메일을 보내기 위한 프로토콜로, 이메일 서버 간의 통신에 사용된다.

TCP와 UDP

위에서 서술한 바와 같이 우린 포트와 프로토콜에 대해 살펴보았다. 이를 통해 우린 4계층의 목적에 대해 추정해볼 수 있다.

4계층의 목적은 목적지를 찾아가는 주소가 아니라, 애플리케이션에서 사용하는 프로세스를 정확히 찾아가고 데이터를 분할한 패킷을 잘 쪼개 보내고 잘 조립하는 것이다.

이를 위한 정보로 다음의 정보들을 이용한다.

  1. 시퀀스 번호
  2. ACK 번호

시퀀스 번호 : 데이터 전송을 위해 나뉘어진 조각인, TCP 세그먼트에 포함된 데이터의 순서를 나타내는 번호로, 데이터를 나누어 전송할 때, 각 세그먼트는 시퀀스 번호를 갖고 있어 송신자와 수신자가 어떤 데이터를 어떤 순서로 전송되었는지 추적할 수 있다. 쉽게 말해서 장난감 조립할 때, 각 부품이나 조각에 할당된 고유 번호로 생각하면 된다.

ACK 번호 : 수신자가 다음에 받기를 기대하는 세그먼트의 시퀀스 번호를 나타낸다. 즉, 이전에 정상적으로 받은 마지막 세그먼트 시퀀스 번호에 1을 더한 값. 수신자는 정상적으로 세그먼트를 수신할 때 해당 세그먼트의 시퀀스 번호를 ACK 번호에 기록하여 송신자에게 알려준다. 이 ACK 번호를 통해 송신자는 어떤 세그먼트가 성공적으로 수신되었는지를 알고, 다음에 어떤 시퀀스 번호의 세그먼트를 전송해야 하는지를 결정한다. 따라서 ACK 번호는 다음에 기대하는 세그먼트의 시작 시퀀스 번호를 나타내며, 이것을 통해 데이터의 흐름의 순서를 조절하고 신뢰성 있는 전송을 달성한다.

그리고 이러한 정보는 TCP 프로토콜에서 많이 사용한다. 이 4계층에서의 핵심은 이 TCP와 UDP라 할 수 있으니, 이 내용에 대해 알아보기로 하자. 먼저, 아래 그림을 통해 둘의 차이를 짐작해본다.

Desktop View 출처 : 사이트 url

둘간의 차이가 확 느껴지지 않는가? TCP에서는 송신자에서 수신자에게 패킷을 안전하게 전송하는 걸 최우선 목표로 움직인다. 이를 위해 패킷에 번호를 메겨서 번호대로 그 번호에 해당하는 패킷을 전송함과 함께 그 패킷이 잘 전송되었는지 수신자에게 확인하고, 그에 대해 수신자는 응답하는 과정을 거치게 된다. 그 과정을 통해 패킷을 안전하게 전송하는 것이다.

이 과정을 좀더 자세히 살펴보자면, 아래의 과정을 거치면서 요청과 응답을 주고 받는다.

  1. 송신자가 수신자에게 패킷(세그먼트) 각각에 넘버를 메긴 시퀀스 번호를 보내면,
  2. 수신자는 그 시퀀스 번호를 확인한 다음에, 해당 시퀀스 번호에 해당하는 패킷을 잘 받았다는 표시로 송신자에게 ACK 번호(응답 번호)를 보낸다. 이는 다음 시퀀스 번호에 해당하는 패킷을 전송하라는 의미이다. 이때 수신자는 송신자에게 시퀀스 번호와 ACK 번호를 같이 보낸다.
  3. 그러면, 송신자는 수신자가 보냈던 ACK 번호에 해당하는 시퀀스 번호를 수신자에게 보낸다.

이러한 식으로 송신자와 수신자 간 정보를 주고 받으며, 데이터를 안전하게 유실 없이 전송하게 된다. 그리고 이때, 효율적으로 패킷을 보내기 위해 데이터를 보낼때 크기와 사이즈를 조절해서 보내기도 하는데, 이를 각각 윈도 사이즈와 슬라이딩 윈도라고 한다.

그리고 위 그림에서 TCP에 그려진 건 “3방향 핸드셰이크”라고 하는데, 방금 설명한 내용이라고 할 수 있다. 이러한 과정을 거치면서 TCP에서는 패킷을 안전하게 전송하는 걸 목표로 한다.

참조 : TCP 플래그

SYN - 연결 시작 용도로 사용. 연결이 시작될 때 SYN 플래그에 1로 표시해 보냄.
ACK - ACK 번호가 유효할 경우, 1로 표시해 보냄. 초기 SYN이 아닌 모든 패킷은 기존 메세지에 대한 응답이므로 ACK 플래그가 1로 표기됨.
FIN - 연결 종료시 1로 표시됨. 데이터 전송을 마친 후 정상적으로 양방향 종료시 사용됨.
RST - 연결 종료시 1로 표시됨. 데이터 전송을 마친 후 정상적으로 양방향 종료시 사용됨.
URG - 긴급 데이터인 경우, 1로 표시해 보냄.
PSH - 서버 측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 즉시 전달할 것을 지시할 때 사용됨.

그러면 UDP는 무엇일까? 위에서 TCP 특징들 전부 없다고 보면 된다. 그래서 신뢰할 수 없으며, 데이터 전송을 보장하지 않는다. 대신에, TCP에서 통신 전 진행되는 3방향 핸드셰이크와 같은 절차나 관련 내용이 전혀 없기 때문에 빠르게 데이터를 전송할 수 있다는 이점이 있다. 이러한 점은 음성 데이터나 실시간 스트리밍과 같이 시간에 민감한 프로토콜이나 애플리케이션을 사용하는 경우, 또는 사내 방송이나 증권 시세 데이터 전송 등 단방향으로 다수의 단말과 통신해 응답을 받기 어려운 환경에 주로 사용된다.

여기까지가 TCP와 UDP의 차이라고 할 수 있다. 그러면 이 둘의 차이를 표로 정리함과 함께 이번 포스팅 또한 마치겠다.

특성TCPUDP
연결 지향O (Connection Oriented)X (Connectionless)
오류 제어 수행OX
흐름 제어 수행OX
유니캐스트OO (멀티캐스트, 브로드캐스트도 가능)
전이중O (Full Duplex)X (Half Duplex)
데이터 전송OO
실시간 트래픽 전송XO
This post is licensed under CC BY 4.0 by the author.