Network

TCP/IP 네트워크 이해하기 (1)

경딩 2025. 1. 24. 23:00

네트워크 통신에서 프로토콜의 중요성

우리가 사용하고 만드는 대부분의 인터넷 서비스는 TCP/IP를 이용해 통신한다.

휴대폰 어플에서 인터넷이 안된다고 가정해보자. 아마 이용할 수 있는 어플이 상당히 제한적일 것이다.

 

어떻게 네트워크를 통해 데이터가 오가는지를 이해하면, 튜닝을 통한 성능 개선이나, 트러블 슈팅등에

많은 도움이 된다고 한다.  이번 글에서는 네트워크에서 데이터가 어떻게 오가는지에 대해 살펴보자.

 

 

프로토콜 

복수의 컴퓨터 사이나 중앙 컴퓨터와 단말기 사이에서 데이터 통신을 원활하게 하기 위한 필요한 통신 규약.
신호 송신이 순서, 데이터의 표현법, 오류 검출법 등을 정함. 

 

편지를 보내는 비유

편지를 보낼때 우편번호, 보내는 주소,  우표 등을 꼭 적어야 한다. 우표를 붙이지 않거나 잘못된 주소를 적게 되면, 일련의 절차 중 하나라도 문제가 생기면 편지 전달에 실패한다.

즉 네트워크 상에서 컴퓨터 간의 통신하기 약속이다.

TCP/IP 5계층

TCP / IP 5 계층은 네트워크의 기본 구조를 5개의 계층으로 나눠서 표준화한 것이다.

네트워크를 이용한 통신을 서로 다른 역할을 갖고 있는 5개의 계층을 통해 일어난다.

 

 

그림과 같이 응용 (Application) , 전송 (Transport),  네트워크 (Network), 데이터 링크 (Data Link), 물리 (Physical) 계층으로 구성되어 있다. 각각의 계층은 독립적이므로 데이터가 전달되는 동안에 다른 계층의 영향을 받지 않는다.

 

계층별 역할

  • 1 계층 - 물리계층 : 물리적인 연결과 전기 신호 변환/제어를 담당한다.
  • 2 계층 - 데이터링크 계층 : 네트워크 기기 간 데이터 전송 및 물리 주소를 결정한다. (LAN 통신)
  • 3 계층 - 네트워크 계층: 다른 네트워크와 통신하기 위한 경로를 설정하고 논리 주소를 결정한다. 3계층에서 네트워크 계층의 식별자는 IP 주소이다.
  • 4 계층 - 전송 계층 : 네트워크 계층에서 보내온 데이터 정렬, 오류 정정 등을 수행하고 신뢰할 수 있는 통신을 확보한다. TCP/UDP 같은 프로토콜이 이 계층에 위치한다. 4계층에서 네트워크 계층의 식별자는 포트이다.
  • 5 계층 -응용 계층:  프로그램 구현체와 사용자 인터페이스를 의미한다.

 

패킷(Packet)의 정의

 

패킷(packet, 문화어: 파케트, 소포)은 정보 기술에서 패킷 방식의 컴퓨터 네트워크가 전달하는 데이터의 형식화된 블록이다
패킷은 제어 정보와 사용자 데이터로 이루어지면 사용자 데이터는 페이로드라고도 한다.

통신을 할 때 데이터는 패킷이라는 단위로 나눠져서 전송된다. 

왜 데이터를 통으로 보내지 않고 나눠 보낼까?

그렇게 하면 빠르고 좋겠지만 큰 데이터는 대역폭 (신호를 전송할 수 있는 주파수 범위 또는 폭)을 너무 많이 차지하기 때문에 패킷의 흐름을 원활하게 하지 못한다. 트래픽이 많아진다. 예를 들어 도로가 4차선인데 차가 2차선을 차지하고 있는 경우 각 차선마다 차가 다니는 것보다 정체가 일어난다. 이런 것을 방지하기 위해 패킷을 사용한다.

 

작은 패킷들로 분할되어 전달되기 때문에 전달될 때 번호를 붙여서 전달한다. 그래야지 순서대로 나열하여 원하는 데이터를 얻을 수 있다.

 

패킷의 기본 구조

패킷은 헤더, 페이로드, 풋터(주로 사용 X)로 구성되어 있으며, 각자 수행하는 역할이 다르다.

헤더 

  • 페이로드의 앞부분에 위치하는 정보이다. 헤더는 데이터의 속성, 정보 등을 포함하고 있다.

페이로드

  • 패킷에 의해 전송되는 실제 데이터이다.

풋터 

  • 일반적으로 뒷부분에 위치하는 정보이다. 헤더와 기능 면에서 큰 차이는 없다.

(일반적으로 사용하지 않고 특정 프로토콜에만 사용)

 

실제 패킷을 사용할 때는 여러 프로토콜을 캡슐화(Encapsulation) 하여 최종적인 하나의 패킷을 사용한다.

 

캡슐화 / 역캡슐화

여러 프로토콜로 캡슐화된 패킷

 

서로 다른 계층 간의 데이터를 주고받는 과정에서 캡슐화와 역캡슐화가 발생하게 된다.

응용계층에서 처음 요청 데이터가 생성되고  나면, 데이터가 응용 -> 전송 -> 네트워크 -> 데이터 링크 순으로 전달된다. 이때 계층 별로 맡은 역할에  따라 추가적으로 정보가 생성되면, 이것을  헤더의 형태로 하나씩 붙여 나가게 된다. 이렇게 헤더를 차례대로 붙여가는 과정을 캡슐화하고 한다.

반대로 데이터를 수신하는 쪽에서 수신받은 데이터가 데이터 링크 -> 네트워크 -> 전송 -> 응용 계층 순으로 타고 올라간다. 이 과정에서 양파 껍질 벗기듯 헤더를 차례대로 제거하면서 데이터를 전달하는 과정을 역캡슐화라 한다,

 

 

캡슐화(Encapsulation)

데이터 송신

 

하나의 패킷을 페이로드로 사용하여 또 다른 패킷을 만드는 과정을 캡슐화라고 한다.

페이로드 앞에 위치하는 헤더와 페이로드는 계층의 순서를 따른다.

그림 1 데이터 전송 시 TCP/IP 네트워크 스택의 각 레이어 별 동작 과정

네트워크 스택에는 여러 레이더(layer) 가 있다. 

 

여러 레이어가 있지만, 크게 유저(user) 영역 , 커널(kernel) 영역, 디바이스(device) 영역으로 나눌 수 있다.

유저 영역과 커널 영역에서 작업은  CPU 가 수행한다. 이 유저 영역과 커널 영역은 디바이스 영역과 구별하기 위해 호스트(Host) 라고 부른다. 

 

유저 영역부터 살펴보자! 

우선 애플리케이션이 전송할 데이터를 생성하고 write 시 시스템 콜을 호출해서 데이터를 보낸다. 소캣(fd) 은 이미 생성되어 연결되어 있다고 가정한다. 시스템 콜을 호출하면 커널 영역으로 전환된다. (컨텍스트 스위칭 발생)

더보기

시스템 콜이란?

유저 애플리케이션이 운영체제의 API 를 호출하는 것이다.

 

Linux 나 Unix 는 포함한 POSIX 계열 운영체제는 소켓을 file descriptor 로 애플리케이션에 노출한다. 이런 POSIX 계열의 운영체제에서 소켓은 파일의 한 종류다. 파일(file) 레이어는 단순한 검사만 하고 파일 구조체에 연결된 소켓 구조체를 사용해서 소켓 함수를 호출한다.

 

커널 소켓은 두 개의 버퍼를 가지고 있다. 송신용으로 준비한 send socket buffer, 수신용으로 준비한 receive socket buffer 이다. Write 시스템 콜을 호출하면 유저 영역의 데이터가 커널 메모리에 복사되고, send socket buffer 의 뒷부분에 추가된다. 순서대로 전송하기 위해서다. 그림에서 옅은 회식 상자가 이미 socket buffer에 존재하는 데이터를 의미한다. 이 다음으로 TCP를 호출한다.

 

소켓과 연결된 TCP  Control Block 구조체가 있다. TCB 에는 TCP 연결 처리에 필요한 정보가 있다. TCB 에 있는 데이터는 connection state(LISTEN, ESTABLISHED, TIME_WAIT 등), receive window, congestion window, sequence 번호, 재전송 타이머 등이다.

 

현재  TCP 상태가 데이터 전송을 허용하면 새로운 TCP segment , 즉 패킷을 생성한다. Flow control 같은 이유로 데이터 전송이 불가능하면 시스템 콜은 여기서 끝나고, 유저 모드로 돌아간다. (즉 , 애플리케이션으로 제어권이 넘어간다)

 

생성된 TCP segment 는 IP 레이터로 이동한다. (내려간다) IP 레이어에서는 TCP segment 에 IP 헤더를 추가하고, IP routing 을 한다. IP routing 이란 목적지 IP 주소(destination IP) 로 가기 위한 다음 장비의 IP 주소 (next hop IP) 를 찾는 과정을 말한다.

 

IP routing을 하면 그 결과물로 next hop IP와 해당 IP로 패킷 전송할 때 사용하는 인터페이스(transmit interface, 혹은 NIC)를 알게 된다. 따라서 transmit NIC의 드라이버를 호출한다.

 

소켓의 식별자는 sender ip,port / receiver ip,port / 프로토콜이다.

 

역캡슐화(Decapsulation)

데이터 수신

 

캡슐화된 패킷을 전달받아 확인하는 과정을 역캡슐화라고 한다. 패킷을 하나씩 확인하면서 패킷의 정보와 데이터를 확인한다.

패킷을 확인할 때는 하위 프로토콜부터 순차적으로 확인한다.

 

 

네트워크 데이터들을 통칭해서 패킷이라 부르며 계층별 패킷의 이름 즉 PDU (Protocol Data Unit )가 있다.

 

 

와이어 샤크를 통해 확인해 보자!

arp (3 계층) IP 패킷 확인

풋터가 붙는 경우도 있고 안 붙는 경우도 있다.

 

 

ICMP (3 계층) IP 패킷 확인

 

 

 

참고자료 : https://d2.naver.com/helloworld/47667