2022. 2. 18. 17:57ㆍMajor`/컴퓨터 네트워크
네트워크 계층 프로토콜
IP 프로토콜
- Addressing 방식 지정
- IP 데이터그램의 형식
- 패킷 Handling 방식
>> Data의 전송 관련 제어 프로토콜
>> Data Plane
라우팅 프로토콜
- Packet의 경로를 결정
- RIP / OSPF / BGP / ....
>> Control Plane
ICMP 프로토콜
- Packet의 에러 보고
- 라우터의 신호 제어
>> 에러/신호 관련 제어 프로토콜
IP 데이터그램 형식 (IPv4)
- 고정 헤더 : Version / Header Length / TOS(Type of Service) / Total Length / Identification / Flags / Fragment offset / TTL(Time to live) / Protocol / Header Checksum / Dest IP Addr / Source IP Addr
- 가변 헤더 : Options
- 페이로드 : 데이터
- IP 데이터그램의 최소 크기 = 고정헤더 크기 = 4byte × 5 = 20byte
Version
- IP 데이터그램의 버전
- IPv4 : 0x8000
- IPv6 : 0x86DD
Header Length
- 고정헤더 + 가변헤더의 총 길이
- 어디까지가 헤더이고, 어디서부터 데이터인지 파악 가능
- Data길이 = Total Length - Header Length
TOS (Type Of Service)
- 페이로드의 Data가 필요로하는 서비스가 뭔지 알려주는 형식
- 필요로하는 서비스를 통해서 해당 데이터그램의 경로 선택에 반영된다
- 실제로 데이터그램의 목적지가 동일해도 TOS에 따라 서로 다른 경로를 통해서 목적지에 도달한다
- 실제로 사용은 거의 하지 않는다
Total Length
IP 데이터그램의 총 길이
- 헤더길이 + Data길이
TTL (Time To Live)
- 이 데이터그램이 건너갈 수 있는 홉의 최대 크기
- 홉을 거쳐갈때마다 TTL은 1씩 감소된다
- 목적지 도착전에 TTL이 0이 된다면 해당 홉(라우터)가 이 데이터그램에 대한 포워딩을 멈추고 Drop시킨다
Protocol
- 상위 계층(Transport Layer)의 프로토콜이 뭔지 기입
- TCP = 6
- UDP = 17
IP 데이터그램 단편화 & 재조립 (Fragmentation & Assembly)
이 단계에서 데이터그램의 Identification / Flags / Fragment Offset 필드가 사용된다
- 네트워크의 Link에는 링크가 전달할 수 있는 패킷의 최대크기(MTU)가 존재한다
- if 데이터그램의 크기 > MTU
- 데이터그램을 분할시켜야 한다 :: 단편화 (Fragmentation)
- 분할된 데이터그램은 반드시 목적지에서 재조립된다
- 중간에 재조립 X
- Internet에서 "복잡한 일"은 Edge로 넘기려하기 때문이다
- 중간에 재조립 X
Example)
- 데이터그램의 길이(총 길이 :: 헤더 + Data) : 4000
- MTU : 1500
- 데이터그램 길이 > MTU이므로, 해당 데이터그램을 분할시켜야 한다
- 여기서 데이터그램의 헤더 길이는 20byte라고 가정 (Options X)
- 분할된 데이터그램 각각에 대해서 당연히 각각 길이도 달라지기 떄문에
- Length / ID / Flags / Offset 총 4개의 필드가 변한다
- 분할된 데이터그램 각각에 대해서도 헤더 길이는 20byte (Options X)
Length
1) 원본 데이터그램
- 총 길이 4000 = 헤더 길이 20 + 데이터 길이 3980
2) 분할 데이터그램 1
- 총 길이 1500 = 헤더 길이 20 + 데이터 길이 1480
3) 분할 데이터그램 2
- 총 길이 1500 = 헤더 길이 20 + 데이터 길이 1480
4) 분할 데이터그램 3
- 분할 데이터그램3의 데이터 길이 = 원본 데이터그램의 데이터 길이 - (분할 데이터그램 1, 2의 데이터 길이)
- X = 3980 - (1480 + 1480) = 3980 - 2960 = 1020
- 총 길이 1040 = 헤더 길이 20 + 데이터 길이 1020
ID :: Identification
- 분할된 데이터그램의 ID는 원본 데이터그램의 ID와 동일해야 한다
- 그래야 목적지에서 ID별로 구분할 수 있다
Fragflag :: Flags
- 분할된 데이터그램 각각에 대해서 "내 뒤에 분할된 데이터그램이 또 있다/없다"를 알려주는 Flag
Flag = 1
- "내 뒤에 분할된 데이터그램 또 있어"
Flag = 0
- "내 뒤에 더 이상 분할된 데이터그램이 존재하지 않아"
offset :: Fragment Offset
- 전체 Data중, 분할된 각각의 데이터그램의 Data는 전체의 몇번째 Data인가를 나타내는 필드
- 8byte를 1로 간주하고 설정
- 분할 데이터그램 1 Offset : 0
- 분할 데이터그램 2 Offset : 1480/8 = 185
- 분할 데이터그램 3 Offset : 2960/8 = 370
IP주소
- Host/Router 인터페이스를 위한 32bit 식별자 (IPv4)
▶ 인터페이스
- Host/Router ~ 물리 링크(유선/무선)사이의 연결
- Router는 여러 개의 인터페이스 보유
- Host는 1개 or 2개의 인터페이스 보유 (유선/무선)
서브넷 (Subnet)
- IP주소는 서브넷 부분 / 호스트 부분으로 나눠진다
- 서브넷 부분 : 전체 네트워크에서 각각의 서브넷을 구분
- 호스트 부분 : 서브넷 내에서 각 Host를 구분
- 서브넷에 존재하는 Host들은 라우터 없이 서로 물리적으로 연결된다
서브넷 마스크
- IP 주소에서 어디까지가 서브넷 주소인지를 표현해준다
- '/24' : IP 주소중 상위 24비트가 서브넷 주소
- '/30' : IP 주소중 상위 30비트가 서브넷 주소
CIDR (Classless Interdomain Routing)
- 원래 서브넷 주소의 비트수는 클래스마다 정해져있다
- A 클래스의 서브넷 비트 : 호스트 비트 = 8 : 24
- B 클래스의 서브넷 비트 : 호스트 비트 = 16 : 16
- C 클래스의 서브넷 비트 : 호스트 비트 = 24 : 8
- CIDR은 클래스구분없이 서브넷 비트가 임의의 개수를 가지는 것을 의미
- 200.23.16.0/23 = 200.23.16.0에서 상위 23bit가 서브넷 주소이다
IP주소 할당 방법
1. 개별 IP 주소를 Host에 할당
2. 시스템 관리자에 의해 파일에 IP주소 저장
- 거의 고정 IP이다
3. DHCP (Dynamic Host Configuration Protocol) 방식
- DHCP로부터 Client가 동적으로 IP 주소를 할당받는다
- Client는 인터넷에 연결할 때마다 IP주소를 DHCP 서버로부터 할당받는다
DHCP (Dynamic Host Configuration Protocol)
- Host가 네트워크에 접속할 때 서버로부터 IP주소를 동적으로 획득
- 네트워크에 연결되었을 때만 주소를 가지므로 주소의 재사용 가능
- 짧은 시간 동안에 네트워크에 연결되는 모바일 사용자 지원
>> DHCP 서버는 Client의 새로운 주소뿐만 아니라, 첫번째 홉 라우터의 주소 / 로컬 DNS 서버 이름 + IP 주소 / 네트워크 마스크까지 추가로 준다
Example)
- 223.1.2 서브넷에 새로운 기기가 들어왔다
- 해당 기기가 서브넷에 들어와서 시스템을 키게 되면 → DHCP 클라이언트 프로그램이 자동 실행된다 → 해당 서브넷을 담당하는 DHCP 서버를 contact
DHCP 서버
- 일정 범위의 IP주소를 다른 클라이언트에게 할당해준다
- 클라이언트로부터 IP 할당 요청이 들어오면 IP를 부여해주고, 할당 가능한 IP들을 관리한다
DHCP 클라이언트
1. 시스템이 시작하면 DHCP서버에 자신의 시스템을 위한 IP주소 요청
2. DHCP 서버로부터 IP주소를 부여받으면 TCP/IP 설정이 초기화 → 다른 Host와 TCP/IP를 통해서 통신 가능
- 서버로부터 IP를 할당받으면 TCP/IP 통신 가능
>> DHCP discover (Client) / DHCP offer (Server) / DHCP request (Client) / DHCP ACK (Server) 총 4개의 과정으로 이루어져있다
Client, Server간의 상호작용은 전부 Broadcast 주소를 통해서 이루어진다
- 255.255.255.255
- 브로드캐스팅 : 네트워크에 존재하는 모든 Host에게 신호 전달
DHCP discover (Client)
▶ src
- Client는 아직 서버로부터 IP주소를 할당받지 않았기 때문에
- 자신의 IP주소를 0.0.0.0으로 설정하고 discover 메시지를 보낸다
- 메시지는 무조건 브로드캐스트 주소 :: 255.255.255.255로 보내야 한다
▶ dest
- 브로드캐스트의 주소로 보낸다 :: 255.255.255.255
▶ transaction ID
- 이 메시지를 구별할 수 있는 ID
- 같은 transaction ID를 보유한 메시지는 서로 연관있는 메시지이다
DHCP offer (Server)
▶ src
- DHCP 서버 자신의 주소인 223.1.2.5를 기입
▶ dest
- 브로드캐스트의 주소로 보낸다 :: 255.255.255.255
▶ yiaddr
- Client가 사용할 주소로 "223.1.2.4"를 보내준다
▶ transaction ID
- 이 메시지를 구별할 수 있는 ID
- 같은 transaction ID를 보유한 메시지는 서로 연관있는 메시지이다
▶ DHCP Server ID
- DHCP 서버의 주소 223.1.2.5를 기입
▶ Lifetime
- 할당한 주소를 Lifetime만큼 사용할 수 있도록 Client에게 부여한다
DHCP request (Client)
DHCP offer를 통해서 "서버가 제공한 IP"를 request 메시지를 통해서 "Client가 사용하고 싶어요"라고 요청하는 메시지
▶ src
- offer를 통해서 자신의 쓸 IP주소를 받았지만, 아직 해당 IP주소를 쓸 수 있는지 확인응답 메시지(ACK)를 받지 않았기 때문에 아직 클라이언트에게는 IP주소가 없다
▶ dest
- 브로드캐스트의 주소로 보낸다 :: 255.255.255.255
▶ yiaddr
- 정말 offer에서온 주소를 써도되는지 확인 용도 :: "223.1.2.4"
▶ transaction ID
- 이 메시지를 구별할 수 있는 ID
- 같은 transaction ID를 보유한 메시지는 서로 연관있는 메시지이다
▶ DHCP Server ID
- DHCP 서버의 주소 223.1.2.5를 기입
▶ Lifetime
- 할당한 주소를 Lifetime만큼 사용할 수 있도록 Client에게 부여한다
DHCP ACK (Server)
▶ src
- DHCP 서버 자신의 주소인 223.1.2.5를 기입
▶ dest
- 브로드캐스트의 주소로 보낸다 :: 255.255.255.255
▶ yiaddr
- DHCP ACK을 통해서 클라이언트에게 "223.1.2.4를 써라"라고 응답해준다
▶ transaction ID
- 이 메시지를 구별할 수 있는 ID
- 같은 transaction ID를 보유한 메시지는 서로 연관있는 메시지이다
▶ DHCP Server ID
- DHCP 서버의 주소 223.1.2.5를 기입
▶ Lifetime
- 할당한 주소를 Lifetime만큼 사용할 수 있도록 Client에게 부여한다
DHCP request 과정
- 일단 노트북을 인터넷에 연결하기 위해서는 본인의 IP 주소 / 첫 홉 라우터의 주소 / DNS 서버 주소가 필요하다
- DNS 서버 주소 : 통신하려는 상대의 IP 주소를 알아내기 위해서 필요
- DHCP를 사용한다
- DHCP request가 UDP/IP/802.1 이더넷 패킷으로 순차적으로 캡슐화된다
- LAN상에서 이더넷 프레임이 브로드캐스트되고 DHCP 서버의 라우터가 해당 프레임을 수신한다
- 서버에서 역캡슐화를 통해서 DHCP request를 해석한다
DHCP ACK 과정
1. DHCP 서버가 클라이언트 IP주소 / 첫 홉 라우터의 주소 / DNS 서버 이름 + IP 주소가 포함된 DHCP ACK 메시지를 작성한다
2. DHCP ACK 메시지를 패킷으로 캡슐화해서 클라이언트에게 전송하고, 이 패킷을 클라이언트가 수신한다
3. 결과적으로 클라이언트는 원하는 결과인 클라이언트 IP주소 / 첫 홉 라우터의 주소 / DNS 서버 이름 + IP 주소를 알게된다