본문으로 건너뛰기
SoulLog

인터넷 네트워크

7분 읽기

프로토콜 계층

인터넷 프로토콜 스택은 총 4가지 계층으로 구성되어 있습니다.

  • 애플리케이션 계층 - FTP, HTTP
  • 전송 계층 - TCP, UDP
  • 인터넷 계층 - IP
  • 네트워크 인터페이스 계층

프로토콜 계층 구조

  1. 채팅 애플리케이션을 활용하여 Hello, world!라는 메시지를 생성합니다.
  2. SOCKET 라이브러리를 통해 OS(Window, Linux, Mac 등)에 전달합니다.
  3. Hello, world!라는 메시지에 TCP 정보를 감쌉니다.
    • 출발지 PORT와 목적지 PORT에 대한 정보
      • 하나의 IP에서 2가지 이상의 작업을 할 때 구분해줄 수 있는 정보가 됩니다.
    • 전송 제어에 대한 정보
      • IP의 비연결성을 해결합니다.
    • 순서와 관련한 정보
    • 검증과 관련된 정보
      • IP의 비신뢰성을 해결합니다.
  4. IP 패킷을 생성하여 Hello, world! 메시지를 감싸고 있는 TCP 정보를 감쌉니다.
    • 출발지 IP와 목적지 IP에 대한 정보가 추가됩니다.
  5. LAN 카드를 통해 정보를 전송할 때 Ethernet frame으로 한 번 더 감싸서 내보냅니다.
    • Ethernet frame에는 랜카드에 포함되어 있는 MAC 주소와 같은 정보가 포함되어 있습니다.

IP 프로토콜 (인터넷 프로토콜)

  • 지정한 IP 주소에 패킷이라는 통신 단위로 데이터를 전달합니다.
    • 출발지, 목적지 IP가 정해져 있습니다.
    • 단, 출발지 IP에서 목적지 IP로 전달할 때와 목적지 IP에서 출발지 IP로 응답할 때 다른 루트로 전달될 수 있습니다.

IP 프로토콜의 한계

비연결성

  • 패킷을 받을 대상이 없거나 서비스 불능이어도 패킷을 전송합니다. (우편을 보내듯이 보냅니다.)

비신뢰성

  • 패킷이 순서대로 전달되지 않을 수 있습니다.
    • 내용이 길 경우 끊어서 보내는데, 각각의 패킷이 원하는 순서대로 보내지지 않습니다.
  • 패킷이 중간에 사라질 경우 확인이나 대응을 할 수 없습니다.
    • 서버와 서버 사이를 오고가며 전달하는데, 그 과정에서 서버가 꺼져있다면 대응이 불가합니다.

프로그램 구분

  • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 경우 구분이 되지 않습니다.

TCP 프로토콜 (전송제어 프로토콜)

연결지향 - TCP 3 way handshake

출발지 IP와 목적지 IP가 연결되었는지를 아래의 방법으로 확인합니다.

TCP 3 way handshake

단, 물리적으로 연결된 것이 아닌 논리적으로 연결된 상태입니다. 물리적인 연결이라고 하면 옛날에 전화 랜선 뽑아서 연결하던 모뎀 시절을 생각하면 됩니다. (인터넷을 쓰는 동안에는 전화가 안 되던 그 시절)

이것으로 IP 프로토콜의 비연결성을 해결할 수 있습니다.

데이터 전달 보증, 순서 보장

패킷이 중간에 사라질 경우에 대한 확인 혹은 대응이 가능합니다.

데이터 전달 보증

데이터를 보내는 순서가 바뀌지 않습니다.

데이터 순서 보장

이 2가지로 IP 프로토콜의 비신뢰성을 해소할 수 있습니다.

신뢰할 수 있는 프로토콜이기 때문에, 현재는 대부분의 애플리케이션에서 TCP 프로토콜을 사용하고 있습니다.


UDP 프로토콜 (사용자 데이터그램 프로토콜)

  • 기능이 거의 없습니다.
  • 연결지향 X, 데이터 전달 보증 X, 데이터 순서 보장 X
  • IP와 거의 동일하고, PORT와 체크섬(중복 검사) 정도만 추가된 형태입니다.
  • 대신 단순하고 빠릅니다.
  • TCP는 연결지향, 데이터 전달 보증, 순서 보장 등을 거치면서 데이터의 스펙이 커져 최적화하기 어렵지만, UDP는 아무것도 되어있지 않아서 최적화하기에 더 나을 수 있습니다.

PORT

  • 같은 IP 내에서 프로세스를 구분해주는 역할을 담당합니다.
    • IP가 아파트라면, PORT는 동, 호수와 같은 역할입니다.
  • 0 ~ 65535 할당이 가능합니다.
  • 이 중 0 ~ 1023은 잘 알려진 포트이므로 사용하지 않는 것이 좋습니다.
    • FTP: 20, 21
    • TELNET: 23
    • HTTP: 80
    • HTTPS: 443

DNS (도메인 네임 시스템)

  • IP가 언제든 바뀔 수 있고 외우기도 어렵기 때문에, 편리하게 사용할 수 있도록 도와주는 시스템입니다.