카테고리 없음

[CS/네트워크] 네트워크 통신의 기초

연유뿌린빙수 2025. 9. 5. 02:16

네트워크 통신의 기초

 

 

인터넷이란 데이터를 전달하는 장치들이 이루는 거대한 네트워크 망이다.

인터넷 통신은 end system 간 패킷을 주고 받는 것이라고 할 수 있다.

 

1. 패킷이란?

1-1. 정의

패킷(Packet)이란 네트워크에서 데이터를 주고받을 때 사용되는 데이터 조각을 뜻한다.

즉, 네트워크 통신에서 데이터를 주고 받을 때의 최소단위라고 생각해주면 된다.

 

하나의 완전한 데이터를 나눠서 각 조각을 소포같이 포장한 것이다.

 

왜 네트워크 통신에서 데이터를 그냥 주고받지 않고, 패킷 교환 방식으로 소통을 할까?

데이터를 자르는 필요성에 대하여 알아보자.

 

1-2. 패킷 교환과 구성

만약 네트워크 상에서 데이터를 자르지 않고 통신 및 교환을 한다면, 이에 대한 회선 점유율이 너무 높기 때문에 비효율적이다. 인터넷 망은 효율적으로 사용해야한다.

패킷을 단위로 자원을 사용하고, 통신하지 않는 시간에는 다른 패킷이 해당 자원을 할당하여 사용하는 등 사용의 나입가 줄어든다.

또한 대용량 데이터를 작은 패킷으로 분할하여 전송하며, 각 패킷은 목적지 주소, 순서 정보, 오류 검출 코드 등 필요 정보를 포함하고 있어 데이터의 신뢰성 확보가 가능하다.

 

  • 기존의 회선 교환
    • 전화처럼 통신을 시작하기 전에 전용 회선을 할당하고, 통신이 끝날 때까지 해당 회선을 독점 사용 방식. 이는 통신 시간 도안 자원이 낭비된다.
  • 패킷 교환
    • 기존의 회선 교환의 단점을 극복하며 등장했다. 여러 사용자가 하나의 망 회선을 공유하면서 데이터를 패킷 단위로 나눠 효율적으로 전송하는 방식이다.

 

 

그러면 하나의 패킷은 어떤식으로 구성되어있을까?
일반적으로 1000~1500byte의 크기로 구성된 패킷은 다음 구성 요소로 이뤄져있따.

  • 헤더(Header) : 패킷에 대한 메타 정보가 들어있다. 패킷의 길이, 번호, 네트워크 프로토콜, 수신자 및 발신자의 IP 주소 등 데이터가 잘 전달되기 위한 필요 정보들 존재 
  • 페이로드(Payload) : 수신자가 요청한 데이터. 일종의 Body라고 표현하기도한다.
  • 트레일러(Trailer) : 패킷을 끝을 나타개는 오류 검출 역할. CheckSum, CRC, 와 같은 오류 검출 코드가 트레일러에 포함되어있으면 데이터 손실과 같은 오류 발생 여부 판단이 가능하다(패킷의 신뢰성 장점과 연결된다)

 

이미지 출처 : https://ecampusontario.pressbooks.pub/informationsystemscdn/chapter/6-5-packets-journey/

 

이렇게 패킷이 전달되는 과정을 알았다.

그렇다면 패킷의 헤더에 있는 정보들이 무슨 역할을 하는지 구체적으로 알아보자.

 

 

2. IP(Internet Protocol)

네트워크 레이어에서 작용을 하며 "인터넷상에서 유일하게 상대를 식별할 수 있는 수단" 이다.

즉, 인터넷 상의 주소라고 생각해주면 된다! 

 

 

전세계에 정말 많은 네트워크들이 존재할텐데, 이에 대하여 패킷은 IP 주소를 통해 기기들을 식별하면서 전송되는 것이다.

 

그리고 IP에는 두 가지 종류가 존재한다. 

 

2-1. 공인 IP(Public IP)

공인 IP는 인터넷 서비스 제공자가 개인이나 기업에 할당하는 주소다. 전세계를 대상으로 유일하게 식별된다.

  • 인터넷 접속에 필수적
  • 전세계적으로 유일한 주소
  • IP 주소 부족의 주요 원인이기도 함

 

2-2. 사설 IP(Private IP)

사설 IP는 LAN(근거리 통신망, 케이블 같은) 과 같은 사설 네트워크에서 사용되는 주소이다. 이 주소는 인터넷 상에서 직접 통신은 불가능하며, 동일한 네트워크 내의 기기들끼리만 통신이 가능하다. 공유기를 사용하면 여러 기기에 사설 IP를 할당해 하나의 공인 IP 공유가 가능하다

  • 인터넷으로 직접 연결되지 않는다.
  • 특정 범위가 정해져있고, 네트워크마다 중복될 수 있다.
  • IP 주소 부족의 해결 방법이 될 수 있다.

 

2-3. 공인 IP와 사설 IP의 통신

사설 IP를 사용하는 기기가 인터넷에 접속하려면 어떻게 해야할까?

인터넷으로 직접 연결되지 않는다는 것이 사설 IP의 특징일텐데!

 

이럴 때 필요한 것이 "NAT(Network Address Translation)" 다.

 

NAT는 사설 IP 주소를 공인 IP 주소로 변환해주는 역할을 한다.

이미지 출처: https://pandorafms.com/en/it-topics/what-is-nat/

  • NAT 동작 방식:
    • 내부 네트워크: 컴퓨터(사설 IP) → 공유기
    • 공유기: 사설 IP를 공인 IP로 변환
    • 인터넷: 공유기(공인 IP) → 웹 서버
    • 응답: 웹 서버 → 공유기(공인 IP) → 공유기가 다시 사설 IP로 변환 → 컴퓨터

공인 IP는 인터넷의 주소이고, 사설 IP는 내부 네트워크의 주소라고 할 수 있다.

 

 

그리고 IP의 경우, 주소 길이와 형식에 따라서도 두 가지로 나뉜다.

이는 주소 공간의 크기, 보안 기능, 그리고 전체적인 네트워크 성능에 영향을 미친다.

2-4. IPv4

현재 가장 많이 보이는 것이다! 0.0.0.0 의 형식으로 나타난 것들을 많이 볼 수 있는데 이것이 IPv4의 형식이다.

  • 주소 형식: 32비트 주소로, 192.168.1.1처럼 점(.)으로 구분된 10진수 네 덩어리로 표기 (0.0.0.0 이다)
  • 주소 개수: 약 43억 개의 고유한 주소를 가질 수 있지만, 인터넷에 연결되는 기기의 수가 폭발적으로 증가하면서 주소 부족 문제(Address Exhaustion)가 발생했다. 이 문제를 해결하기 위해 위에서 언급한 NAT(Network Address Translation)와 같은 사설을 공인으로 바꿔주는 기기가 필요하다.
  • 특징: 단순하고 오랜 기간 사용되어 대부분의 기기와 시스템에서 완벽하게 호환된다. 하지만 보안 기능이 내장되어 있지 않아 추가적인 프로토콜(예: IPSec)이 필요하다.

 

전세계적으로 고갈된 IPv4

 

그래서 대표적인 클라우드 컴퓨팅 AWS의 경우,

Public IPv4 주소 사용(EC2 제외)이 유료화가 되었다고 한다. ( 다행히 EC2 프리티어는 무료 )

그만큼 전세계적으로 IPv4가 고갈이 되고 있다고 한다.

즉, 예를 들어 RDS 인스턴스를 생성했는데, 이에 대하여 IPv4 접근을 하면 유료로 결제되니 조심하자.

 

 

2-5. IPv6

이러한 IPv4의 한계를 극복하기 위해 개발된 차세대 IP 주소 체계이다. 

  • 주소 형식: 128비트 주소로, `2001:0db8:85a3:0000:0000:8a2e:0370:7334` 처럼 콜론(:)으로 구분된 16진수 여덟 덩어리로 표기한다.
  • 주소 개수: IPv4보다 훨씬 많은 약 340간(Undecillion) 개의 주소를 제공하여 주소 부족 문제를 근본적으로 해결해준다!
  • 특징:
    • 대규모 주소 공간: 거의 무한한 주소를 제공하여 모든 기기에 고유한 공인 IP를 할당이 가능
    • 효율적인 라우팅: IPv6 헤더가 IPv4보다 간소화되어 라우터의 패킷 처리 속도 빠름
    • 내장된 보안: IPSec이 기본으로 내장되어 있어 보안을 강화
    • 자동 설정: SLAAC(Stateless Address Autoconfiguration) 기능을 통해 별도의 서버(DHCP) 없이도 기기가 스스로 IP 주소를 설정 가능

 

그래서 우리의 웹 서비스와 사이트 같은 경우에는 대부분이 여전히 IPv4로 접근이 가능하다고 한다.

그리고 많은 IoT 기기 등이 IPv4를 근본적으로 사용하는 중이라서 IPv4가 더 많아 보이지만, 기술적으로는 IPv6 주소가 훨씬 많이 사용되고 있다고 한다. 

 

 

 

 

그럼 이제 우리가 접속하려는 IP 주소의 컴퓨터로 이동을 했는데,

해당 컴퓨터에 여러 대의 프로그램이 돌아가고 있다면 어떻게 해야할까??

 

그래서 알아야하는 것이 PORT다.

 

3. PORT

port란 IP 내에서 프로세스를 구분하는 데에 사용하는 번호이다.

네트워크 레이어에서 패킷을 이동할 때, IP를 확인하긴 하였으나, 어느 프로그램에 데이터의 패킷을 전송해야할지 알 수 없을 때가 있다.

 

하나의 IP에 해당되는 컴퓨터 안에는 여러 프로세스가 동작하고 있다.

대표적으로 HTTP와 HTTPS가 존재한다.

 

우리가 접속할 때 https://www.naver.com 에 접속을 한다면 다음에는 포트번호가 없지만,

https는 자동으로 443 포트로 정해져있기에 전달된다.

 

예시로 웹사이트의 주소가 http://100.100.100.100 이라고 하면,

100.100.100.100:3306 으로 접속을 한다면 해당 IP에서 돌아가고 있는 3306 포트로 이동되는 것이다.

그리고 자동으로 https://100.100.100.100:443 이라면,

https://100.100.100.100 이 생략되어도 기본적으로 port 443은 https 프로토콜이므로 https 환경으로 연결된다.

 

 

다음은 대표적으로 자주 사용되는 중요한 포트 정보들이라서 정리해두었다.

프로토콜 PORT 번호 통신 프로토콜 설명
HTTP 80 TCP 웹 서버 접속
HTTPS 443 TCP 웹 서버 접속(w/SSL)
POP3 110 TCP 메일 읽기
SMTP 25 TCP 메일 서버 간의 메일 전송
SSH 22 TCP 컴퓨터 원격 로그인
DNS 53 UDP DNS 질의

 

 

 

 

그러면 이제 IP 주소로 이동을 했는데, 해당 주소의 컴퓨터가 종료되어있거나, 중간에 패킷이 손실되거나, 뒤에 보낸 패킷이 먼저 도착하여 순서에 어긋난다면 어떻게 해야할까?

4. TCP(Transmission Control Protocol, 전송 제어 프로토콜)

TCP란 전송제어 프로토콜의 약자로, 연결 보증을 해줌으로써 패킷 전송에 대하여 안정성을 확보해준다.

흔히 HTTP, SMTP, FTP 같은 응용 계층 프로토콜이 TCP를 기반으로 동작한다.

 

4-1. TCP의 특징

  • 연결 지향적(Connection-Oriented) : 데이터를 주고받기 전에 반드시 3-way Handshake 과정을 통해 연결을 설정한다
  • 신뢰성 보장
    • 데이터는 순서대로 도착한다.
    • 누락된 데이터는 재전송한다 (ACK 응답 기반 재전송)
    • 오류를 검출한다. (Checksum을 활용)
  • 흐름 제어 : 송신자가 너무 빠르게 보내 수신자가 처리하지 못하는 상황을 방지한다.
  • 혼잡 제어 : 네트워크가 혼잡할 때 패킷 유실을 줄이고 효율적으로 전송한다.

 

4-2. TCP의 3-way Handshake : 연결 설정 (Connection Establishment)

TCP 프로토콜로 통신 위해 데이터 전송 전 상호 연결 관계를 수립하는 과정이다.

데이터 전송할 준비가 되었다는 것을 보장 및 데이터 준비 확인 과정이며,

이 과정에서 정상적으로 세션이 맺어지지 않으면 통신을 중단한다.

위의 그림을 잘 봐보자.

  1. SYN: 클라이언트 → 서버 연결 요청 (초기 Sequence Number 포함)
  2. SYN + ACK: 서버 → 클라이언트 승인 및 서버 Sequence Number 전달
  3. ACK: 클라이언트 → 서버 최종 승인

위의 사진과 같은 seq가 sequence number라는 순서를 붙임으로써 패킷 전송의 순서들을 보장한다!

 

결국 최종적으로 양쪽이 "서로의 상태를 동기화"하고 연결이 성립됐다는 뜻이다. ( 가상 회선 수립 완료 ! )

즉, 연결이 성립되기 위해서는 위의 세번의 패킷 교환이 필요하다.

 

 

 

4-3. TCP의 4-way Handshake : 연결 해제 (Connection Termination)

 

  1. FIN: 클라이언트가 더 이상 보낼 데이터가 없음을 알림.
  2. ACK: 서버가 확인.
  3. FIN: 서버도 데이터 전송을 마치고 연결 종료를 요청.
  4. ACK: 클라이언트가 확인 후 일정 시간(TIME_WAIT) 동안 대기.

또다시 ACK를 통하여 둘의 연결이 종료된다. 연결 해제를 위해서는 총 4번의 패킷 교환이 필요하다.

 

 

이렇게 TCP는 클라이언트와 서버 간의 통신 동기화 상태가 이루어져있기 때문에,

패킷을 전달하고 받았다면 받았다는 전송까지 해줌으로써 손실에 대한 보장과,

sequence_number로 순서 보장과 신뢰보장이 가능하다.

 

 

 

 

5. UDP(User Datagran Protocol, 사용자 데이터그램 프로토콜)

TCP가 위와 같이 신뢰성 기반으로 작동할 때, UDP는 이와 달리 데이터 전달 보증, 순서 보장 없이 기존의 IP에 PORT와 Checksum만 추가한 프로토콜이다. (데이터의 전송 제대로 완료 여부보다는 일단 데이터 자체가 맞는지에 대한 검사만)

 

즉, 비연결형 전송 계층 프로토콜이다.

 

신뢰성이 떨어지지만, TCP에 비하여 검증 부분이 적어지기에 그만큼 더 빠르다는 장점이 존재한다.

5-1. UDP의 특징

 

  • 비연결형 (Connectionless)
    • 데이터를 보내기 전에 연결을 맺지 않음 (Handshake 없음). <- 빠른 이유
    • 수신 측이 준비되지 않았어도 그냥 보냄.
  • 비신뢰성 (Unreliable)
    • 패킷이 유실되거나 순서가 뒤바뀌어도 보장하지 않음.
    • ACK 응답, 재전송 기능 없음.
  • 속도 빠름
    • 제어 절차가 없어서 TCP보다 오버헤드가 적음.
    • 실시간성이 중요한 서비스에 유리.
  • 단순한 구조
    • 헤더 크기가 작음 (8바이트).
    • TCP 헤더(20바이트 이상)에 비해 가볍다

 

 

그래서 대표적으로 UDP가 쓰이는 곳은 실시간 스트리밍(영상 통화, 음성 통화), DNS(빠른 질의 응답을 위해 UDP를 사용), IoT 센서 통신(작은 패킷 빠르게 주고 받아 센서 감지)

 

왜 DNS는 UDP를 쓸까??

DNS는 도메인 네임 시스템으로 기본적으로 UDP를 사용한다.

우리는 웹 접속 시마다 이름을 IP 변환으로 빠르게! 해야하므로 연결과정이 있는 TCP보다는 UDP가 유리하다.

또한 대부분의 DNS 질의 응답은 512 바이트 이하이기 때문에 작은 데이터인 UDP 패킷에 적합하다.

또한 서버가 클라이언트와 연결을 유지하지 않아도 되는 http의 stateless 설정으로 인하여 tcp처럼 연결을 유지하지 않아도 된다. (서버가 응답을 보낸 후에 어떤 것도 저장하지 않아도 됨) 그렇기 때문에 UDP로 작동하는 것이다.

 

그래서 다음과 같은 내용들이 정리된다.

 

[ TCP와 HTTP 차이 ]

  • HTTP는 비연결형 프로토콜인 반면에 TCP는 연결형 프로토콜
  • HTTP는 단방향 통신만 가능한 반면에 TCP는 양방향 통신이 가능함
  • HTTP는 응용 계층(7) 프로토콜인 반면에 TCP는 전송 계층(4) 프로토콜

 

 

 

 

 

"www.example.com"으로 접속을 해보자.

우선은 해당 DNS에 매핑되는 IP 주소를 알려달라고 접속 시 요청을 한다. -> 최종 IP 주소를 반환한다. ( 서버의 진짜 주소를 찾는 데에 성공! ex. 100.100.100.100)

그러면 브라우저(클라이언트, 크롬 등)는 받은 IP 주소를 사용해 서버에 HTTP 요청을 보낸다.

그리고 TCP/IP 연결을 통해 HTTP 요청이 서버로 전송이 되며,

서버는 HTTP 프로토콜을 활용해 HTTP Response를 생성하여 전송한다.

도착한 Http Response는 웹페이지 데이터로 변환되고, 웹 브라우저에 의해 출력되어 사용자가 볼 수 있게 된다.

 

 

 


https://velog.io/@maketheworldwise/TCP-%EA%B8%B0%EB%B0%98-HTTP

 

TCP 기반 HTTP?

TCP BASED HTTP

velog.io