Developing Myself Everyday
article thumbnail

TCP / IP 란?


 TCP / IP는 인터넷에서 데이터 통신을 위해 사용되는 프로토콜이며, 인터넷의 핵심 프로토콜로서 전 세계적으로 사용되고 있다. TCP/IP는 Transmission Control Protocol (TCP)와 Internet Protocol (IP) 두 개의 프로토콜로 구성되어 있다.

 

 TCP는 연결 지향적인 프로토콜로서, 안정적인 데이터 전송을 보장한다. 데이터를 전송하기 전에 먼저 연결을 설정하고, 데이터 전송이 완료된 후에는 연결을 종료한다. 이를 통해 데이터 손실을 최소화하고, 중복 전송을 방지하여 안정적인 데이터 전송을 보장한다.

 

 TCP / IP는 다음과 같은 계층적인 구조로 이루어져 있다.

  1. Application Layer(애플리케이션 계층): 응용 프로그램에서 사용하는 프로토콜을 정의하는 계층이다. 이 계층에서는 사용자와 직접적인 상호작용이 이루어진다. HTTP, FTP, SMTP 등의 프로토콜이 이 계층에서 동작한다.
  2. Transport Layer(전송 계층): 데이터 전송의 신뢰성을 보장하는 계층이다. 데이터를 나누어 전송하고 재조립하는 기능을 제공한다. TCP와 같은 프로토콜이 이 계층에서 동작한다.
  3. Internet Layer(인터넷 계층): 데이터를 목적지까지 전달하기 위한 경로를 결정하는 계층이다. 데이터를 패킷 단위로 나누어, 다음 목적지로 전달하는 역할을 한다. IP 프로토콜이 이 계층에서 동작한다. 
  4. Network Interface Layer(네트워크 인터페이스 계층): 물리적인 네트워크와 관련된 계층으로 데이터를 전송하기 위한 하드웨어적인 부분을 다루는 계층이다. Ethernet, Wi-Fi 등의 프로토콜이 이 계층에서 동작한다.

 TCP/IP의 계층적인 구조는 각 계층의 독립성을 보장하며, 프로토콜의 변경이나 업그레이드를 용이하게 한다. 또한, 다양한 네트워크 장비에서 일관된 통신이 가능하도록 한다.

 

 

TCP / IP 에서 데이터를 전달하는 과정


 TCP/IP의 각 계층에서 실제 데이터를 전송할 때 어떤 식으로 전송되는지 예시를 통해 과정을 알아보도록 하겠다.

 

 예시: 피치는 오늘 저녁으로 피자 가게에서 배달을 시켜 먹으려고 한다.

 

 

① 애플리케이션 계층

 피치는 피자 가게에서 시켜먹을 피자를 선택한다. 어떤 피자를 배달 시킬 것인지를 종이에 적는다. 

 

애플리케이션 계층에서는 클라이언트가 HTTP 프로토콜을 이용해 요청을 보낸다. 이때 클라이언트 층에서는 HTTP 요청 메시지를 생성한다.

 이때 클라이언트가 바로 피치이고 어떤 피자를 시킬 것인지 종이에 적은 과정이 HTTP 요청 메시지를 작성한 것이라고 볼 수 있다.

 

② 전송 계층

 피치는 피자를 주문하기 위해 종이를 봉투에 넣고 봉투 위에 피치의 집의 이름과 피자 가게의 이름를 작성한다.

 

전송 계층에서는 클라이언트 측에서 생성한 HTTP 요청 메시지를 전송하기 위해 TCP 소켓을 열고, 서버와의 연결을 설정한다. 이후 클라이언트에서 생성한 HTTP 요청 메시지를 TCP 세그먼트로 캡슐화하여 전송한다. 소켓은 TCP 세그먼트를 생성하고 받아들이는 역할을 한다.

 

※ 소켓이란?
 소켓 프로그래밍에서는 클라이언트와 서버 간의 통신을 위해 소켓이라는 개념을 사용한다. 소켓은 IP 주소와 포트 번호를 사용하여 특정한 프로세스 간에 양방향 통신을 가능하게 한다. 소켓 프로그래밍에서는 소켓을 생성한 후, 해당 소켓에 IP 주소와 포트 번호를 할당한다. 그리고 서버 소켓은 클라이언트의 접속 요청을 기다리는 상태가 되고, 클라이언트 소켓은 서버 소켓에 접속 요청을 보내는 것으로 통신이 시작된다. 통신이 시작되면 소켓을 통해 데이터를 주고받을 수 있다. 데이터는 TCP/IP 계층에서 전송되며, 소켓은 이를 관리한다. 데이터가 송수신되면 소켓은 데이터의 크기를 확인하고, 데이터가 송신되는 순서를 보장하며, 손상되지 않도록 전송된다. 데이터가 정상적으로 전송되면 소켓은 통신을 종료한다.

 

피치는 피자를 주문하기 위해 봉투 위에 피치의 집의 이름과 피자 가게의 이름을 작성했다. 이것은 소켓 프로그래밍에서 포트 번호를 작성하는 과정이라고 할 수 있다. 

 

 그런데 피치의 집의 이름과 피자 가게의 이름을 작성하고 보니 똑같은 이름을 가진 장소가 너무 많았다. 그래서 지역명을 추가해서 작성하였다. (한 지역에 하나의 이름을 가진 장소가 있다고 가정한다)

 

포트 번호는 16비트의 숫자로 구성된다. 포트 번호만으로는 정확한 주소를 식별할 수 없기에 특별한 주소인 IP 주소가 필요하다. 그게 바로 지역명이라고 할 수 있다.

 전송 계층에서는 소켓을 생성할 때 IP 주소와 포트 번호를 설정하여 전송할 데이터를 패킷으로 만들어 인터넷 계층에 전달한다. 그리고 전송 계층에서 해당 패킷에 대한 목적지 포트 번호와 출발지 포트 번호를 헤더에 추가하게 된다.

 

 

③ 인터넷 계층

 피치는 이제 피자를 주문하기 위한 정보를 다 작성했다고 생각했다. 근데 알고보니 똑같은 지역명을 다른 시에서도 가지고 있다는 것을 알아버렸다. 그래서 피치는 자신의 집의 위치를 표시할 수 있는 나라에 하나 밖에 없는 주소를 얻기위해, 주소 변환기를 사용해 고유한 주소를 찾게 되었다. 

 

인터넷 계층에서는 전송 계층으로 부터 받은 IP 주소를 기반으로 데이터를 목적지로 전달하게 된다. 다만 IP 주소는 같은 네트워크환경에서만 중복을 허용하지 않는다. 서로 다른 네트워크 환경에 데이터를 전달하기 위해서는 ARP를 통해 IP 주소를 물리적인 네트워크 주소인 MAC 주소로 매핑 해야한다. 

 

※ ARP(Address Resolution Protocol) 이란?
 ARP는 네트워크 상에서 IP 주소를 가진 호스트의 물리적 MAC 주소를 찾기 위한 프로토콜이다. ARP는 브로트캐스트 방식으로 동작하며, 네트워크 상의 모든 호스트들에게 ARP 요청 패킷을 보내고, 그 중에서 요청한 IP 주소를 가진 호스트만 응답한다.
 ARP는 주로 로컬 네트워크 상에서 IP 주소와 MAC 주소를 매핑하기 위해 사용된다. 예를 들어, 컴퓨터 A가 컴퓨터 B에게 데이터를 전송하려고 할 때, 먼저 컴퓨터 A는 컴퓨터 B의 IP 주소를 가지고 있는데, 이를 이용해서 ARP 요청 패킷을 브로드캐스트 한다. 그러면, 로컬 네트워크 상에 있는 모든 호스트들 중에서 컴퓨터 B만이 자신의 MAC 주소를 응답하여 컴퓨터 A는 이를 이용해서 컴퓨터 B로 데이터를 전송할 수 있게 된다.

 

피치가 작성했던 자신의 장소의 이름은 다른 지역을 가면 고유성을 잃어버리고 지역명은 다른 시를 가면 고유성을 잃어버리게 된다. 그래서 MAC 주소를 통해 어디서든 고유성을 가질 수 있는 자신만의 주소를 가질 수 있게 된다. ARP 프로토콜은 인터넷 계층에서 해당 IP 주소에 대한 MAC 주소를 알아내서 네트워크 인터페이스 계층으로 전달한다.

 

 

④ 네트워크 인터페이스 계층

피치는 이전에 찾았던 고유한 주소를 적고 배달부를 통해 피자주문을 피자가게로 전달한다.

 

네트워크 인터페이스 계층에서는 하드웨어와 상호작용하여 데이터를 저농하고 받는 역할을 한다. 이때 NIC가 사용된다.

 

※ NIC(Network Interface Card) 란?
NIC는 네트워크 인터페이스 카드로 컴퓨터의 시스템 버스에 연결되어 네트워크 연결을 위한 전송 프로토콜을 지원한다.(예: Ethernet, Wi-Fi) NIC는 물리적으로 컴퓨터와 네트워크를 연결하는 케이블을 통해 네트워크와 통신하며, MAC 주소를 사용해서 데이터를 전송하고 수신한다. 컴퓨터에는 일반적으로 NIC가 내장되어 있다.

 

 NIC는 네트워크 인터페이스 계층에서 데이터 링크 프레임을 생성하고, 물리적 전송을 수행하며, 오류 검사를 하고, 사용할 프로토콜을 선택한다. 데이터가 최종 목적지로 전송되기 위한 포트번호, IP주소가 캡슐화 되어 있고 마지막으로 MAC 주소를 캡슐화 하는 것으로 캡슐화가 마무되고 NIC를 통해 데이터가 전달되게 된다.

 피치의 피자주문을 전달하는 배달부가 바로 NIC인 것이다.

 

 

④ 마지막

 피자가게는 피치의 주문을 받아서 피치에게 피자를 배달부를 통해 배달시켜 줬다.

 

지금까지 진행했던 과정의 역순으로 피자가게에 데이터가 전달되게 된다. 피자가게에서 피자를 배달시키는 과정 또한 지금까지 했던 과정의 반복이다.

 

 

 

결론

 이렇게 TCP/IP에 대한 설명과 예시를 들어서 데이터가 어떻게 전달되는지 알아보았다. 완벽한 예시가 아닐 수도 있겠지만 이 과정으로 TCP/IP에 대해 이해를 잘할 수 있었다.

'개발자의 기본 소양 > NETWORK' 카테고리의 다른 글

HTTP와 TCP/IP 그리고 소켓과 웹소켓  (0) 2023.11.06
FTP & FTPS  (0) 2023.03.31
SSH & SCP & SFTP  (0) 2023.03.31
SSL & TLS  (0) 2023.03.31
HTTP & HTTPS  (0) 2023.03.31
profile

Developing Myself Everyday

@배준형

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!