본 편은 해당 강의 내용과 더불어, "면접을 위한 CS 전공지식 노트" 에서 연관내용을 함께 정리요약한 내용임을 밝힌다. :)
⬛ 인터넷 프로토콜 스택 4계층
⬛ IP
IP(인터넷 프로토콜)는 네트워크 상에서 장치 간 데이터 송수신을 위해 사용되는 주요 프로토콜로, 장치 간 고유 주소를 제공하여 데이터가 정확한 목적지에 도달하도록 한다.
🟢 IP 인터넷 프로토콜 역할
- 지정한 IP 주소에 데이터 전달
- 패킷이라는 통신 단위로 데이터 전달
🟢 IP 인터넷 프로토콜 한계
- 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷전송
- 비신뢰성: 중간에 패킷이사라지거나, 순서대로 오지 않는 문제
- 프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘이상일때 문제
🟢 IPv4 vs IPv6
Pv4는 32비트, IPv6는 128비트 주소체계로, IPv6는 주소 부족 문제를 해결하여 NAT, 서브네팅 같은 추가 기술이 불필요하다는 특징이 있다.
🟢 IPv6의 특징
- IPSec 내장: 데이터 패킷 암호화를 통한 보안 강화.
- 단순해진 헤더: IPv4의 불필요한 필드가 제거되어 처리 속도 향상.
- 체크섬 제거: IPv6는 체크섬 필드가 없으며, 상위 프로토콜(TCP, UDP)에 의존하여 헤더가 더 효율적.
- 고정 헤더 길이: IPv6는 40바이트 고정 길이로, 가변 길이 정보가 필요하지 않음.
⬛ 클래스풀 (Classful IP Addressing)
클래스풀(Classful) 주소 체계는 네트워크 주소를 크기에 따라 세 가지로 나누는 방식이다.
과거에는 회사나 기관의 네트워크 규모에 따라 클래스풀 주소를 할당했다. 각각의 네트워크 크기에 맞춰 A, B, C 클래스로 나뉜 고정된 주소 범위를 할당했다.
🟢 IP 주소 구조와 클래스 구분
IP 주소는 4개의 숫자(옥텟)로 구성되어 있고, 각 숫자는 0부터 255 사이이다. (예: 127.255.255.255)
여기서, 네트워크 ID와 호스트 ID의 개념을 알아야 한다. 네트워크 ID는 네트워크 자체를 식별하는 부분이고, 호스트 ID는 네트워크 내의 개별 장치(컴퓨터 등)를 식별하는 부분이다.
- 클래스 A:
첫 번째 옥텟(숫자)만 네트워크 ID로 사용한다. 나머지 세 옥텟은 호스트 ID이다.
예: 127.255.255.255에서 127이 네트워크 ID, 나머지 255.255.255가 호스트 ID예요.
주소 범위: 0 ~ 126으로 시작하는 주소가 클래스 A에 속한다.
호스트 수: 한 네트워크에 약 1,600만 개의 호스트 ID를 가질 수 있다. - 클래스 B:
처음 두 옥텟이 네트워크 ID로, 나머지 두 옥텟이 호스트 ID가 된다.
예: 192.0.0.0에서 192.0이 네트워크 ID, 나머지 0.0이 호스트 ID.
이렇게 IP 주소의 앞부분이 네트워크 ID, 뒷부분이 호스트 ID로 사용되며, 클래스에 따라 네트워크와 호스트 ID의 구분 위치가 다르다.
(클래스 A는 1-126, 클래스 B는 128-191, 클래스 C는 192-223)
클래스는 아래기준으로 할당했다.
- 큰 회사나 기관: 클래스 A 주소를 받았다. 한 네트워크에 1,600만 개나 되는 IP를 쓸 수 있었기 때문에 아주 큰 네트워크에 적합했다.
- 중간 규모 회사: 클래스 B 주소를 할당받아 약 6만 5천 개의 IP를 사용했다. 대학이나 중견기업들이 주로 이 클래스를 썼다.
- 작은 회사나 조직: 클래스 C 주소를 받아 한 네트워크에 최대 254개의 IP를 썼다. 작은 회사나 소규모 조직이 주로 클래스 C를 받았다.
이 방식은 처음에는 괜찮았지만, 인터넷이 발전하면서 문제가 커졌다.
🟢 클래스풀 주소체계의 한계
- 비효율성: 작은 회사가 클래스 C로 충분하지 않으면 클래스 B를 받아야 했고, 그럼 실제 필요보다 더 많은 주소가 낭비되었다.
- 주소 부족: 특정 클래스의 주소가 빠르게 고갈되기 시작했다.
그래서 CIDR이 등장하면서, 이런 고정된 클래스를 없애고 필요한 만큼만 주소를 유연하게 나눌 수 있게 되었다.
⬛ 클래스리스 (Classless Inter-Domain Routing, CIDR)
이 방식은 클래스를 없애고, 각 네트워크에 필요한 만큼만 주소를 나누는 방식이다. 여기서 중요한 개념이 서브넷 마스크다.
CIDR 표기법에서는 IP 주소 뒤에 /숫자로 서브넷 마스크를 표현한다. 예를 들어, 192.168.0.0/24에서 /24는 네트워크 부분이 24비트 길이임을 나타낸다. 이걸 통해 더 유연하게 네트워크를 할당하고, 주소 낭비를 줄일 수 있다.
- 서브네팅: 네트워크를 작은 네트워크(서브넷)으로 나누는 것
- 서브넷 마스크: 네트워크 부분과 호스트 부분을 구분해 주는 일종의 필터. 서브네트워크를 위한 비트마스크.
🟢 서브넷 마스크와 IP 주소의 관계
서브넷 마스크는 네트워크 주소와 호스트 주소를 나누는 역할을 한다.
서브넷 마스크에서 1로 채워진 부분은 네트워크 ID를 나타내고, 0으로 채워진 부분은 호스트 ID를 나타낸다.
예를 들어, 192.168.50.112라는 IP 주소가 있다.
여기에 서브넷 마스크가 255.255.255.0이라면, 네트워크 ID는 192.168.50이고 호스트 ID는 112가 된다.
🔷 좀더 자세한 설명
컴퓨터는 IP 주소와 서브넷 마스크를 비교해서 네트워크 ID를 찾는다. 이때 AND 연산을 사용한다.
IP 주소: 192.168.50.112를 이진수로 표현해보자.이때 예를들어 서브넷마스크가 255.255.255.0이라고 해보자.
11000000.10101000.00110010.01110000
서브넷 마스크: 255.255.255.0은 이진수로 11111111.11111111.11111111.00000000
이제 각 자리수를 AND 연산 해보면:
앞 3부분은 모두 1이라서 네트워크 ID가 되고, 마지막 부분은 모두 0이 되어서 호스트 ID가 된다.
이렇게 AND 연산을 통해 IP 주소에서 네트워크와 호스트를 구분하는 것이다!
위 예제에서 /24의 의미를 살펴보자.
/24는 서브넷 마스크의 네트워크 부분이 24개 1로 되어있다는 뜻이다. 즉, 11111111.11111111.11111111.00000000이 돼서 앞 24비트가 네트워크라는 의미이다.
서브넷 마스크는 IP 주소를 네트워크와 호스트로 구분해 주는 필터라고 생각하면 쉽다.
⬛ TCP (Transmission Control Protocol)
IP의 신뢰성 부족 문제와 여러 한계를 보완한다.
🟢 TCP 특징
- 연결지향 - TCP 3 way handshake (가상 연결)
- 데이터 전달 보증
- 순서 보장
- 신뢰가능 프로토콜
- 현재는 대부분 TCP 사용
⬛ UDP (User Datagram Protocol)
🟢 UDP 특징
- 연결지향 X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
- IP와 거의 같고 PORT,체크섬 정도만 추가
- 애플리케이션에서 추가 작업 필요
⬛ PORT, DNS
PORT: 동일한 IP 내에서 여러 프로세스를 구분하는 역할을 한다.
DNS: IP 주소는 변경될 수 있고 기억하기 어렵기 때문에, 도메인명을 IP 주소로 변환해주는 DNS가 개발되었다.
'Java' 카테고리의 다른 글
[Java] 김영한의 실전 자바 - 고급 2편 섹션12 HTTP 서버 만들기, 서블릿 (3) | 2024.11.21 |
---|---|
[Java] 김영한의 실전 자바 - 고급 2편 섹션6 네트워크,자원 정리 (0) | 2024.11.04 |
[Java] 김영한의 실전 자바 - 고급 2편 섹션5 File,Files (0) | 2024.10.28 |
[Java] 김영한의 실전 자바 - 고급 2편 섹션2 I/O 기본1,2 (0) | 2024.10.28 |
[Java] 김영한의 실전 자바 - 고급 1편 섹션12 스레드 풀과 Executor 프레임워크2 (1) | 2024.09.30 |