[모든 개발자를 위한 HTTP 웹 기본 지식]섹션2. 인터넷 네트워크

dev_lee·2025년 2월 21일
post-thumbnail

인터넷 통신

인터넷상에서 두 개의 컴퓨터는 어떻게 통신할까?

클라이언트와 서버가 붙어 있다면 케이블을 연결해서 메세지를 보내면 된다. 하지만 클라이언트와 서버가 떨어져 있다면 이 방법은 불가능하다.
그래서 인터넷망을 통해서 메세지 전달한다.
인터넷은 수많은 중간 노드라고 하는 서버들을 거쳐서 메세지가 보내진다.
어떤 규칙으로 어떻게 넘길까? 이걸 이해하기 위해선 인터넷 프로토콜 또는 IP 프로토콜이라고 하는 IP에 대해 학습이 필요하다.

IP(인터넷 프로토콜)

프로토콜
컴퓨터와 컴퓨터 사이, 또는 한 장치와 다른 장치 사이에서 데이터를 원활히 주고받기 위하여 약속한 여러 가지 규약

예를 들어 복잡한 인터넷망에서 어떤 메세지를 미국에 있는 친구에게 보내야한다.
그러러면 최소한의 규칙이 있어야 한다.
IP 주소라는걸 통해서 가능해진다.

  • 클라이언트가 IP 주소를 부여받는다.
  • 메세지를 받을 서버도 IP 주소가 존재해야한다.

IP 인터넷 프로토콜의 역할

  • 지정한 IP 주소(IP Address)에 데이터 전달
  • 패킷(Packet)이라는 통신 단위로 데이터 전달

IP 패킷 정보

  • 출발지 IP : 내 IP 주소
  • 목적지 IP : 메세지를 받을 친구의 IP 주소

IP 프로토콜의 한계

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
  • 신뢰성
    • 중간에 패킷이 사라지면?
      • 패킷은 인터넷망의 여러 서버들을 거쳐서 전달이 된다. 만약 중간 서버에 오류가 발생하면 패킷이 유실될 수 있다.
    • 패킷이 순서대로 안오면?
      • 패킷의 용량이 크면 패킷을 끊어서 보낸다. 패킷을 끊어서 보내면 패킷의 순서를 보장할 수 없다.
  • 프로그램 구분
    • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?

TCP 프로토콜로 해당 문제 해결 가능하다.

TCP, UDP



1. 메세지 생성
2. SOCKET 라이브러리를 통해 OS 계층에 메세지 전달
3. 메세지를 TCP 정보로 감쌈
4. TCP 정보를 IP 정보로 한번 더 감쌈 -> IP 패킷 생성(IP 정보, TCP 정보, 메세지 정보 포함)
5. 네트워크 인터페이스(LAN 카드)를 통해서 나갈 때 이더넷 프레임이 포함되어 나간다.

이더넷 프레임
랜카드에 등록된 MAC 주소 같은 물리적인 정보

패킷
수화물을 의미하는 패키지 + 덩어리를 뜻하는 버킷의 합성어

TCP/IP 패킷 정보


TCP의 전송 제어, 순서, 검증 정보가 추가되므로 IP만으로는 해결 되지 않았던 순서 제어 문제나 이런것들이 해결 된다.

TCP 특징

전송 제어 프로토콜(Transmission Control Protocol)

  • 연결지향 - TCP 3 way handshake(가상 연결)
    • 연결을 확인하고 메세지를 전송함
  • 데이터 전달 보증
    • 중간에 패킷이 누락되면 알 수 있다?
  • 순서 보장

  • 신뢰할 수 있는 프로토콜
  • 현재는 대부분 TCP 사용

TCP 3 way handshake (가상 연결)


1. 클라이언트가 서버에 SYN 요청 보냄
2. 서버가 연결 가능하다면 ACK(접속 요청 수락) 응답과 서버도 클라이언트에게 SYN 요청 보냄
3. 클라이언트가 서버에게 ACK 응답 반환
=> 클라이언트와 서버가 서로 양쪽에 신뢰를 준다.

왜 가상 연결일까?
물리적으로 연결된 것이 아닌 개념적(논리적)으로만 연결된 것
TCP 연결은 실제로 물리적(랜선 등)으로 연결된 것이 아니라, 네트워크를 통해 "연결된 것처럼" 동작하는 것

데이터 전달 보증

순서 보장


1. 큰 메세지를 패킷으로 쪼개서 전송
2. 순서가 맞지 않음
3. 잘못 온 순서의 패킷부터 다 버리고 다시 전송 받는다

데이터 전달 보증, 순서 보장 등이 가능한 이유는 TCP 세그먼트 안에 순서, 검증 정보 등이 추가되어 있기 때문이다.

UDP 특징

사용자 데이터그램 프로토콜(User Datagram Protocol)

  • 하얀 도화지에 비유(기능이 거의 없음)
  • 연결 지향 - x
  • 데이터 전달 보증 x
  • 순서 보장 x
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
  • 정리
    • IP와 거의 같다. (+ PORT, 체크섬)
    • 애플리케이션 추가 작업 필요
  • PORT
    같은 IP 주소에서 여러 개의 애플리케이션이 동시에 통신할 때 애플리케이션 패킷을 각각을 구분하는 패킷 구분자 역할을 함
  • 체크섬
    데이터가 전송 중에 손상되지 않았는지 검증하는 값
    UDP 헤더에 포함되어 있으며, 수신 측에서 데이터 무결성을 확인할 때 사용한다.

UDP의 장점

TCP는 3 way handshake, 데이터 전달 보증, 순서 보장을 하려면 시간이 걸린다.
검증 데이터를 넣어 데이터의 양도 크고 전송 속도를 빠르게 만드는 최적화를 할 수 없다.

프로토콜을 최적화 하고 싶으면 UDP를 사용하면 된다.
하얀 도화지 같은 상태라 애플리케이션이 필요한 기능을 직접 만들어 최적화 가능하다.

TCP의 복잡한 검증 과정 없이 속도를 최적화할 수 있기 때문에 UDP가 각광받고 있다.

Port

한 클라이언트에 둘 이상의 서버를 연결해야하면?


TCP에는 출발지 port와 목적지 port가 있다.

  • IP는 목적지 서버
  • Port는 목적지 서버 안에서 돌아가는 애플리케이션 구분자

PORT - 같은 IP 내에서 프로세스 구분

내 포트를 어떻게 알지?

TCP/IP 패킷에 출발지, 목적지의 IP정보와 PORT 정보까지 보내기 때문이다.

쉽게 비유하자면 IP는 아파트, PORT 동호수 같은 개념이다.

PORT

  • 0 ~ 65535 할당 가능
  • 0 ~ 1023 잘 알려진 포트, 사용하지 않는 것이 좋음
    • FTP - 20, 21
    • TELNET - 23
    • HTTP - 80
    • HTTPS - 443

DNS

IP는 기억하기 어렵고 변경될 수 있다.

DNS

도메인 네임 시스템(Domain Name System)

  • 쉽게 말해 전화번호부 같은 서버
  • 도메인 명을 IP 주소로 변환

중간에 IP 주소가 변경되더라도 DNS 서버의 IP 주소만 변경하고 도메인명으로 호출하면 된다.


출처
김영한 - 모든 개발자를 위한 HTTP 웹 기본 지식
이 블로그에 포함된 모든 코드와 이미지는 원작자이신 김영한 강사님의 저작권에 귀속됩니다.

0개의 댓글