알아볼 내용
- IP 주소와 라우팅이 필요한 이유
- 인터넷 프로토콜 (IP)와 IPv4, IPv6
데이터 링크 계층의 한계 → 라우팅 & IP 주소 필요
- MAC 주소를 이용해서 물리 계층과 데이터 링크 계층만으로 LAN을 넘어 통신이 가능할 것 같지만 불가능
이유 1 : 물리 계층과 데이터 링크 계층만으로는 다른 네트워크까지의 도달 경로 파악 어려움
- 먼 거리를 이동할 수록 최적의 경로로 패킷이 이동해야 함 ⇒ 라우팅 (routing)1이 중요
- 물리 계층, 데이터 링크 계층 장비로는 라우팅 수행 불가능
이유 2 : MAC 주소만으로 모든 네트워크에 속한 호스트 위치 특정 어려움
- 택배에 수신인 정보외에 수신지 주소도 적는 것에 비유하면, MAC 주소는 수신인 (NIC) 정보이고 IP 주소가 수신지 주소
- 따라서 IP 주소를 우선으로 활용
- IP 주소는 논리 주소로 호스트에 직접 할당 가능2
인터넷 프로토콜 (IP) : 네트워크 계층의 가장 핵심적인 프로토콜
- 두 가지 버전
- IP 버전 4 (IPv4) : RFC 791에 정의. 보통 이것으로 이야기 많이 함
- IP 버전 6 (IPv6)
IP의 기능 : Addressing and Fragmentation
- IP 주소 지정 (IP addressing) : IP 주소를 바탕으로 송수신 대상 지정하는 것
- IP 단편화 (IP fragmentation) : 전송하고자 하는 패킷의 크기가 MTU3보다 클 경우, 그 크기 이하의 복수의 패킷으로 나누는 것 ^2f37fd
- IP 패킷의 헤더도 MTU 크기에 포함
- 수신지에 도착하면 재조합됨
IPv4
IPv4 주소 형태
-
4 바이트 (32비트)로 주소를 표현하고 숫자당 8비트 (256)이기 때문에 0~255 범위 안에 있는 4개의 10진수로 표기
- 각 10진수는 점으로 구분
- 점으로 구분된 8비트를 옥텟 (octet)이라고 함
- 예시 : 192.168.1.1
-
IPv4 패킷은 프레임의 페이로드로 데이터 필드에 명시
-
32bit를 하나의 word로 사용 : 위 그림에서 패킷의 높이가 32bit
- IPv4 주소는 딱 한 word로 표현가능
7가지 주요 필드
-
식별자 (identifier) : 패킷에 할당된 번호로 재조합할 때 어떤 메시지에서 분리된 것인지 확인
-
플래그 (flag) : 3개의 비트로 구성
- 항상 0으로 예약된 비트
- DF 비트 : Don’t Fragment. 1이면 IP 단편화 X, 0이면 IP 단편화 수행
- MF 비트 : More Fragment. 1이면 쪼개진 패킷이 더 있음, 0이면 이 패킷이 마지막 패킷 ⇒ 쪼갤 때 순서가 있고 그게 유지되나? → 아니네?
-
단편화 오프셋 (fragment offset) : 패킷 초기 데이터에서 몇 번째로 떨어진 패킷인지 나타냄
- 단편화되어 전송될 때 도착 순서는 달라지기 때문에 재조합할때 순서 필요
- 단편화 오프셋 1480 : 첫 데이터로부터 1480만큼 떨어진 패킷
그래서 재조립 어떻게 한다고?
단편화 오프셋 순서대로 정렬한 후,
마지막 조각 (MF=0)이 올 때까지 기다렸다가 전체 원래 데이터그램 복원식별자가 같은 조각들끼리 모아서,
-
TTL (time to live) : 패킷 수명
- 하나의 라우터를 거칠 때마다 (하나의 홉4마다) 1씩 감소하고 0이 된 패킷은 폐기
- 0되면 송신한 호스트에게 ‘시간 초과’ 알림 ⇐ ICMP 프로토콜
- 무의미한 패킷이 네트워크상에 지속적으로 남아있는 것 방지
- 처음에 어떻게 정해지나? : 운영체제 또는 전송 프로토콜마다 기본값 있음
- Window : 128, Linux/Unix/macOS : 64
- 하나의 라우터를 거칠 때마다 (하나의 홉4마다) 1씩 감소하고 0이 된 패킷은 폐기
-
프로토콜 : 상위 계층의 프로토콜이 무엇인지를 나타냄
- 전송계층의 대표적인 프로토콜 TCP는 6, UDP는 17
-
송신지 IP 주소 : 송신지의 IPv4 주소
-
수신지 IP 주소 : 수신지의 IPv4 주소
IPv6
- IPv4의 문제 : 이론적 최대 주소가 , 약 43억 개뿐이라 고갈될 수 있음
- 유망한 프로토콜로 떠오르고 있고 다수 장비에서 지원
- 그래도 아직까진 IPv4 많이 사용
IPv6 주소 형태
- 16 바이트(128비트)로 주소를 표현
- 콜론으로 구분된 8개 그룹의 16진수로 이론적 최대 주소
- 4 비트 (16진수) x 32 자리 : 128 비트
- 예시 :
2001:0230:abcd:ffff:0000:0000:ffff:1111
- 콜론으로 구분된 그룹 앞부분에 0이 연속해서 등장할 경우 0을 생략 가능 & 여러 필드에 걸쳐 0이 연속해서 등장할 경우 0 생략 가능
- 위의 예시는
2001:0230:abcd:ffff::ffff:1111
로도 표현 가능
- 콜론으로 구분된 8개 그룹의 16진수로 이론적 최대 주소
- IPv4는 헤더 길이가 가변적 (옵션, 패딩 필드)이었으나, IPv6 기본헤더는 40바이트로 고정
- 여기서도 32bit를 하나의 word로 사용 → IPv6 주소가 4줄 (word)을 차지
4가지 주요 필드
- 다음 헤더 (next header) : 상위 계층 프로토콜 가리키거나 확장 헤더 가리킴
- 확장 헤더 : 기본 헤더에 추가적인 정보 더 필요할 때 사용하며, 기본 헤더와 페이로드 데이터 사이에 위치
- 대표적인 확장 헤더 종류
- Hop-by-Hop options : 모든 경로의 네트워크 장비가 패킷 검사
- Destination options : 수신지에서만 패킷 검사
- Routing : 라우팅 관련 정보 운반
- Fragment : 단편화 관련 ⇒ 패킷에 따로 단편화 관련 필드 없는 이유
- ESP, AH : 암호화, 인증 관련
- 대표적인 확장 헤더 종류
- 확장 헤더 : 기본 헤더에 추가적인 정보 더 필요할 때 사용하며, 기본 헤더와 페이로드 데이터 사이에 위치
- 홉 제한 (hop limit) : TTL필드와 같이 패킷 수명 나타내는 필드
- 송신지 IP 주소
- 수신지 IP 주소
ARP (Address Resolution Protocol) : 동일 네트워크 내에 있는 호스트의 IP 주소를 통해 MAC 주소를 알아내는 프로토콜
- MAC 주소와 IP주소 함께 사용하지만 기본적으로 IP 주소를 사용
- 만약 상대 호스트의 IP 주소만 아는 경우 ARP 프로토콜을 이용해서 MAC 주소 파악
ARP 동작 과정
- ARP 요청
- 네트워크 내의 모든 호스트에게 “ARP 요청”이라는 패킷을 브로드캐스팅
- 10.0.0.2와 통신하고 싶은데 MAC 주소 아시는 분?
- ARP 패킷은 프레임의 페이로드에 포함되어 전송
- 오퍼레이션 코드 : 1이면 ARP 요청, 2이면 ARP 응답
- 송신지/수신지 하드웨어/프로토콜 주소
- 하드웨어 주소 : MAC 주소
- 프로토콜 주소 : IP 주소
- 네트워크 내의 모든 호스트에게 “ARP 요청”이라는 패킷을 브로드캐스팅
- ARP 응답
- 10.0.0.2 호스트가 MAC 주소를 담은 “ARP 응답”을 A에게 유니캐스팅
- 나머지는 무시
- ARP 테이블 갱신
- ARP 테이블 (ARP cache): IP 주소와 MAC 주소 대응하는 표
만약 서로 다른 네트워크에 있다면?
- 호스트 A - 라우터 A - 라우터 B - 호스트 B
- 각 단계 별로 ARP 동작 과정 반복
IP 단편화를 많이 하는게 좋은가?
No. 되도록이면 하지 않는게 좋음
- 데이터가 쪼개지면 전송해야할 패킷 헤더 증가 ⇒ 불필요한 트래픽 증가 및 대역폭 낭비
- 합치는 과정에서 부하 발생
IP 단편화 피하는 방법
경로 MTU 만큼의 데이터를 전송 (안짤리면서도 최대한 많은 데이터)
- 경로 MTU 발견 : 경로 MTU를 구하고 해당 크기만큼 송수신하는 기술
- 대부분 네트워크에서 이를 지원하고 MTU 크기도 대부분 균일해 IP 단편화는 많이 발생하지 않음
- DF 플래그 1
- 호스트가 MTU크기 넘는 IP 패킷 받았는데, DF 플래그가 1이라면 송신한 호스트에서 오류 메시지 전달
- 그러면 해당 호스트는 오류 메시지 받지 않을 때까지 데이터 크기 줄이면서 경로 MTU 알아냄