네트워크 계층의 기능
라우팅
- 라우팅 테이블: 네트워크 구성 형태에 관한 정보를 관리
- 라우팅: 송수신 호스트 사이의 패킷 전달 경로를 선택하는 과정
혼잡 제어
- 혼잡: 네트워크에 패킷 수가 과도하게 증가되는 현상
- 혼잡 제어: 혼잡의 발생을 예방하거나 제거하는 기능
패킷의 분할과 병합
- 상위 전송 계층에서 송신을 요구한 데이터는 최종적으로 MAC 계층의 프레임 구조에 정의된 형식으로 캡슐화되어 물리적으로 전송
- 패킷 분할: 데이터를 여러 패킷으로 나누는 과정
- 패킷 병합: 목적지에서 분할된 패킷을 다시 모으는 과정
연결형 서비스와 비연결형 서비스
- 연결형: 데이터 전송전에 데이터의 전송 경로를 미리 결정
- 비연결형: 데이터의 전송 경로를 사전에 결정하지 않고 패킷 단위로 결정
연결형 서비스
- 상대적으로 신뢰성이 높음
- TCP: 전송 계층의 기능을 지원하는 연결형 프로토콜
비연결형 서비스
- 패킷의 전달 순서
- 패킷이 서로 다른 경로로 전송되므로 도착 순서가 일정하지 않음
- 상위 계층에서 순서를 재조정해야 함
- 패킷 분실 가능성
- 패킷의 100% 도착을 보장하지 않음
- 상위 계층에서 패킷 분실 오류를 복구해야 함
- 인터넷 환경의 예
- IP: 네트워크 계층의 기능을 지원하는 비연결형 프로토콜
- UDP: 전송 계층의 기능을 지원하는 비연결형 프로토콜
라우팅
- 패킷의 전송 경로를 지정
- 전송 경로 결정시 고려 사항
- 공평 원칙: 다른 패킷의 우선 처리를 위해 다른 패킷이 손해를 보면 안됨
- 효율 원칙: 전체 네트워크의 효율성에 대해 고려해야 함
- 효율
- 패킷의 평균 지연시간, 전체 네트워크 성능에 대한 영향, 중계 과정에 거치는 라우트 수의 최소화 등
정적 라우팅
- 패킷 전송이 이루어지기 전에 경로 정보를 라우트가 미리 저장하여 중계
- 단점: 경로 정보의 갱신이 어려우므로, 네트워크 변화/네트워크 혼잡도 대처 부족
동적 라우팅
- 라우터의 경로 정보가 네트워크 상황에서 따라 적절히 조절됨
- 라우터가 네트워크 링크 상태를 수시로 점검, 갱신 해야함
- 단점: 경로 정보의 수집과 관리로 인한 성능 저하
HELLO 패킷
- 초기화 과정에서 이웃 라우터의 경로 정보를 파악하는 용도
- 주변 라우터에 HELLO 패킷을 보내어 경로 정보를 얻는다.
ECHO 패킷
- 라우터 사의의 전송 지연 시간을 측정하는 용도
- ECHO 패킷을 수신한 호스트는 즉각 송신 호스트로 회신해야 한다.
정보 불일치 가능성
- 경로 정보가 라우터에 도착하는 시간이 일치하지 않아서
- 특정 라우터가 본 네트워크 상태는 다를 수 있다.
라우팅 테이블
- 패킷 전송 과정에서 라우터가 경로를 쉽게 찾도록 하는 기본적인 도구
- 필수 정보: {목적지 호스트, 다음 홉}
- 목적지 호스트: 패킷을 전달할 최종 목적지의 네트워크 주소
- 다음 홉: 목적지 호스트까지 패킷을 전달하기 위한 이웃 라우터 번호
- 처음에는 인접 라우터만 알 수 있다.
라우팅 정보의 처리
- 라우팅 테이블 관리
- 네트워크의 현재 상황을 정확히 반영할 수 있도록
- 방법
- 소스 라우팅: 전송 호스트가 경로 결정
- 분산 라우팅: 경로 상의 라우터가 경로 결정
- 중앙 라우팅: 라우팅 센터에서 경로 결정
- 계층 라우팅: 계층구조 네트워크(분산 + 중앙)
소스 라우팅
- 패킷을 전송하는 호스트가 목적지 호스트까지 전달 경로를 스스로 결정하는 방식
- 경로 정보를 전송 패킷에 기록함
- 데이터그램 방식과 가상 회선 방식에서 모두 이용함
분산 라우팅
- 라우팅 정보가 분산되는 방식, 전송 경로에 위치한 각 라우터가 경로 선택에 참여함
- 네트워크에 포함된 호스트 수가 많아질수록 다른 방식보다 효과적일 수 있다.
중앙 라우팅
- RCC(Routing Control Center)라는 특별한 호스트를 사용해 전송 경로에 관한 모든 정보를 관리하는 방식
- RCC로부터 목적지 호스트까지 도착하기 위한 경로 정보를 미리 얻음
- 장점: 경로 정보를 특정 호스트가 관리하기 때문에 경로 정보를 관리부담이 줄어듬
- 단점: RCC에 과중한 트래픽을 주어 전체 효율이 떨어짐
계층 라우팅
- 분산 라우팅 기능과 중앙 라우팅 기능을 적절히 조합하는 방식
- 네트워크 규모가 계속 커지는 환경에 효과적
혼잡 제어
- 혼잡: 네트워크 성능 감소 현상이 급격하게 악화되는 현상
- 혼잡 제어: 혼잡 문제를 해결하기 위한 방안
- 흐름 제어: 송신, 수신 호스트 사이의 논리적인 전송 속도를 다룸
- 혼잡 제어: 서브넷에서 네트워크의 전송 능력 문제를 다룸
혼잡의 원인
- 짧은 타임 아웃
- 타임 아웃 시간이 작으면 재전송이 많아져서 혼잡도가 급격히 증가
- 수신 호스트가 패킷 도착 순서가 다를 때 패킷을 분실 처리하면 송신 호스트는 타임아웃 기능으로 다시 패킷을 전송하므로 혼잡도 증가
- 응답 알고리즘
- 매 패킷 수신 때마다 개별 응답하면 트래픽 증가
- 의도적으로 피기배킹을 사용하면 응답시간이 느려져 타임아웃 증가
- 패킷 생존 시간을 작게 하면 패킷이 강제로 제거되어 타임아웃 증가
- 패킷이 라우터를 거칠 때마다 홉 수 증가
- (홉>임계치)이면 패킷 제거
- 라우팅 알고리즘
- 혼잡이 발생하지 않는 경로를 배정하도록 설계
- 혼잡이 발생하는 경로를 선택하면 혼잡이 주변으로 확대됨
트래픽 성형
- 혼잡은 트래픽이 특정 시간에 집중되는 버스트 현상이 원인
- 트래픽 성형
- 송신 호스트가 전송하는 패킷의 발생 빈도가 네트워크에서 예측할 수 있는 전송률로 이루어지게 하는 기능
- 리키 버킷 알고리즘
혼잡 제거
- 특정 지역의 혼잡이 다른 지역으로 확대되지 않도록 하는 것이 중요
- 혼잡이 발생했을 때 혼잡을 완화(제거)하는 방법
- 혼잡이 사라질 때까지 연결 설정을 허락하지 않는다.
- 자원예약 방식: 사전에 경로를 통과할 수 있는 대역폭을 조절한다.
- ECN(Explicit Congestion Notification) 패킷: 혼잡 발생을 주변에 알린다.
자원 예약 방식(Resource Reservation)
- 혼잡 제거를 위해 호스트와 서브넷이 가상 회선 연결 과정에서 협상을 함
- 네트워크에서 수용 불가능한 정도로 트래픽이 발생하는 일을 사전에 예방함
- 단점: 전송 대역을 해당 사용자가 이용하지 않더라도 다른 사용자가 이용하지 못함
ECN(Explicit Congestion Notification) 패킷
- TCP 프로토콜
- 라우터는 트래픽의 양을 모니터해 출력 선로의 사용 정도가 한계치를 초과하면 주의 표시를 함
- 주의 표시한 방향의 경로는 혼잡이 발생할 가능성이 높기 때문에 특별 관리함
(1) 출력 선로로 라우팅 되는 패킷이 들어오면 송신 호스트에 ECN 패킷을 보낸다.
(2) 송신 호스트는 그 경로로 전송하는 패킷 양을 줄인다.
라우팅 프로토콜
- 네트워크 경로를 결정하는 방법
- 네트워크 그래프에서 최소 비용 경로를 선택하는 방법
- 다익스트라 알고리즘
고려사항
- 네트워크 그래프 만드는 방법(처음에는 인접 라우터만 알 수 있다.)
- 비용 결정 방법
- 홉 수: 전송 경로에 있는 라우트 수
- 전송 시간 지연
- 전송 대역폭
- 통신 비용
- 가중 합
라우팅 프로토콜 구분
- 내부 라우팅
- 자체적으로 라우팅 기능이 있는 네트워크 자체의 라우팅
- 자율 시스템 내부 라우팅
- 라우터와 네트워크 수가 유한
- 외부 라우팅
- 원거리 경로 정보를 관리하는 라우팅
- 자율 시스템 간 라우팅
라우팅 프로토콜의 종류
- 간단한 라우팅 프로토콜
- 거리 벡터 라우팅
- 링크 벡터
- 거리 벡터
- 다음 홉 벡터
- RIP(Routing Information Protocol)- 거리벡터 라우팅 사례
- 링크 상태 라우팅 프로토콜 - OSPF(Open Shortest Path First)
- 외부 라우팅 프로토콜 - 네트워크 간 라우팅
간단한 라우팅 프로토콜
-
경로 비용: 거쳐가는 라우터의 수(홉 수)
-
방법
-
최단 경로 라우팅
- 패킷이 목적지에 도달할 때까지 라우터 수가 최소화될 수 있도록 경로 선택
-
플러딩
- 라우터가 자신에게 입력된 패킷을 출력 가능한 모든 경로로 중개하는 방식
- 패킷이 무한히 만들어질 수 있으므로 생존 시간으로 제한
- 중요한 데이터를 모든 호스트에 동시에 전송할 때 제한적으로 사용
거리 벡터 라우팅 프로토콜
- 자신과 연결된 이웃 라우터와 주기적으로 라우팅 정보를 교환하는 방식
- 라우팅 정보: 각 라우터에서 전체 네트워크에 속한 개별 네트워크까지 패킷을 전송하는데 걸리는 거리 정보
- 라우터가 관리해야 하는 필수 정보
- 링크 벡터: 이웃 네트워크에 대한 연결 정보
- 거리 벡터: 개별 네트워크까지의 거리 정보
- 다음 홉 벡터: 개별 네트워크로 가기 위한 다음 홉 정보
링크 벡터
- 자신과 직접 연결된 이웃 라우터 정보
- L(x): 라우터 x와 연결된 이웃 네트워크에 대한 연결 정보를 보관
- L(x): [포트(1),포트(2),...,포트(m),...,포트(M)]
거리 벡터
- 전체 네트워크에 소속된 개별 네트워크들까지의 거리 정보를 관리
- 개별 네트워크까지 패킷을 전송하는데 걸리는 최소 전송 지연 시간
- N: 네트워크 수
- D(x)=[거리(1),거리(2),...,거리(n),...,거리(N)]
다음 홉 벡터
- H(x): 개별 네트워크까지 패킷을 전송하는 경로에 있는 다음 홉 정보 인접 라우터 번호
- N: 전체 네트워크 수
- H(x)=[홉(1),홉(2),...,홉(n),...,홉(N)]
- 라우팅 테이블 = {목적지 네트워크, 다음 홉, 거리}
RIP 프로토콜
- 거리 벡터 방식의 내부 라우팅 프로토콜 중 가장 간단하게 구현된 것
- 소규모 네트워크 환경에 적합, 현재도 많이 사용하는 라우팅 프로토콜
- RIP 패킷을 주고 받으면서 (broadcast) 라우팅 테이블을 갱신
- RIP 패킷 자체는 UDP 프로토콜로 전송된다.
라우팅 테이블 구축
- hello 패킷을 보내서 인접 라우터를 구한다.
- 자신의 라우팅 정보를 약 30초마다 RIP 패킷으로 만들어 방송한다.
- RIP 패킷을 수신한 라우터는 자신의 라우팅 테이블을 갱신한다.
- 새로운 네트워크의 목적지 주소이면 라우팅 테이블에 적용
- 기존 정보와 비교하여 목적지까지 도착하는 지연이 더 적으면 대체
- RIP 패킷을 보낸 라우터를 다음 홉으로 하는 등록 정보가 있으면 새로운 정보로 수정
- 벡터 정보를 교환하기 위해 다음과 같은 패킷 구조를 사용함
- Command(명령): 값이 1이면 RIP 요청을, 2이면 RIP 응답을 의미
- Version(버전): RIP 프로토콜의 버전 번호
- Address Family Identifier(주소 패밀리 구분자): IP 프로토콜의 주소는 2로 설정
- IP Address(IP주소): 특정한 네트워크를 지칭하는 용도로 사용되기 때문에 IP주소의 네트워크 부분의 값만 사용하고, 호스트 부분은 0으로 채움
- Metric(거리): 해당 라우터에서 목적지 네트워트까지의 거리(최대값 16)
링크 상태 라우팅 프로토콜
- 거리 벡터 라우팅 프로토콜
- 직접 연결된 이웃 라우터와 주기적으로 거리벡터를 주고받는다.
- 홉 수 기반 거리 벡터
- 거리벡터를 전송하는 데이터 양이 많다.
- 링크 상태 라우팅 프로토콜
- 상황이 변화가 있을 때만 정보 전달
- 개별 라우터가 이웃 라우터까지의 거리 정보를 구한 후, 이를 네트워크에 연결된 모든 라우터에 통보
- 다양한 거리 정보 사용 가능
- 플러딩 기법으로 전송
- 임의의 라우터가 이웃한 모든 라우터에 정보를 전달하고, 다시 이들 라우터가 주변의 모든 라우터에 정보를 전달하는 방식으로 동작
- 거리 벡터 라우팅 프로토콜의 단점을 보완하기 위한 방식
- ex) TCP/IP 기반의 인터넷에서 사용하는 OSPF
- 내부 라우팅 프로토콜
- 거리 벡터 방식을 사용하는 RIP
- 링크 상태 방식을 사용하는 OSPF
- 외부 라우팅 프로토콜
- 경로 벡터 프로토콜: 단순히 연결 가능한지에 대한 정보만 제공
- 거리 정보는 사용하지 않는다. (원거리 라우팅에서 거리 정보는 중요하지 않다)
- BGP(Border Gateway Protocol): TCP 프로토콜 사용
- TCP 프로토콜에서 제공하는 메시지의 종류
- Open: 다른 라우터와 연관을 설정한다.
- Update: 라우팅 관련 정보를 전달한다.
- KeepAlive: Open 메시지에 대한 응답 기능과 주변 라우터와의 연관을 주기적으로 확인한다.
- Notification: 오류 상태를 통보한다.
IP 프토토콜
- 인터넷 환경에서 네트워크 계층의 데이터 전송 프로토콜
- 호스트 주소 표기, 패킷 분할 기능 제공
- 단대단 형식의 오류 제어나 흐름 제어 기능은 제공하지 않는다.
IP 프로토콜의 주요 특징
- 비연결형 서비스를 제공
- 패킷을 분할/병합하는 기능을 수행
- 데이터 체크섬은 제공하지 않고, 헤더 체크섬만 제공 (오류 발생 가능)
- Best Effort 원칙에 따른 전송 기능을 제공 (패킷 분실 가능)
IP 헤더 구조
- DS/ECN
- 패킷 분할 관련 필드: ID/Flag/Fragment
- Source/Dest Address
- 나머지
DS/ECN
- Service Type 필드는 6비트 DS 필드와 2비트 ECN 필드로 새로 정의됨
- Service Type 필드
- 우선순위, 지연, 전송률, 신뢰성 등의 값을 지정할 수 있음
- IP 프로토콜이 사용자에게 제공하는 서비스의 품질에 관련된 내용을 표현
비트 번호 각 비트의 값
0-2 0: 우선순위(111: 가장높음)
3 0: 보통의 지연 1: 낮은 지연
4 0: 보통의 전송률 1: 높은 전송률
5 0: 보통의 신뢰성 1: 높은 신뢰성
6-7 예약
패킷 분할
- Identification(식별자 혹은 구분자)
- IP 헤더의 두 번째 워드에는 패킷 분할과 관련된 정보가 포함
- Identification은 송신 호스트가 지정하는 패킷 구분자 기능
- IP 프로토콜이 분할한 패킷들에 동일한 고유 번호 부여
- 수신 호스트는 id가 같은 패킷을 병합(reassembly)
- DF(Don't Fragment): 패킷이 분할되지 않도록 함
- MF(More Fragment)
- MF 필드값을 1로 지정하여, 분할 패킷이 뒤에 계속됨을 표시
- 마지막 패킷은 MF 비트를 0으로 지정하여 분할 패킷이 더 없음을 표시
- Fragment Offset(분할 옵셋)
- 저장되는 값은 분할된 패킷의 내용이 원래의 분할 전 데이터에서 위치하는 상대 주소값
- 12비트, 값은 8바이트의 배수
- ex) Frag Offset= 64: 원래 데이터의 64x8=512번째 데이터
주소 관련 필드
- Source Address: 송신 호스트의 IP 주소
- Destination Address: 수신 호스트의 IP
기타 필드
- Version Number(버전 번호): IP 프로토콜의 버전 번호
- Header Length(헤더 길이): IP 프로토콜 헤더 길이를 32비트 워드 단위로 표시
- Packet Length(패킷 길이): IP 헤더를 포함하여 패킷의 전체 길이
- Time To Live(생존 시간): 패킷의 생존 시간, 라우터를 거칠 때마다 1씩 감소되며 0이 되면 네트워크에서 강제로 제거
- Transport(전송 프로토콜): IP 계층에 전송을 요구한 전송 계층 프로토콜
- Header Checksum(헤더 체크섬)
- 전송 과정에서 발생할 수 있는 헤더 오류를 검출하는 기능
- 16비트 단위 1의 보수 합으로 계산
- 오류가 발생하면 IP 계층은 패킷을 버린다.
- 오류 해결은 상위 계층에서 담당한다.
- Options(옵션): 네트워크 관리나 보안처럼 특수 용도로 이용할 수 있음
- Padding(패딩): IP 헤더의 크기는 32비트 워드의 크기가 배수가 되도록 설계
IPv4 주소 체계
- 전체 32비트
- 32비트를 8비트씩 나눠서 xxx.xxx.xxx.xxx 형태로 표시함
- network: 네트워크 주소 + host: 하위 호스트 주소
- 네트워크 주소에 n비트가 할당: xxx.xxx.xxx.xxx/n
IP 주소 클래스
- Class A: xxx.xxx.xxx/8
- Class B: xxx.xxx.xxx/16
- Class C: xxx.xxx.xxx/24
- Class D: muliticasting
- Class E: Future use
클래스 단위 네트워크 구성
- 네트워크에 속하는 호스트 수 고정
- 유연성 부족
- 클래스 주소 낭비 -> Classless IP 사용
Classless IP
- 임의 길이 네트워크 주소 할당
- Subnet mask: IP 주소 중에서 네트워크 필드의 길이를 표시
- 네트워크 주소에 해당하는 부분을 2진수 1로 표시하고
- 호스트 주소에 해당하는 부분을 0으로 표시해서 10진수로 읽는다.
- 특수 IP 주소
- 네트워크 주소: 호스트 ID의 모든 비트 0
- broadcast 주소: 호스트 ID의 모든 비트 1
- ex) Class C: 211.233.203.30/24
- 호스트 주소: 211.233.203.30
- 서브넷 마스크: 255.255.255.0
- 네트워크 주소: 211.233.203.0
- broadcast 주소: 211.233.203.255
사설 IP, 공인 IP
- 공인 IP (public IP Address)
- 인터넷에서 사용되는 IP 주소
- 인터넷 상에서 유일해야 한다.
- 사설 IP (Private IP Address)
- 인터넷에 연결되지 않는 내부 네트워크에서 사용하는 IP 주소
- 서로 다른 내부 네트워크에서 중복해서 사용할 수 있다.
- 사설 IP로 인터넷을 엑세스할 수 없다.
- 사설 IP는 외부에 노출되지 않으므로, 보안성이 좋아진다.
클래스 별 사설 IP
- 클래스 A: 10.0.0.0 ~ 10.255.255.255
- 클래스 B: 172.16.0.0 ~ 172.31.255.255
- 클래스 C: 192.168.0.0 ~ 192.168.255.255
- 내부 네트워크 단위로 유일하게 할당
NAT(Network Address Translation)
- 사설 네트워크의 IP 주소를 공인 IP 주소로 변환하는 라우터의 기능
- NAT 테이블 = {내부 IP 주소 - 공인 IP 주소}로 구성
라우터 주소 변환
- 내부 호스트(192.168.1.5)가 인터넷 호스트(179.111.222.33) 연결 요청
- 내부 호스트 IP(192.169.1.5)를 자신의 IP(200.111.222.1)로 변환해서 요청
- 인터넷 호스트는 200.111.222.1로 회신
- 라우터는 내부 호스트로 전달
NAPT (Network Address Port Translation)
- 사설 IP와 포트 번호(16 비트)를 함께 변환
- NAPT 테이블 = {내부 IP: 포트 - 외부 IP: 포트}
패킷 분할
- 분할의 필요성
- 상위 계층의 데이터를 패킷으로 분해
- 라우터: 데이터 링크 계층의 프레임 크기에 맞춰서 패킷 크기를 정한다.
- 분할의 예
- IP 헤더를 제외한 전송 데이터의 크기는 380바이트
- 패킷은 최대 크기가 128바이트라고 가정
- IP헤더 길이 = 4x5=20바이트
- 패킷 데이터 길이 = floor((128-20)/8)x8 = 104
- ID: 데이터 패킷에 부여되는 고유 번호
DHCP(Dynamic Host Configuration Protocol)
- IP 주소
- 고정 IP: 네트워크 관리자가 고정 IP 주소를 배정
- 자동 할당 IP: DHCP 서버가 공유 IP를 임시로 배정하고 회수
- IP 부족 문제를 해결하는 방법
- DHCP 서버
- IP 주소 풀 관리
- Client의 요청으로 IP를 배정하고 사용이 끝나면 회수
- DHCP 프로토콜의 주요 메시지
- DHCP_DISCOVER: 클라이언트가 DHCP 서버를 찾기 위해 전송하는 브로드캐스트 메시지
- DHCP_OFFER: 클라이언트의 DHCP_DISCOVER 메세지에 대한 응답으로 DHCP 서버가 응답하는 메시지
- DHCP_REQUEST: 주소를 권고한 DHCP 서버에 DHCP_REQUEST 메세지를 전송하여 권고한 주소를 사용한다고 알림
- DHCP_ACK: 권고한 IP 주소가 최종적으로 사용 가능한지 판단 후 사용 가능하면 DHCP_ACK 메시지를 전송
- DHCP_NACK: 클라이언트가 DHCP_DISCOVER 과정을 다시 하도록 함