본문 바로가기
Computer Science/네트워크

[네트워크] 인터넷 네트워크(IP, TCP, UDP, PORT, DNS)

by soobaaaam 2022. 2. 25.
728x90

클라이언트와 서버는 수많은 노드로 연결된 복잡한 인터넷 망을 통해서 서로 메세지를 전송한다.

메세지가 수많은 노드를 거쳐서 목적지로 전송될 때 특정한 규칙을 통해 전송된다. 이를 이해하기 위해선 IP(인터넷 프로토콜)에 대해서 알아야 한다.

 

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

 

1. 역할

- 지정한 IP 주소(IP Address)에 데이터를 전달한다.

- 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.

 

2. IP 패킷 정보

IP 패킷 정보에는 출발지 IP, 목적지 IP, 전송 데이터가 포함된다.

 

- 클라이언트 패킷 전달 : IP 패킷을 만들어서 던진다. 노드끼리 이 패킷을 전달하다가 최종적으로 목적지에 다다른다.

- 서버 패킷 전달 : 최종 목적지에서 잘 받았다면 똑같이 IP 패킷을 다시 출발지에 던진다.

 

3. 한계

- 비연결성 : 패킷을 받은 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다 -> 대상 서버가 패킷을 받을 수 있는 상태인지 알 수 없다.

- 비신뢰성 : 중간에 패킷이 사라지거나, 패킷을 여러 개 던졌을 때 순서대로 도착하지 않을 수 있다.

- 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신되는 애플리케이션이 여러 개일수 있다.

 

인터넷 프로토콜 스택의 4계층

 

출처 : 인프런 '모든 개발자를 위한 HTTP 웹 기본 지식' 강의

 

인터넷 프로토콜 스택은 위 사진처럼 이루어져 있다.

이를 실제 상황에 적용해보면 다음과 같다.

 

출처 : 인프런 '모든 개발자를 위한 HTTP 웹 기본 지식' 강의

 

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

 

1. 특징

- 연결 지향 : 상대와 연결이 됐는지 안됐는지 확인 후 메세지를 전송한다.

- 데이터 전달 보증 : 데이터가 누락되면 알 수 있다.

- 순서 보장

 

-> TCP는 신뢰할 수 있는 프로토콜이다. 현재는 대부분 TCP를 사용한다.

 

2. TCP 3 way handshake

출처 : 인프런 '모든 개발자를 위한 HTTP 웹 기본 지식' 강의

 

1. TCP로 연결하면 우선 클라이언트에서 서버로 SYN 메세지를 보낸다.

2. 서버에서 클라이언트로 ACK와 함께 SYN을 보낸다.

3. 다시 클라이언트에서 서버로 ACK를 보낸다.

 

-> 위 과정이 끝나면 서로 연결이 됐음을 인식할 수 있다.

 

4. 연결이 다 되면 데이터를 전송한다. 클라이언트에서 서버로 ACK를 보낼 때(위 3번 과정) 데이터도 같이 보낼 수 있다.

 

-> 여기서 서버와 클라이언트가 연결된 것은 논리적인 연결이지 물리적인 연결은 아니다.

 

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

 

-  UDP는 하얀 도화지에 비유된다(기능이 거의 없다).

- 3 way handshake가 없다.

- 데이터 전달이 보증되지 않는다.

- 순서도 보장되지 않는다.

- 대신 단순하고 빠르다.

 

-> IP와 거의 유사하다. 다만, PORT와 체크섬이 추가됐다.

-> 애플리케이션에서 추가 작업이 필요하다.

 

*체크섬 : 메세지에 대해서 제대로 맞는지 검증해주는 데이터

 

 

PORT

 

- 하나의 IP에 여러 개의 애플리케이션이 실행될 때, IP로 여러 패킷이 오는데 이때 애플리케이션을 구분할 때 사용된다.

 

- 0~1023 : 잘 알려진 포트. 이 번호로는 사용하지 않는 것이 좋다.

- 0~65535 : 할당 가능.

 

 

DNS(Domain Name System)

 

- IP는 기억하기 어렵다.

- IP는 변경될 수 있다.

 

-> 따라서 DNS 서버에 도메인 명을 등록하여 사용한다.

 

출처 : 인프런 '모든 개발자를 위한 HTTP 웹 기본 지식' 강의

 

클라이언트가 DNS 서버에 원하는 도메인 명의 IP 주소를 요청하면 이를 DNS 서버에서 응답해주고, 해당 IP 주소를 통해 서버에 접속한다.

 


* 본 글은 인프런 김영한님 강의 '모든 개발자를 위한 HTTP 웹 기본 지식'에 기반하여 작성하였습니다.