(HTTP) 인터넷 네트워크 - 인터넷 통신, IP(인터넷 프로토콜)

짜스의 하루 ·2024년 2월 28일

인터넷 네트워크

  1. 인터넷 통신
    인터넷에서 컴퓨터 둘은 어떻게 통신할까?

    만약 클라이언트와 서버가 가까이 있다면 케이블로 2PC를 연결하여 통신할 수 있다.

    하지만, 클라이언트와 서버의 거리가 멀면 그 사이에 있는 인터넷 망을 통해서 Hello,world라는 메세지를 보내야 한다.

  2. 복잡한 인터넷 망
    인터넷 망은 너무 복잡하다! 클라이언트(출발지)에서 인터넷 망 내부의 수 많은 중간 노드(서버)를 거쳐 메세지를 서버(목적지)까지 전달해야 한다.
    그럼 어떤 규칙으로 수 많은 노드들을 거쳐 목적지에 메시지를 전달할 까?

이를 이해하기 위해 IP에 대해서 학습해보자


IP(인터넷 프로토콜)

1. IP 주소 부여

메세지를 전달하기 위해, 클라이언트(출발지)와 서버(목적지)의 IP주소가 부여된 상태여야 한다.

2. IP(인터넷 프로토콜) 역할

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

3. IP 패킷 정보

패킷 단위로 데이터를 전달한다. 즉, 전송 데이터(보낼 메세지)와 함께 출발지 IP(클라이언트 IP), 목적지 IP(서버 IP)등을 함께 묶어 패킷으로 만든 후 전달한다.

4. 클라이언트 패킷 전달

5. 서버 패킷 전달

6. IP 프로토콜의 한계
1) 비연결성

  • 패킷을 받을 대상이 없거나 서비스 불능 상태 -> 패킷 전송 가능

2) 비신뢰성

  • 중간에 패킷이 사라지면? -> 해결 X
  • 패킷이 순서대로 안오면? -> 해결 X

3) 프로그램 구분

  • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면? -> 구분 X
    예) 한 PC로 게임, 음악 듣기를 하면 IP주소는 같음

6-1. 비연결성 - 대상이 서비스 불능, 패킷 전송


클라이언트 (출발지)에서 패킷을 전송하려고 할 떄, 대상 서버(목적지)의 상태는 알 수 없다. 그래서 항상 패킷을 보내게 되는 문제가 있다.

6-2. 비신뢰성 - 패킷 소실

만약, 인터넷 망의 어떤 중간 노드(서버)가 문제가 생기면, 클라이언트(출발지)에서 보낸 패킷이 유실되는 문제가 있다.

6-3. 비신뢰성 - 패킷 전달 순서 문제 발생

패킷의 용량이 매우 클 떄, 패킷을 분리해서 보내게 된다.
그런데 그 패킷들이 모두 같은 경로로 (같은 노드를 거쳐서) 이동하는 것은 아니기 때문에, 패킷 전달 순서가 보장되지 않는 문제가 있다.


TCP, UDP

앞서 보았던 IP 프로토콜의 한계점을 해결해주는 것이 TCP이다.
1. 인터넷 프로토콜 스팩의 4계층

2. 프로토콜 계층
채팅 프로그램에서 Hello, world! 라는 메시지를 보내는 상황을 가정한다.

1. 채팅 프로그램이 Hello,world 라는 메세지를 생성한다.
2. 생성된 메세지를 SOCKET 라이브러리를 통해서 OS계층에 넘긴다.
3. OS 계층의 TCP계층에서 메세지 데이터(Hello, world!)를 포함해 TCP 정보를 생성한다.
4. OS 계층의 IP 계층에서 TCP 정보를 포함해 IP 패킷을 생성한다.
IP 패킷: (IP 관련 정보 + (TCP 관련 정보 + (메시지 데이터)))
5) IP 패킷이 LAN 카드를 통해 나갈 때 Ethernet Frame 이 포함되어 나간다.

  • EtheretFrame: LAN 카드의 MAC 주소 등 물리적 정보가 포함됨
    웹/HTTP 개발 공부에서는 IP 프로토콜까지만 깊이있게 공부하면 된다.
  1. IP 패킷 정보

  2. TCP/IP 패킷 정보

    TCP 정보가 추가되면서 IP의 한계점이 해결되었다.

  • TCP 정보: 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등..
  1. TCP(전송 제어 프로토콜)의 특징
    1) 연결지향 - TCP 3 handshake(가상연결)
  • 먼저 연결을 한 다음에 메세지를 보냄
  • 여기서 말하는 연결은 물리적인 연결이 아닌, 논리적인 연결이다.
    2) 데이터 전달 보증
  • 패킷 손실이 되어 서버가 메세지를 받지 못한 경우, 클라이언트가 알 수 있음
    3) 순서 보장
    4) 신뢰할 수 있는 프로토콜, 현재는 대부분 TCP 사용

5-1. TCP 3 way handshake

1) 클라이언트가 서버에게 접속을 요청하는 SYN을 보냄
2) 서버가 SYN을 받았으면, 서버에서 클라이언트로 접속을 요청하는 SYN과 함께 ACK르 보냄
3) 클라이언트가 SYN을 받았으면, 서버로 ACK를 보냄
-> 3 way handshake 후, 클라이언트와 서버는 서로 연결되었다는 것을 인식한다!
4) 클라이언트가 서버로 데이터를 전송한다. (요즘은 3번 단계에서 ACK와 함께 데이터를 보내기도 함)

5-2. 데이터 전달 보증

클라이언트가 데이터를 전송하고 서버고 데이터를 받았으면, 클라이언트에게 응답을 해준다.

5-3. 순서 보장

클라이언트에서 패킷을 보낸 순서대로 서버로 오지 않으면, 서버가 클라이언트에게 다시 순서대로 패킷이 전송되도록 요청한다.

6. UDP(사용자 데이터그램 프로토콜) 특징

  • 3 way handshake, 데이터 전달 보증X, 순서 보장X
  • 단순하고 빠름
  • IP와 거의 유사(PORT, checksum 정도만 추가됨)
  • 애플리케이션에서 추가 작업 필요

PORT

1 .한번에 둘 이상 연결해야 한다면?
현재 클라이언트 PC에서 게임, 화상통화, 웹 브라우저 요청도 하고 있는 상황을 가정해보자.
즉, 클라이언트 PC가 여러 개의 서버와 통신해야 하는 상황이다.

서버가 클라이언트 PC로 패킷을 보내려면, 클라이언트 IP로 패킷을 보낸다
하지만 IP만 사용하면, 클라이언트 입장에서는 받은 패킷이 게임, 화상, 웹브라우저 요청 중 어떤 프로그램으로 온 패킷인지 알 수 없다.
그래서 프로그램을 구분하기 위해 PORT를 사용한다.

2. TCP/IP 패킷 정보

TCP/IP 패킷을 보면, 출발지IP, 목적지IP와 함께 출발지 PORT, 목적지 PORT가 포함된 것을 알 수 있다.

  • IP : 목적지 서버를 찾는 용도
  • PORT : 서버 내부에서 돌아가는 애플리케이션을 구분하는 용도

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

PORT구분

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

DNS

1. IP는 기억하기 어렵다.

2 IP는 변경될 수 있다

3. DNS(Domain Name System)
도메인 명을 IP주소로 변환시켜주는 것이다(전화번호부 역할)

4. DNS사용

DNS 서버에 도메인 명에 대한 IP주소를 등록해둔다.
1)클라이언트가 DNS 서버에 도메인 명에 대한 IP를 요청한다.
2) DNS 서버는 해당 도메인 명에 대한 IP 주소를 클라이언트에 전달한다.
3) 클라이언트는 해당 IP 주소로 서버에 접근한다.
→ DNS를 사용하면 IP가 기억하기 어렵고, 변경될 수 있는 문제를 해결해준다.

인터넷 네트워크 정리
IP의 한계를 극복하기 위해 TCP 도입, UDP는 IP와 비슷한데 port가 추가됐고, 필요하면 애플리케이션에서 기능확장 가능
port는 같은 IP 안에서 동작하는 애플리케이션을 구분하기 위해서 사용, IP가 아파트라면 port는 동호수
DNS는 변경될 수 있고 외우기 힘든 IP를 대신해서 사용

profile
2024. 01. 02 ~ 백앤드 공부 시작, 2024. 04.01 ~ 프론트 공부 시작

0개의 댓글