이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 공급자에서 실행할 수 있는 ns-3-model-library 명령입니다.
프로그램:
이름
ns-3-model-library - ns-3 모델 라이브러리
이것은 NS-3 모델 도서관 선적 서류 비치. ns-3 프로젝트의 기본 문서
XNUMX가지 형식으로 제공됩니다.
· NS-3 독소: 시뮬레이터의 공개 API 문서
· 튜토리얼, 매뉴얼, 모델 라이브러리 (이 문서) 위한 최근 공개 and
개발 나무
· NS-3 위키
이 문서는 reStructuredText for 스핑크스 그리고 에서 유지됩니다
문서/모델 ns-3의 소스 코드 디렉토리.
조직
이 매뉴얼은 다음에 대한 문서를 컴파일합니다. NS-3 가능하게 하는 모델 및 지원 소프트웨어
사용자가 네트워크 시뮬레이션을 구성합니다. 다음을 구별하는 것이 중요합니다. 모듈
and 모델:
· NS-3 소프트웨어는 별도로 구성됩니다. 모듈 각각 별도로 제작된
소프트웨어 라이브러리. 개별 ns-3 프로그램은 필요한 모듈(라이브러리)을 연결할 수 있습니다.
시뮬레이션을 수행합니다.
· NS-3 모델 실제 개체, 프로토콜, 장치 등의 추상적 표현입니다.
An NS-3 모듈은 둘 이상의 모델로 구성될 수 있습니다(예: 인터넷 모듈
TCP 및 UDP 모두에 대한 모델 포함). 일반적으로 ns-3 모델은 여러
그러나 소프트웨어 모듈.
이 설명서는 다음 모델에 대한 문서를 제공합니다. NS-3. 그것은 다른 두 가지를 보완합니다
모델 관련 문서 출처:
· 모델 API는 프로그래밍 관점에서 다음을 사용하여 문서화됩니다. 독소. 독시젠
ns-3 모델용 사용 가능 on 전에, 프로젝트 웹 섬기는 사람.
· NS NS-3 코어는 개발자 매뉴얼에 설명되어 있습니다. NS-3 모델은
속성, 기본값, 난수, 테스트와 같은 핵심 기능
프레임워크 등을 참조하십시오. 본관 웹 대지 매뉴얼 사본을 찾으려면.
마지막으로 다양한 측면에 대한 추가 문서 NS-3 에 존재할 수 있습니다. 프로젝트
위키.
모델 라이브러리 문서를 작성하는 방법에 대한 샘플 개요는 다음을 실행하여 찾을 수 있습니다.
생성-module.py 프로그램을 보고 파일에 생성된 템플릿을 보고
새 모듈/doc/new-module.rst.
$ cd 소스
$ ./create-module.py 새 모듈
이 문서의 나머지 부분은 모듈 이름의 알파벳순으로 구성되어 있습니다.
당신이 새로운 경우 NS-3, 먼저 네트워크 모듈에 대해 아래에서 읽을 수 있습니다.
시뮬레이터에 대한 몇 가지 기본 모델을 포함합니다. 패킷 모델, 모델
다양한 주소 형식 및 노드, 네트워크와 같은 개체에 대한 추상 기본 클래스
장치, 채널, 소켓 및 응용 프로그램에 대해 설명합니다.
생기
애니메이션은 네트워크 시뮬레이션을 위한 중요한 도구입니다. 하는 동안 NS-3 포함하지 않습니다
기본 그래픽 애니메이션 도구, 현재 애니메이션을 제공하는 두 가지 방법이 있습니다.
PyViz 방법 또는 NetAnim 방법을 사용합니다. PyViz 방법은 다음에 설명되어 있습니다.
http://www.nsnam.org/wiki/PyViz.
여기에서는 NetAnim 방법을 간략하게 설명합니다.
넷애님
NetAnim은 생성된 추적 파일을 사용하는 독립 실행형 Qt4 기반 소프트웨어 실행 파일입니다.
~ 중 NS-3 토폴로지를 표시하고 사이의 패킷 흐름을 애니메이션화하는 시뮬레이션
노드.
[image] wired-links.UNINDENT 패킷 애니메이션의 예
또한 NetAnim은 메타 데이터를 표시하는 테이블과 같은 유용한 기능도 제공합니다.
아래 이미지와 같은 패킷
[image] 프로토콜 필터가 있는 패킷 메타데이터에 대한 테이블의 예입니다.UNINDENT
모바일 노드의 궤적을 시각화하는 방법
[이미지] 모바일 노드의 궤적 예시.UNINDENT
다양한 시점에서 여러 노드의 라우팅 테이블을 표시하는 방법
[이미지]
여러 노드와 연결된 카운터를 차트 또는 테이블로 표시하는 방법
[이미지]
[이미지]
패킷 전송 및 수신 이벤트의 타임라인을 보는 방법
[이미지]
방법론
ns3::AnimationInterface 클래스는 추적 XML 파일 생성을 담당합니다.
AnimationInterface는 추적 인프라를 사용하여 노드 간의 패킷 흐름을 추적합니다.
AnimationInterface는 tx 및 rx 이벤트에 대한 추적 후크로 자신을 등록합니다.
시뮬레이션이 시작됩니다. 패킷의 전송 또는 수신이 예정된 경우
AnimationInterface의 해당 tx 및 rx 추적 후크가 호출됩니다. rx가 걸 때
호출되면 AnimationInterface는 패킷이 전송되는 두 끝점을 인식합니다.
흐르고 이 정보를 추적 파일에 XML 형식으로 추가합니다.
해당 tx 및 rx 타임스탬프. XML 형식은 이후 섹션에서 설명합니다.
AnimationInterface는 rx 추적이
후크가 호출됩니다. 모든 tx 이벤트는 rx 이벤트와 일치해야 합니다.
다운로드 넷애님
NetAnim을 아직 사용할 수 없는 경우 NS-3 다운로드한 패키지에서 다음을 수행할 수 있습니다.
다음 :
수은을 설치했는지 확인하십시오. NetAnim의 최신 버전은 다음과 같을 수 있습니다.
다음 명령과 함께 mercurial을 사용하여 다운로드했습니다.
$ hg 클론 http://code.nsnam.org/netanim
건물 넷애님
사전 조건
NetAnim을 빌드하려면 Qt4(4.7 이상)가 필요합니다. 이는 다음을 사용하여 얻을 수 있습니다.
방법 :
Debian/Ubuntu Linux 배포판의 경우:
$ apt-get 설치 qt4-dev-tools
Red Hat/Fedora 기반 배포의 경우:
$ yum 설치 qt4
$ yum 설치 qt4-devel
Mac/OSX의 경우 다음을 참조하십시오. http://qt.nokia.com/downloads/
짓다 단계
NetAnim을 빌드하려면 다음 명령을 사용하십시오.
$ cd 네타님
$ 청소하다
$ qmake NetAnim.pro(MAC 사용자의 경우: qmake -spec macx-g++ NetAnim.pro)
확인 $
참고: qmake는 일부 시스템에서 "qmake-qt4"일 수 있습니다.
그러면 동일한 디렉토리에 "NetAnim"이라는 실행 파일이 생성됩니다.
$ ls -l NetAnim
-rwxr-xr-x 1 john john 390395 2012-05-22 08:32 NetAnim
용법
NetAnim 사용은 XNUMX단계 프로세스입니다.
1단계: 다음을 사용하여 시뮬레이션 중에 애니메이션 XML 추적 파일을 생성합니다.
"ns3::AnimationInterface"의 NS-3 코드베이스.
2단계:오프라인 Qt1 기반 애니메이터를 사용하여 4단계에서 생성된 XML 추적 파일 로드
넷애님이라고 합니다.
단계 1: 생성 XML 생기 더듬다 파일
"src/netanim" 아래의 "AnimationInterface" 클래스는 기본 NS-3 추적 소스
타임스탬프가 있는 ASCII 파일을 XML 형식으로 구성합니다.
예제는 src/netanim/examples에서 찾을 수 있습니다. 예제:
$ ./waf -d 디버그 구성 --enable-examples
$ ./waf --"덤벨 애니메이션" 실행
위의 내용은 XML 파일 dumbbell-animation.xml을 생성합니다.
필수
1. 프로그램의 wscript에 "netanim" 모듈이 포함되어 있는지 확인하십시오. 그러한 예
wscript는 src/netanim/examples/wscript에 있습니다.
2. 테스트 프로그램에 [#include "ns3/netanim-module.h"] 헤더를 포함합니다.
3. 진술 추가
AnimationInterface 애니메이션("animation.xml"); // 여기서 "animation.xml"은 임의의 파일 이름입니다.
[ns-3.13 이전 버전의 경우 "anim.SetXMLOutput() 라인을 사용하여
XML 모드 및 anim.StartAnimation();] 사용
Optional
다음은 선택 사항이지만 유용한 단계입니다.
// 1 단계
anim.SetMobilityPollInterval(초(1));
AnimationInterface는 기본적으로 250ms마다 모든 노드의 위치를 기록합니다. 그만큼
위의 명령문은 AnimationInterface가
모든 노드의 위치. 노드가 거의 움직이지 않을 것으로 예상되는 경우 다음을 설정하는 것이 유용합니다.
큰 XML 파일을 피하기 위한 높은 이동성 폴링 간격.
// 2 단계
anim.SetConstantPosition (Ptr< Node > n, double x, double y);
AnimationInterface는 모든 노드의 위치를 설정해야 합니다. ~ 안에 NS-3 이것은에 의해 이루어집니다
연관된 MobilityModel 설정. "SetConstantPosition"은 xy를 설정하는 빠른 방법입니다.
고정된 노드의 좌표.
// 3 단계
anim.SetStartTime(초(150)); 및 anim.SetStopTime(초(삼));
AnimationInterface는 큰 XML 파일을 생성할 수 있습니다. 위의 문은 창을 제한합니다.
그 사이에 AnimationInterface가 추적을 수행합니다. 창을 제한하는 것은 초점을 맞추는 데만 사용됩니다.
시뮬레이션의 관련 부분 및 관리할 수 있는 작은 XML 파일 생성
// 4 단계
AnimationInterface 애니메이션("animation.xml", 50000);
위의 생성자를 사용하면 각 애니메이션 XML 추적 파일에 50000개의
패킷. 예를 들어 AnimationInterface가 150000개의 패킷을 캡처하는 경우 위의
생성자는 캡처를 3개의 파일로 분할합니다.
· animation.xml - 패킷 범위 1-50000 포함
· animation.xml-1 - 패킷 범위 50001-100000 포함
· animation.xml-2 - 패킷 범위 100001-150000 포함
// 5 단계
anim.EnablePacketMetadata(참);
위의 문장으로 AnimationInterface는 각 패킷의 메타 데이터를
xml 추적 파일. NetAnim은 메타데이터를 사용하여 더 나은 통계 및 필터를 제공할 수 있습니다.
TCP 시퀀스 번호와 같은 패킷에 대한 간략한 정보 제공과 함께
또는 패킷 애니메이션 중 소스 및 대상 IP 주소.
주의: 이 기능을 활성화하면 더 큰 XML 추적 파일이 생성됩니다. 이러지마 제발
Wimax 링크를 사용할 때 이 기능을 활성화하십시오.
// 6 단계
anim.UpdateNodeDescription(5, "액세스 포인트");
위의 명령문으로 AnimationInterface는 텍스트 "Access-point"를 노드 5에 할당합니다.
// 7 단계
anim.UpdateNodeSize(6, 1.5, 1.5);
위의 명령문으로 AnimationInterface는 노드 크기를 1.5배로 설정합니다. NetAnim
토폴로지의 경계에 맞게 그래픽 보기를 자동으로 조정합니다. 이것은 의미합니다
그 NetAnim은 노드의 크기를 너무 크거나 너무 작게 비정상적으로 확장할 수 있습니다. 사용
AnimationInterface::UpdateNodeSize를 사용하면 NetAnim에서 기본 배율을 덮어쓸 수 있습니다.
나만의 맞춤 척도를 사용하세요.
// 8 단계
anim.UpdateNodeCounter(89, 7, 3.4);
위의 명령문을 통해 AnimationInterface는 Id == 89로 카운터를 설정합니다.
값이 7인 노드 3.4을 사용합니다. ID가 89인 카운터는 다음을 사용하여 얻습니다.
AnimationInterface::AddNodeCounter. 이에 대한 사용 예는 다음과 같습니다.
src/netanim/examples/resources_demo.cc.
단계 2: 로딩중 전에, XML in 넷애님
1. NetAnim이 구축되었다고 가정하고 "./NetAnim" 명령을 사용하여 NetAnim을 시작합니다. 제발
NetAnim을 사용할 수 없는 경우 "Building NetAnim" 섹션을 검토하십시오.
2. NetAnim이 열리면 왼쪽 상단 모서리에 있는 파일 열기 버튼을 클릭하고
1단계에서 생성된 XML 파일.
3. 녹색 재생 버튼을 눌러 애니메이션을 시작합니다.
다음은 이것을 설명하는 비디오입니다. http://www.youtube.com/watch?v=tz_hUuNwFD
위키
"NetAnim" 설치에 대한 자세한 지침, FAQ 및 XML 추적 파일 로드
(앞서 언급한) NetAnim을 사용하는 경우 다음을 참조하십시오. http://www.nsnam.org/wiki/NetAnim
안테나 MODULE
디자인 선적 서류 비치
살펴보기
안테나 모듈은 다음을 제공합니다.
1. 모델링을 위한 인터페이스를 제공하는 새로운 기본 클래스(AntennaModel)
안테나의 방사 패턴;
2. 각각 방사 패턴을 모델링하는 이 기본 클래스에서 파생된 일련의 클래스
다양한 종류의 안테나.
안테나 모델
AntennaModel은 [Balanis]에서 채택되고 그림에 묘사된 좌표계를 사용합니다.
동등 어구 체계 of 전에, 안테나 모델. 이 시스템은 직교 좌표를 변환하여 얻습니다.
ns-3 MobilityModel에서 사용하는 좌표계를 새로운 원점 o로
안테나의 위치, 그리고 다음의 모든 일반 포인트 p의 좌표를 변환합니다.
데카르트 좌표(x,y,z)에서 구형 좌표(r, heta,hi)로의 공간.
안테나 모델은 방사 성분 r을 무시하고 각도 성분만 고려합니다.
(헤타, 안녕).
안테나 방사 패턴은 수학 함수 g(heta, hi)로 표현됩니다.
가능한 각 방향에 대한 게인(dB)을 반환하는 grightarrow thcal{R}
전송/수신. 모든 각도는 라디안으로 표시됩니다.
[이미지] AntennaModel.UNINDENT의 좌표계
제공 모델
이 섹션에서는 안테나 방사 패턴 모델에 포함된 안테나 방사 패턴 모델에 대해 설명합니다.
안테나 모듈.
등방성안테나모델
이 안테나 방사 패턴 모델은 모든 방향에 대해 단일 이득(0dB)을 제공합니다.
코사인안테나모델
이것은 [Chunjian]에서 설명한 코사인 모델입니다. 안테나 이득은 다음과 같이 결정됩니다.
안녕하세요_{0}
는 안테나의 방위각 방향(즉, 최대 이득 방향)이고
기하 급수적 인
원하는 3dB 빔폭 hi_{3dB}를 결정합니다.
이 방사 패턴은 경사각 heta와 무관합니다.
[천지안] 모델과 클래스에서 구현한 모델의 큰 차이점
CosineAntennaModel은 단지 요소 요소(즉, 위에서 설명한 것)
수식)을 고려한다. 사실 [천지안]도 추가 안테나 배열을 고려했다.
요인. 후자를 제외하는 이유는 일반 사용자가
어레이 계수를 추가하지 않고 주어진 빔폭을 정확히 지정하고자 합니다.
실제로 결과의 유효 빔폭을 변경하는 후반 단계
방사선 패턴.
포물선안테나모델
이 모델은 메인 로브 방사 패턴의 포물선 근사를 기반으로 합니다. 그것
셀의 방사 패턴을 모델링하기 위해 셀룰러 시스템의 맥락에서 자주 사용됩니다.
예를 들어 [R4-092042a] 및 [Calcev]를 참조하십시오. dB 단위의 안테나 이득이 결정됩니다.
으로 :
안녕하세요_{0}
안테나의 방위각 방향(즉, 안테나의 최대 이득 방향),
안녕_{3dB}
는 3dB 빔폭이고 A_{max}는 안테나의 최대 감쇠(dB)입니다. 메모
이 방사 패턴은 경사각 heta와 무관합니다.
[발라니스]
CA Balanis, "안테나 이론 - 분석 및 설계", Wiley, 2nd Ed.
[춘젠]
Li Chunjian, "XNUMX섹터 WCDMA 시스템을 위한 효율적인 안테나 패턴", 석사
과학 논문, Chalmers University of Technology, 예테보리, 스웨덴, 2003
[칼체프]
George Calcev 및 Matt Dillon, "CDMA 네트워크의 안테나 틸트 제어", Proc. ~의
2년 제2006회 국제 무선 인터넷 컨퍼런스(WICON)
[R4-092042a]
3GPP TSG RAN WG4(라디오) 회의 #51, R4-092042, 시뮬레이션 가정 및
FDD HeNB RF 요구 사항에 대한 매개변수.
사용자 문서
모듈화된 안테나는 모든 무선 기술 및 물리 계층과 함께 사용할 수 있습니다.
지원하는 모델입니다. 현재 여기에는 다음을 기반으로 하는 물리 계층 모델이 포함됩니다.
SpectrumPhy. 자세한 내용은 각 모델의 설명서를 참조하십시오.
지원 문서
이 섹션에서는 다음을 확인하는 안테나 모듈에 포함된 테스트 스위트에 대해 설명합니다.
올바른 기능.
각도
단위 테스트 스위트 각도 다음에 의해 Angles 클래스가 올바르게 구성되었는지 확인합니다.
사용 가능한 방법에 따라 3D 데카르트 좌표에서 올바른 변환
(단일 벡터와 한 쌍의 벡터로 구성). 각 방법에 대해 여러
값을 비교하는 테스트 케이스가 제공됩니다(hi,
heta) 생성자에 의해 알려진 참조 값으로 결정됩니다. 각각의 경우 테스트 통과
경우 값은 10^{-10}의 공차까지 참조와 동일합니다.
숫자 오류.
도를 라디안으로
단위 테스트 스위트 각도 라디안 방법을 확인합니다 도를 라디안으로 and
라디안으로도 다수의 알려진 기준 값과 비교하여 제대로 작동
테스트 케이스. 각 테스트 사례는 비교가 허용 오차가 10^{-10}까지 같으면 통과합니다.
수치 오류를 설명합니다.
등방성안테나모델
단위 테스트 스위트 등방성 안테나 모델 확인합니다 등방성안테나모델 수업
즉, 방향에 관계없이 항상 0dB 게인을 반환합니다.
코사인안테나모델
단위 테스트 스위트 코사인 안테나 모델 확인합니다 코사인안테나모델 수업 작품
제대로. 계산된 안테나 이득 값을 확인하는 여러 테스트 사례가 제공됩니다.
서로 다른 방향에서 서로 다른 방향 값에 대해 기준 게인
그리고 빔폭. 기준 이득은 손으로 계산됩니다. 각 테스트 케이스는 다음과 같은 경우 통과합니다.
기준 게인(dB)은 다음에 의해 반환된 값과 같습니다. 코사인안테나모델 ~ 이내에
0.001의 공차는 계산을 위해 수행된 근사값을 설명합니다.
참조 값.
포물선안테나모델
단위 테스트 스위트 포물선 안테나 모델 확인합니다 포물선안테나모델 수업
제대로 작동합니다. 안테나 게인 값을 확인하는 여러 테스트 케이스가 제공됩니다.
서로 다른 방향에서 그리고 서로 다른 방향 값에 대해 계산된
최대 감쇠 및 빔폭. 기준 이득은 손으로 계산됩니다. 각 테스트
기준 게인(dB)이 다음에 의해 반환된 값과 같으면 통과합니다.
포물선안테나모델 근사치를 설명하는 0.001의 허용 오차 내
기준 값의 계산을 위해 완료되었습니다.
AD HOC 온 디맨드 거리 VECTOR (AODV)
이 모델은 Ad Hoc On-Demand Distance Vector의 기본 사양을 구현합니다.
(AODV) 프로토콜. 구현은 다음을 기반으로 합니다. RFC 3561.
이 모델은 ITTP RAS의 Elena Buchatskaia와 Pavel Boyko가 작성했으며 다음을 기반으로 합니다.
CMU/MONARCH 그룹에서 개발하고 Samir에서 최적화 및 조정한 ns-2 AODV 모델
Das and Mahesh Marina, University of Cincinnati, AODV-UU 구현
Uppsala 대학의 Erik Nordström.
모델 상품 설명
AODV 모델의 소스 코드는 디렉토리에 있습니다. 소스/aodv.
디자인
클래스 ns3::aodv::라우팅프로토콜 서비스 패킷 교환의 모든 기능 구현
에서 상속 ns3::Ipv4Routing프로토콜. 기본 클래스는 두 개의 가상 함수를 정의합니다.
패킷 라우팅 및 전달을 위해. 첫번째, ns3::aodv::RouteOutput, 용도
로컬에서 생성된 패킷과 두 번째 패킷, ns3::aodv::라우트입력, 용도
수신된 패킷을 전달 및/또는 전달합니다.
프로토콜 작동은 조정 가능한 많은 매개변수에 따라 달라집니다. 이에 대한 매개변수
기능은 다음의 속성입니다. ns3::aodv::라우팅프로토콜. 매개변수 기본값은
RFC에서 가져오고 다음과 같은 프로토콜 기능 활성화/비활성화를 허용합니다.
HELLO 메시지 방송, 데이터 패킷 방송 등.
AODV는 필요에 따라 경로를 검색합니다. 따라서 AODV 모델은 모든 패킷을 버퍼링합니다.
경로 요청 패킷(RREQ)이 전파됩니다. 패킷 큐는 다음에서 구현됩니다.
aodv-rqueue.cc. 패킷에 대한 스마트 포인터, ns3::Ipv4RoutingProtocol::ErrorCallback,
ns3::Ipv4RoutingProtocol::UnicastForwardCallback, IP 헤더는 여기에 저장됩니다.
대기줄. 패킷 대기열은 오래된 패킷의 가비지 수집과 대기열 크기를 구현합니다.
한도.
라우팅 테이블 구현은 이전 항목 및 상태의 가비지 수집을 지원합니다.
표준에 정의된 기계. STL 맵 컨테이너로 구현됩니다. 핵심은
대상 IP 주소.
프로토콜 작업의 일부 요소는 RFC에 설명되어 있지 않습니다. 이러한 요소는 일반적으로
다른 OSI 모델 계층의 협력에 관한 것입니다. 모델은 다음을 사용합니다.
휴리스틱:
· 이 AODV 구현은 단방향 링크의 존재를 감지하고 피할 수 있습니다.
필요하다면. 모델이 RREQ를 받는 노드가 이웃인 경우 원인은 다음과 같습니다.
단방향 링크가 됩니다. 이 휴리스틱은 AODV-UU 구현에서 가져온 것이며
장애인이 되십시오.
· 프로토콜 작동은 끊어진 링크 감지 메커니즘에 크게 의존합니다. 모델
두 가지 휴리스틱을 구현합니다. 첫째, 이 구현은 HELLO 메시지를 지원합니다.
그러나 HELLO 메시지는 무선 환경에서 이웃 감지를 수행하는 좋은 방법이 아닙니다.
환경(최소한 802.11을 넘지 않음). 따라서 성능이 좋지 않을 수 있습니다.
무선으로 실행할 때. 이에 대한 몇 가지 이유가 있습니다. 1) HELLO 메시지는
방송. 802.11에서는 브로드캐스팅이 유니캐스팅보다 낮은 비트율로 이루어지는 경우가 많으며,
따라서 HELLO 메시지는 유니캐스트 데이터보다 더 멀리 이동할 수 있습니다. 2) HELLO 메시지는 작고,
따라서 데이터 전송보다 비트 오류가 덜 발생하고 3) 브로드캐스트 전송
유니캐스트 전송과 달리 양방향이 보장되지 않습니다. 둘째, 우리는 사용
가능한 경우 계층 2 피드백. 프레임 전송 시 링크가 끊어진 것으로 간주
모든 재시도에서 전송 실패가 발생합니다. 이 메커니즘은 활성
첫 번째 방법보다 빠르게 연결되고 작동합니다.
레이어 2 피드백 구현은 TxErr헤더 추적 소스, 현재
AdhocWifiMac에서만 지원됩니다.
범위 and 제한 사항
모델은 IPv4 전용입니다. 다음 선택적 프로토콜 최적화는
구현:
1. 링 검색 확장.
2. 로컬 링크 수리.
3. RREP, RREQ 및 HELLO 메시지 확장.
이러한 기술에는 IP 헤더에 대한 직접 액세스가 필요하며 이는
AODV가 UDP를 통해 작동하는 AODV RFC. 이 모델은 단순화를 위해 UDP를 사용하므로
특정 프로토콜 최적화를 구현하는 기능. 모델은 낮은 레이어 원시를 사용하지 않습니다
소켓은 휴대가 불가능하기 때문입니다.
미래 작업
발표된 계획이 없습니다.
참고자료
용법
예
도우미
Attributes
트레이싱
로깅
주의 사항
검증
단위 테스트
대규모 성능 테스트
어플리케이션
자리 표시 자 장
다리 넷디바이스
자리 표시 자 장
Bridge NetDevice 사용의 몇 가지 예는 다음에서 찾을 수 있습니다. 예제/csma/ 디렉토리.
브라이트 통합
이 모델은 보스턴 대학교 대표 인터넷인 BRITE에 대한 인터페이스를 구현합니다.
토폴로지 gEnerator [1]. BRITE는 현실적인 인터넷을 생성하기 위한 표준 도구입니다.
토폴로지. 여기에 설명된 ns-3 모델은 다음을 용이하게 하는 헬퍼 클래스를 제공합니다.
BRITE 구성 파일을 사용하여 ns-3 특정 토폴로지를 생성합니다. BRITE는
ns-3 BriteTopolgyHelper 클래스에 노드와 에지로 저장된 원본 그래프. ~ 안에
BRITE의 ns-3 통합, 생성기는 토폴로지를 생성한 다음 액세스를 제공합니다.
생성된 각 AS에 대해 리프 노드로. ns-3 사용자는 사용자 지정 토폴로지를 다음에 연결할 수 있습니다.
이러한 리프 노드는 수동으로 생성하거나 에서 제공하는 토폴로지 생성기를 사용하여
NS-3.
BRITE에서 사용할 수 있는 세 가지 주요 토폴로지 유형은 라우터, AS 및
AS와 라우터의 조합인 계층적입니다. ns-3의 목적을 위해
시뮬레이션에서 가장 유용한 것은 Router 및 Hierarchical일 가능성이 높습니다. 라우터 수준
위상은 Waxman 모델 또는 Barabasi-Albert 모델을 사용하여 생성됩니다. 각
모델에는 토폴로지 생성에 영향을 미치는 다른 매개변수가 있습니다. 플랫 라우터 토폴로지의 경우
모든 노드는 동일한 AS에 있는 것으로 간주됩니다.
BRITE 계층적 토폴로지는 두 가지 수준을 포함합니다. 첫 번째는 AS 레벨입니다. 이 수준
Waxman 모델 또는 Barabasi-Albert 모델을 사용하여 만들 수도 있습니다.
그런 다음 AS 토폴로지의 각 노드에 대해 라우터 수준 토폴로지가 구성됩니다. 이것들
라우터 수준 토폴로지는 다시 Waxman 모델 또는 Barbasi-Albert 모델을 사용할 수 있습니다.
BRITE는 AS 레벨에서 지정한 대로 이러한 별도의 라우터 토폴로지를 상호 연결합니다.
토폴로지. 계층적 토폴로지가 구성되면 큰 토폴로지로 평면화됩니다.
라우터 수준 토폴로지.
추가 정보는 BRITE 사용자 설명서에서 찾을 수 있습니다.
http://www.cs.bu.edu/brite/publications/usermanual.pdf
모델 상품 설명
이 모델은 외부 BRITE 라이브러리를 구축한 다음 일부 ns-3을 구축하는 데 의존합니다.
도서관을 부르는 도우미. ns-3 도우미의 소스 코드는
예배 규칙서 src/brite/도우미.
디자인
BRITE 토폴로지를 생성하기 위해 ns-3 도우미는 외부 BRITE 라이브러리를 호출하고
표준 BRITE 구성 파일을 사용하여 BRITE 코드는 노드가 있는 그래프를 작성하고
이 구성 파일에 따라 가장자리. BRITE 문서 또는
더 잘 이해하려면 src/brite/examples/conf_files의 예제 구성 파일
BRITE 구성 옵션. BRITE에 의해 구축된 그래프는 ns-3으로 반환되고 ns-3
그래프 구현이 구축되었습니다. 각 AS에 대한 리프 노드는 사용자가 사용할 수 있습니다.
맞춤형 토폴로지를 연결하거나 ns-3 애플리케이션을 직접 설치합니다.
참고자료
[1] Alberto Medina, Anukool Lakhina, Ibrahim Matta 및 John Byers. BRITE: 접근 방식
범용 토폴로지 생성. 에 대한 국제 워크숍 진행 중
컴퓨터 및 통신 시스템의 모델링, 분석 및 시뮬레이션 - MASCOTS
'01, 오하이오주 신시내티, 2001년 XNUMX월.
용법
brite-generic-example을 참조하여 BRITE 인터페이스의 기본 사용법을 확인할 수 있습니다. ~ 안에
요약하면 BriteTopologyHelper는 BRITE를 전달하여 인터페이스 지점으로 사용됩니다.
구성 파일. 구성 파일과 함께 BRITE 형식의 무작위 시드 파일
전달될 수도 있습니다. 시드 파일이 전달되지 않으면 헬퍼가 시드를 생성합니다.
ns-3의 UniformRandomVariable을 사용하는 파일. BRITE에서 토폴로지가 생성되면
BuildBriteTopology()가 호출되어 ns-3 표현을 생성합니다. 다음 IP 주소는
AssignIpv4Addresses() 또는 AssignIpv6Addresses()를 사용하여 토폴로지에 할당합니다. 그것
토폴로지의 각 지점간 링크는 새로운 링크로 취급된다는 점에 유의해야 합니다.
따라서 IPV4의 경우 많은 양의 데이터를 낭비하지 않으려면 /30 서브넷을 사용해야 합니다.
사용 가능한 주소 공간.
BRITE 구성 파일의 예는 /src/brite/examples/conf_files/에서 찾을 수 있습니다.
ASBarbasi 및 ASWaxman은 AS 전용 토폴로지의 예입니다. RTBarabasi 및 RTWaxman
파일은 라우터 전용 토폴로지의 예입니다. 마지막으로 TD_ASBarabasi_RTWaxman
구성 파일은 Barabasi-Albert를 사용하는 계층적 토폴로지의 예입니다.
AS 레벨용 모델과 각 라우터 레벨 토폴로지용 Waxman 모델.
이러한 파일에 사용된 BRITE 매개변수에 대한 정보는 BRITE 사용자에서 찾을 수 있습니다.
수동.
건물 브라이트 통합
첫 번째 단계는 ns-3 특정 BRITE 리포지토리를 다운로드하고 빌드하는 것입니다.
$ hg 클론 http://code.nsnam.org/BRITE
$ cd 브라이트
확인 $
이렇게 하면 BRITE가 빌드되고 BRITE 디렉토리 내에 라이브러리 libbrite.so가 생성됩니다.
BRITE가 성공적으로 구축되면 BRITE 지원으로 ns-3 구성을 진행합니다.
ns-3 디렉토리로 변경합니다.
$ ./waf 구성 --with-brite=/your/path/to/brite/source --enable-examples
'BRITE 통합' 옆에 '사용'이라고 표시되어 있는지 확인하세요. 그렇지 않다면 무언가가
잘못되었습니다. 위의 단계에 따라 BRITE를 먼저 빌드하는 것을 잊었거나
ns-3이 BRITE 디렉토리를 찾을 수 없습니다.
다음으로 ns-3을 빌드합니다.
$ ./와프
예
BRITE 통합 실행을 시연하는 예는 다음과 같습니다.
$ ./waf --run 'brite-generic-example'
verbose 매개변수를 활성화하면 이 예제는 노드와 에지를 출력합니다.
표준 BRITE 출력과 유사한 형식의 정보. 다른 많은
아래에 설명된 confFile, tracing 및 nix를 포함한 명령줄 매개변수:
conf파일
BRITE 구성 파일. 다양한 BRITE 구성 파일 예제
예를 들어 src/brite/examples/conf_files 디렉토리에 존재합니다.
RTBarabasi20.conf 및 RTWaxman.conf. conf_files 디렉토리를 참조하십시오
더 많은 예를 보려면.
트레이싱
ASCII 추적을 활성화합니다.
거절하다 nix 벡터 라우팅을 활성화합니다. 전역 라우팅이 기본적으로 사용됩니다.
일반적인 BRITE 예제는 Python 바인딩을 가정하여 pyviz를 사용한 시각화도 지원합니다.
ns-3에서 활성화됨:
$ ./waf --brite-generic-example 실행 --vis
BRITE와 관련된 시뮬레이션은 MPI와 함께 사용할 수도 있습니다. 총 MPI 인스턴스 수
BRITE 토폴로지 헬퍼에 전달되며 모듈로 분할이 노드를 할당하는 데 사용됩니다.
각 AS에서 MPI 인스턴스로. 예제는 src/brite/examples에서 찾을 수 있습니다:
$ mpirun -np 2 ./waf --brite-MPI-예제 실행
ns-3으로 MPI를 설정하는 방법에 대한 자세한 내용은 ns-3 MPI 설명서를 참조하십시오.
건물 MODULE
cd .. 포함:: replace.txt
디자인 선적 서류 비치
살펴보기
건물 모듈은 다음을 제공합니다.
1. 새로운 클래스(건물) 시뮬레이션에서 건물의 존재를 모델링하는
대본;
2. 새로운 클래스(모빌리티빌딩정보) 위치, 크기 및
시뮬레이션 영역에 존재하는 건물의 특성과 배치를 허용합니다.
해당 건물 내부의 노드 수;
3. 가장 유용한 경로 손실 모델의 정의가 포함된 컨테이너 클래스 및
해당 변수 호출 건물전파손실모델.
4. 새로운 전파 모델(잡종건물전파손실모델) 작업
방금 도입된 이동성 모델은 다음과 같은 현상을 모델링할 수 있습니다.
건물이 있는 실내/실외 전파.
5. Okumura Hata와만 작동하는 단순화된 모델(오건물전파손실모델)
존재 하에서 실내/실외 전파 현상을 고려
건물.
이 모델은 LTE를 염두에 두고 설계되었지만 실제로 구현은
LTE 특정 코드와 독립적이며 다른 ns-3 무선과 함께 사용할 수 있습니다.
기술(예: wifi, wimax).
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 잡종건물전파손실모델 포함된 pathloss 모델은
서로 다른 것을 모방하기 위해 잘 알려진 여러 경로 손실 모델의 조합
도시, 교외 및 개방 지역과 같은 환경 시나리오. 게다가, 모델
실외 및 실내 모두 고려 실내 및 실외 통신이 포함되어야 함
HeNB는 건물 내부와 외부에 설치될 수 있기 때문입니다. 실내의 경우
모델은 실외 <-> 실내의 건물 유형도 고려해야 합니다.
의 벽 침투 손실과 같은 몇 가지 일반적인 기준에 따른 통신
공통 재료; 또한 내부에 대한 몇 가지 일반적인 구성을 포함합니다.
실내 통신의 벽.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 오건물전파손실모델 단순화를 위해 pathloss 모델이 생성되었습니다.
이전 모델은 한 모델에서 다른 모델로 전환하기 위한 임계값을 제거했습니다. 이를 위해
사용 가능한 것 중 하나의 전파 모델(즉, Okumura
하타). 건물의 존재는 여전히 모델에서 고려됩니다. 그러므로 모든
건물 유형에 관한 위의 고려 사항은 여전히 유효합니다. 똑같다
이후 환경 시나리오 및 빈도와 관련된 사항에 대해 고려할 수 있습니다.
둘 다 고려되는 모델의 매개변수입니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 건물 수업
모델에는 다음과 같은 특정 클래스가 포함됩니다. 건물 ns3를 포함하는 보물상자 수업
건물의 크기를 정의합니다. 의 특성을 구현하기 위해
포함된 경로 손실 모델, 건물 클래스는 다음 속성을 지원합니다.
· 건물 유형:
· 주거용(기본값)
· 사무실
· 광고
· 외벽형
· 목재
· ConcreteWithWindows(기본값)
· 창문이 없는 콘크리트
· 스톤블록
· 층수(기본값 1, XNUMX층만 의미)
· x축 객실 수(기본값 1)
· y축 객실 수(기본값 1)
건물 클래스는 다음 가정을 기반으로 합니다.
· 건물은 직육면체(예: 상자)로 표시됩니다.
· 벽은 x, y, z 축에 평행합니다.
· 건물은 다음 매개변수로 식별되는 방 그리드로 나뉩니다.
· 층수
· x축을 따라 방의 수
· y축의 객실 수
· z축은 세로축입니다. 즉, z축이 증가하면 층수가 증가합니다.
값
· x 및 y 방 인덱스는 1부터 시작하여 x 및 y축을 따라 증가합니다.
각기
· 건물의 모든 방은 크기가 동일합니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 모빌리티빌딩정보 수업
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 모빌리티빌딩정보 ns3 클래스에서 상속되는 클래스 목적, 담당
건물과 관련하여 노드의 위치에 대한 정보를 유지합니다. 그만큼
에서 관리하는 정보 모빌리티빌딩정보 입니다
· 노드가 실내인지 실외인지 여부
· 실내인 경우:
· 노드를 구축하는 위치
· 노드가 위치한 방(x, y 및 층 방 인덱스)
클래스 모빌리티빌딩정보 사용 건물전파손실모델 수업, 어느
ns3 클래스에서 상속 전파 손실 모델 의 경로 손실 계산을 관리합니다.
노드의 위치에 따른 단일 구성 요소 및 그 구성. 게다가,
주 경로의 장애물로 인한 손실인 그림자 기능도 구현합니다.
(즉, 초목, 건물 등).
주목해야 할 점은, 모빌리티빌딩정보 다른 전파 모델에서 사용할 수 있습니다.
단, 이 글을 쓰는 시점의 정보를 바탕으로 정의된 것만
건물 모듈은
건물.
g
ItuR1238전파 손실 모델
이 클래스는 ITU에 기반한 건물 종속 실내 전파 손실 모델을 구현합니다.
P.1238 modeg{ 건물 유형(즉, 주거, 사무실 및
commercial)ia 분석 표현은 다음과 같습니다.
nr
{r
aa
어디에서: ry ight. : 전력 손실
N = tr}주거용 \ 30 & 사무용 \ 22 & 상업\nd{배열}
계수 [dB]
일 라이트.
L_f = t }주택 \ 15+4(n-1) 및 사무실 \ 6+3(n-1) 및 상업용\nd{배열}
{l
n : 기지국과 모바일 사이의 층수(n 1)
l2
에프 : 주파수 [MHz]
}&
d : 거리(여기서 d > 1) [m]
n
건물전파&손실 모델
BuildingsPropagationLossModel은 추가 건물 종속 세트를 제공합니다.
다른 경로 손실 논리를 구현하는 데 사용되는 경로 손실 모델 요소입니다. 이것들
pathloss 모델 요소는 다음 하위 섹션에서 설명합니다.
외부 벽 손실 (EWL)
이 구성 요소는 실내에서 실외로의 벽을 통한 침투 손실을 모델링합니다.
통신 및 그 반대도 마찬가지입니다. 값은 [cost231] 모델에서 가져옵니다.
· 목재 ~ 4dB
· 창문이 있는 콘크리트(금속화되지 않음) ~ 7dB
· 창문이 없는 콘크리트 ~ 15dB(COST10에서 20~231 범위)
· 돌 블록 ~ 12dB
내부의 벽 손실 (IWL)
이 구성 요소는 실내 간 통신에서 발생하는 침투 손실을 모델링합니다.
같은 건물 내. 총 손실은 각 단일 내부
벽은 일정한 침투 손실 L_{siw}를 가지며,
송신기 사이의 맨하탄 거리(방 수)로 관통됩니다.
그리고 수신기. 구체적으로 x_1, y_1, x_2, y_2는 x에 따른 방 번호를 나타내고,
사용자 1과 2에 대해 각각 y축; 총 손실 L_{IWL}은 다음과 같이 계산됩니다.
높이 이득 모델 (HG)
이 구성 요소는 전송 장치가 바닥에 있다는 사실로 인한 이득을 모델링합니다.
땅 위. 문헌[turkmani]에서 이 이득은 약 2dB로 평가되었습니다.
층당. 이 이득은 실내에서 실외로의 모든 통신에 적용할 수 있으며
반대의 경우도 마찬가지입니다.
그림자 모델
음영은 가변 표준을 사용하는 로그 정규 분포에 따라 모델링됩니다.
MobilityModel의 상대 위치(실내 또는 실외)의 함수로서의 편차
관련 인스턴스. MobilityModels의 각 쌍에 대해 하나의 임의 값이 그려지고 유지됩니다.
전체 시뮬레이션 동안 해당 쌍에 대해 상수입니다. 따라서 모델은 다음에 적합합니다.
정적 노드만.
모델은 그림자 손실의 평균(dB)이 항상 0이라고 간주합니다.
모델은 세 가지 가능한 표준 편차 값을 자세히 고려합니다.
화살표 X_thrm{O}
· 집 밖의 (m_shadowingSigma야외, 기본값은 7dB)
N(_thrm{O}, ma_thrm{O}^2).
ightarrow X_thrm{I}
· 실내(m_shadowingSigma실내, 기본값은 10dB)
N(_thrm{I}, ma_thrm{I}^2).
오른쪽 화살표
· 외벽 관통(m_shadowingSigmaExtWalls, 기본값 5dB)
X_thrm{W} N(_thrm{W}, ma_thrm{W}^2)
시뮬레이터는 노드에 따라 각 활성 링크마다 섀도잉 값을 생성합니다.
링크가 전송에 처음 사용되는 위치. 에서 전송되는 경우
실외 노드에서 실내 노드로 또는 그 반대로, 표준 편차(ma_thrm{IO})는
표준의 XNUMX차 값 합계의 제곱근으로 계산됩니다.
실외 노드의 경우 편차와 외벽 관통에 대한 편차. 이것은
그림자를 생성하는 구성 요소가 각각 독립적이라는 사실로 인해
다른; 따라서 두 개의 독립적인 변수의 합으로 인한 분포의 분산
정상적인 것은 분산의 합입니다.
경로 손실 논리
다음에 의해 구현되는 다양한 경로 손실 논리에 대해 설명합니다.
BuildingsPropagationLossModel에서 상속.
잡종건물전파손실모델
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 잡종건물전파손실모델 포함된 pathloss 모델은
서로 다른 실외 및
실내 시나리오, 실내 대 실외 및 실외 대 실내 시나리오. 상세히,
클래스 잡종건물전파손실모델 다음 경로 손실 모델을 통합합니다.
· OkumuraHataPropagationLossModel(OH)(주파수 > 2.3GHz에서 다음으로 대체됨)
Kun2600Mhz전파손실모델)
· ItuR1411LosPropagationLossModel 및 ItuR1411NlosOverRooftopPropagationLossModel
(I1411)
· ItuR1238PropagationLossModel(I1238)
· BuildingsPropagationLossModel의 경로 손실 요소(EWL, HG, IWL)
다음 의사 코드는 다양한 경로 손실 모델 요소가 어떻게 설명되는지 보여줍니다.
위의 통합 잡종건물전파손실모델:
if (txNode가 실외임)
그때
if (rxNode가 실외임)
그때
if (거리 > 1km)
그때
if (rxNode 또는 txNode가 옥상 아래에 있음)
그때
패 = I1411
그렇지 않으면
패 = 오
그렇지 않으면
패 = I1411
그렇지 않으면(rxNode가 실내임)
if (거리 > 1km)
그때
if (rxNode 또는 txNode가 옥상 아래에 있음)
L = I1411 + EWL + HG
그렇지 않으면
L = OH + EWL + HG
그렇지 않으면
L = I1411 + EWL + HG
그렇지 않으면(txNode가 실내임)
if (rxNode가 실내임)
그때
만약 (같은 건물)
그때
패 = I1238 + IWL
그렇지 않으면
L = I1411 + 2*EWL
그렇지 않으면(rxNode가 실외임)
if (거리 > 1km)
그때
if (rxNode 또는 txNode가 옥상 아래에 있음)
그때
L = I1411 + EWL + HG
그렇지 않으면
L = OH + EWL + HG
그렇지 않으면
패 = I1411 + EWL
옥상 수준 아래의 두 노드 간의 통신의 경우
거리가 1km보다 크더라도 OH는 특히 I1411 모델을 고려합니다.
매크로 셀용으로 설계되어 지붕 위의 안테나용으로 설계되었습니다.
ITU-R P.1411 모델의 경우 LOS 및 NLoS 버전을 모두 고려합니다. 특히, 우리는
조정 가능한 임계값보다 짧은 거리에 대한 LoS 전파를 고려합니다.
(m_itu1411NlosThreshold). NLoS 전파의 경우 over the roof-top 모델은
매크로 BS와 SC를 모두 모델링할 때 고려됩니다. NLoS의 경우 여러
평균 거리 폭과 같은 시나리오 종속 매개변수가 포함되었습니다.
이러한 매개변수의 값은 방향에 따라 적절하게 설정되어야 합니다.
시나리오가 구현되면 모델은 기본적으로 해당 값을 계산하지 않습니다. 어떤 경우에
값이 제공되며 모바일과 BS의 높이는 별도로 표준 값이 사용됩니다.
대신 무결성이 코드에서 직접 테스트됩니다(즉,
XNUMX보다 큼). 다음에서 우리는 구성 요소의 표현을 제공합니다.
모델입니다.
또한 서로 다른 전파 모델(OH, I1411, I1238)을
변형) HybridBuildingsPropagationLossModel의 불연속성이 발생할 수 있습니다.
거리에 대한 경로 손실. 속성의 적절한 조정(특히
거리 임계값 속성)은 이러한 불연속성을 방지할 수 있습니다. 그러나 이후
각 모델의 동작은 여러 다른 매개변수(빈도, 노드 높이 등)에 따라 달라집니다.
모든 불연속성을 피할 수 있는 이러한 임계값의 기본값은 없습니다.
가능한 구성. 따라서 이러한 매개변수의 적절한 튜닝은
사용자.
오건물전파손실모델
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 오건물전파손실모델 클래스는 문제를 해결하기 위한 간단한 수단으로 만들어졌습니다.
의 불연속 문제 잡종건물전파손실모델 하지 않고
시나리오별 매개변수 튜닝. 해결책은 하나의 전파 손실만 사용하는 것입니다.
모델(즉, Okumura Hata)에 대한 경로 손실 로직의 구조를 유지하면서
다른 경로 손실 구성 요소(예: 벽 침투 손실) 계산. 결과는
불연속성이 없는 모델(벽으로 인한 것 제외)
건물 및 실외/실내 사용자가 있는 일반적인 시나리오에 대해 전반적으로 사실적입니다.
Okumura Hata는 실내 통신에도 실외에도 적합하지 않기 때문에
옥상 아래 통신.
세부적으로는 수업 오건물전파손실모델 다음 경로 손실을 통합합니다.
모델 :
· OkumuraHataPropagationLossModel (OH)
· BuildingsPropagationLossModel의 경로 손실 요소(EWL, HG, IWL)
다음 의사 코드는 다양한 경로 손실 모델 요소가 어떻게 설명되는지 보여줍니다.
위의 통합 오건물전파손실모델:
if (txNode가 실외임)
그때
if (rxNode가 실외임)
그때
패 = 오
그렇지 않으면(rxNode가 실내임)
패 = OH + EWL
그렇지 않으면(txNode가 실내임)
if (rxNode가 실내임)
그때
만약 (같은 건물)
그때
패 = OH + IWL
그렇지 않으면
L = OH + 2*EWL
그렇지 않으면(rxNode가 실외임)
패 = OH + EWL
OhBuildingsPropagationLossModel은 다음과 관련하여 크게 단순화되었습니다.
OH가 항상 사용된다는 사실 때문에 HybridBuildingsPropagationLossModel로. 이 동안
일부 시나리오(특히 옥상 아래 및 실내)에서 덜 정확한 모델을 제공합니다.
영향을 미치는 경로 손실 불연속성 문제를 효과적으로 방지합니다.
HybridBuildingsPropagationLossModel.
사용자 문서
방법 에 사용 건물 in a 시뮬레이션
이 섹션에서는 시뮬레이션 내에서 건물 모델의 기본 사용법을 설명합니다.
프로그램)
포함 전에, 헤더
시뮬레이션 프로그램 시작 부분에 다음을 추가하십시오.
#포함하다
만들기 a 건물
예를 들어 주거용 10 x 20 x 10 건물을 생성해 보겠습니다.
더블 x_min = 0.0;
더블 x_max = 10.0;
이중 y_min = 0.0;
이중 y_max = 20.0;
이중 z_min = 0.0;
이중 z_max = 10.0;
Ptr b = 객체 생성 ();
b->SetBoundaries(박스(x_min, x_max, y_min, y_max, z_min, z_max));
b->SetBuildingType (건물::주거);
b->SetExtWallsType (Building::ConcreteWithWindows);
b->SetNFloors (3);
b->SetNRoomsX (3);
b->SetNRoomsY (2);
이 건물은 3층으로 구성되어 있으며 동일한 크기의 내부 2 x XNUMX 그리드 방이 있습니다.
도우미 클래스인 GridBuildingAllocator를 사용하여 다음 집합을 쉽게 만들 수도 있습니다.
직사각형 그리드에 배치된 동일한 특성을 가진 건물. 다음은 예입니다.
그것을 사용하는 방법:
Ptr gridBuildingAllocator;
gridBuildingAllocator = CreateObject ();
gridBuildingAllocator->SetAttribute ("GridWidth", UintegerValue (3));
gridBuildingAllocator->SetAttribute ("LengthX", DoubleValue (7));
gridBuildingAllocator->SetAttribute ("LengthY", DoubleValue (13));
gridBuildingAllocator->SetAttribute ("DeltaX", DoubleValue (3));
gridBuildingAllocator->SetAttribute ("DeltaY", DoubleValue (3));
gridBuildingAllocator->SetAttribute ("높이", DoubleValue (6));
gridBuildingAllocator->SetBuildingAttribute ("NRoomsX", UintegerValue (2));
gridBuildingAllocator->SetBuildingAttribute ("NRoomsY", UintegerValue (4));
gridBuildingAllocator->SetBuildingAttribute ("NFloors", UintegerValue (2));
gridBuildingAllocator->SetAttribute ("MinX", DoubleValue (0));
gridBuildingAllocator->SetAttribute ("MinY", DoubleValue (0));
gridBuildingAllocator->만들기(6);
이렇게 하면 3개 건물의 2x6 그리드가 생성되며 각 건물은 7 x 13 x 6m이고 내부에 2 x 4개의 방이 있습니다.
2포; 건물은 x축과 y축 모두에서 3m 간격으로 배치됩니다.
설정 노드 and 유동성 모델
노드 및 이동성 모델은 평소와 같이 구성되지만
추가 호출이 필요한 건물 모델 BuildingsHelper::설치(), 할 수 있도록
이동성 모델에는 건물에 대한 위치 정보가 포함됩니다. 여기는
예 :
이동성도우미 이동성;
mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
ueNodes.Create(2);
이동성.설치(ueNodes);
BuildingsHelper::설치(ueNodes);
임의의 모빌리티 모델이 사용될 수 있다는 점에 유의해야 합니다. 그러나 사용자는
사용 중인 이동성 모델의 동작이
건물의 존재. 예를 들어, 전체에 걸쳐 단순 무작위 이동성을 사용하여
건물이 있는 시뮬레이션 영역은 쉽게 노드가 건물 안팎으로 이동할 수 있습니다.
벽의 유무에 관계없이 건물.
장소 일부 노드
에 설명된 여러 방법을 사용하여 시뮬레이션에 노드를 배치할 수 있습니다.
수행원.
유산 위치 방법
모든 레거시 ns-3 포지셔닝 방법을 사용하여 시뮬레이션에 노드를 배치할 수 있습니다. 그만큼
중요한 추가 단계는 예를 들어 다음과 같이 노드를 수동으로 배치할 수 있습니다.
Ptr mm0 = enbNodes.Get(0)->GetObject ();
Ptr mm1 = enbNodes.Get(1)->GetObject ();
mm0->SetPosition(벡터(5.0, 5.0, 1.5));
mm1->SetPosition(벡터(30.0, 40.0, 1.5));
이동성도우미 이동성;
mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
ueNodes.Create(2);
이동성.설치(ueNodes);
BuildingsHelper::설치(ueNodes);
mm0->SetPosition(벡터(5.0, 5.0, 1.5));
mm1->SetPosition(벡터(30.0, 40.0, 1.5));
또는 기존 PositionAllocator 클래스를 사용할 수 있습니다. 의 좌표
노드는 실외 또는 실내에 배치할지 여부를 결정하고 실내인 경우
건물과 방이 배치되어 있습니다.
건물별 위치 방법
다음 위치 할당자 클래스는 노드를 특수 위치에 배치하는 데 사용할 수 있습니다.
건물과 관련하여:
· 무작위건물위치할당자: 각 위치를 임의로 선택하여 할당
모든 건물 목록에서 건물을 짓고 내부 위치를 무작위로 선택합니다.
건물.
· RandomRoomPositionAllocator: 방을 무작위로 선택하여 각 직책을 할당합니다.
모든 건물의 방 목록, 그리고 무작위로 내부 위치를 선택
방.
· SameRoomPositionAllocator: 주어진 NodeContainer를 순차적으로 탐색하고 각각에 대해
노드는 해당 노드의 같은 방에서 무작위로 새로운 위치를 할당합니다.
· 고정방 위치 할당자: 에 균일하게 분포된 임의의 위치 생성
선택한 건물 내부의 선택한 방의 볼륨.
확인 전에, 유동성 모델 일관된
중대한: 건물을 사용할 때마다 다음 명령을 실행해야 합니다.
시뮬레이션에 모든 노드와 건물을 배치했습니다.
BuildingsHelper::MakeMobilityModel일관성();
이 명령은 모든 노드와 모든 건물의 목록을 살펴보고 다음을 결정합니다.
각 사용자가 실내인지 실외인지, 실내인 경우 건물도 결정합니다.
사용자가 위치한 건물 내부의 해당 층 및 번호.
건물 인식 병상 상실 모델
시뮬레이션에 건물과 노드를 배치한 후 건물 인식
일반 경로 손실을 사용하는 것과 동일한 방식으로 시뮬레이션의 경로 손실 모델
모델. 이를 수행하는 방법은 고려 중인 무선 모듈에 따라 다릅니다(lte,
wifi, wimax 등)이므로 특정 모델에 대한 설명서를 참조하십시오.
도움말을 참조하십시오.
본관 구성 가능 속성
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 건물 클래스에는 다음과 같은 구성 가능한 매개변수가 있습니다.
· 건물 유형: 주거, 사무실 및 상업용.
· 외부 벽 유형: 목재, ConcreteWithWindows, ConcreteWithoutWindows 및 StoneBlocks.
· 건물 경계: a 보물상자 건물 경계가 있는 클래스.
· 층수.
· x축과 y축의 방 수(방은 그리드 방식으로만 배치할 수 있음).
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 건물이동성손실모델 ns3 속성 시스템으로 구성 가능한 매개변수는
바운드(문자열 범위)를 제공하여 시뮬레이션 영역의 보물상자 수업
지역 경계와 함께. 또한 해당 방법을 통해 다음 매개변수를 사용할 수 있습니다.
구성:
· 노드가 배치된 층 수(기본값 0).
· 객실 그리드의 위치.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 건물전파손실모델 클래스에는 다음과 같은 구성 가능한 매개변수가 있습니다.
속성 시스템으로 구성 가능:
· 진동수: 기준 주파수(기본 2160MHz), 주파수를 설정하여
그에 따라 파장이 자동으로 설정되며 그 반대도 마찬가지입니다.
· 람다: 파장(위 주파수를 고려한 0.139미터).
· ShadowSigma야외: 실외 노드에 대한 섀도잉의 표준 편차(기본값
7.0).
· ShadowSigma실내: 실내 노드에 대한 쉐도잉의 표준편차(디폴트
8.0).
· 그림자시그마Ext벽: 외벽에 의한 그림자의 표준편차
실외에서 실내로의 통신을 위한 침투(기본값 5.0).
· 옥상층: 건물 옥상의 높이를 미터로 표시합니다(기본값 20미터).
· Los2NlosThr: 시선과 전환점 사이의 거리 값
비가시선 전파 모델(미터)(기본값 200미터).
· ITU1411거리Thr: 짧은 범위 사이의 스위칭 포인트 거리의 값
(ITU 1211) 통신 및 장거리(Okumura Hata) 미터 단위(기본값 200미터).
· 최소 거리: 평가를 위한 두 노드 사이의 최소 거리(미터)
경로 손실(이 임계값 이전에는 무시할 수 있는 것으로 간주됨)(기본값 0.5미터).
· 환경: Urban, SubUrban 및 OpenAreas 간의 환경 시나리오(기본값)
도시의).
· 도시 크기: Small, Medium, Large 중 도시의 차원(기본값 Large).
하이브리드 모드를 사용하기 위해 사용할 클래스는
하이브리드건물이동성손실모델, 적절한 경로 손실 모델을 선택할 수 있습니다.
디자인 장에 제시된 경로 손실 논리에 따라. 그러나 이 솔루션
경로 손실 모델 스위칭 포인트가 다음으로 인해 불연속성을 나타낼 수 있다는 문제가 있습니다.
모델의 다른 특성에. 이는 특정 조건에 따라
시나리오에서는 전환에 사용되는 임계값을 적절하게 조정해야 합니다. 단순한
오빌딩이동성손실모델 Okumura Hata 모델만을 사용하여 이 문제를 극복하고
벽 침투 손실.
지원 문서
살펴보기
ns-3 Building Pathloss 모듈을 테스트하고 검증하기 위해 몇 가지 테스트 스위트가 제공됩니다.
ns-3 테스트 프레임워크와 통합됩니다. 실행하려면 다음을 구성해야 합니다.
다음과 같은 방식으로 시뮬레이터를 빌드합니다.
$ ./waf 구성 --enable-tests --enable-modules=건물
$ ./test.py
위는 건물 모듈에 속한 테스트 스위트뿐만 아니라
건물 모듈이 의존하는 다른 모든 ns-3 모듈에 속하는 것입니다. 보다
테스트 프레임워크에 대한 일반 정보는 ns-3 매뉴얼을 참조하십시오.
다음과 같은 방법으로 HTML 형식의 보다 자세한 보고서를 얻을 수 있습니다.
$ ./test.py -w 결과.html
위의 명령을 실행한 후 다음을 열면 각 테스트에 대한 자세한 결과를 볼 수 있습니다.
파일 결과.html 웹 브라우저로.
다음 명령을 사용하여 각 테스트 스위트를 개별적으로 실행할 수 있습니다.
$ ./test.py -s 테스트 스위트 이름
에 대한 자세한 내용은 test.py 및 ns-3 테스트 프레임워크는 ns-3을 참조하십시오.
수동.
상품 설명 of 전에, test 스위트 룸
건물도우미 test
테스트 스위트 건물 도우미 방법이 있는지 확인
BuildingsHelper::MakeAllInstances일관성 () 제대로 작동합니다.
BuildingsHelper는 노드가 실외인지 실내인지, 그리고 실내인 경우 위치를 찾는 데 성공합니다.
올바른 건물, 방, 층에 위치해 있습니다. 여러 테스트 케이스는
서로 다른 건물(크기, 위치, 방 및 층이 다름) 제공
다른 노드 위치. 각 노드가 올바르게 배치되면 테스트에 통과합니다.
건물 위치 할당자 test
테스트 스위트 건물 위치 할당자 다음을 확인하는 두 가지 테스트 사례를 제공합니다.
각각 RandomRoomPositionAllocator 및 SameRoomPositionAllocator가 제대로 작동합니다. 각
테스트 케이스는 알려진 좌표에서 단일 2x3x2 방 건물(총 12개 방)을 포함하고
각각 24개 및 48개 노드. 두 테스트 모두 각각에 할당된 노드의 수를 확인합니다.
방은 예상되는 것이며 노드의 위치도 정확합니다.
건물 경로 손실 테스트
테스트 스위트 건물 경로 손실 모델 비교하는 다양한 단위 테스트를 제공합니다.
사전에 특정 시나리오에서 건물 경로 손실 모듈의 예상 결과
Octave 스크립트로 오프라인에서 얻은 계산 값
(test/reference/buildings-pathloss.m). 두 값이 모두 충족되면 테스트가 통과된 것으로 간주됩니다.
0.1의 공차까지 같으며, 이는 일반적인 사용에 적합하다고 간주됩니다.
경로 손실 값(dB 단위).
다음에서 우리는 고려한 시나리오를 자세히 설명했으며 해당 선택은 다음에 대해 수행되었습니다.
가능한 다양한 경로 손실 논리 조합 세트를 포함합니다. 경로 손실 논리 결과
따라서 암시적으로 테스트됩니다.
Test #1 오쿠무라 오류
이 테스트에서는 표준 Okumura Hata 모델을 테스트합니다. 따라서 eNB와 UE가 모두 배치됩니다.
2000m 거리에서 외부. 사용 주파수는 E-UTRA 밴드 #5이며,
869MHz에 해당합니다(5.5의 표 1-36.101 참조). 테스트에는 유효성 검사도 포함됩니다.
지역 확장(즉, 도시, 교외 및 개방 지역) 및 도시 크기
(소형, 중형 및 대형).
Test #2 비용231 모델
이 테스트는 COST231 모델을 검증하기 위한 것입니다. 테스트는 Okumura와 유사합니다.
사용된 주파수가 EUTRA 대역 #1(2140MHz)이고 테스트가
모델로 인해 도시 시나리오에서 대도시와 소도시에 대해서만 수행할 수 있습니다.
한계.
Test #3 2.6 GHz의 모델
이 테스트는 2.6GHz Kun 모델을 검증합니다. 테스트는 Okumura Hata와 유사하지만
주파수는 EUTRA 대역 #7(2620MHz)이고 테스트는
도시 시나리오.
Test #4 ITU1411 로스 모델
이 테스트는 거리 내 시선의 경우 ITU1411 모델을 검증하기 위한 것입니다.
협곡 전송. 이 경우 UE는 eNB에서 100미터 떨어진 곳에 위치합니다.
LoS와 NLoS 간 전환을 위한 임계값은 기본값(예: 200m)으로 유지됩니다.
Test #5 ITU1411 NLoS 모델
이 테스트는 ITU1411 모델의 가시선이 없는 경우의 유효성을 확인하기 위한 것입니다.
옥상 전송. 이 경우 UE는 eNB에서 900미터 떨어진 곳에 위치합니다.
LoS와 NLoS 사이를 전환하기 위한 임계값 이상이어야 하는 순서는 기본값 XNUMX로 유지됩니다.
(즉, 200m).
Test #6 ITUP1238 모델
이 테스트는 실내 전송의 경우 ITUP1238 모델을 검증하기 위한 것입니다. ~ 안에
이 경우 UE와 eNB는 둘 다 벽이 있는 주거용 건물에 배치됩니다.
창문이 있는 콘크리트. Ue는 30층에 있으며 XNUMX미터 거리에 있습니다.
XNUMX층에 위치한 eNB.
Test #7 집 밖의 -> 옥내의 과 오쿠무라 오류 모델
이 테스트는 장거리에서 실외에서 실내로의 전송을 검증합니다. 이 경우
UE는 창문이 있는 콘크리트 벽이 있는 주거용 건물에 배치되며
실외 eNB에서 2000미터 거리.
Test #8 집 밖의 -> 옥내의 과 ITU1411 모델
이 테스트는 짧은 거리에서 실외에서 실내로의 전송을 검증합니다. 이 경우
UE는 창문이 있는 콘크리트 벽이 있는 주거용 건물에 배치되며
실외 eNB에서 100미터 거리.
Test #9 옥내의 -> 집 밖의 과 ITU1411 모델
이 테스트는 매우 짧은 거리에서 실외에서 실내로의 전송을 검증합니다. 이에
eNB가 벽으로 된 주거용 건물의 XNUMX층에 배치되는 경우
창문이 있고 실외 UE에서 100미터 떨어진 콘크리트(즉, LoS
의사소통). 따라서 높이 이득은 경로 손실 평가에 포함되어야 합니다.
Test #10 옥내의 -> 집 밖의 과 ITU1411 모델
이 테스트는 짧은 거리에서 실외에서 실내로의 전송을 검증합니다. 이 경우
eNB는 주거용 건물의 XNUMX층에 배치되며 벽은
실외 UE(즉, NLoS
의사소통). 따라서 높이 이득은 경로 손실 평가에 포함되어야 합니다.
건물 그림자 Test
테스트 스위트 건물 그림자 테스트 통계를 검증하기 위한 단위 테스트입니다.
에 의해 구현된 그림자 모델의 분포 건물Pathloss모델. 그림자
평균이 0이고 변수 표준이 있는 정규 분포에 따라 모델링됩니다.
문헌에서 일반적으로 사용되는 모델에 따른 편차 ma. XNUMX가지 테스트 케이스는
실내, 실외 및 실내 대 실외 통신의 경우를 포함합니다.
각 테스트 케이스는 서로 다른 쌍에 대해 1000개의 서로 다른 음영 샘플을 생성합니다.
주어진 시나리오에서 MobilityModel 인스턴스. 섀도잉 값은 빼서 얻습니다.
에 의해 반환된 총 손실 가치에서 잡종건물Pathloss모델 경로 손실 구성요소
이는 각 테스트 케이스에 대해 일정하고 미리 결정됩니다. 테스트는 샘플이
그림자 값의 평균 및 표본 분산은 99% 신뢰 구간 내에 있습니다.
표본 평균과 표본 분산의 이 테스트는 또한 그림자 값이
동일한 MobilityModel 인스턴스 쌍에 대해 연속적으로 반환되는 값은 상수입니다.
참고자료
[투르크마니어]
Turkmani AMD, JD Parson 및 DG Lewis, "건물에 무선 전파
441, 900 및 1400MHz", 4년 Land Mobile Radio에 관한 1987차 국제 회의에서.
클릭 모듈러 라우터 통합
Click은 구성 가능한 라우터를 구축하기 위한 소프트웨어 아키텍처입니다. 다른 것을 사용하여
요소라고 하는 패킷 처리 장치의 조합으로 Click 라우터를 만들 수 있습니다.
특정 종류의 기능을 수행합니다. 이러한 유연성은 다음을 위한 좋은 플랫폼을 제공합니다.
다양한 프로토콜을 테스트하고 실험합니다.
모델 상품 설명
Click 모델의 소스 코드는 디렉토리에 있습니다. 소스/클릭.
디자인
ns-3의 디자인은 다음과 같은 이유로 Click과의 통합에 매우 적합합니다.
· ns-3의 패킷은 스택 위/아래로 이동할 때 직렬화/역직렬화됩니다. 이를 통해
ns-3 패킷은 그대로 클릭으로 전달됩니다.
· 이것은 또한 모든 종류의 ns-3 트래픽 생성기 및 전송이 쉽게 작동해야 함을 의미합니다.
클릭 위에.
· 클릭을 Ipv4RoutingProtocol 인스턴스로 구현하려고 노력하면
ns-3 코드의 LL 및 MAC 계층에 대한 중요한 변경 사항.
설계 목표는 ns-3-click 공용 API를 사용자가 충분히 간단하게 만드는 것이었습니다.
Ipv4ClickRouting 인스턴스를 노드에 추가하고 각 클릭 노드에 알리기만 하면 됩니다.
사용할 클릭 구성 파일(.click 파일)의
이 모델은 Click Modular Router에 대한 인터페이스를 구현하고 다음을 제공합니다.
노드가 외부 라우팅에 클릭을 사용할 수 있도록 하는 Ipv4ClickRouting 클래스입니다. 일반과 달리
Ipv4RoutingProtocol 하위 유형인 Ipv4ClickRouting은 RouteInput() 메서드를 사용하지 않지만
대신 적절한 인터페이스에서 패킷을 수신하고 그에 따라 처리합니다. 메모
Click for를 사용하려면 클릭 그래프에 라우팅 테이블 유형 요소가 있어야 합니다.
외부 라우팅. 이는 다음에서 상속된 RouteOutput() 함수에 필요합니다.
Ipv4RoutingProtocol. 또한 클릭 기반 노드는 다른 종류의 L3를 사용합니다.
Ipv4L3Protocol의 축소 버전인 Ipv4L3ClickProtocol의 형식입니다.
Ipv4L3ClickProtocol은 스택을 통과하는 패킷을 Ipv4ClickRouting에 전달합니다.
처리.
개발 a 모의 실험 장치 API 에 수 NS-3 에 상호 작용하는 과
대부분의 API는 이미 잘 정의되어 있으므로 Click에서 정보를 검색할 수 있습니다.
시뮬레이터(예: 노드의 ID, 인터페이스 ID 등). 대부분을 유지함으로써
동일한 방법에 대해 ns-3에 특정한 새로운 구현을 작성하는 것이 가능해야 합니다.
기능.
따라서 ns-3과의 Click 통합을 위해 Ipv4ClickRouting이라는 클래스가 다음을 처리합니다.
클릭과의 상호 작용. 동일한 코드는 다음에서 찾을 수 있습니다.
src/클릭/모델/ipv4-클릭-라우팅.{cc,h}.
패킷 손 오프 사이에 NS-3 and
ns-3과 Click 사이에 발생할 수 있는 XNUMX가지 종류의 패킷 핸드오프가 있습니다.
· L4 ~ L3
· L3 ~ L4
· L3 ~ L2
· L2 ~ L3
이를 극복하기 위해 Ipv4L3ClickProtocol을 구현합니다.
Ipv4L3프로토콜. Ipv4L3ClickProtocol은 Ipv4ClickRouting과 패킷을 주고 받습니다.
적절하게 라우팅을 수행합니다.
범위 and 제한 사항
· 현재 상태에서 NS-3 클릭 통합은 L3에서만 사용하도록 제한되어 있습니다.
L3를 처리하는 NS-2. 현재 Click MAC 지원도 추가하기 위해 노력하고 있습니다. 참조
그에 따라 클릭 그래프를 디자인했는지 확인하십시오.
· 또한 ns-3-click은 사용자 수준 요소에서만 작동합니다. 전체 목록
요소는 다음에서 사용할 수 있습니다. http://read.cs.ucla.edu/click/elements. 다음을 갖는 요소
옆에 언급된 'all', 'userlevel' 또는 'ns'를 사용할 수 있습니다.
· 현재 Click에 대한 ns-3 인터페이스는 IPv4 전용입니다. IPv6 지원을 추가할 예정입니다.
미래.
참고자료
· Eddie Kohler, Robert Morris, Benjie Chen, John Jannotti 및 M. Frans Kaashoek. 그만큼
모듈식 라우터를 클릭합니다. 컴퓨터 시스템의 ACM 트랜잭션 18(3), 2000년 XNUMX월, 페이지
263 - 297.
· Lalith Suresh P. 및 Ruben Merz. Ns-3-click: ns-3용 모듈식 라우터 통합을 클릭합니다.
프로세스에서 NS-3(WNS3)에 관한 제3회 국제 ICST 워크샵, 스페인 바르셀로나. XNUMX월,
2011.
· Michael Neufeld, Ashish Jain, Dirk Grunwald. Nsclick: 브리징 네트워크 시뮬레이션
및 배포. MSWiM '02: 제5회 ACM 국제 모델링 워크샵 간행물
무선 및 모바일 시스템의 분석 및 시뮬레이션, 2002년, 미국 조지아주 애틀랜타.
http://doi.acm.org/10.1145/570758.570772
용법
건물
첫 번째 단계는 github 저장소에서 클릭을 복제하고 빌드하는 것입니다.
$ 자식 클론 https://github.com/kohler/click
$ cd 클릭/
$ ./configure --disable-linuxmodule --enable-nsclick --enable-wifi
확인 $
Click with Wifi를 사용하지 않으려면 --enable-wifi 플래그를 건너뛸 수 있습니다. *
참고: 'make install'을 수행할 필요가 없습니다.
Click이 성공적으로 빌드되면 ns-3 디렉토리로 변경하고 ns-3을 구성합니다.
클릭 통합 지원:
$ ./waf 구성 --enable-examples --enable-tests --with-nsclick=/path/to/click/source
힌트: ns-3 위에 설치된 디렉토리 하나를 클릭한 경우(예: ns-3-allinone
디렉토리), 디렉토리 이름은 'click'(또는 디렉토리에 대한 심볼릭 링크)입니다.
이름이 'click'인 경우) --with-nsclick 지정자는 필요하지 않습니다. ns-3 빌드
시스템이 성공적으로 디렉토리를 찾을 것입니다.
'NS-3 클릭 통합 지원' 옆에 '활성화'라고 표시되어 있으면 준비가 된 것입니다.
참고: 모듈식 ns-3을 실행하는 경우 모든 ns-3-click을 실행하는 데 필요한 최소 모듈 세트
예를 들면 wifi, csma 및 config-store가 있습니다.
다음으로 예제 중 하나를 실행해 보십시오.
$ ./waf --run nsclick-simple-lan
그런 다음 nsclick-simple-lan-0-0.pcap이라는 결과 .pcap 추적을 볼 수 있습니다.
및 nsclick-simple-lan-0-1.pcap.
그래프 명령
클릭 그래프를 만들 때 다음 사항에 유의해야 합니다.
· userlevel 요소만 사용할 수 있습니다.
· FromDevice 및 ToDevice 요소를 FromSimDevice 및
ToSimDevice 요소.
· 커널에 대한 패킷은 ToSimDevice(tap0,IP)를 사용하여 전송됩니다.
· 모든 노드에 대해 커널과 패킷을 송수신하는 장치는 이름이 지정됩니다.
'탭0'. 나머지 인터페이스는 eth0, eth1 등으로 이름을 지정해야 합니다.
와이파이 사용). 장치 번호는 0부터 시작해야 합니다.
사용자가 원하는 대로 클릭 파일에서 장치 이름을 지정할 수 있도록 유연하게 만들어질 것입니다.
· 라우팅 테이블 요소는 필수입니다. 라우팅 테이블 요소의 OUTports는
패킷이 통과할 장치의 인터페이스 번호에 해당
결국 발송됩니다. 이 규칙을 위반하면 정말 이상한 패킷 추적이 발생합니다.
그런 다음 이 라우팅 테이블 요소의 이름을 Ipv4ClickRouting 프로토콜에 전달해야 합니다.
객체를 시뮬레이션 매개변수로 사용합니다. 자세한 내용은 클릭 예시를 참조하세요.
· 현재 구현은 ns-3 처리와 함께 주로 L3 기능으로 Click을 유지합니다.
L2. 곧 Click에서도 MAC 프로토콜 사용을 지원하기 위한 작업을 시작할 것입니다.
즉, 현재로서는 Click의 Wi-Fi 특정 요소를 ns-3과 함께 사용할 수 없습니다.
디버깅 패킷 흐름 에
클릭 그래프 내의 어느 지점에서든 인쇄(-
http://read.cs.ucla.edu/click/elements/print) 예쁜 인쇄를 위한 요소 및 변형
패킷 내용의. 또한 다음을 통해 흐르는 패킷의 pcap 추적을 생성할 수 있습니다.
ToDump(http://read.cs.ucla.edu/click/elements/todump) 요소로
잘. 예를 들어:
myarpquerier
-> 인쇄(fromarpquery,64)
-> ToDump(out_arpquery,PER_NODE 1)
-> 아웃;
그리고 ... ArpQuierer에서 흘러나오는 패킷의 내용을 인쇄한 다음
클릭을 사용하는 각 노드에 대해 접미사 'out_arpquery'가 있는 pcap 추적 파일
파일을 'ethout'으로 패킷을 푸시하기 전에.
돕는 사람
노드에서 클릭을 실행하려면 가장 쉬운 방법은 ClickInternetStackHelper를 사용하는 것입니다.
시뮬레이션 스크립트의 클래스. 예를 들어:
ClickInternetStackHelper 클릭;
click.SetClickFile(myNodeContainer, "nsclick-simple-lan.click");
click.SetRoutingTableElement(myNodeContainer, "u/rt");
click.Install(myNodeContainer);
내부의 예제 스크립트 src/클릭/예제/ 에서 클릭 기반 노드의 사용을 시연합니다.
다른 시나리오. 도우미 소스는 내부에서 찾을 수 있습니다.
src/click/helper/click-internet-stack-helper.{h,cc}
예
다음 예제가 작성되었으며 다음에서 찾을 수 있습니다. src/클릭/예제/:
· nsclick-simple-lan.cc 및 nsclick-raw-wlan.cc: 클릭 기반 노드 통신
각각 Csma 및 Wifi를 사용하는 클릭 없는 일반 ns-3 노드. 그것은 또한 보여줍니다
Click 위에 TCP 사용, 원래 nsclick 구현이
NS-2는 달성하지 못했습니다.
· nsclick-udp-client-server-csma.cc 및 nsclick-udp-client-server-wifi.cc: 3노드 LAN
(각각 Csma 및 Wifi) 여기서 2개의 클릭 기반 노드는 UDP 클라이언트를 실행하고
UDP 서버를 실행하는 세 번째 클릭 기반 노드로 패킷.
· nsclick-routing.cc: One Click 기반 노드는 세 번째 노드를 통해 다른 노드와 통신합니다.
IP 라우터 역할을 합니다(IP 라우터 클릭 구성 사용). 이것은 보여줍니다
클릭을 사용한 라우팅.
스크립트는 다음에서 사용할 수 있습니다. /conf/ Click 파일을 생성할 수 있는
몇 가지 일반적인 시나리오. 에서 사용되는 IP 라우터 nsclick-routing.cc 에서 생성되었습니다.
make-ip-conf.pl 파일을 만들고 ns-3-click과 함께 작동하도록 약간 수정했습니다.
검증
이 모델은 다음과 같이 테스트되었습니다.
· Ipv4ClickRouting의 내부를 확인하기 위해 단위 테스트가 작성되었습니다. 이것은 될 수있다
발견 된 src/클릭/ipv4-click-routing-test.cc. 이 테스트는 방법이
장치 이름을 ID로, IP 주소를 장치 이름으로 처리하는 Ipv4ClickRouting 내부
장치 이름 바인딩의 Mac 주소가 예상대로 작동합니다.
· 예제는 실제 시뮬레이션 시나리오로 Click을 테스트하는 데 사용되었습니다. 이것들은 다음과 같습니다.
발견 된 src/클릭/예제/. 이 테스트에서는 다음을 다룹니다.
Click을 기반으로 하는 전송 종류, TCP/UDP, Click 노드가 통신할 수 있는지 여부
비클릭 기반 노드, 클릭 노드가 클릭을 사용하여 서로 통신할 수 있는지 여부
정적 라우팅을 사용하여 패킷을 라우팅합니다.
· Click은 Csma, Wi-Fi 및 Point-to-Point 장치에서 테스트되었습니다. 사용 지침은
이전 섹션에서 사용할 수 있습니다.
CSMA 넷디바이스
이것은 Csma 모델 doxygen을 보완하기 위한 CSMA NetDevice 장에 대한 소개입니다.
살펴보기 of 전에, CSMA 모델
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 NS-3 CSMA 장치는 이더넷의 정신으로 간단한 버스 네트워크를 모델링합니다. 비록
구축하거나 구매할 수 있는 실제 물리적 네트워크를 모델링하지는 않습니다.
매우 유용한 기능.
일반적으로 버스 네트워크라고 하면 이더넷이나 IEEE 802.3이 떠오릅니다. 이더넷
CSMA/CD(기하급수적으로 충돌을 감지하는 캐리어 감지 다중 액세스)를 사용합니다.
공유 전송 매체를 확보하기 위해 백오프를 늘립니다. 그만큼 NS-3 CSMA 장치
전 세계적으로 사용 가능한 채널의 특성을 사용하여 이 프로세스의 일부만 모델링합니다.
즉각적인(빛보다 빠른) 캐리어 감지 및 우선순위 기반 충돌 제공
"기피." 이더넷의 의미에서 충돌은 결코 발생하지 않습니다. NS-3 CSMA 장치
충돌 감지를 모델링하지 않으며 진행 중인 전송이 "걸림"되지 않습니다.
CSMA 층 모델
계층화된 통신을 설명하는 데 사용되는 여러 가지 규칙이 있습니다.
문헌과 교과서의 아키텍처. 가장 일반적인 레이어링 모델은
ISO 7계층 참조 모델. 이 보기에서는 CsmaNetDevice 및 CsmaChannel 쌍
물리적(계층 1)과 데이터 링크(계층 2)의 가장 낮은 두 계층을 차지합니다.
위치. 또 다른 중요한 참조 모델은 RFC 1122, "요구 사항"에 지정된 모델입니다.
인터넷 호스트용 - 통신 계층." 이 보기에서는 CsmaNetDevice 및
CsmaChannel 쌍은 가장 낮은 계층인 링크 계층을 차지합니다. 겉보기에도 있고
교과서와 문헌에서 발견되는 끝없는 대안적 설명. 우리
LLC, MAC, MII를 나타내는 IEEE 802 표준에 사용되는 명명 규칙을 채택합니다.
및 PHY 계층화. 이러한 약어는 다음과 같이 정의됩니다.
· LLC: 논리적 링크 제어;
· MAC: 미디어 액세스 제어;
· MII: 미디어 독립 인터페이스;
· PHY: 물리적 계층.
이 경우 LLC and 맥 OSI 데이터 링크 계층의 하위 계층과 MII and PHY
OSI 물리 계층의 하위 계층입니다.
CSMA 장치의 "상단"은 네트워크 계층에서 데이터 계층으로의 전환을 정의합니다.
링크 레이어. 이 전환은 다음 중 하나를 호출하여 상위 계층에서 수행됩니다.
CsmaNetDevice::Send 또는 CsmaNetDevice::SendFrom.
IEEE 802.3 표준과 달리 CSMA에는 정확하게 지정된 PHY가 없습니다.
와이어 유형, 신호 또는 핀 배치의 의미에서 모델을 만듭니다. "하단" 인터페이스
CsmaNetDevice는 다음과 같이 일종의 MII(Media Independent Interface)로 간주될 수 있습니다.
"고속 이더넷"(IEEE 802.3u) 사양. 이 MII 인터페이스는
CsmaChannel의 해당 미디어 독립 인터페이스. 당신은 찾을 수 없습니다
10BASE-T 또는 1000BASE-LX PHY와 동일합니다.
CsmaNetDevice는 미디어 독립 인터페이스를 통해 CsmaChannel을 호출합니다. 이있다
메소드를 사용하여 "와이어 흔들기"를 시작할 시기를 채널에 알리기 위해 정의된 메소드
CsmaChannel::TransmitStart 및 전송 프로세스가 완료될 때 채널에 알리는 메서드
완료되고 채널은 "와이어"를 통해 마지막 비트를 전파하기 시작해야 합니다.
CsmaChannel::TransmitEnd.
TransmitEnd 메서드가 실행되면 채널은 단일 균일 신호를 모델링합니다.
매체에서의 전파 지연을 방지하고 패킷의 대처를 각 장치에 전달합니다.
CsmaNetDevice::Receive 메소드를 통해 패킷에 첨부됩니다.
"COL"에 해당하는 장치 미디어 독립 인터페이스에 "핀"이 있습니다.
(충돌). 채널 상태는 CsmaChannel::GetState를 호출하여 감지할 수 있습니다. 각
장치는 전송을 시작하기 전에 이 "핀"을 확인하고 적절한 백오프를 수행합니다.
필요한 경우 작업.
적절하게 수신된 패킷은 CsmaNetDevice에서 더 높은 수준으로 전달됩니다.
콜백 메커니즘. 콜백 함수는 상위 계층에 의해 초기화됩니다(네트가
장치가 연결됨) CsmaNetDevice::SetReceiveCallback을 사용하고 "적절한" 경우 호출됩니다.
패킷을 프로토콜 위로 전달하기 위해 네트워크 장치가 패킷을 수신합니다.
스택.
CSMA 채널 모델
CsmaChannel 클래스는 실제 전송 매체를 모델링합니다. 정해진 한도는 없습니다.
채널에 연결된 장치의 수. CsmaChannel은 데이터 속도와
"DataRate" 및 "Delay" 속성을 통해 액세스할 수 있는 광속 지연
각기. 채널에 제공되는 데이터 속도는 다음에서 사용되는 데이터 속도를 설정하는 데 사용됩니다.
채널에 연결된 CSMA 장치의 송신기 섹션. 방법이 없습니다
장치의 데이터 속도를 독립적으로 설정합니다. 데이터 전송률은 계산에만 사용되므로
지연 시간에는 제한이 없습니다(값을 보유하는 데이터 유형 제외).
CSMA 채널 및 장치가 작동할 수 있는 속도 어떤 기준으로든 제한이 없습니다.
일종의 PHY 특성입니다.
CsmaChannel에는 세 가지 상태가 있습니다. 게으른, 전송 중 and 전파. 이 세 가지 상태
채널의 모든 장치에서 즉시 "표시"됩니다. 이는 다음을 의미합니다.
장치가 시뮬레이션된 전송을 시작하거나 종료하면 채널의 모든 장치는 바로
상태 변화를 인지합니다. 한 장치가 다음을 볼 수 있는 시간은 없습니다. 게으른
충돌 영역에서 물리적으로 더 멀리 떨어져 있는 다른 장치가 채널을 사용할 수 있는 동안
채널을 통해 다른 채널로 전파되지 않은 관련 신호로 전송을 시작했습니다.
장치. 따라서 CsmaChannel 모델에서는 충돌 감지가 필요하지 않습니다.
어떤 식으로든 구현되지 않았습니다.
이름에서 알 수 있듯이 모델에 Carrier Sense 측면이 있습니다. 이후
시뮬레이터는 단일 스레드이므로 공통 채널에 대한 액세스는
모의 실험 장치. 이는 채널 경합을 위한 결정론적 메커니즘을 제공합니다. 그만큼
채널이 할당됨(상태에서 전환됨) 게으른 상태로 전송 중) 선착순으로
선착순으로 제공됩니다. 채널은 항상 세 가지 상태 프로세스를 거칩니다.
유휴 -> 전송 중 -> 전파 중 -> 유휴
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 전송 중 상태는 소스 네트 장치가 실제로 작동하는 동안의 시간을 모델링합니다.
전선의 신호를 흔들고 있습니다. 그만큼 전파 상태는 마지막 비트 이후의 시간을 모델링합니다.
신호가 와이어를 따라 "맨 끝"으로 전파될 때 전송되었습니다.
전환은 전송 중 상태는 호출에 의해 구동됩니다.
CsmaChannel::TransmitStart는 패킷을 전송하는 네트워크 장치에 의해 호출됩니다. 그것
호출로 전송을 종료하는 것은 해당 장치의 책임입니다.
경과 시간을 반영하는 적절한 시뮬레이션 시간에 CsmaChannel::TransmitEnd
모든 패킷 비트를 회선에 연결합니다. TransmitEnd가 호출되면 채널
단일 광속 지연에 해당하는 이벤트를 예약합니다. 이 지연은 다음에 적용됩니다.
채널의 모든 넷 장치는 동일합니다. 대칭 허브를 생각해 볼 수 있습니다.
패킷 비트는 중앙 위치로 전파된 다음 동일한 길이의 케이블을 중앙 위치로 되돌려 보냅니다.
채널의 다른 장치. 단일 "광속" 지연은 다음과 같습니다.
1) 하나의 CsmaNetDevice에서 해당 케이블을 통해 신호가 전파되는 데 걸리는 시간
허브로; 2) 허브가 패킷을 포트 밖으로 전달하는 데 걸리는 시간; ...을 더한
3) 문제의 신호가 대상 네트워크로 전파되는 데 걸리는 시간
장치.
CsmaChannel은 브로드캐스트 매체를 모델링하므로 패킷이 모든 장치에 전달됩니다.
전파 시간이 끝날 때 채널(소스 포함)에서. 그것은
패킷 수신 여부를 결정하는 송신 장치의 책임
채널을 통해 방송됩니다.
CsmaChannel은 다음 속성을 제공합니다.
· DataRate: 연결된 장치의 패킷 전송을 위한 비트 전송률입니다.
· 지연: 해당 채널의 빛 전송 지연 속도입니다.
CSMA 그물 장치 모델
CSMA 네트워크 장치는 이더넷 장치처럼 보입니다. CsmaNet장치
다음 속성을 제공합니다.
· 주소: 장치의 Mac48Address입니다.
· SendEnable: true인 경우 패킷 전송을 활성화합니다.
· ReceiverEnable: true인 경우 패킷 수신을 활성화합니다.
· EncapsulationMode: 사용할 링크 계층 캡슐화 유형;
· RxErrorModel: 수신 오류 모델입니다.
· TxQueue: 장치가 사용하는 전송 대기열입니다.
· InterframeGap: "프레임" 사이에서 대기하는 선택적 시간입니다.
· Rx: 수신된 패킷에 대한 추적 소스입니다.
· 삭제: 삭제된 패킷에 대한 추적 소스입니다.
CsmaNetDevice는 "수신 오류 모델" 할당을 지원합니다. 이것은
링크의 데이터 손상을 시뮬레이션하는 데 사용되는 ErrorModel 개체입니다.
CsmaNetDevice를 통해 전송된 패킷은 항상 전송 대기열을 통해 라우팅됩니다.
네트워크를 통해 전송된 패킷에 대한 추적 후크를 제공합니다. 이 전송 대기열을 설정할 수 있습니다.
(속성을 통해) 다양한 대기열 전략을 모델링합니다.
또한 장치에서 사용하는 캡슐화 방법도 속성별로 구성할 수 있습니다. 모든
패킷은 대상 및 소스 MAC 주소를 포함하는 EthernetHeader를 가져옵니다.
길이/유형 필드. 모든 패킷은 FCS를 포함하는 EthernetTrailer도 가져옵니다.
패킷의 데이터는 다양한 방식으로 캡슐화될 수 있습니다.
기본적으로 또는 "EncapsulationMode" 특성을 "Dix"로 설정하면 캡슐화는 다음과 같습니다.
DEC, Intel, Xerox 표준에 따릅니다. 이를 EthernetII 프레이밍이라고도 합니다.
친숙한 대상 MAC, 소스 MAC, EtherType, 데이터, CRC 형식입니다.
"EncapsulationMode" 특성이 "Llc"로 설정된 경우 LLC SNAP에 의해 캡슐화가 이루어집니다. ~ 안에
이 경우 EtherType(IP 또는 ARP)을 포함하는 SNAP 헤더가 추가됩니다.
구현된 다른 캡슐화 모드는 IP_ARP("EncapsulationMode"를 "IpArp"로 설정)입니다.
이더넷 헤더의 길이 유형은 해당 이더넷 헤더의 프로토콜 번호를 수신합니다.
패킷; 또는 길이 유형이 있는 ETHERNET_V1("EncapsulationMode"를 "EthernetV1"로 설정)
이더넷 헤더의 패킷 길이를 수신합니다. "Raw" 캡슐화 모드는 다음과 같습니다.
정의되었지만 구현되지 않음 - RAW 모드를 사용하면 어설션이 발생합니다.
채널의 모든 넷 장치는 동일한 캡슐화 모드로 설정되어야 합니다.
올바른 결과. 캡슐화 모드는 수신기에서 감지되지 않습니다.
CsmaNetDevice는 다음과 같은 경우에 실행되는 무작위 지수 백오프 알고리즘을 구현합니다.
채널이 사용 중인 것으로 확인되었습니다(전송 중 or 전파하는 중) 장치가 원할 때
전파를 시작합니다. 이로 인해 최대 pow(2, 재시도) - 1의 임의 지연이 발생합니다.
재시도가 시도되기까지의 시간(마이크로초)입니다. 기본 최대 재시도 횟수는 1000입니다.
사용 전에, CsmaNet장치
CSMA 네트 장치 및 채널은 일반적으로 다음을 사용하여 생성 및 구성됩니다.
관련 CsmaHelper 물체. 다양한 NS-3 장치 도우미는 일반적으로 비슷한 작업을 수행합니다.
방식으로 사용되며 많은 예제 프로그램에서 볼 수 있습니다.
관심 있는 개념적 모델은 네트워크에 연결되는 순수 컴퓨터 "허스크"의 모델입니다.
장치. 베어 컴퓨터는 다음을 사용하여 생성됩니다. 노드컨테이너 돕는 사람. 이것만 물어보시면
많은 수의 컴퓨터를 만들 수 있는 도우미(우리는 이를 컴퓨터라고 부릅니다. 노드) 네트워크에서 필요에 따라:
NodeContainer csmaNodes;
csmaNodes.Create(nCsmaNodes);
노드가 있으면 인스턴스화해야 합니다. CsmaHelper 속성을 설정하고
변경하고 싶을 수도 있습니다.:
CsmaHelper csma;
csma.SetChannelAttribute("DataRate", StringValue("100Mbps"));
csma.SetChannelAttribute("지연", TimeValue(NanoSeconds(6560)));
csma.SetDeviceAttribute("EncapsulationMode", StringValue ("Dix"));
csma.SetDeviceAttribute("FrameSize", UintegerValue(2000));
속성이 설정되면 남은 것은 장치를 생성하고 장치를 설치하는 것뿐입니다.
필요한 노드를 구성하고 CSMA 채널을 사용하여 장치를 함께 연결합니다. 언제 우리가
넷 장치를 생성하면 나중에 사용할 수 있도록 컨테이너에 추가합니다.
이 모든 작업에는 단 한 줄의 코드만 필요합니다.:
NetDeviceContainer csmaDevices = csma.Install(csmaNodes);
이러한 속성을 변경하는 경우 다음과 같은 결과가 발생할 수 있으므로 신중하게 생각하는 것이 좋습니다.
사용자를 놀라게 하는 행동. 우리는 유연성이 중요하다고 믿기 때문에 이를 허용합니다.
속성 변경으로 인해 발생할 수 있는 놀라운 효과의 예로서 다음을 고려하십시오.
다음 :
Mtu 속성은 장치에 대한 최대 전송 단위를 나타냅니다. 이 크기입니다
장치가 보낼 수 있는 가장 큰 프로토콜 데이터 단위(PDU)입니다. 이 속성의 기본값은
최대 1500바이트이며 RFC 894, "A Standard for the
이더넷 네트워크를 통한 IP 데이터그램 전송." 이 숫자는 실제로 다음에서 파생됩니다.
10Base5(전체 사양 이더넷) 네트워크의 최대 패킷 크기 - 1518바이트. 만약 너라면
이더넷 패킷(18바이트)에 대한 DIX 캡슐화 오버헤드를 빼면
가능한 최대 데이터 크기(MTU)는 1500바이트입니다. IEEE의 MTU도 찾을 수 있습니다.
802.3 네트워크는 1492바이트입니다. 이는 LLC/SNAP 캡슐화로 인해 XNUMX개가 추가되기 때문입니다.
패킷에 대한 오버헤드 바이트입니다. 두 경우 모두 기본 네트워크 하드웨어는 다음과 같습니다.
1518바이트로 제한되지만 캡슐화가 다르기 때문에 MTU도 다릅니다.
Mtu 속성을 1500바이트로 두고 캡슐화 모드 속성을 변경하는 경우
Llc에 대한 결과는 LLC/SNAP으로 1500바이트 PDU를 캡슐화하는 네트워크가 됩니다.
프레이밍 결과 1526바이트의 패킷이 생성됩니다. 이는 많은 네트워크에서 불법이지만,
우리는 당신이 이것을 할 수 있도록 허용합니다. 이로 인해 매우 미묘하게 반영되지 않는 시뮬레이션이 발생합니다.
실제 장치가 1526바이트 패킷 전송을 망설이기 때문에 예상할 수 있는 것입니다.
점보 프레임(1500 9000)도 있습니다.
bytes) IEEE가 공식적으로 승인하지는 않았지만 일부 국가에서 사용할 수 있는 프레임
고속(기가비트) 네트워크 및 NIC. CSMA 모델에서는
캡슐화 모드는 Dix로 설정되고 Mtu는 64000바이트로 설정됩니다.
CsmaChannel DataRate는 초당 10메가비트로 유지되었습니다(확실히 기가비트 이더넷은 아님).
이는 기본적으로 뱀파이어가 등장하는 1980년대 스타일로 만들어진 이더넷 스위치를 모델링합니다.
슈퍼 점보 데이터그램을 지원하는 10Base5 네트워크는 확실히
만들어진 적도 없고 앞으로도 만들어지지 않을 것 같다. 그러나 당신에게는 아주 쉬운 일입니다
구성합니다.
CSMA가 실제로 모델링하는 내용과 방법에 관한 가정에 주의하세요.
구성(속성)을 사용하면 현실에서 상당히 벗어날 수 있습니다.
CSMA 트레이싱
모든처럼 NS-3 CSMA 모델은 다양한 추적 소스를 제공합니다. 이들 추적
사용자 정의 추적 코드를 사용하여 소스를 연결하거나 도우미를 사용할 수 있습니다.
지정한 장치에서 추적이 활성화되도록 정렬하는 기능입니다.
상위 레벨 (맥) 후크
Net Device에서의 추적 관점에서 볼 때 몇 가지 흥미로운 점이 있습니다.
추적 후크를 삽입합니다. 다른 시뮬레이터에서 상속된 규칙은 패킷이
연결된 네트워크로 전송될 예정인 데이터는 단일 "전송 대기열"을 통과합니다.
넷 장치. 우리는 패킷 흐름의 이 지점에서 추적 후크를 제공합니다.
(추상적으로) 네트워크에서 데이터 링크 계층으로의 전환까지만 호출하고
집합적으로 장치 MAC 후크가 발생합니다.
패킷이 전송을 위해 CSMA 네트워크 장치로 전송될 때 항상 해당 장치를 통과합니다.
전송 큐. CsmaNetDevice의 전송 큐는 큐에서 상속되므로
세 가지 추적 소스를 상속합니다.
· 대기열에 넣기 작업 소스(Queue::m_traceEnqueue 참조);
· Dequeue 작업 소스(Queue::m_traceDequeue 참조);
· 삭제 작업 소스(Queue::m_traceDrop 참조).
CsmaNetDevice에 대한 상위 수준(MAC) 추적 후크는 실제로 정확히 다음 세 가지입니다.
장치의 단일 전송 큐에 있는 소스를 추적합니다.
m_traceEnqueue 이벤트는 패킷이 전송 큐에 배치될 때 트리거됩니다. 이것
CsmaNetDevice::Send 또는 CsmaNetDevice::SendFrom이 호출될 때 발생합니다.
전송을 위해 패킷을 대기열에 추가하는 상위 계층.
m_traceDequeue 이벤트는 패킷이 전송 큐에서 제거될 때 트리거됩니다.
전송 큐에서 큐 제거는 세 가지 상황에서 발생할 수 있습니다.
CsmaNetDevice::Send 또는 CsmaNetDevice::SendFrom이 호출되면 채널은 유휴 상태입니다.
패킷은 전송 대기열에서 제외되고 즉시 전송됩니다. 2) 만약
기본 채널이 유휴 상태이면 패킷이 대기열에서 제거되어 즉시 전송될 수 있습니다.
전송 완료 인터럽트와 매우 유사하게 작동하는 내부 TransmitCompleteEvent
서비스 루틴; 또는 3) 시간 초과가 다음과 같은 경우 무작위 지수 백오프 핸들러에서
감지되었습니다.
사례 (3)은 패킷이 전송 큐에서 제거될 수 없는 경우 패킷이 전송 큐에서 제외됨을 의미합니다.
백오프 규칙에 따라 전송됩니다. 이것이 가능하다는 것을 이해하는 것이 중요합니다.
Dequeueed 패킷으로 나타나며 패킷이 다음과 같다고 잘못 가정하기 쉽습니다.
전송 큐를 통과했기 때문에 전송되었습니다. 실제로 패킷은 실제로
이 경우에는 net 장치에 의해 삭제됩니다. 이러한 행동의 이유는 다음과 같습니다.
대기열 삭제 이벤트의 정의. m_traceDrop 이벤트는 정의에 따라 다음과 같은 경우에 시작됩니다.
패킷이 꽉 차서 전송 큐에 넣을 수 없습니다. 이 이벤트는
큐가 가득 차 있고 CsmaChannel이 있음을 나타내기 위해 이 이벤트를 오버로드하지 않는 경우
"가득한."
하위 수준 (PHY) 후크
상위 레벨 추적 후크와 유사하게 하위 레벨에도 추적 후크가 있습니다.
네트 장치의 레벨. 우리는 이것을 PHY 후크라고 부릅니다. 이러한 이벤트는 기기에서 실행됩니다.
CsmaChannel과 직접 통신하는 메서드입니다.
장치에서 삭제된 패킷을 나타내기 위해 추적 소스 m_dropTrace가 호출됩니다.
이는 두 가지 경우에 발생합니다. 첫째, 네트워크 장치의 수신 측이 활성화되지 않은 경우
(CsmaNetDevice::m_receiveEnable 및 관련 속성 "ReceiveEnable" 참조)
m_dropTrace는 또한 다음과 같은 경우 패킷이 손상된 것으로 폐기되었음을 나타내는 데 사용됩니다.
수신 오류 모델이 사용됩니다(CsmaNetDevice::m_receiveErrorModel 및 관련 항목 참조).
속성 "ReceiveErrorModel").
다른 하위 수준 추적 소스는 허용된 패킷 수신 시 실행됩니다(참조:
CsmaNetDevice::m_rxTrace). 브로드캐스트로 향하는 패킷은 승인됩니다.
주소, 멀티캐스트 주소 또는 네트워크 장치에 할당된 MAC 주소입니다.
요약
ns3 CSMA 모델은 이더넷과 유사한 네트워크의 단순한 모델입니다. 그것은 지원합니다
Carrier-Sense 기능을 제공하며 공유 매체에 대한 다중 액세스를 허용합니다. 그렇지 않다
매체의 상태가 모든 사람에게 즉각적으로 공유된다는 점에서 물리적입니다.
장치. 이는 이 모델에는 충돌 감지가 필요하지 않으며 충돌 감지도 필요하지 않음을 의미합니다.
구현됩니다. 이미 미디어에 있는 패킷의 "잼"은 발생하지 않습니다. 액세스
공유 채널은 시뮬레이터에 따라 선착순으로 결정됩니다.
스케줄러. 전역 상태를 확인하여 채널이 사용 중이라고 판단되면
임의 지수 백오프가 수행되고 재시도가 시도됩니다.
Ns-3 속성은 장치의 다양한 매개변수를 설정하는 메커니즘을 제공하고
주소, 캡슐화 모드 및 오류 모델 선택과 같은 채널. 추적 후크는
전송에 해당하는 상위 레벨 후크 세트가 일반적인 방식으로 제공됩니다.
큐에 저장되고 ASCII 추적에 사용됩니다. 또한 pcap 추적에 사용되는 하위 수준 후크 세트도 있습니다.
ns-3 CsmaChannel 및 CsmaNetDevice는 사용자가 원하는 어떤 종류의 네트워크도 모델링하지 않습니다.
구축하거나 구매할 수 있지만 몇 가지 유용한 기능을 제공합니다. 당신은해야합니다
그러나 이는 명시적으로 이더넷이나 IEEE 802.3의 어떤 형태가 아니라
흥미로운 하위 집합.
데이터 COLLECTION
이 장에서는 다음을 제공하는 ns-3 데이터 수집 프레임워크(DCF)에 대해 설명합니다.
시뮬레이터에서 모델에 의해 생성된 데이터를 얻고 온라인으로 수행하는 기능
축소 및 데이터 처리, 원시 또는 변환된 데이터를 다양한 출력으로 마샬링
형식.
프레임워크는 현재 외부에 의존하지 않는 독립형 ns-3 실행을 지원합니다.
프로그램 실행 제어. DCF에서 제공하는 객체는 다음에 연결될 수 있습니다. NS-3 더듬다
데이터 처리를 가능하게 하는 소스.
클래스의 소스 코드는 디렉토리에 있습니다. 소스/통계.
이 장은 다음과 같이 구성되어 있습니다. 먼저, 아키텍처 개요는 다음과 같습니다.
제시. 다음으로 이러한 클래스에 대한 도우미가 제공됩니다. 이 초기 치료
많은 사용 사례에 대해 데이터 수집 프레임워크의 기본 사용을 허용해야 합니다. 사용자
현재 도우미의 범위를 벗어나는 출력을 생성하려는 경우 또는 생성하려는 경우
자신의 데이터 수집 객체에 대해서는 이 장의 나머지 부분을 읽어야 합니다.
모든 기본 DCF 객체 유형에 대해 자세히 설명하고 낮은 수준의 코딩을 제공합니다.
예.
디자인
DCF는 세 가지 기본 클래스로 구성됩니다.
· 탐침 시뮬레이션 데이터의 출력을 계측하고 제어하는 메커니즘입니다.
흥미로운 이벤트를 모니터링하는 데 사용됩니다. 하나 이상의 형태로 출력을 생성합니다. NS-3
추적 소스. 프로브 개체는 하나 이상의 추적에 연결됩니다. 싱크 (
수집가), 온라인으로 샘플을 처리하고 출력을 준비합니다.
· 수집가 하나 이상의 프로브 개체에서 생성된 데이터를 사용합니다. 수행합니다
정규화, 축소 및 계산과 같은 데이터 변환
기본 통계. Collector 개체는 직접 출력되는 데이터를 생성하지 않습니다.
ns-3 실행; 대신 데이터 다운스트림을 다른 유형의 객체로 출력합니다.
애그리 게이터 (aggregator), 해당 기능을 수행합니다. 일반적으로 수집기는 데이터를 다음 형식으로 출력합니다.
추적 소스의 형태도 가능하므로 수집기를 직렬로 연결할 수 있습니다.
· 애그리 게이터 (aggregator) 프로브 및 수집기 네트워크에 의해 수집된 데이터의 종점입니다.
Aggregator의 주요 책임은 데이터와 해당 데이터를 정리하는 것입니다.
메타데이터를 일반 텍스트 파일, 스프레드시트 파일과 같은 다양한 출력 형식으로 변환
데이터베이스.
이 세 클래스 모두 동적으로 스스로 켜거나 끄는 기능을 제공합니다.
시뮬레이션 내내.
모든 독립형 NS-3 DCF를 사용하는 시뮬레이션 실행은 일반적으로 하나 이상의
위의 세 클래스 각각의 인스턴스입니다.
[이미지] 데이터 수집 프레임워크 개요.UNINDENT
데이터 처리의 전반적인 흐름은 다음과 같습니다. Data 수집 뼈대 개요.
왼쪽에는 달리기 NS-3 시뮬레이션이 그려져 있습니다. 운영하는 과정에서
시뮬레이션을 통해 데이터는 추적 소스나 기타 수단을 통해 모델에서 사용할 수 있게 됩니다.
다이어그램은 프로브가 이러한 추적 소스에 연결되어 데이터를 수신할 수 있음을 보여줍니다.
비동기적으로 또는 프로브가 데이터를 폴링할 수 있습니다. 그런 다음 데이터는 수집기 개체로 전달됩니다.
데이터를 변환하는 것입니다. 마지막으로 집계자는 다음의 출력에 연결될 수 있습니다.
수집기, 플롯, 파일 또는 데이터베이스를 생성합니다.
[이미지] 데이터 수집 프레임워크 집계.UNINDENT
위 그림의 변형이 제공됩니다. Data 수집 뼈대 집합.
이 두 번째 그림은 DCF 개체가 다음과 같은 방식으로 함께 연결될 수 있음을 보여줍니다.
다운스트림 객체는 여러 업스트림 객체로부터 입력을 받습니다. 그림
여러 프로브가 단일 프로브에 공급되는 출력을 생성할 수 있음을 개념적으로 보여줍니다.
수집기; 예를 들어, 두 카운터의 비율을 출력하는 컬렉터는
일반적으로 별도의 프로브에서 각 카운터 데이터를 수집합니다. 여러 수집가도 가능
(이름에서 알 수 있듯이) 다수의 데이터를 수집할 수 있는 단일 수집기에 공급됩니다.
단일 플롯, 파일 또는 데이터베이스에 포함할 스트림입니다.
Data 수집 도우미
데이터 수집 프레임워크의 완전한 유연성은 상호 연결을 통해 제공됩니다.
프로브, 수집기 및 수집기. 이러한 모든 상호 연결을 수행하면
사용자 프로그램의 많은 구성 명령문. 사용 편의성을 위해 가장 일반적인 몇 가지
작업은 도우미 함수로 결합되고 캡슐화될 수 있습니다. 또한 일부
관련된 진술 NS-3 추적 소스에는 Python 바인딩이 없습니다.
바인딩.
Data 수집 도우미 살펴보기
이 섹션에서는 다음을 위해 생성된 일부 도우미 클래스에 대한 개요를 제공합니다.
일부 일반적인 사용 사례에 대한 데이터 수집 프레임워크 구성을 쉽게 합니다. 그만큼
도우미를 사용하면 사용자는 C++ 또는 몇 가지 명령문만으로 일반적인 작업을 수행할 수 있습니다.
파이썬 프로그램. 그러나 이러한 사용 편의성은 훨씬 더 적은 비용으로 발생합니다.
낮은 수준 구성이 제공할 수 있는 유연성과 명시적인 코딩 필요성
도우미에 새로운 프로브 유형을 지원합니다(아래 설명된 문제를 해결하기 위해).
현재 도우미에 중점을 두는 것은 데이터를 정리하는 것입니다. NS-3 소스를 추적하다
높은 수준의 출력 사용자 정의나 통계가 없는 gnuplot 플롯 또는 텍스트 파일
처리(초기). 또한 사용 가능한 프로브 유형에 따라 사용이 제한됩니다.
NS-3. 이 문서의 뒷부분에서는 새 항목을 만드는 방법에 대해 자세히 설명합니다.
프로브 유형 및 프로브, 수집기, 수집기 연결에 대한 세부 정보
맞춤식 배열로.
현재까지 두 가지 데이터 수집 도우미가 구현되었습니다.
· Gnuplot도우미
· 파일헬퍼
Gnuplot도우미
GnuplotHelper는 gnuplot을 만드는 데 사용되는 출력 파일을 생성하기 위한 도우미 클래스입니다. 그만큼
전반적인 목표는 사용자가 내보낸 데이터에서 신속하게 플롯을 만들 수 있는 기능을 제공하는 것입니다.
in NS-3 추적 소스. 기본적으로 최소한의 데이터 변환이 수행됩니다.
목표는 다음과 같이 최소한의 (기본) 구성 명령문을 사용하여 플롯을 생성하는 것입니다.
수.
Gnuplot도우미 살펴보기
GnuplotHelper는 시뮬레이션이 끝나면 3개의 다른 파일을 생성합니다.
· 공백으로 구분된 gnuplot 데이터 파일
· gnuplot 제어 파일
· gnuplot을 생성하는 쉘 스크립트
플롯을 생성하는 데 필요한 두 가지 구성 명령문이 있습니다. 첫번째
명령문은 플롯(파일 이름, 제목, 범례 및 출력 유형을 구성합니다. 여기서 출력은
지정되지 않은 경우 유형은 기본적으로 PNG로 설정됨):
void ConfigurePlot(const std::string &outputFileNameWithoutExtension,
const 표준::문자열 &제목,
const std::string &xLegend,
const std::string &yLegend,
const std::string &terminalType = ".png");
두 번째 문은 관심 있는 추적 소스를 연결합니다.
void PlotProbe(const std::string &typeId,
const std::string &경로,
const std::string &probeTraceSource,
const std::string &제목);
인수는 다음과 같습니다.
· typeId: NS-3 프로브의 TypeId
· 경로: 경로 NS-3 하나 이상의 추적 소스에 대한 구성 네임스페이스
·probeTraceSource: 프로브(그 자체가 추적 소스)의 출력을 표시해야 합니다.
· 제목: 데이터세트와 연결할 제목(gnuplot 범례에 있음)
위 PlotProbe의 변형은 제어하는 다섯 번째 선택적 인수를 지정하는 것입니다.
플롯에서 키(범례)가 배치되는 위치입니다.
완전히 작동된 예제( 일곱번째.cc)은 아래와 같습니다.
// gnuplot 도우미를 만듭니다.
GnuplotHelper 플롯헬퍼;
// 플롯을 구성합니다.
// 플롯을 구성합니다. 첫 번째 인수는 파일 이름 접두사입니다.
// 생성된 출력 파일의 경우. 두 번째, 세 번째, 네 번째
// 인수는 각각 플롯 제목, x축, y축 레이블입니다.
plotHelper.ConfigurePlot("XNUMX번째 패킷 바이트 수",
"패킷 바이트 수 대 시간",
"시간(초)",
"패킷 바이트 수",
"png");
// 프로브 유형, 추적 소스 경로(구성 네임스페이스에서) 및
// 출력 추적 소스("OutputBytes")를 조사하여 플롯합니다. 네 번째 주장
// 플롯의 데이터 시리즈 레이블 이름을 지정합니다. 마지막
// 인수는 키가 배치되어야 하는 위치를 지정하여 플롯의 형식을 지정합니다.
plotHelper.PlotProbe(프로브 유형,
추적 경로,
"출력바이트",
"패킷 바이트 수",
GnuplotAggregator::KEY_BELOW);
이 예에서 프로브 유형 and 추적 경로 다음과 같습니다(IPv4의 경우).
프로브 유형 = "ns3::Ipv4PacketProbe";
TracePath = "/NodeList/*/$ns3::Ipv4L3Protocol/Tx";
프로브 유형은 이 도우미가 작동하는 데 필요한 핵심 매개변수입니다. 이 TypeId를 등록해야 합니다.
시스템에 있으며 프로브 추적 싱크의 서명은 추적의 서명과 일치해야 합니다.
소스에 연결되어 있습니다. 다양한 데이터 유형에 대해 프로브 유형이 사전 정의되어 있습니다.
에 해당하는 NS-3 추적된 값 및 다음과 같은 몇 가지 다른 추적 소스 서명의 경우
'Tx' 추적 소스 ns3::Ipv4L3프로토콜 클래스입니다.
지정된 추적 소스 경로에는 와일드카드가 포함될 수 있습니다. 이 경우 여러
데이터 세트는 하나의 플롯에 표시됩니다. 일치하는 각 경로마다 하나씩.
생성되는 기본 출력은 다음 세 가지 파일입니다.
일곱 번째-패킷-바이트-count.dat
일곱 번째 패킷 바이트 수.plt
일곱 번째-패킷-바이트-count.sh
이 시점에서 사용자는 추가 사용자 정의를 위해 .plt 파일을 직접 편집하거나
그냥 gnuplot을 통해 실행해 보세요. 달리기 sh 일곱 번째-패킷-바이트-count.sh 단순히 줄거리를 실행
아래와 같이 gnuplot을 통해.
[이미지] 일곱번째.cc 예제로 생성된 2-D Gnuplot 예제..UNINDENT
핵심 요소(범례, 제목, 범례 배치, xlabel, ylabel,
및 데이터 경로)는 모두 플롯에 배치됩니다. 두 경기가 있었기 때문에
구성 경로가 제공되면 두 개의 데이터 시리즈가 표시됩니다.
· 패킷 바이트 수-0은 /NodeList/0/$ns3::Ipv4L3Protocol/Tx에 해당합니다.
· 패킷 바이트 수-1은 /NodeList/1/$ns3::Ipv4L3Protocol/Tx에 해당합니다.
Gnuplot도우미 플롯 구성
GnuplotHelper의 구성플롯() 기능을 사용하여 플롯을 구성할 수 있습니다.
다음과 같은 프로토타입이 있습니다.
void ConfigurePlot(const std::string &outputFileNameWithoutExtension,
const 표준::문자열 &제목,
const std::string &xLegend,
const std::string &yLegend,
const std::string &terminalType = ".png");
여기에는 다음과 같은 인수가 있습니다.
┌───────────────────────────────┬───────────────── ─────────────────┐
│인수 │ 설명 │
├───────────────────────────────┼───────────────── ─────────────────┤
│outputFileNameWithoutExtension │ gnuplot 관련 파일 이름 │
│ │ 확장자 없이 씁니다. │
├───────────────────────────────┼───────────────── ─────────────────┤
│title │ │에 사용할 플롯 제목 문자열
│ │ 이 줄거리. │
└───────────────────────────────┴───────────────── ─────────────────┘
│xLegend │ x 가로 범례 │
│ │ 축. │
├───────────────────────────────┼───────────────── ─────────────────┤
│yLegend │ y 수직에 대한 범례 │
│ │ 축. │
├───────────────────────────────┼───────────────── ─────────────────┤
│terminalType │ │에 대한 터미널 유형 설정 문자열
│ │ 출력. 기본 터미널 │
│ │ 유형은 "png"입니다. │
└───────────────────────────────┴───────────────── ─────────────────┘
GnuplotHelper의 구성플롯() 함수는 이에 대한 플롯 관련 매개변수를 구성합니다.
gnuplot 도우미는 공백으로 구분된 gnuplot 데이터 파일을 생성합니다.
outputFileNameWithoutExtension + ".dat", 이름이 지정된 gnuplot 제어 파일
outputFileNameWithoutExtension + ".plt" 및 이름이 지정된 gnuplot을 생성하는 쉘 스크립트
outputFileNameWithoutExtension + ".sh".
이 기능을 사용하는 방법의 예는 다음에서 볼 수 있습니다. 일곱번째.cc 위에서 설명한 코드
여기서는 다음과 같이 사용되었습니다.
plotHelper.ConfigurePlot("XNUMX번째 패킷 바이트 수",
"패킷 바이트 수 대 시간",
"시간(초)",
"패킷 바이트 수",
"png");
Gnuplot도우미 플롯프로브
GnuplotHelper의 플롯프로브() 함수를 사용하여 프로브에서 생성된 값을 플롯할 수 있습니다.
다음과 같은 프로토타입이 있습니다.
void PlotProbe(const std::string &typeId,
const std::string &경로,
const std::string &probeTraceSource,
const 표준::문자열 &제목,
enum GnuplotAggregator::KeyLocation keyLocation = GnuplotAggregator::KEY_INSIDE);
여기에는 다음과 같은 인수가 있습니다.
┌─────────────────┬────────────────────────────── ───┐
│인수 │ 설명 │
├─────────────────┼────────────────────────────── ───┤
│typeId │ 프로브의 유형 ID │
│ │ 이 도우미가 생성했습니다. │
├─────────────────┼────────────────────────────── ───┤
│path │ 추적에 액세스하기 위한 구성 경로 │
│ │ 출처. │
├─────────────────┼────────────────────────────── ───┤
│probeTraceSource │ 프로브 추적 소스 │
│ │ 접속. │
├─────────────────┼────────────────────────────── ───┤
│title │ │에 연결될 제목
│ │ 이 데이터세트 │
├─────────────────┼────────────────────────────── ───┤
│keyLocation │ │에 있는 키의 위치
│ │ 플롯. 기본 위치는 │입니다.
│ │ 내부. │
└─────────────────┴────────────────────────────── ───┘
GnuplotHelper의 플롯프로브() 함수는 다음을 연결하여 생성된 데이터 세트를 플롯합니다. NS-3
도우미가 만든 프로브를 사용하여 소스를 추적한 다음
프로브TraceSource. 데이터 세트는 제공된 제목을 가지며 다음으로 구성됩니다.
각 타임스탬프에 'newValue'가 있습니다.
와일드카드가 있기 때문에 구성 경로에 시스템 내 일치 항목이 두 개 이상 있는 경우
각 일치 항목에 대해 하나의 데이터세트가 표시됩니다. 데이터 세트 제목에는
구성 경로의 각 와일드카드에 대해 일치하는 문자를 공백으로 구분합니다. 을 위한
예를 들어, 제안된 데이터세트 제목이 "bytes" 문자열이고 와일드카드가 두 개 있는 경우
경로에서 "bytes-0 0" 또는 "bytes-12 9"와 같은 데이터 세트 제목은 다음과 같이 가능합니다.
플롯된 데이터세트의 레이블입니다.
이 기능을 사용하는 방법의 예는 다음에서 볼 수 있습니다. 일곱번째.cc 위에서 설명한 코드
다음과 같이 변수 대체와 함께 사용되었습니다.
plotHelper.PlotProbe("ns3::Ipv4PacketProbe",
"/NodeList/*/$ns3::Ipv4L3Protocol/Tx",
"출력바이트",
"패킷 바이트 수",
GnuplotAggregator::KEY_BELOW);
기타 예
지플롯 돕는 사람 예시
좀 더 간단한 예는 다음과 같습니다. 일곱번째.cc 예는 다음에서 찾을 수 있습니다.
src/stats/examples/gnuplot-helper-example.cc. 다음 2D gnuplot은 다음을 사용하여 생성되었습니다.
예.
[이미지] gnuplot-helper-example.cc로 생성된 2D Gnuplot 예제..UNINDENT
이 예에는 다음과 같이 카운터를 증가시키는 Emitter 객체가 있습니다.
포아송 프로세스를 수행한 다음 카운터 값을 추적 소스로 내보냅니다.
포인트 이미터 = CreateObject ();
이름::추가("/이름/이미터", 이미터);
아래 사용된 경로에는 와일드카드가 없으므로 데이터 스트림은 1개만 사용되었습니다.
줄거리에 그려져 있습니다. 플롯의 이 단일 데이터 스트림은 단순히 "Emitter Count"라는 레이블이 지정되어 있습니다.
추가 접미사가 없으면 경로에 와일드카드가 있는지 확인할 수 있습니다.
// gnuplot 도우미를 만듭니다.
GnuplotHelper 플롯헬퍼;
// 플롯을 구성합니다.
plotHelper.ConfigurePlot("gnuplot-helper-예제",
"이미터 수 대 시간",
"시간(초)",
"이미터 수",
"png");
// 프로브에서 생성된 값을 플롯합니다. 우리가 제공하는 길
// 추적 소스를 명확하게 하는 데 도움이 됩니다.
plotHelper.PlotProbe("ns3::Uinteger32Probe",
"/이름/이미터/카운터",
"산출",
"이미터 수",
GnuplotAggregator::KEY_INSIDE);
파일헬퍼
FileHelper는 데이터 값을 파일에 저장하는 데 사용되는 도우미 클래스입니다. 전반적인 목표는
사용자가 내보낸 데이터에서 서식 있는 텍스트 파일을 빠르게 만들 수 있는 기능을 제공합니다.
in NS-3 추적 소스. 기본적으로 최소한의 데이터 변환이 수행됩니다.
목표는 다음과 같은 최소한의 (기본) 구성 명령문을 사용하여 파일을 생성하는 것입니다.
수.
파일헬퍼 살펴보기
FileHelper는 시뮬레이션이 끝나면 하나 이상의 텍스트 파일을 생성합니다.
FileHelper는 4가지 유형의 텍스트 파일을 생성할 수 있습니다.
· 포맷됨
· 공백으로 구분됨(기본값)
· 쉼표로 구분
· 탭 분리
형식화된 파일은 C 스타일 형식 문자열과 sprintf() 함수를 사용하여 파일을 인쇄합니다.
기록 중인 파일의 값입니다.
다음과 같은 텍스트 파일에는 2개의 형식화된 값 열이 있습니다.
일곱 번째-패킷-바이트-카운트-0.txt 에 추가된 더 많은 새로운 코드를 사용하여 생성되었습니다.
실물 NS-3 튜토리얼 예제의 코드입니다. 이 파일의 처음 10줄만 표시됩니다.
간략하게 설명하자면 여기입니다.
시간(초) = 1.000e+00 패킷 바이트 수 = 40
시간(초) = 1.004e+00 패킷 바이트 수 = 40
시간(초) = 1.004e+00 패킷 바이트 수 = 576
시간(초) = 1.009e+00 패킷 바이트 수 = 576
시간(초) = 1.009e+00 패킷 바이트 수 = 576
시간(초) = 1.015e+00 패킷 바이트 수 = 512
시간(초) = 1.017e+00 패킷 바이트 수 = 576
시간(초) = 1.017e+00 패킷 바이트 수 = 544
시간(초) = 1.025e+00 패킷 바이트 수 = 576
시간(초) = 1.025e+00 패킷 바이트 수 = 544
...
2개의 형식화된 값 열이 있는 다음과 같은 다른 텍스트 파일
일곱 번째-패킷-바이트-카운트-1.txt 또한 다음에 추가된 것과 동일한 새 코드를 사용하여 생성되었습니다.
원래 NS-3 튜토리얼 예제의 코드입니다. 이 파일의 처음 10줄만 표시됩니다.
간략하게 설명하자면 여기입니다.
시간(초) = 1.002e+00 패킷 바이트 수 = 40
시간(초) = 1.007e+00 패킷 바이트 수 = 40
시간(초) = 1.013e+00 패킷 바이트 수 = 40
시간(초) = 1.020e+00 패킷 바이트 수 = 40
시간(초) = 1.028e+00 패킷 바이트 수 = 40
시간(초) = 1.036e+00 패킷 바이트 수 = 40
시간(초) = 1.045e+00 패킷 바이트 수 = 40
시간(초) = 1.053e+00 패킷 바이트 수 = 40
시간(초) = 1.061e+00 패킷 바이트 수 = 40
시간(초) = 1.069e+00 패킷 바이트 수 = 40
...
두 개의 텍스트 파일을 생성하기 위해 추가된 새 코드는 다음과 같습니다. 에 대한 자세한 내용
이 API는 이후 섹션에서 다루겠습니다.
경로에 와일드카드와 일치하는 항목이 2개 있었기 때문에 2개의 별도 텍스트 파일이 생성되었습니다.
만들어졌습니다. "seventh-packet-byte-count-0.txt"라는 이름의 첫 번째 텍스트 파일은,
"*"가 "0"으로 대체된 와일드카드 일치에 해당합니다. 두 번째 텍스트 파일,
"seventh-packet-byte-count-1.txt"라는 이름은 다음과 같은 와일드카드 일치에 해당합니다.
"*"는 "1"로 대체됩니다. 또한 다음 함수 호출에 유의하세요. 쓰기프로브() 줄 것이다
와일드카드가 포함된 경로와 일치하는 항목이 없으면 오류 메시지가 나타납니다.
// 파일 도우미를 만듭니다.
FileHelper fileHelper;
// 쓸 파일을 구성합니다.
fileHelper.ConfigureFile("XNUMX번째-패킷-바이트-카운트",
FileAggregator::포맷됨);
// 이 형식화된 출력 파일에 대한 레이블을 설정합니다.
fileHelper.Set2dFormat("시간(초) = %.3e\t패킷 바이트 수 = %.0f");
// 프로브에서 생성된 값을 씁니다.
fileHelper.WriteProbe("ns3::Ipv4PacketProbe",
"/NodeList/*/$ns3::Ipv4L3Protocol/Tx",
"출력바이트");
파일헬퍼 파일 구성
FileHelper의 구성파일() 기능을 사용하여 텍스트 파일을 구성할 수 있습니다.
다음과 같은 프로토타입이 있습니다.
무효 구성파일(const std::string &outputFileNameWithoutExtension,
enum FileAggregator::FileType fileType = FileAggregator::SPACE_SEPARATED);
여기에는 다음과 같은 인수가 있습니다.
┌───────────────────────────────┬───────────────── ─────────────────┐
│인수 │ 설명 │
├───────────────────────────────┼───────────────── ─────────────────┤
│outputFileNameWithoutExtension │ 쓸 출력 파일 이름 │
│ │ 확장자가 없습니다. │
├───────────────────────────────┼───────────────── ─────────────────┤
│fileType │ 쓸 파일 유형입니다. │
│ │ 기본 파일 유형은 공백입니다. │
│ │ 분리되었습니다. │
└───────────────────────────────┴───────────────── ─────────────────┘
FileHelper의 구성파일() 함수는 텍스트 파일 관련 매개변수를 구성합니다.
파일 도우미를 사용하면 outputFileNameWithoutExtension이라는 파일을 생성하고
와일드카드 일치에서 가능한 추가 정보와 다음과 같이 인쇄된 값이 있는 ".txt"
fileType으로 지정됩니다. 기본 파일 형식은 공백으로 구분됩니다.
이 기능을 사용하는 방법의 예는 다음에서 볼 수 있습니다. 일곱번째.cc 위에서 설명한 코드
여기서는 다음과 같이 사용되었습니다.
fileHelper.ConfigureFile("XNUMX번째-패킷-바이트-카운트",
FileAggregator::포맷됨);
파일헬퍼 WriteProbe
FileHelper의 쓰기프로브() 함수를 사용하여 프로브에서 생성된 값을 쓸 수 있습니다.
텍스트 파일.
다음과 같은 프로토타입이 있습니다.
void WriteProbe(const std::string &typeId,
const std::string &경로,
const std::string &probeTraceSource);
여기에는 다음과 같은 인수가 있습니다.
┌─────────────────┬────────────────────────────── ───┐
│인수 │ 설명 │
├─────────────────┼────────────────────────────── ───┤
│typeId │ 프로브의 유형 ID는 │입니다.
│ │ 생성되었습니다. │
├─────────────────┼────────────────────────────── ───┤
│path │ 추적에 액세스하기 위한 구성 경로 │
│ │ 출처. │
├─────────────────┼────────────────────────────── ───┤
│probeTraceSource │ 프로브 추적 소스 │
│ │ 접속. │
└─────────────────┴────────────────────────────── ───┘
FileHelper의 쓰기프로브() 함수는 다음을 연결하여 생성된 출력 텍스트 파일을 생성합니다.
도우미가 만든 프로브를 사용하여 ns-3 추적 소스를 만든 다음
프로브TraceSource. 출력 파일 이름에는 멤버 변수에 저장된 텍스트가 있습니다.
m_outputFileNameWithoutExtension과 ".txt"는 각각 'newValue'로 구성됩니다.
타임 스탬프.
와일드카드가 있기 때문에 구성 경로에 시스템 내 일치 항목이 두 개 이상 있는 경우
각 일치 항목에 대해 하나의 출력 파일이 생성됩니다. 출력 파일 이름에는
m_outputFileNameWithoutExtension의 텍스트와 각 항목에 대해 일치하는 문자
대시로 구분된 구성 경로의 와일드카드와 ".txt". 예를 들어, 값이
m_outputFileNameWithoutExtension에는 "packet-byte-count"라는 문자열이 있으며 두 개가 있습니다.
경로에 와일드카드를 추가한 다음 "packet-byte-count-0-0.txt"와 같은 파일 이름을 출력하거나
생성될 파일의 이름으로 "packet-byte-count-12-9.txt"가 가능합니다.
이 기능을 사용하는 방법의 예는 다음에서 볼 수 있습니다. 일곱번째.cc 위에서 설명한 코드
여기서는 다음과 같이 사용되었습니다.
fileHelper.WriteProbe("ns3::Ipv4PacketProbe",
"/NodeList/*/$ns3::Ipv4L3Protocol/Tx",
"출력바이트");
기타 예
입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 돕는 사람 예시
좀 더 간단한 예는 다음과 같습니다. 일곱번째.cc 예는 다음에서 찾을 수 있습니다.
src/stats/examples/file-helper-example.cc. 이 예에서는 FileHelper만 사용합니다.
다음과 같은 텍스트 파일에는 2개의 형식화된 값 열이 있습니다. 파일-도우미-example.txt
예제를 사용하여 만들어졌습니다. 여기에는 이 파일의 처음 10줄만 표시됩니다.
짧음.
시간(초) = 0.203 개수 = 1
시간(초) = 0.702 개수 = 2
시간(초) = 1.404 개수 = 3
시간(초) = 2.368 개수 = 4
시간(초) = 3.364 개수 = 5
시간(초) = 3.579 개수 = 6
시간(초) = 5.873 개수 = 7
시간(초) = 6.410 개수 = 8
시간(초) = 6.472 개수 = 9
...
이 예에는 다음과 같이 카운터를 증가시키는 Emitter 객체가 있습니다.
포아송 프로세스를 수행한 다음 카운터 값을 추적 소스로 내보냅니다.
포인트 이미터 = CreateObject ();
이름::추가("/이름/이미터", 이미터);
아래 사용된 경로에는 와일드카드가 없으므로 텍스트 파일이 1개만 표시됩니다.
만들어진. 이 단일 텍스트 파일은 추가 항목 없이 단순히 "file-helper-example.txt"라는 이름으로 지정됩니다.
경로에 와일드카드가 있는지 확인할 수 있는 접미사입니다.
// 파일 도우미를 만듭니다.
FileHelper fileHelper;
// 쓸 파일을 구성합니다.
fileHelper.ConfigureFile("파일-도우미-예제",
FileAggregator::포맷됨);
// 이 형식화된 출력 파일에 대한 레이블을 설정합니다.
fileHelper.Set2dFormat("시간(초) = %.3e\tCount = %.0f");
// 프로브에서 생성된 값을 씁니다. 우리가 가는 길
// 추적 소스를 명확하게 하는 데 도움이 됩니다.
fileHelper.WriteProbe("ns3::Uinteger32Probe",
"/이름/이미터/카운터",
"산출");
범위 and 제한 사항
현재 이러한 프로브만 구현되어 GnuplotHelper에 연결되어 있으며
FileHelper에:
· 부울 프로브
· 더블프로브
· Uinteger8Probe
· Uinteger16Probe
· Uinteger32Probe
· 타임프로브
· 패킷프로브
· ApplicationPacketProbe
· Ipv4PacketProbe
따라서 이러한 프로브는 다음에서 사용할 수 있는 유일한 TypeId입니다. 플롯프로브() and
쓰기프로브().
다음 몇 섹션에서는 기본 개체 유형(프로브, 수집기,
및 Aggregator)에 대해 더 자세히 설명하고 다음을 사용하여 어떻게 함께 연결할 수 있는지 보여줍니다.
하위 수준 API.
프로브
이 섹션에서는 Probe 클래스가 제공하는 기능에 대해 자세히 설명합니다. NS-3
시뮬레이션을 통해 이를 프로그램에서 코딩하는 방법에 대한 예제를 제공합니다. 이 섹션의 목적은 다음과 같습니다.
시뮬레이션 개발에 관심이 있는 사용자 NS-3 도구 및 데이터 사용
Probe 클래스가 포함된 컬렉션 프레임워크는 다음을 사용하여 데이터 출력을 생성합니다.
그들의 시뮬레이션 결과.
탐침 살펴보기
프로브 객체는 값이 있는 시뮬레이션의 변수에 연결되어야 합니다.
실험 전반에 걸쳐 사용자와 관련이 있습니다. 프로브는 무엇을 기록할지 기록합니다.
시뮬레이션 전반에 걸쳐 변수가 가정한 값을 입력하고 해당 데이터를 다른 변수에 전달합니다.
데이터 수집 프레임워크의 회원입니다. 이 섹션의 범위를 벗어나는 동안
프로브가 출력을 생성한 후 어떤 일이 발생하는지 논의하면 다음과 같이 말하는 것으로 충분합니다.
시뮬레이션이 끝나면 사용자는 어떤 값이 있었는지에 대한 자세한 정보를 갖게 됩니다.
시뮬레이션 중에 탐색되는 변수 내부에 저장됩니다.
일반적으로 프로브는 NS-3 추적 소스. 이런 식으로, 언제든지
추적 소스가 새 값을 내보내면 프로브는 값을 사용하고 다운스트림으로 내보냅니다.
자체 추적 소스를 통해 다른 개체로).
프로브는 추적 소스에 대한 일종의 필터로 생각할 수 있습니다. 주된 이유는
추적 소스에 직접 연결하는 대신 프로브에 연결하는 방법은 다음과 같습니다.
· 시뮬레이션 중에 다음 호출을 통해 프로브를 동적으로 켜고 끌 수 있습니다. 할 수 있게 하다()
and 장애를 입히다(). 예를 들어, 데이터 출력이 도중에 꺼질 수 있습니다.
시뮬레이션 준비 단계.
· 프로브는 데이터에 대한 작업을 수행하여 더 복잡한 데이터에서 값을 추출할 수 있습니다.
구조; 예를 들어, 수신된 ns3::Packet에서 패킷 크기 값을 출력합니다.
· 프로브는 ns3::Config 네임스페이스에 이름을 등록합니다(다음을 사용). 이름::추가 ()) 그래서 다른
객체는 이를 참조할 수 있습니다.
· 프로브는 이름으로 프로브를 조작할 수 있는 정적 방법을 제공합니다.
ns2measure에서 수행되는 작업 [Cic06]
Stat::put ("my_metric", ID, 샘플);
위의 ns3measure 코드에 해당하는 ns-2은 다음과 같습니다.
DoubleProbe::SetValueByPath("/path/to/probe", 샘플);
창조
Probe 기본 클래스 개체는 추상 기반이므로 생성할 수 없습니다.
즉, 구현되지 않은 순수 가상 함수가 있습니다. 의 대상
Probe 클래스의 하위 클래스인 DoubleProbe 유형이 여기에 생성되어 표시됩니다.
무엇을 해야 하는지.
스마트 포인터 클래스(Ptr)를 사용하여 동적 메모리에 DoubleProbe를 선언합니다. ). 에게
스마트 포인터를 사용하여 동적 메모리에 DoubleProbe를 생성하려면
NS-3 방법 객체 생성():
포인트 myprobe = CreateObject ();
위 선언은 해당 속성의 기본값을 사용하여 DoubleProbe를 생성합니다.
DoubleProbe 클래스에는 네 가지 특성이 있습니다. 기본 클래스 객체의 두 개
DataCollectionObject 및 Probe 기본 클래스의 두 개:
· "이름"(DataCollectionObject), StringValue
· "Enabled"(DataCollectionObject), BooleanValue
· TimeValue인 "Start"(프로브)
· "중지"(프로브), TimeValue
다음 방법을 사용하여 객체 생성 시 이러한 속성을 설정할 수 있습니다.
포인트 myprobe = CreateObjectWithAttributes (
"이름", StringValue("myprobe"),
"활성화됨", BooleanValue(false),
"시작", TimeValue(초(100.0)),
"중지", TimeValue(초(1000.0)));
시작 및 중지는 프로브의 작업 간격을 결정하는 시간 변수입니다. 그만큼
프로브는 시뮬레이션의 현재 시간이 해당 시간 내에 있는 경우에만 데이터를 출력합니다.
간격. 중지에 대한 특수 시간 값 0초는 이 속성을 비활성화합니다(예:
전체 시뮬레이션 동안 프로브를 켜두십시오). 활성화는 프로브를 켜거나 켜는 플래그입니다.
끄고 프로브가 데이터를 내보내려면 true로 설정해야 합니다. 이름은 개체의 이름입니다.
DCF 프레임워크에서.
가져 오기 and 내보내기 데이터
NS-3 추적 소스는 강력한 유형이므로 프로브를 추적에 연결하는 메커니즘은 다음과 같습니다.
소스 및 데이터 내보내기는 해당 하위 클래스에 속합니다. 예를 들어, 기본값
배포 NS-3 추적에 연결하도록 설계된 DoubleProbe 클래스를 제공합니다.
이중 값을 내보내는 소스입니다. 다음으로 DoubleProbe의 작동을 자세히 설명하겠습니다.
그런 다음 사용자가 다른 프로브 클래스를 정의하는 방법에 대해 논의합니다.
더블프로브 살펴보기
DoubleProbe는 이중 값에 연결됩니다. NS-3 추적 소스 자체를 내보냅니다.
다른 이중 값 NS-3 추적 소스.
다음 코드는 src/stats/examples/double-probe-example.cc, 기본을 보여줍니다
DoubleProbe를 시뮬레이션으로 연결하여 카운터를 프로빙하는 작업
이미터 객체(Emitter 클래스)에 의해 내보냅니다.
포인트 이미터 = CreateObject ();
이름::추가("/이름/이미터", 이미터);
...
포인트 프로브1 = CreateObject ();
// 프로브를 이미터의 카운터에 연결합니다.
bool 연결됨 = 프로브1->ConnectByObject("카운터", 이미터);
다음 코드는 동일한 이미터 객체에서 내보낸 동일한 Counter를 검색합니다. 이것
그러나 DoubleProbe는 구성 네임스페이스의 경로를 사용하여
연결. 이미터는 이후 구성 네임스페이스에 자체적으로 등록되었습니다.
그것은 창조되었다; 그렇지 않으면 ConnectByPath가 작동하지 않습니다.
포인트 프로브2 = CreateObject ();
// 여기서는 반환 값이 확인되지 않음을 참고하세요.
프로브2->ConnectByPath("/이름/이미터/카운터");
아래 표시된 다음 DoubleProbe는 해당 경로를 사용하여 값이 설정됩니다.
구성 네임스페이스. 이번에는 DoubleProbe가
생성된 후의 구성 네임스페이스입니다.
포인트 프로브3 = CreateObject ();
프로브3->SetName("StaticallyAccessedProbe");
// 구성 데이터베이스에 추가해야 합니다.
이름::추가("/이름/프로브", 프로브3->GetName(), 프로브3);
이제 이미터의 Count() 함수는 이 DoubleProbe의 값을 다음과 같이 설정할 수 있습니다.
다음과 같습니다 :
무효화
이미터::카운트(void)
{
...
m_counter += 1.0;
DoubleProbe::SetValueByPath("/Names/StaticallyAccessedProbe", m_counter);
...
}
위의 예는 프로브를 호출하는 코드가 명시적인 값을 가질 필요가 없는 방법을 보여줍니다.
프로브를 참조하지만 Config 네임스페이스를 통해 값 설정을 지정할 수 있습니다.
이는 기능면에서 유사합니다. 상태::넣기 ns2measure 논문에서 소개된 방법
[Cic06], 사용자가 다음과 같은 Probe 문을 임시로 삽입할 수 있습니다. printf 문
기존 내 NS-3 모델. 여기서 DoubleProbe를 사용하려면
이와 같은 예에는 두 가지가 필요했습니다.
1. 통계 모듈 헤더 파일이 예제 .cc 파일에 포함되었습니다.
2. 예제는 wscript 파일의 stats 모듈에 종속되도록 만들어졌습니다.
다른 프로브를 다른 위치에 추가하려면 유사한 작업을 수행해야 합니다. NS-3
코드베이스.
DoubleProbe의 값은 DoubleProbe::SetValue() 함수를 사용하여 설정할 수도 있습니다.
DoubleProbe의 값은 함수를 사용하여 얻을 수 있습니다.
DoubleProbe::GetValue().
DoubleProbe는 "출력" 추적 소스에서 이중 값을 내보냅니다. 다운스트림 객체
다음과 같이 추적 싱크(NotifyViaProbe)를 여기에 연결할 수 있습니다.
연결 = 프로브1->TraceConnect("출력", 프로브1->GetName(), MakeCallback(&NotifyViaProbe));
기타 프로브
DoubleProbe 외에도 다음 프로브도 사용할 수 있습니다.
· Uinteger8Probe는 NS-3 uint8_t를 내보내는 추적 소스입니다.
· Uinteger16Probe는 NS-3 uint16_t를 내보내는 추적 소스입니다.
· Uinteger32Probe는 NS-3 uint32_t를 내보내는 추적 소스입니다.
· PacketProbe는 NS-3 패킷을 내보내는 추적 소스입니다.
· ApplicationPacketProbe는 NS-3 패킷과 소켓을 내보내는 추적 소스
주소.
· Ipv4PacketProbe는 NS-3 패킷, IPv4 객체를 내보내는 추적 소스
인터페이스.
만들기 탐침 유형
새 프로브 유형을 생성하려면 다음 단계를 수행해야 합니다.
· 새 Probe 클래스가 Probe 기본 클래스에서 파생되었는지 확인하십시오.
· 새 Probe 클래스가 상속하는 순수 가상 함수가
프로브 기본 클래스가 구현됩니다.
· 유형이 가장 가까운 추적 소스를 사용하는 기존 프로브 클래스를 찾습니다.
프로브가 사용할 추적 소스 유형입니다.
· 기존 Probe 클래스의 헤더 파일(.h)과 구현 파일(.cc)을 두 개로 복사합니다.
새 프로브와 일치하는 이름을 가진 새 파일.
· 복사된 파일의 유형, 인수 및 변수를 적절한 것으로 대체하십시오.
프로브에 입력하세요.
· 코드를 컴파일하고 원하는 대로 작동하도록 필요한 수정을 가합니다.
처럼.
예
여기서는 두 가지 예를 자세히 설명합니다.
· 이중 프로브 예
· IPv4 패킷 플롯 예
두 탐침 예시
이중 프로브 예는 이전에 논의되었습니다. 예제 프로그램을 찾을 수 있습니다
in src/stats/examples/double-probe-example.cc. 이 프로그램에서 일어나는 일을 요약하자면,
포아송 프로세스에 따라 증가하는 카운터를 내보내는 이미터가 있습니다.
특히 데이터를 내보내는 두 가지 방법이 표시됩니다.
1. 하나의 프로브에 연결된 추적 변수를 통해:
추적된 값 m_counter; // 일반적으로 이는 정수 유형입니다.
2. 값이 두 번째 프로브에 게시되는 카운터를 통해 이름으로 참조됩니다.
구성 시스템:
무효화
이미터::카운트(void)
{
NS_LOG_FUNCTION(이것);
NS_LOG_DEBUG("계산 중" << Simulator::Now ().GetSeconds ());
m_counter += 1.0;
DoubleProbe::SetValueByPath("/Names/StaticallyAccessedProbe", m_counter);
Simulator::Schedule(초(m_var->GetValue ()), &Emitter::Count, this);
}
프로브를 좀 더 자세히 살펴보겠습니다. 프로브는 여러 값으로 값을 받을 수 있습니다.
방법 :
1. 프로브가 트레이스 소스에 직접 액세스하고 트레이스 싱크를 여기에 연결함으로써
2. 프로브가 구성 네임스페이스를 통해 추적 소스에 액세스하고
싱크대를 추적해 보세요
3. 프로브의 호출 코드를 명시적으로 호출하여 값 설정() 방법
4. 호출 코드를 명시적으로 호출하여 값별 경로 설정
("/경로/통과/구성/네임스페이스", ~)
처음 두 가지 기술이 가장 일반적일 것으로 예상됩니다. 또한 예에서는
일반적으로 수행되는 것처럼 일반 콜백 함수의 후킹이 표시됩니다. NS-3. 이
콜백 함수는 프로브 개체와 연결되어 있지 않습니다. 아래에서는 이 사례를 0)이라고 부르겠습니다.
// 이는 원시 함수를 추적 소스에 연결하는 것을 테스트하는 함수입니다.
무효화
NotifyViaTraceSource(std::string 컨텍스트, double oldVal, double newVal)
{
NS_LOG_DEBUG("컨텍스트: " << 컨텍스트 << " old " << oldVal << " new " << newVal);
}
먼저 이미터를 설정해야 합니다:
포인트 이미터 = CreateObject ();
이름::추가("/이름/이미터", 이미터);
// Emitter 객체는 ns-3 노드와 연결되어 있지 않으므로
// 자동으로 시작되지 않으므로 직접 수행해야 합니다.
시뮬레이터::일정(초(0.0), &Emitter::시작, 이미터);
아래 표시된 대로 다양한 DoubleProbe가 이 예에서 이미터와 상호 작용합니다.
사례 0):
// 아래는 프로브가 없는 일반적인 기능을 보여줍니다.
// (싱크 함수를 추적 소스에 연결)
//
연결됨 = 이미터->TraceConnect("카운터", "샘플 컨텍스트", MakeCallback(&NotifyViaTraceSource));
NS_ASSERT_MSG(연결됨, "트레이스 소스가 연결되지 않음");
사례 1):
//
// Probe1은 Emitter 추적 소스 개체에 직접 연결됩니다.
//
// 프로브1은 이미터 추적 소스에 연결됩니다.
포인트 프로브1 = CreateObject ();
// 프로브의 이름은 추적에서 컨텍스트로 사용될 수 있습니다.
프로브1->SetName("ObjectProbe");
// 프로브를 이미터의 카운터에 연결합니다.
연결 = 프로브1->ConnectByObject("카운터", 이미터);
NS_ASSERT_MSG(연결됨, "추적 소스가 프로브1에 연결되지 않음");
사례 2):
//
// Probe2는 다음과 같은 방법으로 Emitter 추적 소스 개체에 연결됩니다.
// Config 데이터베이스의 경로 이름으로 액세스
//
// 또 다른 유사한 프로브를 생성합니다. 이는 구성 경로를 통해 연결됩니다.
포인트 프로브2 = CreateObject ();
프로브2->SetName("PathProbe");
// 여기서는 반환 값이 확인되지 않음을 참고하세요.
프로브2->ConnectByPath("/이름/이미터/카운터");
사례 4)(이 예에서는 사례 3이 표시되지 않음):
//
// Probe3은 이미터에 의해 직접 호출됩니다.
// 정적 메서드 SetValueByPath().
//
포인트 프로브3 = CreateObject ();
프로브3->SetName("StaticallyAccessedProbe");
// 구성 데이터베이스에 추가해야 합니다.
이름::추가("/이름/프로브", 프로브3->GetName(), 프로브3);
마지막으로 예제에서는 프로브를 연결하여 출력을 생성하는 방법을 보여줍니다.
// 프로브 자체가 출력을 생성해야 합니다. 우리가 제공하는 컨텍스트
// 이 프로브(이 경우 프로브 이름)에 추가하면 명확하게 하는 데 도움이 됩니다.
// 추적 소스
연결됨 = 프로브3->TraceConnect("출력",
"/이름/프로브/StaticallyAccessedProbe/출력",
MakeCallback(&NotifyViaProbe));
NS_ASSERT_MSG(연결됨, "트레이스 소스가 ..probe3 출력에 연결되지 않았습니다.");
다음 콜백은 설명을 위해 이 예제의 프로브에 연결됩니다.
일반적으로 프로브는 Collector 개체에 연결됩니다.
// 프로브 출력에 대한 연결을 테스트하는 함수입니다.
무효화
NotifyViaProbe(std::string 컨텍스트, double oldVal, double newVal)
{
NS_LOG_DEBUG("컨텍스트: " << 컨텍스트 << " old " << oldVal << " new " << newVal);
}
IPv4 패킷 음모 예시
IPv4 패킷 도표 예는 다음의 five.cc 예를 기반으로 합니다. NS-3 지도 시간. 그것
에 있습니다 src/stats/examples/ipv4-packet-plot-example.cc.
노드 0 노드 1
+----------------+ +----------------+
| NS-3 TCP | | NS-3 TCP |
+----------------+ +----------------+
| 10.1.1.1 | | 10.1.1.2 |
+----------------+ +----------------+
| 지점 간 | | 지점 간 |
+----------------+ +----------------+
| |
+---------+
프로브가 다음에서 값을 풀 수도 있음을 보여주므로 프로브만 살펴보겠습니다.
구조(이 경우 패킷)를 추적하고 해당 값을 추적 소스 출력으로 보고합니다.
단순히 동일한 유형의 데이터를 전달하는 것보다
이 예제의 다른 측면은 문서의 뒷부분에서 설명하겠습니다.
내보낸 두 가지 유형의 데이터는 패킷 자체(산출) 및
패킷의 바이트 수(출력바이트).
유형 ID
Ipv4PacketProbe::GetTypeId()
{
static TypeId tid = TypeId ("ns3::Ipv4PacketProbe")
.SetParent ()
.AddConstructor ()
.AddTraceSource("출력",
"패킷과 이 프로브의 출력 역할을 하는 IPv4 개체 및 인터페이스",
MakeTraceSourceAccessor(&Ipv4PacketProbe::m_output))
.AddTraceSource("출력바이트",
"패킷의 바이트 수",
MakeTraceSourceAccessor(&Ipv4PacketProbe::m_outputBytes))
;
정시 반환;
}
프로브의 추적 싱크가 패킷을 받으면 프로브가 활성화된 경우 출력됩니다.
그 패킷 산출 추적 소스이지만 바이트 수도 출력됩니다.
출력바이트 추적 소스.
무효화
Ipv4PacketProbe::TraceSink(Ptr 패킷, Ptr ipv4, uint4_t 인터페이스)
{
NS_LOG_FUNCTION(이 << 패킷 << ipv4 << 인터페이스);
if (IsEnabled ())
{
m_packet = 패킷;
m_ipv4 = IPv4;
m_interface = 인터페이스;
m_output(패킷, ipv4, 인터페이스);
uint32_t packetSizeNew = 패킷->GetSize ();
m_outputBytes(m_packetSizeOld, packetSizeNew);
m_packetSizeOld = 패킷 크기 신규;
}
}
참고자료
[Cic06]
Claudio Cicconetti, Enzo Mingozzi, Giovanni Stea, "통합 프레임워크
ns2를 통한 효과적인 데이터 수집 및 통계 분석 활성화, 워크숍
ns-2(WNS2), 이탈리아 피사, 2006년 XNUMX월.
수집가
이 섹션은 Collector가 제공하는 기능을 자세히 설명하는 자리 표시자입니다.
수업을 NS-3 시뮬레이션을 통해 이를 프로그램에서 코딩하는 방법에 대한 예제를 제공합니다.
참고 : ns-3.18 현재 Collector는 아직 개발 중이며 아직 일부로 제공되지 않습니다.
프레임워크의.
어 그리 게이터
이 섹션에서는 Aggregator 클래스가 제공하는 기능을 자세히 설명합니다. NS-3
시뮬레이션. 이 섹션은 다음을 사용한 시뮬레이션 개발에 관심이 있는 사용자를 위한 것입니다.
NS-3 도구 및 데이터 수집 프레임워크 사용 중 Aggregator 클래스는
시뮬레이션 결과로 데이터 출력을 생성하는 부분입니다.
애그리 게이터 (aggregator) 살펴보기
Aggregator 개체는 다음을 수행하기 위해 하나 이상의 추적 소스에 연결되어야 합니다.
입력을 받습니다. Aggregator는 네트워크가 수집한 데이터의 종점입니다.
시뮬레이션 중 프로브 및 수집기. 이를 수집하는 것이 Aggregator의 임무입니다.
값을 저장하고 이를 일반 텍스트 파일과 같은 최종 출력 형식으로 변환합니다.
스프레드시트 파일, 플롯 또는 데이터베이스.
일반적으로 수집기는 하나 이상의 수집기에 연결됩니다. 이런 식으로 언제든지
수집기의 추적 소스는 새 값을 내보내고 수집기는 값을 처리하여
데이터 값이 이후에 상주하게 될 최종 출력 형식에 사용될 수 있다는 것입니다.
시뮬레이션.
Aggregator에 대해서는 다음 사항에 유의하세요.
· 집계자는 다음 호출을 통해 시뮬레이션 중에 동적으로 켜고 끌 수 있습니다.
할 수 있게 하다() and 장애를 입히다(). 예를 들어, 데이터 집계는 다음 동안 꺼질 수 있습니다.
시뮬레이션 준비 단계. 이는 해당 값이 최종 단계에 포함되지 않음을 의미합니다.
출력 매체.
· 집계자는 콜백을 통해 수집기로부터 데이터를 받습니다. Collector가 연결된 경우
수집자에게 TraceConnect를 호출하여 수집자의 추적을 설정합니다.
콜백으로서의 싱크 메소드.
현재까지 두 개의 Aggregator가 구현되었습니다.
· GnuplotAggregator
· 파일 수집기
Gnuplot 애그리게이터
GnuplotAggregator는 gnuplot을 만드는 데 사용되는 출력 파일을 생성합니다.
GnuplotAggregator는 시뮬레이션이 끝나면 3개의 서로 다른 파일을 생성합니다.
· 공백으로 구분된 gnuplot 데이터 파일
· gnuplot 제어 파일
· gnuplot을 생성하는 쉘 스크립트
창조
여기서는 수행해야 할 작업을 보여주기 위해 GnuplotAggregator 유형의 개체가 생성됩니다.
스마트 포인터 클래스를 사용하여 동적 메모리에 GnuplotAggregator를 선언합니다.
(부분 ). 스마트 포인터를 사용하여 동적 메모리에 GnuplotAggregator를 만들려면 다음 중 하나를 수행하세요.
전화해야 해 NS-3 방법 객체 생성(). 다음 코드는
src/stats/examples/gnuplot-aggregator-example.cc 이를 수행하는 방법을 보여줍니다.
string fileNameWithoutExtension = "gnuplot-aggregator";
// 수집기를 생성합니다.
포인트 수집자 =
CreateObject (파일 이름WithoutExtension);
생성자의 첫 번째 인수인 fileNameWithoutExtension은
확장자 없이 작성하려면 gnuplot 관련 파일을 사용하세요. 이 GnuplotAggregator는
"gnuplot-aggregator.dat"라는 이름의 공백으로 구분된 gnuplot 데이터 파일, gnuplot 제어 파일
"gnuplot-aggregator.plt"라는 이름과 +라는 이름의 gnuplot을 생성하는 쉘 스크립트
"gnuplot-aggregator.sh".
생성된 gnuplot의 키는 4개의 다른 위치에 있을 수 있습니다.
· 열쇠 없음
· 플롯 내부의 키(기본값)
· 플롯 위의 키
· 플롯 아래의 키
다음 gnuplot 키 위치 열거형 값은 키 위치를 지정하는 데 허용됩니다.
열거형 키 위치 {
NO_KEY,
KEY_INSIDE,
KEY_ABOVE,
KEY_BELOW
};
기본 위치인 내부가 아닌 아래 키를 원할 경우
다음을 수행할 수 있습니다.
수집기->SetKeyLocation(GnuplotAggregator::KEY_BELOW);
예
여기서 한 가지 예를 자세히 설명합니다.
· Gnuplot 수집기 예
지플롯 애그리 게이터 (aggregator) 예시
GnuplotAggregator를 실행하는 예는 다음에서 찾을 수 있습니다.
src/stats/examples/gnuplot-aggregator-example.cc.
다음 2D gnuplot은 예제를 사용하여 생성되었습니다.
[이미지] gnuplot-aggregator-example.cc로 생성된 2D Gnuplot 예시..UNINDENT
예제의 이 코드는 논의된 대로 GnuplotAggregator를 구성하는 방법을 보여줍니다.
위.
무효 Create2dPlot()
{
네임 스페이스를 사용하여 표준;
string fileNameWithoutExtension = "gnuplot-aggregator";
stringplotTitle = "Gnuplot Aggregator 플롯";
stringplotXAxisHeading = "시간(초)";
stringplotYAxisHeading = "이중 값";
stringplotDatasetLabel = "데이터 값";
stringdatasetContext = "데이터 세트/컨텍스트/문자열";
// 수집기를 생성합니다.
포인트 수집자 =
CreateObject (파일 이름WithoutExtension);
2D 데이터 세트를 포함하여 다양한 GnuplotAggregator 속성이 설정됩니다.
음모를 꾸몄다.
// 수집자의 속성을 설정합니다.
수집기->SetTerminal("png");
수집자->SetTitle(plotTitle);
aggregator->SetLegend(plotXAxisHeading,plotYAxisHeading);
// 수집기에 데이터 세트를 추가합니다.
aggregator->Add2dDataset(datasetContext,plotDatasetLabel);
// 수집기가 켜져 있어야 합니다.
수집자->활성화();
다음으로 2차원 값이 계산되고 각 값이 개별적으로
GnuplotAggregator를 사용하여 쓰기2d() 기능.
두 배의 시간;
이중 값;
// 2D 데이터세트를 생성합니다.
for (시간 = -5.0; 시간 <= +5.0; 시간 += 1.0)
{
// 2차원 곡선 계산
//
// 2
// 값 = 시간 .
//
값 = 시간 * 시간;
// 이 점을 플롯에 추가합니다.
aggregator->Write2d(datasetContext, 시간, 값);
}
// 수집기에 대한 데이터 로깅을 비활성화합니다.
수집자->비활성화();
}
파일 수집기
FileAggregator는 받은 값을 파일로 보냅니다.
FileAggregator는 4가지 유형의 파일을 생성할 수 있습니다.
· 포맷됨
· 공백으로 구분됨(기본값)
· 쉼표로 구분
· 탭 분리
형식화된 파일은 C 스타일 형식 문자열과 sprintf() 함수를 사용하여 파일을 인쇄합니다.
기록 중인 파일의 값입니다.
창조
수행해야 할 작업을 보여주기 위해 FileAggregator 유형의 개체가 여기에 생성됩니다.
스마트 포인터 클래스(Ptr)를 사용하여 동적 메모리에 FileAggregator를 선언합니다. ).
스마트 포인터를 사용하여 동적 메모리에 FileAggregator를 생성하려면 다음을 호출하면 됩니다.
전에, NS-3 메소드 CreateObject. 다음 코드는
src/stats/examples/file-aggregator-example.cc 이를 수행하는 방법을 보여줍니다.
string fileName = "file-aggregator-formatted-values.txt";
// 형식화된 값을 갖는 수집기를 만듭니다.
포인트 수집자 =
CreateObject (파일 이름, FileAggregator::FORMATTED);
생성자의 첫 번째 인수인 filename은 작성할 파일의 이름입니다. 그만큼
두 번째 인수인 fileType은 작성할 파일 유형입니다. 이 FileAggregator는
"file-aggregator-formatted-values.txt"라는 이름의 파일에 해당 값이 지정된 대로 인쇄됩니다.
fileType, 즉 이 경우 형식이 지정됩니다.
다음 파일 유형 열거형 값이 허용됩니다.
열거형 파일 유형 {
포맷됨,
SPACE_SEPARATED,
쉼표_분리됨,
TAB_SEPARATED
};
예
여기서 한 가지 예를 자세히 설명합니다.
· 파일 수집기 예
입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 애그리 게이터 (aggregator) 예시
FileAggregator를 실행하는 예는 다음에서 찾을 수 있습니다.
src/stats/examples/file-aggregator-example.cc.
쉼표로 구분된 2개의 값 열이 있는 다음 텍스트 파일은 다음을 사용하여 생성되었습니다.
예.
-5,25
-4,16
-3,9
-2,4
-1,1
0,0
1,1
2,4
3,9
4,16
5,25
예제의 이 코드는 논의된 대로 FileAggregator를 구성하는 방법을 보여줍니다.
위.
무효 CreateCommaSeparatedFile()
{
네임 스페이스를 사용하여 표준;
string fileName = "file-aggregator-comma-separated.txt";
stringdatasetContext = "데이터 세트/컨텍스트/문자열";
// 수집기를 생성합니다.
포인트 수집자 =
CreateObject (파일 이름, FileAggregator::COMMA_SEPARATED);
FileAggregator 속성이 설정되었습니다.
// 수집기가 켜져 있어야 합니다.
수집자->활성화();
다음으로 2차원 값이 계산되고 각 값이 개별적으로
FileAggregator를 사용하여 쓰기2d() 기능.
두 배의 시간;
이중 값;
// 2D 데이터세트를 생성합니다.
for (시간 = -5.0; 시간 <= +5.0; 시간 += 1.0)
{
// 2차원 곡선 계산
//
// 2
// 값 = 시간 .
//
값 = 시간 * 시간;
// 이 점을 플롯에 추가합니다.
aggregator->Write2d(datasetContext, 시간, 값);
}
// 수집기에 대한 데이터 로깅을 비활성화합니다.
수집자->비활성화();
}
2개의 형식화된 값 열이 포함된 다음 텍스트 파일도 다음을 사용하여 생성되었습니다.
예.
시간 = -5.000e+00 값 = 25
시간 = -4.000e+00 값 = 16
시간 = -3.000e+00 값 = 9
시간 = -2.000e+00 값 = 4
시간 = -1.000e+00 값 = 1
시간 = 0.000e+00 값 = 0
시간 = 1.000e+00 값 = 1
시간 = 2.000e+00 값 = 4
시간 = 3.000e+00 값 = 9
시간 = 4.000e+00 값 = 16
시간 = 5.000e+00 값 = 25
예제의 이 코드는 논의된 대로 FileAggregator를 구성하는 방법을 보여줍니다.
위.
무효 CreateFormattedFile()
{
네임 스페이스를 사용하여 표준;
string fileName = "file-aggregator-formatted-values.txt";
stringdatasetContext = "데이터 세트/컨텍스트/문자열";
// 형식화된 값을 갖는 수집기를 만듭니다.
포인트 수집자 =
CreateObject (파일 이름, FileAggregator::FORMATTED);
사용할 C 스타일 형식 문자열을 포함하여 FileAggregator 속성이 설정됩니다.
// 값의 형식을 설정합니다.
aggregator->Set2dFormat ("시간 = %.3e\t값 = %.0f");
// 수집기가 켜져 있어야 합니다.
수집자->활성화();
다음으로 2차원 값이 계산되고 각 값이 개별적으로
FileAggregator를 사용하여 쓰기2d() 기능.
두 배의 시간;
이중 값;
// 2D 데이터세트를 생성합니다.
for (시간 = -5.0; 시간 <= +5.0; 시간 += 1.0)
{
// 2차원 곡선 계산
//
// 2
// 값 = 시간 .
//
값 = 시간 * 시간;
// 이 점을 플롯에 추가합니다.
aggregator->Write2d(datasetContext, 시간, 값);
}
// 수집기에 대한 데이터 로깅을 비활성화합니다.
수집자->비활성화();
}
어댑터
이 섹션에서는 Adapter 클래스가 제공하는 기능을 자세히 설명합니다. NS-3
시뮬레이션. 이 섹션은 다음을 사용한 시뮬레이션 개발에 관심이 있는 사용자를 위한 것입니다.
NS-3 도구 및 Adapter 클래스가 포함된 데이터 수집 프레임워크 사용
시뮬레이션 결과로 데이터 출력을 생성합니다.
참고: '어댑터'라는 용어는 '어댑터'로 표기될 수도 있습니다. 우리는 맞춤법 정렬을 선택했습니다
C++ 표준을 사용합니다.
어댑터 살펴보기
어댑터는 다양한 유형의 DCF 개체를 연결하는 데 사용됩니다.
현재까지 하나의 어댑터가 구현되었습니다.
· TimeSeriesAdaptor
Time 연속 어댑터
TimeSeriesAdaptor를 사용하면 프로브를 별도의 연결 없이 수집기에 직접 연결할 수 있습니다.
그 사이의 수집가.
구현된 DCF 도우미는 모두 TimeSeriesAdaptor를 활용하여 프로브를 수행합니다.
다른 유형의 값을 변환하고 현재 시간과 두 값을 모두 변환하여 출력합니다.
두 배로.
TimeSeriesAdaptor 클래스의 역할은 원시 값을 취하는 어댑터의 역할입니다.
다양한 유형의 데이터를 조사하고 두 개의 double 값으로 구성된 튜플을 출력합니다. 첫 번째는
타임스탬프는 다른 해상도(예: 초, 밀리초 등)로 설정될 수 있습니다.
미래이지만 현재는 Seconds로 하드코딩되어 있습니다. 두 번째는 A의 변환이다.
double 값이 아닌 값을 double 값으로 변경합니다(정밀도가 손실될 수 있음).
범위/제한
이 섹션에서는 데이터 수집 프레임워크의 범위와 제한 사항에 대해 설명합니다.
현재 DCF에서는 다음 프로브만 구현되었습니다.
· 부울 프로브
· 더블프로브
· Uinteger8Probe
· Uinteger16Probe
· Uinteger32Probe
· 타임프로브
· 패킷프로브
· ApplicationPacketProbe
· Ipv4PacketProbe
현재 DCF에서는 수집기를 사용할 수 없지만 BasicStatsCollector는 아래에 있습니다.
개발.
현재 DCF에서는 다음 Aggregator만 구현되었습니다.
· GnuplotAggregator
· 파일 수집기
현재 DCF에서는 이 어댑터만 구현되었습니다.
시계열 어댑터.
미래 작업
이 섹션에서는 데이터 수집 프레임워크에서 수행될 향후 작업에 대해 설명합니다.
아직 수행해야 할 작업은 다음과 같습니다.
· 더 많은 추적 소스를 연결합니다. NS-3 시뮬레이터에서 더 많은 값을 얻는 코드입니다.
· 현재보다 더 많은 유형의 프로브를 구현합니다.
· 단일 현재 2D 수집기인 BasicStatsCollector 이상의 기능을 구현합니다.
· 더 많은 집계자를 구현합니다.
· 단순한 어댑터 이상의 것을 구현합니다.
DSDV 루팅
DSDV(Destination-Sequenced Distance Vector) 라우팅 프로토콜은 사전 예방적이고
Charles E. Perkins와 Pravin이 개발한 MANET용 테이블 기반 라우팅 프로토콜
1994년 Bhagwat. 경로 선택 시 홉 수를 측정 기준으로 사용합니다.
이 모델은 다음에 의해 개발되었습니다. 전에, ResiliNets 연구 그룹 캔자스 대학교에서. ㅏ
이 모델에 관한 논문은 다음 위치에 있습니다. 이 URL.
DSDV 라우팅 살펴보기
DSDV 라우팅 테이블: 모든 노드는 자신이 가지고 있는 다른 모든 노드를 나열하는 테이블을 유지 관리합니다.
직접적으로 또는 일부 이웃을 통해 알려졌습니다. 모든 노드에는 단일 항목이 있습니다.
라우팅 테이블. 항목에는 마지막으로 알려진 노드의 IP 주소에 대한 정보가 있습니다.
해당 노드에 도달하기 위한 시퀀스 번호와 홉 수입니다. 이러한 세부 사항과 함께 테이블
또한 대상 노드에 도달하기 위해 다음 홉 이웃을 추적합니다.
해당 노드에 대해 수신된 마지막 업데이트입니다.
DSDV 업데이트 메시지는 대상 주소(Destination Address), 시퀀스 번호(Sequence Number), 세 가지 필드로 구성됩니다.
홉 수.
각 노드는 2가지 메커니즘을 사용하여 DSDV 업데이트를 보냅니다. 그들은,
1.
간헐적 인 업데이트
정기적인 업데이트는 m_ periodicUpdateInterval(기본값: 15초)마다 전송됩니다.
이 업데이트에서 노드는 전체 라우팅 테이블을 브로드캐스트합니다.
2.
트리거 업데이트
트리거 업데이트는 정기적인 업데이트 사이에 이루어지는 작은 업데이트입니다. 이러한 업데이트
노드가 자신의 노드에 변화를 일으킨 DSDV 패킷을 수신할 때마다 전송됩니다.
라우팅 테이블. 원본 논문에서는 언제 어떤 변경이 필요한지 명확하게 언급하지 않았습니다.
DSDV 업데이트가 전송되어야 합니다. 현재 구현은 다음을 보냅니다.
라우팅 테이블의 변경과 관계없이 업데이트를 수행합니다.
업데이트는 특정 노드에 대한 메트릭을 기반으로 수락됩니다. 첫 번째 요소
업데이트 승인 여부를 결정하는 것은 시퀀스 번호입니다. 업데이트를 수락해야 합니다.
메트릭과 관계없이 업데이트 메시지의 시퀀스 번호가 더 높은 경우. 만약
동일한 시퀀스 번호의 업데이트가 수신된 다음 메트릭(hopCount)이 가장 적은 업데이트가 수신됩니다.
우선적으로 부여됩니다.
이동성이 높은 시나리오에서는 경로 변동 가능성이 높으므로
메트릭이 변경된 업데이트가 발생하지 않는 가중 정착 시간 개념
이웃에게 광고합니다. 노드는 그렇지 않았는지 확인하기 위해 정착 시간을 기다립니다.
해당 업데이트를 보내기 전에 이전 이웃으로부터 업데이트를 받습니다.
현재 구현에서는 위의 DSDV 기능을 모두 다루고 있습니다. 현재
구현에는 경로가 없는 패킷을 버퍼링하는 요청 대기열도 있습니다.
목적지. 기본값은 대상당 최대 5개의 패킷을 버퍼링하도록 설정되어 있습니다.
참고자료
논문 링크: http://portal.acm.org/citation.cfm?doid=190314.190336
DSR 루팅
DSR(Dynamic Source Routing) 프로토콜은 특별히 설계된 반응형 라우팅 프로토콜입니다.
모바일 노드의 다중 홉 무선 임시 네트워크에 사용됩니다.
이 모델은 다음에 의해 개발되었습니다. 전에, ResiliNets 연구 그룹 캔자스 대학교에서.
DSR 라우팅 살펴보기
이 모델은 DSR(Dynamic Source Routing) 프로토콜의 기본 사양을 구현합니다.
구현은 다음을 기반으로 합니다. RFC 4728, RFC에 대한 일부 확장 및 수정 포함
명세서.
DSR은 주문형 동작으로 작동합니다. 따라서 우리의 DSR 모델은 모든 패킷을 버퍼링하는 동안
RREQ(경로 요청 패킷)가 전파됩니다. 우리는 패킷 버퍼를 구현합니다.
dsr-rsendbuff.cc. 패킷 큐는 오래된 패킷의 가비지 수집을 구현합니다.
대기열 크기 제한. 패킷이 전송 버퍼에서 전송되면 대기열에 추가됩니다.
다음 홉 승인을 위한 유지 관리 버퍼입니다.
그런 다음 유지 관리 버퍼는 이미 전송된 패킷을 버퍼링하고 다음을 기다립니다.
패킷 전달 알림. 프로토콜 작동은 끊어진 링크에 크게 의존합니다.
탐지 메커니즘. 우리는 RFC를 기반으로 권장되는 세 가지 휴리스틱을 다음과 같이 구현합니다.
다음과 같습니다 :
첫째, 가능한 경우 가장 빠른 메커니즘인 링크 레이어 피드백을 사용합니다.
이 세 가지는 링크 오류를 감지하는 데 사용됩니다. 프레임 전송이 이루어지면 링크가 끊어진 것으로 간주됩니다.
모든 재시도에서 전송 실패가 발생합니다. 이 메커니즘은 활성
없을 때보다 훨씬 빠르게 연결되고 작동합니다. DSR은 링크 레이어를 감지할 수 있습니다.
전송실패로 파손되었음을 알립니다. 경로 재계산이 시작됩니다.
필요할 때. 사용자가 링크 계층 승인을 사용하지 않으려면 다음을 통해 조정할 수 있습니다.
"dsr-routing.cc"에서 "LinkAcknowledgement" 속성을 false로 설정합니다.
둘째, 가능하면 수동적 승인을 사용해야 합니다. 노드가 켜집니다
자신을 대상으로 하지 않는 패킷을 수신할 수 있는 "무차별" 수신 모드
노드가 해당 데이터 패킷이 목적지로 전달되었음을 확신하면 해당 데이터 패킷을 취소합니다.
수동적 승인 타이머.
마지막으로 네트워크 계층 승인 체계를 사용하여 패킷 수신을 알립니다. 노선
요청 패킷은 승인되거나 재전송되지 않습니다.
경로 캐시 구현은 이전 항목 및 상태의 가비지 수집을 지원합니다.
표준에 정의된 대로 기계입니다. STL 맵 컨테이너로 구현됩니다. 핵심은
대상 IP 주소.
DSR은 IP 헤더에 직접 액세스하여 작동하며 네트워크와 전송 간에 작동합니다.
층. 패킷이 전송 계층에서 전송되면 DSR 및 DSR로 전달됩니다.
헤더가 추가됩니다.
경로 캐시와 링크 캐시라는 두 가지 캐싱 메커니즘이 있습니다. 경로 캐시는 전체를 저장합니다.
캐시의 경로입니다. 경로는 홉 수를 기준으로 정렬되며, 하나의 경로가
사용할 수 없으면 다음 경로로 변경합니다. 링크 캐시가 약간 더 좋습니다.
서로 다른 하위 경로를 사용하고 다음을 사용하여 구현된 링크 캐시를 사용한다는 점에서 설계합니다.
Dijsktra 알고리즘이며 이 부분은 Song Luan이 구현했습니다.[이메일 보호]>.
다음 선택적 프로토콜 최적화는 구현되지 않습니다.
· 흐름상태
· 첫 번째 홉 외부(F), 마지막 홉 외부(L) 플래그
· 알려지지 않은 DSR 옵션 처리
·
두 유형 of 오류 헤더:
1. 흐름 상태가 지원되지 않는 옵션
2. 지원되지 않는 옵션(시뮬레이션에서는 발생하지 않음)
DSR 최신 정보 in NS-3.17
우리는 원래 Ptr에서 "TxErrHeader"를 사용하여 WifiMac의 전송 오류를 나타냈습니다.
그러나 링크 레이어의 특정 패킷이 제대로 작동하지 않았습니다.
패킷이 삭제되었으므로 이 헤더는 추적 파일에 기록되지 않았습니다. 우리는
링크 레이어 알림 메커니즘 구현 시 다른 경로. 우리는
패킷 수신 이벤트를 찾아 추적 파일을 만듭니다. 데이터에 대한 수신 이벤트가 하나 발견되면
패킷의 경우 이를 성공적인 데이터 전달의 지표로 간주합니다.
유능한 매개 변수
+------------ +------------ -----------+-------------+
| 매개변수 | 설명 | 기본값 |
+==========================+====================== ==============+==============+
| MaxSendBuffLen | 가능한 최대 패킷 수 | 64 |
| | 전송 버퍼에 저장됩니다 | |
+------------ +------------ -----------+-------------+
| MaxSendBuffTime | 패킷이 대기열에 들어갈 수 있는 최대 시간 | 초(30) |
| | 전송 버퍼에서 | |
+------------ +------------ -----------+-------------+
| MaxMaintLen | 가능한 최대 패킷 수 | 50 |
| | 유지 관리 버퍼에 저장됩니다 | |
+------------ +------------ -----------+-------------+
| 최대유지관리시간 | 패킷이 대기열에 들어갈 수 있는 최대 시간 | 초(30) |
| | 유지 관리 버퍼 | |
+------------ +------------ -----------+-------------+
| 맥스캐시렌 | 최대 경로 항목 수 | 64 |
| | 경로 캐시에 저장할 수 있는 정보 | |
+------------ +------------ -----------+-------------+
| RouteCacheTimeout | 경로 캐시가 수행할 수 있는 최대 시간 | 초(300)|
| | 경로 캐시에 대기 중 | |
+------------ +------------ -----------+-------------+
| Rreq재시도 | 최대 재전송 횟수 | 16 |
| | 경로 검색 요청 | |
+------------ +------------ -----------+-------------+
| 캐시 유형 | 링크 캐시 사용 또는 경로 캐시 사용 | "링크캐시" |
| | | |
+------------ +------------ -----------+-------------+
| 링크승인 | 링크 레이어 승인 활성화 | 참 |
| | 메커니즘 | |
+------------ +------------ -----------+-------------+
실시 수정
·
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 DsrFs헤더 이 추가 3 필드: 메시지 유형, 이드 목적지 이드 and 이들
변경 만 for 사후 처리
1. 메시지 유형은 제어 패킷에서 데이터 패킷을 식별하는 데 사용됩니다.
2. 소스 ID는 데이터 패킷의 실제 소스를 식별하는 데 사용됩니다.
패킷을 hop-by-hop으로 전달하기 위해 ipv4header가 실제 패킷을 전달하지 않습니다.
필요에 따라 소스 및 대상 IP 주소
3. 목적지 ID는 위와 같은 이유입니다.
· Route Reply 헤더가 DSR RFC에서 단어 정렬되지 않았습니다.
이행
· DSR은 전송과 네트워크 프로토콜 사이의 심 헤더로 작동하며 자체적인 헤더가 필요합니다.
전달 메커니즘에서는 패킷 전송을 hop-by-hop 전달로 변경하고 있으므로
패킷 전달을 알리기 위해 dsr 고정 헤더에 두 개의 필드를 추가했습니다.
Current 길 캐시 이행
이 구현에서는 구현이 간단하고 루프가 없는 것을 보장하는 "경로 캐시"를 사용했습니다.
경로 :
· 경로 캐시에는 자동 만료 정책이 있습니다.
· 캐시는 특정 목적지에 대한 여러 경로 항목을 저장하고 항목을 정렬합니다.
홉 수에 따라
· MaxEntriesEachDst를 조정하여 단일 항목에 대해 저장된 최대 항목을 변경할 수 있습니다.
목적지
· 하나의 목적지에 대해 여러 경로를 추가하는 경우 경로를 기준으로 비교됩니다.
홉 수와 만료 시간 중 홉 수가 적거나 상대적으로 새로운 경로는
혜택을 받고있는
· 향후 구현에는 또 다른 가능성으로 "링크 캐시"가 포함될 수 있습니다.
DSR 명령
DSR을 라우팅 프로토콜로 실행할 때 다음 사항에 유의해야 합니다.
· NodeTraversalTime은 두 개의 인접 노드를 통과하는 데 걸리는 시간이며 다음과 같아야 합니다.
전송 범위에 맞게 선택됨
· PassiveAckTimeout은 유지 관리 버퍼에서 패킷이 수동적으로 대기하는 시간입니다.
승인, 일반적으로 NodeTraversalTime의 두 배로 설정됨
· RouteCacheTimeout은 노드의 속도가 높아질수록 더 작은 값으로 설정되어야 합니다.
기본값은 300초입니다.
돕는 사람
노드에서 DSR을 실행하려면 가장 쉬운 방법은 DsrHelper 및 DsrMainHelpers를 사용하는 것입니다.
시뮬레이션 스크립트에서. 예를 들어:
DsrHelper dsr;
DsrMainHelper dsrMain;
dsrMain.Install(dsr, adhocNodes);
내부의 예제 스크립트 src/dsr/예제/ DSR 기반 노드의 사용을 시연합니다.
다른 시나리오. 도우미 소스는 내부에서 찾을 수 있습니다.
src/dsr/helper/dsr-main-helper.{h,cc} and src/dsr/helper/dsr-helper.{h,cc}
예
예제는 다음에서 찾을 수 있습니다. src/dsr/예제/:
· dsr.cc는 전통적인 MANET 환경[3] 내에서 DSR을 라우팅 프로토콜로 사용합니다.
DSR은 라우팅 비교 사례에도 내장되어 있습니다. 예제/라우팅/:
· manet-routing-compare.cc MANET 라우팅 프로토콜이 내장된 비교 사례입니다.
자체 결과를 생성할 수 있습니다.
검증
이 모델은 다음과 같이 테스트되었습니다.
· DSR의 내부를 검증하기 위해 단위 테스트가 작성되었습니다. 이것은에서 찾을 수 있습니다
src/dsr/test/dsr-test-suite.cc. 이 테스트는 DSR 모듈 내부의 메소드가
패킷 버퍼를 처리하면 헤더가 올바르게 작동합니다.
· [3]과 유사한 시뮬레이션 사례가 테스트되었으며 비슷한 결과를 얻었습니다.
· manet-routing-compare.cc는 DSR을 다른 세 가지 라우팅과 비교하는 데 사용되었습니다.
프로토콜.
3년 ns-2011 워크숍에서 이러한 결과에 대한 논문이 발표되었습니다.
제한 사항
모델이 완벽하게 호환되지 않습니다. RFC 4728. 예를 들어, Dsr 고정 크기 헤더에는
확장되었으며 RFC 사양보다 4옥텍이 더 깁니다. 결과로서,
Wireshark에서는 DSR 헤더를 올바르게 디코딩할 수 없습니다.
RFC를 완벽하게 준수하는 모델은 향후 계획되어 있습니다.
참고자료
[1] 원본 용지: http://www.monarch.cs.rice.edu/monarch-papers/dsr-chapter00.pdf
[2] RFC 4728 http://www6.ietf.org/rfc/rfc4728.txt
[3] Broch의 비교 논문: http://www.monarch.cs.rice.edu/monarch-papers/mobicom98.ps
에뮬레이션 개요
NS-3 테스트베드 및 가상 머신 환경에 통합되도록 설계되었습니다. 우리
두 종류의 네트 장치를 제공하여 이러한 요구를 해결했습니다. 첫 번째 종류의 장치
파일 설명자 네트 장치입니다(FdNet장치), 이는 다음을 수행할 수 있는 일반적인 장치 유형입니다.
파일 설명자에서 읽고 씁니다. 이 파일 설명자를 다른 파일 설명자와 연결함으로써
호스트 시스템에 있는 것들에 따라 다양한 기능이 제공될 수 있습니다. 예를 들어,
FdNetDevice는 기본 패킷 소켓과 연결되어 에뮬레이션을 제공할 수 있습니다.
능력. 이를 통해 NS-3 "실제" 네트워크에서 데이터를 전송하는 시뮬레이션. 두번째
종류, 라고 불리는 가볍게 두드리다 NetDevice "실제" 호스트가 NS-3 시뮬레이션
그것이 시뮬레이션된 노드 중 하나라면. 안 NS-3 시뮬레이션은 무엇이든 구성할 수 있습니다.
시뮬레이션 또는 에뮬레이트된 장치의 조합.
참고 : ns-3.17 이전에는 에뮬레이션 기능이 다음과 같은 특수 장치에 의해 제공되었습니다.
an 에뮤 넷디바이스; 그만큼 에뮤 NetDevice가 다음으로 대체되었습니다. FdNet장치.
우리가 지원하고 싶은 사용 사례 중 하나는 테스트베드의 사용 사례입니다. 구체적인 예
이런 환경이 바로 ORBIT 테스트베드입니다. ORBIT은 실험실 에뮬레이터/현장 시험판입니다.
400개의 802.11 무선 노드로 구성된 XNUMX차원 그리드로 배열된 네트워크입니다. 우리는 다음과 통합합니다
"이미징" 프로세스를 사용하여 로드하고 실행하는 ORBIT NS-3 ORBIT에서의 시뮬레이션
정렬. 우리는 우리의 EmuFdNet장치 테스트베드에서 하드웨어를 구동하려면
다음을 사용하여 결과를 축적합니다. NS-3 추적 및 로깅 기능 또는 기본
ORBIT 데이터 수집 기술. 보다 http://www.orbit-lab.org/ ORBIT에 대한 자세한 내용은
테스트 베드.
이러한 종류의 시뮬레이션이 다음 그림에 나와 있습니다.
[이미지] 테스트베드 에뮬레이션 구현 예시..UNINDENT
각각 "전역"의 하위 집합을 실행하는 별도의 호스트가 있음을 알 수 있습니다.
시뮬레이션. 대신에 NS-3 호스트를 연결하는 채널, 실제 하드웨어를 사용합니다
테스트베드 제공. 이를 통해 NS-3 애플리케이션 및 프로토콜 스택이
실제 하드웨어를 통해 통신하는 시뮬레이션 노드.
이 구성의 기본 용도는 반복 가능한 생성이 될 것으로 예상됩니다.
모든 기능을 포함하는 실제 네트워크 환경에서의 실험 결과 NS-3
추적, 로깅, 시각화 및 통계 수집 도구.
본질적으로 반대 구성으로 볼 수 있는 것에서 우리는 "실제" 기계를 허용합니다.
네이티브 애플리케이션과 프로토콜 스택을 실행하여 NS-3 시뮬레이션.
이를 통해 실제 머신에 연결된 대규모 네트워크의 시뮬레이션이 가능하며,
가상화를 가능하게 합니다. 이러한 종류의 시뮬레이션이 다음 그림에 나와 있습니다.
[이미지] 에뮬레이트된 채널 구현 개요..UNINDENT
여기에서는 여러 가상 머신이 실행 중인 단일 호스트가 있음을 알 수 있습니다.
그 위에. 안 NS-3 시뮬레이션은 중앙에 표시된 가상 머신에서 실행되는 것으로 표시됩니다.
그림. 이 시뮬레이션에는 연관된 여러 노드가 있습니다. NS-3 응용 프로그램 및
통신하는 프로토콜 스택 NS-3 네이티브 시뮬레이션을 통한 채널 NS-3 그물
장치.
그림의 맨 왼쪽과 맨 오른쪽에도 두 개의 가상 머신이 표시되어 있습니다.
이러한 VM은 기본(Linux) 애플리케이션과 프로토콜 스택을 실행하고 있습니다. VM은
Linux Tap net 장치를 통해 시뮬레이션에 연결됩니다. 사용자 모드 핸들러
탭 장치는 시뮬레이션에서 인스턴스화되고 프록시 노드에 연결됩니다.
시뮬레이션에서 기본 VM을 나타냅니다. 이 핸들러를 사용하면 Tap 장치를
네이티브 VM은 마치 실제 VM처럼 동작합니다. NS-3 시뮬레이션 VM의 net 장치. 이,
그러면 기본 VM의 기본 소프트웨어 및 프로토콜 제품군이 다음과 같이 믿을 수 있습니다.
그들은 시뮬레이션에 연결되어 있습니다 NS-3 .
이 환경의 일반적인 사용 사례는 다음의 동작을 분석하는 것입니다.
대규모 시뮬레이션 환경에서 기본 애플리케이션 및 프로토콜 제품군 NS-3
네트워크.
입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 기술자 NetDevice
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 src/fd-net-장치 모듈은 다음을 제공합니다. FdNet장치 읽고 쓸 수 있는 수업
사용자가 제공한 파일 설명자를 사용하여 트래픽을 씁니다. 이 파일 설명자는 다음과 같습니다.
TAP 장치, 원시 소켓, 사용자 공간 프로세스 생성/소비에 연결됨
트래픽 등. 사용자는 외부 트래픽이 생성되는 방법을 정의하고
NS-3 트래픽이 소비됩니다.
시뮬레이션을 외부 트래픽과 연관시키는 다양한 메커니즘을 다음을 통해 제공할 수 있습니다.
도우미 수업. 세 가지 특정 도우미가 제공됩니다.
· EmuFdNetDeviceHelper(연결하기 위해) NS-3 호스트에 물리적 장치가 있는 장치
기계)
· TapFdNetDeviceHelper(탭에서 ns-3 장치를 파일 설명자와 연결)
호스트 시스템의 장치)
· PlanteLabFdNetDeviceHelper(PlanteLab 노드에서 탭 장치 생성을 자동화하기 위해,
가능 NS-3 인터넷을 통해 트래픽을 보내고 받을 수 있는 시뮬레이션
PlanetLab 리소스.
모델 상품 설명
이 모듈의 소스 코드는 디렉토리에 있습니다. src/fd-net-장치.
FdNetDevice는 특별한 유형의 NS-3 파일과의 트래픽을 읽는 NetDevice
설명자. 즉, 프레임을 작성하고 작성하는 순수한 시뮬레이션 NetDevice 개체와는 다릅니다.
시뮬레이션된 채널에서 이 FdNetDevice는 프레임을 시뮬레이션 외부로 파일로 보냅니다.
설명자. 파일 설명자는 Linux TUN/TAP 장치, 소켓,
또는 사용자 공간 프로세스.
파일 설명자를 제공하는 것은 이 장치의 사용자에게 달려 있습니다. 파일 유형
제공되는 설명자는 모델링되는 내용을 결정합니다. 예를 들어, 파일이
설명자는 호스트 시스템의 WiFi 카드에 원시 소켓을 제공합니다. 장치는
모델은 WiFi 장치입니다.
아래를 내려다보는 장치의 개념적 "상단"에서 다음과 같은 시뮬레이션 노드가 보입니다.
브리지가 가능하고 브로드캐스트를 지원하며 48비트 IEEE MAC 주소를 지원하는 장치
IPv4 ARP 또는 IPv6 Neighbor Discovery를 사용합니다. 단, 이러한 속성은
사용 사례별로.
디자인
FdNetDevice 구현은 다음에서 확장된 리더 개체를 사용합니다. Fd리더
클래스 NS-3 소스/코어 메인 스레드와 별도의 스레드를 관리하는 모듈 NS-3
파일 설명자에서 트래픽을 읽기 위한 실행 스레드입니다.
호출 시 시작장치 메서드를 사용하면 리더 개체가 초기화되고 시작됩니다.
독서 스레드. 장치가 시작되기 전에 파일 설명자가 이전에 연결되어야 합니다.
FdNetDevice를 파일 설명자 설정 기도.
파일 설명자의 생성 및 구성은 여러 도우미에게 맡길 수 있습니다.
아래에서 더 자세히 설명합니다. 이 작업이 완료되면 파일 설명자 설정 is
도우미의 책임이며 사용자가 직접 호출해서는 안 됩니다.
파일 설명자에서 들어오는 프레임을 읽으면 판독기는 프레임을 다음으로 전달합니다.
전에, 콜백 수신 이 방법의 임무는 프레임 수신을 예약하는 것입니다.
장치로 NS-3 시뮬레이션 이벤트. 새 프레임이 리더 스레드에서 다음 스레드로 전달되므로
주 NS-3 시뮬레이션 스레드를 사용하면 스레드 안전성 문제를 피할 수 있습니다.
ScheduleWithContext 일반 전화 대신 전화 일정 요구.
수신 데이터 속도가 너무 높을 때 스케줄러의 부담을 피하기 위해
카운터는 현재 수신 예정인 프레임 수와 함께 유지됩니다.
장치. 이 카운터가 지정된 값에 도달하면 RxQueueSize 속성의
장치를 사용하면 새 프레임이 자동으로 삭제됩니다.
장치에 의한 새 프레임의 실제 수신은 예약된 프레임이 실행될 때 발생합니다. 포드워업
메소드는 시뮬레이터에 의해 호출됩니다. 이 메서드는 마치 새 프레임이 다음에서 도착한 것처럼 작동합니다.
장치에 연결된 채널. 그런 다음 장치는 프레임의 캡슐을 해제하여 모든 레이어를 제거합니다.
2개의 헤더를 생성하여 노드의 상위 네트워크 스택 계층으로 전달합니다. 그만큼 앞으로
메소드는 다음에 의해 정의된 프레임 캡슐화 유형에 따라 프레임 헤더를 제거합니다.
전에, 캡슐화 모드 속성을 지정하고 IP 패킷을 전달하는 수신 콜백을 호출합니다.
파일 설명자가 파일에 연결될 때 추가 헤더인 PI 헤더가 나타날 수 있습니다.
IFF_NO_PI 플래그를 설정하지 않고 생성된 TAP 장치입니다. 이 추가 헤더는
제거된 경우 캡슐화 모드 DIXPI 값으로 설정됩니다.
반대 방향으로는 시뮬레이션 내부에서 생성된 패킷이 송신됩니다.
장치를 통해 다음으로 전달됩니다. 전송 메소드는 차례로 호출됩니다.
보내기: 방법. 후자의 방법은 필요한 레이어 2 헤더를 추가하고 간단히
새로 생성된 프레임을 파일 설명자에 씁니다.
범위 and 제한 사항
이 장치의 사용자는 파일 전체에 흐름 제어가 없다는 점에 주의해야 합니다.
설명자 경계(에뮬레이션 모드에서 사용 시) 즉, Linux 시스템에서
네트워크 패킷 쓰기 속도가 기본 물리적 장치의 능력을 초과합니다.
패킷을 버퍼링하면 쓰기 애플리케이션까지 역압이 적용되어 방지됩니다.
로컬 패킷 손실. 파일 설명자 인터페이스에서는 이러한 흐름 제어가 제공되지 않습니다.
따라서 사용자는 이 제한 사항을 알고 있어야 합니다.
앞에서 설명한 것처럼 RxQueueSize 속성은 전송할 수 있는 패킷 수를 제한합니다.
장치에서 수신 대기 중입니다. 파일 설명자에서 읽은 프레임
보류 중인 패킷 수가 최대값에 도달하면 자동으로 삭제됩니다.
장치의 mtu는 기본적으로 이더넷 II MTU 값으로 설정됩니다. 그러나 도우미는 가정되어 있습니다.
네트워크 인터페이스의 특성을 반영하여 mtu를 올바른 값으로 설정합니다.
파일 설명자와 연결됩니다. 도우미를 사용하지 않으면 책임은 다음과 같습니다.
장치에 대한 올바른 mtu 값 설정은 사용자에게 돌아갑니다. 읽은 크기
파일 설명자 판독기의 버퍼는 시작장치 방법.
FdNetDevice 클래스는 현재 세 가지 캡슐화 모드인 DIX for Ethernet II를 지원합니다.
프레임, 802.2 LLC/SNAP 프레임용 LLC, 이더넷 II 프레임용 DIXPI(추가 옵션 포함)
TAP PI 헤더. 이는 파일 설명자를 통과하는 트래픽이 다음과 같이 예상됨을 의미합니다.
이더넷 II 호환. FdNetDevice를 무선 인터페이스에 연결하는 것은 다음과 같이 가능합니다.
드라이버가 이더넷 II 프레임을 소켓 API에 제공하는 한. 연관시키려면 참고하세요
Ad-hoc 모드에서 FdNetDevice를 무선 카드에 연결하려면 장치의 MAC 주소를 설정해야 합니다.
실제 카드 MAC 주소로 전송됩니다. 그렇지 않으면 들어오는 모든 트래픽은 가짜 MAC 주소가 됩니다.
운전자가 버렸습니다.
앞에서 언급했듯이 fd-net-device 모듈에는 세 가지 도우미가 제공됩니다. 각
개별 도우미(파일 설명자 유형)에는 플랫폼 제한이 있을 수 있습니다. 예를 들어,
스레딩, 실시간 시뮬레이션 모드 및 TUN/TAP 장치 생성 기능은
제공된 도우미를 사용하기 위한 전제 조건입니다. 이러한 모드에 대한 지원은 다음에서 찾을 수 있습니다.
의 출력 waf 구성 단계, 예:
스레딩 프리미티브: 사용
실시간 시뮬레이터: 활성화됨
에뮬레이트된 네트워크 장치: 활성화됨
탭 브리지: 활성화됨
테스트하는 동안 다음 사항을 언급하는 것이 중요합니다. FdNet장치 우리는 상한선을 찾았습니다
1Mbps의 60Gb 이더넷 링크를 사용할 때 TCP 처리량 제한. 이 한도는 대부분
아마도 테스트에 관련된 컴퓨터의 처리 능력 때문일 것입니다.
용법
이 유형의 장치에 대한 사용 패턴은 도우미가 있는 다른 넷 장치와 유사합니다.
노드 포인터나 노드 컨테이너에 설치됩니다. 베이스 사용시 FdNetDeviceHelper
사용자는 스스로 파일 설명자를 만들고 설정할 책임이 있습니다.
FdNetDeviceHelper fd;
NetDeviceContainer 장치 = fd.Install(노드);
// 파일 디스크립터 생성
...
장치->SetFileDescriptor(fd);
가장 일반적으로 FdNetDevice는 호스트 시스템과 상호 작용하는 데 사용됩니다. 이러한 경우
사용자가 실시간 에뮬레이션 모드에서 실행하기를 원할 것이 거의 확실합니다.
체크섬 계산을 활성화합니다. 일반적인 프로그램 명령문은 다음과 같습니다.
GlobalValue::Bind ("SimulatorImplementationType", StringValue ("ns3::RealtimeSimulatorImpl"));
GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
Linux 호스트 시스템과 상호 작용하는 실험을 설정하는 가장 쉬운 방법은 사용자에게
전에, 에뮤 and 가볍게 두드리다 도우미. 아마도 이러한 도우미 구현 중 가장 특이한 부분은
슈퍼유저 권한으로 일부 코드를 실행하기 위한 요구 사항과 관련이 있습니다.
사용자가 전체 시뮬레이션을 루트로 실행하도록 강요하는 대신 우리는 작은
루트로 실행되고 필요한 높은 권한 소켓 작업을 수행하는 "작성자" 프로그램입니다.
"작성자" 프로그램에 대한 올바른 권한을 설정하는 가장 쉬운 방법은 다음을 활성화하는 것입니다.
--enable-sudo 수행할 때 플래그 waf 구성.
우리는 두 가지 모두에 대해 비슷한 일을 합니다. 에뮤 그리고 가볍게 두드리다 장치. 높은 수준의 견해는 다음과 같습니다.
전에, 파일설명자 생성 메소드는 로컬 프로세스 간(Unix) 소켓, 포크 및
작은 생성 프로그램을 실행합니다. suid 루트로 실행되는 작은 프로그램은
원시 소켓을 생성하고 Unix 소켓을 통해 원시 소켓 파일 설명자를 다시 보냅니다.
매개변수로 전달됩니다. 원시 소켓은 제어 메시지로 전달됩니다(때때로
보조 데이터라고 함) 유형 SCM_RIGHTS.
도우미
EmuFdNetDeviceHelper
EmuFdNetDeviceHelper는 기본 물리적 장치에 대한 원시 소켓을 생성하고
FdNetDevice에 소켓 설명자를 제공합니다. 이를 통해 NS-3 시뮬레이션
호스트의 네트워크 장치에서 프레임을 읽고 씁니다.
에뮬레이션 도우미를 사용하면 시뮬레이션된 내용을 투명하게 통합할 수 있습니다. NS-3 노드를
실제 노드로 구성된 네트워크.
+---------+ +------------+
| 호스트 1 | | 호스트 2 |
+---------+ +------------+
| ns-3 시뮬레이션 | | |
+---------+ | 리눅스 |
| ns-3 노드 | | 네트워크 스택 |
| +----------------+ | | +----------------+ |
| | ns-3 TCP | | | | TCP | |
| +----------------+ | | +----------------+ |
| | NS-3 IP | | | | IP | |
| +----------------+ | | +----------------+ |
| | FdNet장치 | | | | | |
| | 10.1.1.1 | | | | | |
| +----------------+ | | + 이더넷 + |
| | 원시 소켓 | | | | | |
|--+----------------+--| | +----------------+ |
| | eth0 | | | | eth0 | |
+---------+------+-------+ +---------+------+-------+
10.1.1.11 10.1.1.12
| |
+---------------+
이 도우미는 EmuNet장치 발견 된 NS-3 ns-3.17 이전,
이러한 유형의 장치를 FdNetDevice의 공통 프레임워크로 가져옵니다. 그만큼
EmuNet장치 이 새로운 도우미를 위해 더 이상 사용되지 않습니다.
장치는 시뮬레이션 네트워크 트래픽을 분리하기 위해 MAC 스푸핑을 수행하도록 구성되었습니다.
호스트로 들어오고 나가는 다른 네트워크 트래픽에서.
시뮬레이션이 실행되는 호스트가 있는 테스트베드 상황에서 이 도우미를 사용할 수 있습니다.
running에는 테스트베드 하드웨어를 구동하는 관심 있는 특정 인터페이스가 있습니다. 당신은
또한 이 특정 인터페이스를 무차별 모드로 설정하고 적절한 인터페이스를 제공해야 합니다.
장치 이름을 NS-3 시뮬레이션. 또한 세분화의 하드웨어 오프로딩 및
체크섬을 비활성화해야 합니다.
도우미는 기본 인터페이스가 작동 중이고 무차별 모드인 경우에만 작동합니다. 패킷
장치를 통해 전송되지만 우리는 MAC 스푸핑을 사용합니다. MAC 주소는 다음과 같습니다.
기본적으로 OUI(조직 고유 식별자) 00:00:00을 사용하여 생성됩니다.
베이스. 이 공급업체 코드는 어떤 조직에도 할당되지 않았으므로 다음과 충돌해서는 안 됩니다.
실제 하드웨어.
이러한 MAC 주소를 컴퓨터에서 사용해도 괜찮은지 결정하는 것은 항상 사용자의 몫입니다.
네트워크를 사용하는 다른 시뮬레이션을 포함하여 다른 것과 충돌하지 않습니다.
장치)를 네트워크에 연결하세요. 에뮬레이트된 FdNetDevice 구성을 사용하는 경우
별도의 시뮬레이션을 수행하려면 전역 MAC 주소 할당 문제를 고려하고
MAC 주소는 모든 시뮬레이션에서 고유합니다. 에뮬레이트된 네트 장치는
MAC 주소는 주소 속성을 사용하여 이 작업을 수동으로 수행할 수 있습니다. 더 큰 경우
시뮬레이션에서는 MAC 주소 할당 기능에서 OUI를 설정할 수 있습니다.
를 호출하기 전에 설치 방법을 사용하려면 올바른 장치 이름을 구성해야 합니다.
도우미를 사용하는 장치 이름 설정 방법. 어떤 장치인지 식별하려면 장치 이름이 필요합니다.
원시 소켓을 열려면 물리적 장치를 사용해야 합니다.
EmuFdNetDeviceHelper 에뮤;
emu.SetDeviceName(장치 이름);
NetDeviceContainer 장치 = emu.Install(노드);
Ptr 장치 = devices.Get (0);
device->SetAttribute ("Address", Mac48AddressValue (Mac48Address::Allocate ()));
TapFdNetDeviceHelper
Tap 장치는 장치의 한쪽 끝이 보이는 특별한 유형의 Linux 장치입니다.
커널은 가상 net_device로 제공되고 다른 쪽 끝은 파일 설명자로 제공됩니다.
사용자 공간. 이 파일 설명자는 FdNetDevice에 전달될 수 있습니다. 다음으로 전달된 패킷
커널에 의한 TAP 장치는 FdNetDevice에 표시됩니다. NS-3.
사용자는 이러한 TAP 장치의 사용법이
TapBridge NetDevice가 다음에서 발견되었습니다. src/탭 브리지. 이 도우미의 모델은 다음과 같습니다.
+-------------------------+
| 호스트 |
+-------------------------+
| ns-3 시뮬레이션 | |
+---------+ |
| ns-3 노드 | |
| +----------------+ | |
| | ns-3 TCP | | |
| +----------------+ | |
| | NS-3 IP | | |
| +----------------+ | |
| | FdNet장치 | | |
|--+---+--+ +------+ |
| | 탭 | | eth0 | |
| +------+ +------+ |
| 192.168.0.1 | |
+------------------|-----+
|
|
------------ (인터넷) -----
위의 구성에서는 호스트가 트래픽을 전달할 수 있어야 합니다.
시뮬레이션을 통해 인터넷에 생성됩니다.
TapBridge(다른 모듈)의 모델은 다음과 같습니다.
+---------+
| 리눅스 |
| 호스트 | +----------+
| ------ | | 유령 |
| 앱 | | 노드 |
| ------ | | -------- |
| 스택 | | IP | +----------+
| ------ | | 스택 | | 노드 |
| 탭 | |==========| | -------- |
| 장치 | | 탭 | | IP |
+---------+ | 다리 | | 스택 |
| -------- | | -------- |
| NS-3 | | NS-3 |
| 그물 | | 그물 |
| 장치 | | 장치 |
+----------+ +----------+
|| ||
+---------------+
| ns-3 채널 |
+---------------+
위의 경우 패킷은 대신 통과합니다. NS-3 NetDevice 및 채널.
이 예의 사용 패턴은 사용자가 MAC 주소를 설정하는 것입니다.
둘 다) 장치의 IPv4 및 IPv6 주소와 마스크, 필요한 경우 PI 헤더.
예 :
TapFdNetDeviceHelper 도우미;
helper.SetDeviceName(장치 이름);
helper.SetModePi(modePi);
helper.SetTapIpv4Address(tapIp);
helper.SetTapIpv4Mask(tapMask);
...
helper.Install (노드);
PlanetLabFdNetDeviceHelper
PlanetLab은
인터넷. PlanetLab 노드에서 ns-3 시뮬레이션 실행
PlanetLabFdNetDeviceHelper를 사용하면 ns-3에서 생성된 시뮬레이션된 트래픽을 직접
인터넷. 이 설정은 ns-3 인터넷 프로토콜 또는 기타 향후 유효성을 검사하는 데 유용할 수 있습니다.
ns-3에 구현된 프로토콜.
PlanetLab 노드를 사용하여 실험을 실행하려면 PlanetLab 계정이 필요합니다. 오직
PlanetLab 파트너 기관의 회원은 그러한 계정을 얻을 수 있습니다(자세한 내용은
방문 http://www.planet-lab.org/ or http://www.planet-lab.eu ). 일단 계정은
PlanetLab을 획득했습니다. 일부분 실험을 수행하려면 요청해야 합니다. 슬라이스
PlanetLab 사용자 그룹과 관련된 실험 단위를 나타내며 연결될 수 있습니다.
다른 PlanetLab 노드의 가상 머신에. 슬라이스를 추가하여 사용자 정의할 수도 있습니다.
구성 태그를 지정합니다(PlanetLab 관리자가 수행함).
PlanetLabFdNetDeviceHelper는 특정 기술을 사용하여 PlanetLab 노드에 TAP 장치를 생성합니다.
PlanetLab 메커니즘(예: vsys 시스템)은 TAP 장치를
ns-3의 FdNetDevice. 이 도우미가 제공하는 기능은 다음과 유사합니다.
FdTapNetDeviceHelper에서 제공합니다. 단, 기본 메커니즘은
TAP 장치는 다릅니다.
+-------------------------+
| PlanetLab 호스트 |
+-------------------------+
| ns-3 시뮬레이션 | |
+---------+ |
| ns-3 노드 | |
| +----------------+ | |
| | ns-3 TCP | | |
| +----------------+ | |
| | NS-3 IP | | |
| +----------------+ | |
| | FdNet장치 | | |
|--+---+--+ +------+ |
| | 탭 | | eth0 | |
| +------+ +------+ |
| 192.168.0.1 | |
+------------------|-----+
|
|
------------ (인터넷) -----
TAP 장치에 개인 IPv4 주소를 할당하려면 계정 소유자가
요청해야 한다 vsys_vnet PlanetLab 관리자가 슬라이스에 태그를 추가합니다.
vsys_vnet 태그는 개인 네트워크 세그먼트와 연결되어 있으며 이 세그먼트의 주소만
세그먼트를 실험에 사용할 수 있습니다.
이 도우미를 사용하여 TAP 장치를 만드는 데 사용되는 구문은 다음과 유사합니다.
이전에 설명한 도우미:
PlanetLabFdNetDeviceHelper 도우미;
helper.SetTapIpAddress(tapIp);
helper.SetTapMask(tapMask);
...
helper.Install (노드);
PlanetLab 노드에는 Fedora 기반 배포판이 있으므로 다음과 같이 ns-3을 설치할 수 있습니다.
ns-3 Linux 설치 지침.
Attributes
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 FdNet장치 다음과 같은 다양한 속성을 제공합니다.
· 주소: 장치의 MAC 주소
· 스타트: 장치 스레드를 스핀업하는 시뮬레이션 시작 시간
· 중지: 장치 스레드를 중지하는 시뮬레이션 시작 시간
· 캡슐화 모드: 링크 레이어 캡슐화 형식
·
수신 대기열 크기: 이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 버퍼 크기 of 전에, 읽기 변발 on 전에, 파일 설명자
스레드(기본값: 1000패킷)
스타트 and 중지 사용자가 제한을 원하지 않는 한 일반적으로 지정할 필요가 없습니다.
이 장치가 활성화된 시간입니다. 주소 일종의 고유한 설정이 필요합니다.
시뮬레이션이 다음을 사용하여 다른 실제 장치와 상호 작용하는 경우 MAC 주소
실제 MAC 주소. 일반적인 코드:
device->SetAttribute ("Address", Mac48AddressValue (Mac48Address::Allocate ()));
산출
Ascii 및 PCAP 추적은 다른 추적과 유사하게 제공됩니다. NS-3 NetDevice 유형을 통해
다음과 같은 도우미:
:: EmuFdNetDeviceHelper 에뮤; NetDeviceContainer 장치 = emu.Install(노드);
emu.EnablePcap("emu-ping", 장치, true);
Mac 수준 NetDevice 추적 소스의 표준 세트가 제공됩니다.
· 최대Tx: 추적 소스가 다음과 같은 경우에 트리거되었습니다. NS-3 전송할 새 프레임을 장치에 제공합니다.
· 최대Tx드롭: 파일 설명자에 쓰기가 실패하면 소스 추적
· MaxPromiscRx: 유효한 Mac 프레임이 수신될 때마다
· 최대Rx: 이 장치에 대해 유효한 Mac 프레임이 수신될 때마다
· 손수건: 무차별적인 패킷 스니퍼
· PromiscSniffer: 무차별 패킷 스니퍼(tcpdump와 유사한 추적용)
예
몇 가지 예가 제공됩니다.
· 더미 네트워크 .cc: 이 간단한 예는 두 개의 노드를 생성하고 이를 하나의 노드로 상호 연결합니다.
소켓 쌍의 파일 설명자를 FdNetDevice로 전달하여 Unix 파이프
각 노드의 객체.
· 실시간-dummy-network.cc: dummy-network.cc와 동일하지만 실시간 시뮬레이터를 사용합니다.
기본 구현 대신 구현.
· fd2fd-onoff.cc: 이 예제는 FdNetDevice의 처리량을 측정하는 것을 목표로 합니다.
순수한 시뮬레이션. 이를 위해 두 개의 FdNetDevices가 서로 다른 노드에 연결되어 있지만
동일한 시뮬레이션은 소켓 쌍을 사용하여 연결됩니다. TCP 트래픽은 다음과 같은 시간에 전송됩니다.
포화 데이터 속도.
· fd-emu-onoff.cc: 이 예제는 FdNetDevice의 처리량을 측정하는 것을 목표로 합니다.
EmuFdNetDeviceHelper를 사용하여 시뮬레이션된 장치를 실제 장치에 연결할 때
호스트 머신. 이는 채널을 TCP 트래픽으로 포화시킴으로써 달성됩니다.
· fd-emu-ping.cc: 이 예에서는 EmuFdNetDeviceHelper를 사용하여 ICMP 트래픽을
실제 채널.
· fd-emu-udp-echo.cc: 이 예에서는 EmuFdNetDeviceHelper를 사용하여 UDP 트래픽을 전송합니다.
실제 채널.
· fd-planetlab-ping.cc: 이 예에서는 ICMP를 전송하도록 실험을 설정하는 방법을 보여줍니다.
PlanetLab 노드에서 인터넷으로의 트래픽.
· fd-tap-ping.cc: 이 예에서는 TapFdNetDeviceHelper를 사용하여 ICMP 트래픽을
실제 채널.
가볍게 두드리다 NetDevice
Tap NetDevice를 사용하면 호스트 시스템이나 가상 머신이 상호 작용할 수 있습니다.
시뮬레이션.
탭브리지 모델 살펴보기
Tap Bridge는 "실제" 인터넷 호스트(더 정확하게는 호스트)를 통합하도록 설계되었습니다.
Tun/Tap 장치를 지원하는 장치)를 ns-3 시뮬레이션으로 변환합니다. 목표는 그것을 사람에게 보이게 만드는 것입니다.
ns-3 네트 장치를 로컬 장치로 가지고 있다는 점에서 "실제" 호스트 노드입니다. 의 개념
"실제 호스트"는 실제로 다음을 사용하여 가상화될 수 있으므로 약간 미끄럽습니다.
VMware, VirtualBox 또는 OpenVZ와 같은 쉽게 사용할 수 있는 기술.
본질적으로 우리는 ns-3 네트 장치의 입력과 출력을
Linux Tap net 장치의 입력 및 출력을 우리는 Tap Bridge라고 부릅니다.
이 장치에는 사용자가 사용할 수 있는 세 가지 기본 작동 모드가 있습니다. 기초적인
기능은 기본적으로 동일하지만 세부적인 모드는 다릅니다.
합의가 어떻게 생성되고 구성되는지; 어떤 장치가 어느 쪽에 존재할 수 있는지
다리.
우리는 이 세 가지 모드를 ConfigureLocal, UseLocal 및 UseBridge 모드라고 부릅니다. 첫번째
Camel Case 모드 식별자의 "단어"는 생성 책임이 있는 사람을 나타냅니다.
탭을 구성합니다. 예를 들어, ConfigureLocal 모드의 "구성"은 다음을 나타냅니다.
탭 구성을 담당하는 것은 TapBridge입니다. 사용중로컬
모드 및 UseBridge 모드에서 "사용" 접두어는 TapBridge에 "사용"을 요청함을 나타냅니다.
기존 구성.
즉, ConfigureLocal 모드에서는 TapBridge가 생성을 담당합니다.
그리고 TAP 장치를 구성합니다. UseBridge 또는 UseLocal 모드에서 사용자는
구성하면 TapBridge가 해당 구성에 맞춰집니다.
탭브리지 로컬 구성 모드
ConfigureLocal 모드에서 탭 장치의 구성은 ns-3입니다.
구성 중심. 구성 정보는 ns-3의 장치에서 가져옵니다.
시뮬레이션 및 ns-3 속성과 일치하는 탭 장치가 자동으로 생성됩니다. ~ 안에
이 경우 Linux 컴퓨터는 마치 Linux 컴퓨터에 직접 연결되어 있는 것처럼 보입니다.
시뮬레이션된 ns-3 네트워크.
이는 아래에 설명되어 있습니다.
+---------+
| 리눅스 |
| 호스트 | +----------+
| ------ | | 유령 |
| 앱 | | 노드 |
| ------ | | -------- |
| 스택 | | IP | +----------+
| ------ | | 스택 | | 노드 |
| 탭 | |==========| | -------- |
| 장치 | | 탭 | | IP |
+---------+ | 다리 | | 스택 |
| -------- | | -------- |
| NS-3 | | NS-3 |
| 그물 | | 그물 |
| 장치 | | 장치 |
+----------+ +----------+
|| ||
+---------------+
| ns-3 채널 |
+---------------+
이 경우 "고스트 노드"의 "ns-3 net device"가 실제로 존재하는 것처럼 나타납니다.
Linux 호스트에서 TAP 장치를 교체합니다. ns-3 시뮬레이션은 다음에 TAP 장치를 생성합니다.
기본 Linux OS를 사용하고 TAP 장치의 IP 및 MAC 주소를 일치하도록 구성합니다.
시뮬레이션된 ns-3 네트 장치에 할당된 값입니다. 위에 표시된 "IPC" 링크는
기본 OS의 네트워크 탭 메커니즘. 전체 배열은 기존 방식으로 작동합니다.
다리; 그러나 동일한 공유 MAC 및 IP를 가진 장치 간의 브리지
구애.
여기서 사용자는 특정 구성 정보를 제공할 필요가 없습니다.
수도꼭지. 탭 장치는 기본값에 따라 ns-3에 의해 생성 및 구성됩니다.
탭 장치에는 기본 운영 체제에 따라 이름이 할당됩니다.
기본값입니다.
사용자가 생성된 탭 장치에 액세스해야 하는 경우 선택적으로 다음을 수행할 수 있습니다.
"DeviceName" 속성을 제공합니다. 이 경우 생성된 OS 탭 장치의 이름은 다음과 같습니다.
따라서.
ConfigureLocal 모드는 Tap Bridge의 기본 작동 모드입니다.
탭브리지 로컬 사용 모드
UseLocal 모드는 ConfigureLocal 모드와 매우 유사합니다. 중요한 차이점
모드 이름에서 알 수 있듯이 TapBridge는 기존 탭 장치를 "사용"합니다.
사용자가 이전에 생성하고 구성한 것입니다. 이 모드는 다음과 같은 경우에 특히 유용합니다.
가상화 방식은 탭 장치를 자동으로 생성하고 ns-3을 사용하여
해당 장치에 대한 시뮬레이션된 네트워크.
+---------+
| 리눅스 |
| 호스트 | +----------+
| ------ | | 유령 |
| 앱 | | 노드 |
| ------ | | -------- |
| 스택 | | IP | +----------+
| ------ | | 스택 | | 노드 |
| 탭 | |==========| | -------- |
| 장치 | | 탭 | | IP |
| 맥 엑스 | | 다리 | | 스택 |
+---------+ | -------- | | -------- |
| NS-3 | | NS-3 |
| 그물 | | 그물 |
| 장치 | | 장치 |
| 맥 Y | | 맥 Z |
+----------+ +----------+
|| ||
+---------------+
| ns-3 채널 |
+---------------+
이 경우 "탭 장치"(MAC X)의 사전 구성된 MAC 주소는
위 그림에 표시된 브리지된 "ns-3 net device"(MAC Y)와 동일합니다. ~ 안에
SendFrom()을 지원하지 않는 ns-3 net 장치(특히 무선 장치)에 연결하려면
STA 노드)에는 하나의 Linux 장치(하나의 고유 MAC 주소 포함)만 필요합니다.
-- 여기서 X)는 IPC 링크를 통해 흐르는 트래픽을 생성합니다. 그 이유는 MAC
IPC 링크를 통한 트래픽 주소는 "스푸핑"되거나 변경되어 다음과 같은 것처럼 보이게 됩니다.
Linux와 ns-3의 주소는 동일합니다. 즉, Linux에서 이동하는 트래픽입니다.
ns-3 고스트 노드에 대한 호스트의 MAC 주소는 X에서 Y로 변경되고 트래픽은 X에서 Y로 변경됩니다.
Linux 호스트에 대한 고스트 노드의 MAC 주소는 Y에서 X로 변경됩니다.
장치 간에 일대일 대응이 있으므로 MAC 소스는 하나만 있을 수 있습니다.
Linux 쪽에서 흘러나옵니다. 이는 Linux가 둘 이상의 넷 장치와 연결됨을 의미합니다.
추가된 항목은 UseLocal 모드와 호환되지 않습니다.
UseLocal 모드에서 사용자는 탭 장치를 완전히 생성하고 구성해야 합니다.
다음과 같은 것을 사용하여 ns-3 시뮬레이션 범위를 벗어납니다.
$ sudo tunctl -t tap0
$ sudo ifconfig tap0 hw 에테르 08:00:2e:00:00:01
$ sudo ifconfig tap0 10.1.1.1 넷마스크 255.255.255.0 위로
TapBridge에 무슨 일이 일어나고 있는지 알리기 위해 사용자는 다음 중 하나를 직접 설정합니다.
TapBridge 또는 TapBridgeHelper, "DeviceName" 속성을 통해. 의 경우
위의 구성에서 "DeviceName" 속성은 "tap0"으로 설정되고 "Mode"는
속성은 "UseLocal"로 설정됩니다.
이 모드의 특정 사용 사례 중 하나는 OpenVZ 환경입니다. 거기는 가능해요
"하드웨어 노드"에 Tap 장치를 생성하고 이를 가상 사설 서버로 이동합니다.
TapBridge가 기존 탭 장치를 사용할 수 있는 경우 다음을 피할 수 있습니다.
해당 환경의 OS 브리지 오버헤드.
탭브리지 UseBridge 모드
Linux 네트워킹에 익숙한 사용자를 위한 가장 간단한 모드는 UseBridge 모드입니다. 다시,
"사용" 접두사는 TapBridge가 기존 구성을 사용할 것임을 나타냅니다.
이 경우 TapBridge는 Linux 브리지를 논리적으로 ns-3으로 확장합니다.
이는 아래에 설명되어 있습니다.
+---------+
| 리눅스 | +----------+
| ------- | | 유령 |
| 앱 | | 노드 |
| ------- | | -------- |
| 스택 | | IP | +----------+
| ------- | +---------+ | 스택 | | 노드 |
| 가상 | | 탭 | |==========| | -------- |
| 장치 | | 장치 | | 탭 | | IP |
+---------+ +---------+ | 다리 | | 스택 |
|| || | -------- | | -------- |
+---------+ | NS-3 | | NS-3 |
| OS(brctl) 브리지 | | 그물 | | 그물 |
+---------+ | 장치 | | 장치 |
+----------+ +----------+
|| ||
+---------------+
| ns-3 채널 |
+---------------+
이 경우 Linux 애플리케이션, 프로토콜 등을 실행하는 컴퓨터는
TAP가 Linux 호스트에 표시되도록 하는 방식으로 ns-3 시뮬레이션 네트워크
장치는 Linux 브리지에 참여하는 실제 네트워크 장치입니다.
ns-3 시뮬레이션에서는 각 TAP 장치와 일치하도록 TapBridge가 생성됩니다. 이름은
TAP 장치는 "DeviceName" 속성을 사용하여 Tap Bridge에 할당됩니다. 탭브리지
그런 다음 OS 브리지를 논리적으로 확장하여 ns-3 네트워크 장치를 포함합니다.
이 모드는 OS 브리지를 논리적으로 확장하므로 시스템에 많은 Linux 넷 장치가 있을 수 있습니다.
브리지의 ns-3이 아닌 쪽. 따라서 모든 브리지의 넷 장치와 마찬가지로 ns-3 넷은
장치는 가능한 많은 소스 주소를 처리해야 합니다. 따라서 ns-3 장치는 다음과 같아야 합니다.
SendFrom()을 지원하려면(NetDevice::SupportsSendFrom()이 true를 반환해야 함)
UseBridge 모드에서 사용하도록 구성되었습니다.
사용자는 브리지를 구성하기 위해 다음과 같은 작업을 수행할 것으로 예상됩니다.
ns-3 외부를 완전히 탭합니다.
$ sudo brctl addbr mybridge
$ sudo tunctl -t mytap
$ sudo ifconfig mytap hw ether 00:00:00:00:00:01
$ sudo ifconfig mytap 0.0.0.0 위로
$ sudo brctl addif mybridge mytap
$ sudo brctl addif mybridge ...
$ sudo ifconfig mybridge 10.1.1.1 넷마스크 255.255.255.0 위로
TapBridge에 무슨 일이 일어나고 있는지 알리기 위해 사용자는 다음 중 하나를 직접 설정합니다.
TapBridge 또는 TapBridgeHelper, "DeviceName" 속성을 통해. 의 경우
위의 구성에서 "DeviceName" 속성은 "mytap"으로 설정되고 "Mode"는
속성은 "UseBridge"로 설정됩니다.
이 모드는 다음을 구성하는 가상화의 경우 특히 유용합니다.
가상 호스트는 다른 시스템에 의해 지정될 수 있으며 ns-3에 맞게 변경할 수 없습니다.
예를 들어, 특정 VM 구성표는 가상 "vethx" 또는 "vmnetx" 장치를 생성할 수 있습니다.
가상 호스트에는 로컬로 나타납니다. 이러한 시스템에 연결하려면 다음이 필요합니다.
호스트 시스템에 TAP 장치를 수동으로 생성하고 이러한 TAP 장치를
기존(VM) 가상 장치. 이 경우 Tap Bridge의 역할은
ns-3 네트워크 장치에 연결하기 위한 브리지입니다.
탭브리지 로컬 구성 조작
ConfigureLocal 모드에서는 TapBridge 및 관련 ns-3 넷 장치가 나타납니다.
임의의 "eth0" 또는 "ath0"과 마찬가지로 Linux 호스트 컴퓨터에 네트워크 장치로
나타날 수도 있습니다. TAP 장치의 생성 및 구성은 ns-3에 의해 수행됩니다.
시뮬레이션이 가능하며 사용자가 수동으로 구성할 필요가 없습니다. IP 주소, MAC
생성된 TAP 장치의 주소, 게이트웨이 등을 시뮬레이션에서 추출합니다.
ns-3 장치의 구성과 TapBridge 속성을 쿼리하여 자체적으로 확인합니다.
MAC 주소는 Linux 측과 ns-3 측에서 동일하므로 다음을 사용할 수 있습니다.
모든 ns-3 네트워크 장치에서 사용할 수 있는 ns-3 장치의 Send()입니다. 맥 이후로
주소가 동일하므로 무차별 콜백을 연결할 필요가 없습니다.
받는 쪽. 따라서 네트워크 장치의 종류에는 제한이 없습니다.
ConfigureLocal 모드에서 사용할 수 있습니다.
TapBridge는 ns-3 시뮬레이션에서 채널 없는 네트 장치로 나타납니다. 이 기기
연결된 IP 주소가 없어야 하지만 브리지(ns-3) 네트 장치는 다음과 같아야 합니다.
IP 주소를 가지고 있습니다. 이는 ns-3 BridgeNetDevice(또는
일반적으로 기존 브리지) 브리지 포트에 IP 주소가 없어야 함
하지만 브리지 장치 자체가 IP 주소를 가질 수 있도록 허용합니다.
호스트 컴퓨터는 시뮬레이션에서 다음을 포함하는 "유령" 노드로 나타납니다.
브리지되는 각 NetDevice에 대한 TapBridge입니다. 시뮬레이션의 관점에서 보면,
고스트 노드와 다른 노드의 유일한 차이점은
TapBridge 장치. 그러나 TapBridge의 존재는
고스트 노드의 IP 스택에 대한 네트 장치의 연결성입니다.
주소 정보 및 ns-3 장치의 구성은 다음과 같은 경우에도 변경되지 않습니다.
TapBridge가 있습니다. TapBridge는 ns-3에서 주소 지정 정보를 선택합니다.
연결된 네트 장치("브리지된" 네트 장치) 및 해당 정보를 사용하여
실제 호스트에서 TAP 장치를 생성하고 구성합니다.
이것의 최종 결과는 예를 들어 표준 핑을 사용할 수 있는 상황입니다.
시뮬레이션된 ns-3 노드를 ping하기 위한 실제 호스트의 유틸리티입니다. 올바른 경로가 추가된 경우
인터넷 호스트(향후 ns-3 릴리스에서는 자동으로 수행될 예정)
ns-3의 라우팅 시스템은 시뮬레이션된 ns-3에서 패킷의 올바른 라우팅을 가능하게 합니다.
네트워크. 이에 대한 예는 다음의 예제 프로그램 tap-wifi-dumbbell.cc를 참조하세요.
ns-3 배포.
Tap Bridge는 Linux 호스트와 ns-3 사이의 일종의 회색 세계에 살고 있습니다.
브리지 장치. Linux 관점에서 이 코드는 다음의 사용자 모드 핸들러로 나타납니다.
TAP 넷 장치. ConfigureLocal 모드에서 이 Tap 장치는 자동으로 생성됩니다.
ns-3 시뮬레이션. Linux 호스트가 자동으로 생성된 이들 중 하나에 쓸 때
/dev/tap 장치, 쓰기는 ns-3 세계에 있는 TapBridge로 리디렉션됩니다.
이러한 관점에서 볼 때 Linux에서의 패킷 쓰기는 Tap에서 패킷 읽기가 됩니다.
다리. 즉, Linux 프로세스는 탭 장치에 패킷을 쓰고 이 패킷은
네트워크 탭 메커니즘에 의해 ns-3 프로세스로 리디렉션되어
읽기 작업의 결과로 TapBridge가 나타납니다. 그런 다음 TapBridge는 패킷을 다음 위치에 씁니다.
브리지되는 ns-3 네트 장치; 따라서 Linux 호스트가
ns-3 네트워크 장치를 통해 ns-3 네트워크로 직접 패킷을 보냈습니다.
반대 방향으로는 Tap에 연결된 ns-3 net 장치에서 패킷을 수신합니다.
Bridge는 수신 콜백을 통해 TapBridge로 전송됩니다. 그런 다음 TapBridge가 이를 수행합니다.
네트워크 탭 메커니즘을 사용하여 패킷을 호스트에 다시 씁니다. 이 글은
장치는 마치 패킷이 네트워크 장치에 도착한 것처럼 Linux 호스트에 나타납니다. 그리고
따라서 시뮬레이션 중에 ns-3 net 장치에서 수신한 패킷이 나타난 것처럼 보입니다.
실제 Linux 넷 장치에서.
결과적으로 Tap Bridge는 Linux 호스트의 탭 장치를 연결하는 것처럼 보입니다.
시뮬레이션에서 ns-3 net 장치에 "실제 세계"를 적용합니다. 왜냐하면 TAP 장치와
브리지된 ns-3 네트워크 장치는 동일한 MAC 주소를 가지며 네트워크 탭 IPC 링크는 그렇지 않습니다.
외부화되면 이 특별한 종류의 브리지는 ns-3 넷 장치가
실제로 Linux 호스트에 설치되었습니다.
이를 ns-3 측에서 구현하려면 시뮬레이션에 "고스트 노드"가 필요합니다.
브리지된 ns-3 네트워크 장치와 TapBridge를 잡습니다. 이 노드는 실제로는 수행하면 안 됩니다.
그 역할은 단순히 네트 장치를
리눅스. 이는 단지 임의적인 정책이 아닙니다. 그 이유는 다음과 같습니다.
· 고스트 노드의 상위 계층에서 TapBridge로 전송된 비트(TapBridge 사용)
전송 방법)은 완전히 무시됩니다. TapBridge 자체는 어떤 장치에도 연결되어 있지 않습니다.
Linux나 ns-3에서는 네트워크가 아닙니다. 절대로 데이터를 보내거나 받을 수 없습니다.
고스트 노드의 TapBridge.
· 브리지된 ns-3 네트 장치에는 ns-3 노드와의 연결이 끊긴 수신 콜백이 있으며
탭 브리지에 다시 연결되었습니다. 그러면 브리지된 장치에서 수신한 모든 데이터가 전송됩니다.
Linux 호스트로 전송되며 노드에서 수신되지 않습니다. 의 관점에서 보면
고스트 노드의 경우 이 장치를 통해 보낼 수는 있지만 받을 수는 없습니다.
물론, 모든 문제를 이해한다면 자신의 운명을 통제할 수 있습니다.
원하는 것은 무엇이든 할 수 있습니다. 우리는 귀하가 고스트 노드를 사용하는 것을 적극적으로 막지는 않습니다.
무엇이든 당신이 결정합니다. 고스트에서 일반적인 ns-3 작업을 수행할 수 있습니다.
원한다면 노드를 사용하세요. 예를 들어, 인터넷 스택이 있어야 하고 작동 중이어야 합니다.
IP 주소 할당 및 글로벌 라우팅에 참여하기 위해 해당 노드를 사용합니다. 하지만,
위에서 언급한 것처럼 모든 TapBridge 또는 관련 브리지 네트워크 장치와 통신하는 인터페이스
완전히 작동하지 않습니다. 자신이 하고 있는 일을 정확히 이해했다면 다음을 설정할 수 있습니다.
고스트 노드의 다른 인터페이스 및 장치를 사용합니다. 또는 이점을 활용하세요.
트래픽 생성기를 생성하기 위해 브리지 장치의 작동 송신 측을 사용합니다. 우리는 일반적으로
이 노드를 Linux 호스트의 유령으로 처리하고 그대로 두는 것이 좋습니다.
그래도.
탭브리지 로컬 사용 모드 조작
위에서 설명한 대로 TapBridge는 "실제" 세계를 현실 세계로 연결하는 다리 역할을 합니다.
시뮬레이션된 ns-3 세계. ConfigureLocal 모드의 경우 IP가 있으므로 생활이 쉽습니다.
Tap 장치의 주소는 ns-3 장치의 IP 주소 및 Tap 장치의 MAC 주소와 일치합니다.
Tap 장치는 ns-3 장치의 MAC 주소와 일치합니다. 그리고 XNUMX대XNUMX이 있어요
장치 간의 관계.
Tap 장치가 외부적으로 구성되면 상황이 약간 복잡해집니다.
ns-3 네트워크 장치와 다른 MAC 주소. 이를 처리하는 기존의 방법은
차이점은 브리지 장치에서 무차별 모드를 사용하여 패킷을 수신한다는 것입니다.
다른 MAC 주소로 향하고 이를 Linux로 전달합니다. 이동하기 위해서는
패킷을 다른 방법으로 전송하는 경우 기존 솔루션은 호출자가 다음을 수행할 수 있도록 하는 SendFrom()입니다.
"스푸핑"하거나 소스 MAC 주소를 다른 Linux MAC 주소와 일치하도록 변경하세요.
Linux 가상 머신을 브리지로 연결할 수 있으려면 특정 요구 사항이 있습니다.
무선 STA 노드. 불행하게도 802.11 사양은 이에 대한 좋은 방법을 제공하지 않습니다.
SendFrom()을 구현하므로 해당 문제를 해결해야 합니다.
이를 위해 Tap Bridge의 UseLocal 모드를 제공했습니다. 이 모드를 사용하면
단일 넷 장치로 브리지를 생성하는 것처럼 문제에 접근하십시오. 싱글
Linux 측에서 허용된 주소는 TapBridge에 기억되어 있으며, 들어오는 모든 패킷은
Linux 측에서는 ns-3 장치 MAC 소스를 사용하여 ns-3 측에서 반복됩니다.
주소. ns-3 측에서 들어오는 모든 패킷은 다음을 사용하여 Linux 측에서 반복됩니다.
기억된 MAC 주소. 이를 통해 ns-3 장치 측에서 Send()를 사용할 수 있습니다.
모든 ns-3 net 장치에서 사용할 수 있습니다.
UseLocal 모드는 생성 및 생성을 제외하고 ConfigureLocal 모드와 동일합니다.
탭 장치 구성 및 MAC 주소 스푸핑.
탭브리지 UseBridge 조작
ConfigureLocal 모드 섹션에 설명된 대로 Linux 호스트가 다음 중 하나에 쓸 때
/dev/tap 장치를 사용하면 쓰기가 ns-3 세계에 있는 TapBridge로 리디렉션됩니다.
UseBridge 모드의 경우 이러한 패킷은 ns-3에서 전송되어야 합니다.
마치 Linux 브리지에 참여하는 장치에서 전송된 것처럼 네트워크에 연결됩니다. 이는 다음을 의미합니다.
브리지된 장치에서 SendFrom() 메서드를 호출하고 소스 MAC 주소를 제공합니다.
패킷에서 발견되었습니다.
다른 방향에서는 ns-3 네트 장치가 수신한 패킷이 콜백을 통해 연결됩니다.
탭브리지. 목표는 ns-3을 연결하는 것이므로 무차별 모드에서 수행해야 합니다.
net 장치를 TAP 장치가 속한 OS(brctl) 브리지에 연결합니다.
이러한 이유로 SendFrom()을 지원하고 연결 가능한 ns-3 네트워크 장치만
무차별 수신 콜백은 UseBridge 모드 TapBridge에 참여할 수 있습니다.
구성.
가볍게 두드리다 다리 채널 모델
Tap Bridge와 관련된 채널 모델이 없습니다. 사실 만들려는 의도는
실제 인터넷 호스트가 브리지된 네트워크의 채널에 연결된 것으로 보입니다.
장치.
가볍게 두드리다 다리 트레이싱 모델
대부분의 ns-3 장치와 달리 TapBridge는 표준 추적 소스를 제공하지 않습니다. 이것
브리지는 기본적으로 하나의 함수 호출에 해당하는 중개자이기 때문입니다.
브리지 장치. 브리지된 장치의 추적 후크는 다음과 같을 것으로 예상됩니다.
대부분의 사용자에게 충분하며,
사용 전에, 탭브리지
대부분의 사용자는 다음을 통해 TapBridge 장치와 상호 작용할 것으로 예상됩니다.
TapBridgeHelper. CSMA 또는 Wi-Fi와 같은 다른 도우미 클래스의 사용자는 다음을 수행해야 합니다.
그곳에서 사용되는 관용구에 익숙합니다.
에너지 뼈대
에너지 소비는 무선 장치 및 무선 네트워크 연구자에게 중요한 문제입니다.
노드나 전체 네트워크에서 에너지 소비를 조사해야 하는 경우가 많습니다.
ns-3에서 네트워크 시뮬레이션을 실행합니다. 에너지 소비를 지원하려면 ns-3이 필요합니다.
모델링. 또한, 연료전지, 에너지 소거 등의 개념이 대두되면서
이러한 신흥 효과를 통합하여 저전력 무선 장치에 실행 가능
기술을 시뮬레이션으로 구현하려면 다양한 에너지원을 모델링하기 위한 지원이 필요합니다.
ns-3. ns-3 에너지 프레임워크는 에너지 소비, 에너지원에 대한 기초를 제공합니다.
에너지 수확 모델링.
모델 상품 설명
에너지 프레임워크의 소스 코드는 현재 다음 위치에 있습니다. 소스/에너지.
디자인
ns-3 에너지 프레임워크는 에너지 소스, 장치 에너지 모델 및 3가지 부분으로 구성됩니다.
에너지 수확기. 프레임워크는 src/에너지/모델 폴더에 있습니다.
에너지 출처
에너지 소스는 각 노드의 전원 공급 장치를 나타냅니다. 노드는 하나 이상을 가질 수 있습니다
에너지원 및 각 에너지원은 여러 장치 에너지 모델에 연결될 수 있습니다.
에너지원을 장치 에너지 모델에 연결한다는 것은 해당 장치가
소스에서 전력을 끌어옵니다. 에너지 소스의 기본 기능은 다음과 같습니다.
노드의 장치에 대한 에너지입니다. 에너지원에서 에너지가 완전히 소모되면,
각 장치가 이 이벤트에 반응할 수 있도록 노드의 장치에 알립니다. 더 나아가,
각 노드는 남은 에너지 또는 에너지와 같은 정보를 얻기 위해 에너지 소스 개체에 액세스할 수 있습니다.
에너지 비율(배터리 수준). 이를 통해 에너지 인식 프로토콜을 구현할 수 있습니다.
ns-3에서.
배터리와 같은 광범위한 전원 공급 장치를 모델링하려면 에너지 소스가 필요합니다.
이러한 소모품의 특성을 포착할 수 있습니다. 중요한 2가지가 있습니다
실제 배터리와 관련된 특성 또는 효과:
율 생산 능력 효과
전류 소모가 정격 값보다 높을 때 배터리 수명 감소
배터리
회복 효과
배터리가 방전과 방전을 번갈아 수행할 때 배터리 수명이 늘어납니다.
유휴 상태.
속도 용량 효과를 통합하기 위해 에너지 소스는 다음에서 끌어오는 전류를 사용합니다.
동일한 노드에 있는 모든 장치를 사용하여 에너지 소비를 계산합니다. 게다가, 여러
에너지 수확기는 에너지를 보충하기 위해 에너지원에 연결할 수 있습니다.
에너지 소스는 동일한 시스템에 있는 모든 장치와 에너지 수확기를 주기적으로 폴링합니다.
총 전류 소모와 그에 따른 에너지 소비를 계산하는 노드입니다. 장치일 때
상태가 변경되면 해당 장치 에너지 모델이 에너지 소스에 이 사실을 알립니다.
변경되고 새로운 총 전류 소모량이 계산됩니다. 마찬가지로 모든 에너지 수확기는
업데이트는 연결된 에너지 소스에 대한 업데이트를 트리거합니다.
Energy Source 기본 클래스는 장치(장치 에너지 모델 개체) 목록을 유지하고
특정 에너지원을 사용하는 에너지 수확기(에너지 수확기 개체)
전원 공급 장치로. 에너지가 완전히 소모되면 에너지원은 모든 사람에게 이를 알립니다.
이 목록에 있는 장치. 그러면 각 장치는 다음을 기반으로 이 이벤트를 독립적으로 처리할 수 있습니다.
정전 시 따라야 할 바람직한 행동.
장치 에너지 모델
장치 에너지 모델은 노드에 설치된 장치의 에너지 소비 모델입니다.
이는 각 장치가 여러 개의 장치를 가지고 있다고 가정하는 상태 기반 모델로 설계되었습니다.
상태이며, 각 상태는 전력 소비 값과 연관되어 있습니다. 상태가 될 때마다
장치가 변경되면 해당 장치 에너지 모델이 에너지 소스에 다음 사항을 알립니다.
장치의 새로운 전류 소모. 그런 다음 에너지 소스는 새로운 총계를 계산합니다.
현재 소비량을 늘리고 남은 에너지를 업데이트합니다.
장치 에너지 모델은 한정된 수의 장치가 없는 장치에도 사용할 수 있습니다.
상태. 예를 들어, 전기 자동차에서는 모터의 전류 소비가 결정됩니다.
그 속도로. 차량의 속도는 일정 범위 내에서 연속적인 값을 가질 수 있으므로,
일련의 개별적인 작동 상태를 정의하는 것은 불가능합니다. 그러나 변환을 통해
속도 값을 전류로 직접 변환하더라도 동일한 장치 에너지 모델 API 세트는 여전히 가능합니다.
사용하십시오.
에너지 수확 자
에너지 하베스터는 환경으로부터 에너지를 수확하는 요소를 나타내며,
연결된 에너지원을 재충전합니다. 에너지 하베스터에는 다음이 포함됩니다.
실제 에너지 수확 장치(예: 태양광 패널)의 완전한 구현 및
환경(예: 태양 복사). 이는 에너지를 구현하는 데 있어서
수확기, 환경의 에너지 기여 및 추가 에너지
변환 효율과 같은 에너지 수확 장치의 요구 사항
장치의 내부 전력 소비를 공동으로 모델링해야 합니다.
WiFi 라디오 에너지 모델
WiFi 라디오 에너지 모델은 WiFi 넷 장치의 에너지 소비 모델입니다. 그것
Idle, CcaBusy, Tx, Rx 등 PHY 계층의 사용 가능한 각 상태에 대한 상태를 제공합니다.
채널 스위치, 절전. 이러한 각 상태는 다음의 값(암페어 단위)과 연관되어 있습니다.
현재 추첨(해당 속성 이름은 아래 참조). Wi-Fi 무선 에너지 모델
PHY 수신기는 모든 Wi-Fi PHY 상태에 대한 알림을 받기 위해 Wi-Fi PHY에 등록됩니다.
이행. 매 전환마다 이전 상태에서 소비된 에너지가 계산되어
남은 에너지를 업데이트하기 위해 에너지원에 알림이 전송됩니다.
Wifi Tx 전류 모델은 다음에서 현재 드로우를 계산할 수 있는 가능성을 제공합니다.
여러 사례에서 관찰된 바와 같이 공칭 tx 전력(dBm)의 함수로 전송 상태를 나타냅니다.
실험적 측정. 이를 위해 Wi-Fi 무선 에너지 모델 PHY 수신기는 다음과 같습니다.
현재 프레임을 전송하는 데 사용되는 공칭 tx 전력을 알리고 다음과 같은 것을 전달합니다.
Tx의 현재 그리기 업데이트를 담당하는 Wifi Tx 현재 모델에 대한 값
상태. 따라서 Wi-Fi 원격 스테이션이 연결되어 있어도 에너지 소비가 올바르게 계산됩니다.
Manager는 프레임 단위로 전력 제어를 수행합니다. 현재 선형 Wifi Tx 현재 모델은
tx 전류를 선형 함수로 계산하는 구현됨(매개변수에 따라)
사용자가 지정할 수 있는 공칭 tx 전력(dBm)입니다.
Wi-Fi 무선 에너지 모델은 호출되는 콜백을 지정할 수 있는 가능성을 제공합니다.
에너지원이 고갈되었을 때. Wi-Fi가 연결될 때 이러한 콜백이 지정되지 않은 경우
무선 에너지 모델 도우미는 장치에 모델을 설치하는 데 사용되며 콜백은
암시적으로 Wifi PHY가 SLEEP 모드로 전환되도록 만들어졌습니다(따라서 프레임이 없음).
이후 전송되거나 수신되지 않음) 에너지원이 고갈될 때. 마찬가지로,
에너지원이 재충전될 때 호출되는 콜백을 지정할 수 있습니다(이는
에너지 하베스터가 에너지원에 연결된 경우 발생할 수 있음). 만약 그런
Wi-Fi 무선 에너지 모델 도우미를 사용하여 설치하는 경우 콜백이 지정되지 않습니다.
장치의 모델에서는 Wifi PHY가 다음에서 재개되도록 콜백이 암시적으로 수행됩니다.
에너지원이 재충전되면 SLEEP 모드.
미래 작업
장치 에너지 모델의 경우 다른 PHY 계층 모델에 대한 지원을 포함할 계획입니다.
WiMAX와 같은 ns-3에서 제공되며, 다른 비
일반 센서 및 CPU와 같은 통신 장치. 에너지원의 경우, 우리는
슈퍼커패시터, 니켈메탈 등 새로운 유형의 에너지원을 포함할 계획
수소화물(Ni-MH) 배터리. 에너지 하베스터(Energy Harvester)를 위해 우리는 에너지
정의된 전력 수준에 따라 에너지원을 재충전하는 수확기
사용자 정의 가능한 실제 측정 데이터 세트.
참고자료
[1] ns-2 에너지 모델:
http://www.cubinlab.ee.unimelb.edu.au/~jrid/Docs/Manuel-NS2/node204.html
[2] H. Wu, S. Nabar 및 R. Poovendran. 네트워크 시뮬레이터 3을 위한 에너지 프레임워크
(ns-3).
[3] M. Handy 및 D. Timmermann. 정확한 모바일 무선 네트워크 시뮬레이션
비선형 배터리 효과 모델링. Proc에서 응용시뮬레이션 및 모델링의
(ASM), 2003.
[4] D. N. Rakhmatov 및 S. B. Vrudhula. 다음 용도로 사용되는 분석적 고급 배터리 모델
휴대용 전자 시스템의 에너지 관리. Proc에서 IEEE/ACM 국제의
컴퓨터 지원 설계 회의(ICCAD'01), 488-493페이지, 2001년 XNUMX월.
[5] D. N. Rakhmatov, S. B. Vrudhula 및 D. A. Wallach. 배터리 수명 예측
에너지 인식 컴퓨팅. Proc에서 2002년 저전력 국제 심포지엄
전자 및 디자인(ISLPED'02), 페이지 154-159, 2002.
[6] C. Tapparello, H. Ayatollahi 및 W. Heinzelman. 에너지 프레임워크 확장
네트워크 시뮬레이터 3(ns-3). ns-3(WNS3) 워크숍, 포스터 세션, 조지아주 애틀랜타,
미국. 2014년 XNUMX월
용법
ns-3 사용자가 일반적으로 에너지 프레임워크와 상호 작용하는 주요 방법은 다음과 같습니다.
도우미 API와 프레임워크의 공개적으로 표시되는 속성을 통해. 도우미
API는 다음에 정의되어 있습니다. src/에너지/helper/*.h.
에너지 프레임워크를 사용하려면 사용자는 노드에 에너지 소스를 설치해야 합니다.
관심 있는 네트워크 장치에 해당하는 장치 에너지 모델, 그리고
필요한 경우 하나 이상의 에너지 수확기. 에너지 소스(객체)는 다음과 같이 집계됩니다.
에너지 소스 도우미에 의한 각 노드. 노드당 여러 에너지원을 허용하기 위해,
소스 개체를 직접 집계하는 대신 에너지 소스 컨테이너를 집계합니다.
에너지 소스 개체는 장치 에너지 모델 및 에너지 수확기 개체 목록을 유지합니다.
소스를 전원 공급 장치로 사용합니다. 장치 에너지 모델 객체는
장치 에너지 모델 도우미에 의한 에너지 소스, 에너지 수확기 개체는
Energy Harvester Helper가 설치했습니다. 사용자는 장치 에너지 모델 개체에 액세스할 수 있습니다.
Energy Source 객체를 통해 개인의 에너지 소비 정보를 획득
장치. 또한 사용자는 에너지 수확기 개체에 액세스하여 수집할 수 있습니다.
현재 수확 가능한 전력과 수확된 총 에너지에 관한 정보
수확기.
예
예제 디렉토리, 소스/예제/에너지 and 예/에너지, 일부 기본 코드 포함
프레임워크를 설정하는 방법을 보여줍니다.
도우미
에너지 출처 돕는 사람
에너지 소스 개체에 대한 기본 도우미 클래스입니다. 이 도우미는 에너지 소스 개체를 집계합니다.
노드에. 이 클래스의 하위 구현은 실제 에너지 소스 객체를 생성합니다.
장치 에너지 모델 돕는 사람
장치 에너지 모델 개체에 대한 기본 도우미 클래스입니다. 이 도우미는 장치 에너지를 연결합니다.
객체를 에너지원 객체로 모델링합니다. 이 클래스의 하위 구현은
실제 장치 에너지 모델 개체입니다.
에너지 수확 돕는 사람
Energy Harvester 개체에 대한 기본 도우미 클래스입니다. 이 도우미는 Energy Harvester를 연결합니다.
에너지원 개체에 개체를 추가합니다. 이 클래스의 하위 구현은 실제
에너지 수확기 개체.
Attributes
속성은 에너지원, 장치 에너지 모델 및 에너지 수확기 간에 다릅니다.
구현에 대한 자세한 내용은 특정 하위 클래스를 참조하세요.
Basic 에너지 출처
· BasicEnergySource초기에너지J: 기본에너지원에 초기에너지가 저장되어 있습니다.
· 기본에너지공급전압V: 기본 에너지원의 초기 공급 전압입니다.
· 주기적에너지업데이트간격: 두 번의 연속적인 주기적인 에너지 업데이트 사이의 시간입니다.
RV 배터리 모델
· Rv배터리모델주기적에너지업데이트간격: RV 배터리 모델 샘플링 간격.
· Rv배터리모델개방회로전압: RV 배터리 모델 개방 회로 전압.
· Rv배터리모델컷오프전압: RV 배터리 모델 차단 전압.
· RvBatteryModelAlpha값: RV 배터리 모델 알파 값입니다.
· Rv배터리모델베타값: RV 배터리 모델 베타 값입니다.
· RvBatteryModelNumOfTerms: 배터리 추정을 위한 무한합 항의 수
수평.
WiFi 라디오 에너지 모델
· 유휴현재A: 기본 무선 유휴 전류(암페어)입니다.
· Cca바쁨현재A: 암페어 단위의 기본 무선 CCA 통화 중 상태입니다.
· Tx현재A: 무선 Tx 전류(암페어)입니다.
· Rx현재A: 암페어 단위의 무선 Rx 전류입니다.
· 스위칭전류A: 암페어 단위의 기본 라디오 채널 스위치 전류입니다.
· SleepCurrentA: 암페어 단위의 무선 절전 전류입니다.
· Tx현재 모델: 첨부된 tx 현재 모델에 대한 포인터입니다.
Basic 에너지 수확 자
· 주기적수확전력업데이트간격: 두 번의 연속적인 정기 업데이트 사이의 시간입니다.
수확된 힘.
· 수확 가능한 전력: 제공되는 전력량을 나타내는 무작위 변수
에너지 하베스터를 통해
트레이싱
추적된 값은 에너지원, 장치 에너지 모델 및 에너지 하베스터 간에 다릅니다.
구현에 대한 자세한 내용은 특정 하위 클래스를 참조하세요.
Basic 에너지 출처
· 남은 에너지: BasicEnergySource에 남은 에너지입니다.
RV 배터리 모델
· Rv배터리모델배터리수준: RV 배터리 모델 배터리 잔량.
· Rv배터리모델배터리수명: RV 배터리 모델의 배터리 수명.
WiFi 라디오 에너지 모델
· 총 에너지 소비량: 무선 장치의 총 에너지 소비량입니다.
Basic 에너지 수확 자
· 수확된 힘: BasicEnergyHarvester가 제공하는 현재 전력입니다.
· 총에너지수확: BasicEnergyHarvester가 수확한 총 에너지입니다.
검증
실제 장치에 대한 에너지 프레임워크의 비교는 수행되지 않았습니다. 현재의
에너지 프레임워크 구현에서 계산 오류가 있는지 수치적으로 확인합니다. 그만큼
RV 배터리 모델은 원본에 제시된 결과와 결과를 비교하여 검증됩니다.
RV 배터리 모형 종이.
FLOW 감시 장치
모델 상품 설명
새 모듈의 소스 코드는 디렉토리에 있습니다. src/흐름 모니터.
Flow Monitor 모듈의 목표는 다음의 성능을 측정할 수 있는 유연한 시스템을 제공하는 것입니다.
네트워크 프로토콜. 모듈은 네트워크 노드에 설치된 프로브를 사용하여
노드에서 교환되는 패킷을 분석하고 여러 매개변수를 측정합니다. 패킷은
그들이 속한 흐름에 따라 나누어지며, 각 흐름은 다음에 따라 정의됩니다.
프로브의 특성(예: IP의 경우 흐름은 동일한 패킷으로 정의됩니다.
{프로토콜, 소스(IP, 포트), 대상(IP, 포트)} 튜플.
각 흐름에 대해 수집된 통계는 XML 형식으로 내보낼 수 있습니다. 더욱이,
사용자는 프로브에 직접 액세스하여 각 흐름에 대한 특정 통계를 요청할 수 있습니다.
디자인
Flow Monitor 모듈은 모듈 방식으로 설계되었습니다. 서브클래싱을 통해 확장 가능
ns3::FlowProbe and ns3::흐름분류자.
전체 모듈 설계는 [FlowMonitor]에 설명되어 있습니다.
범위 and 제한 사항
현재 IPv4 및 IPv6에 대한 프로브 및 분류자를 사용할 수 있습니다.
각 프로브는 다음 네 가지 지점으로 패킷을 분류합니다.
· 패킷을 보낼 때(SendOutgoing IPv[4,6] 추적)
· 패킷이 전달되는 경우(UnicastForward IPv[4,6] 추적)
· 패킷 수신 시 (LocalDeliver IPv[4,6] 추적)
· 패킷이 삭제된 경우(Drop IPv[4,6] 추적)
패킷은 IP 수준에서 추적되므로 L4 프로토콜로 인해 발생하는 모든 재전송은
(예: TCP)는 프로브에서 새 패킷으로 표시됩니다.
태그가 패킷에 추가됩니다(ns3::Ipv[4,6]FlowProbeTag). 태그에는 기본 정보가 포함됩니다.
패킷 분류에 유용한 패킷 데이터입니다.
지금까지는 L4(TCP, UDP) 패킷만 분류되었다는 점을 강조해야 합니다. 게다가,
유니캐스트 패킷만 분류됩니다. 이러한 제한사항은 향후 제거될 수 있습니다.
각 흐름에 대해 수집되는 데이터는 다음과 같습니다.
· timeFirstTxPacket: 흐름의 첫 번째 패킷이 전송된 시기;
· timeLastTxPacket: 흐름의 마지막 패킷이 전송된 시간;
· timeFirstRxPacket: 흐름의 첫 번째 패킷이 끝 노드에 의해 수신되었을 때;
· timeLastRxPacket: 흐름의 마지막 패킷이 수신된 시간;
· DelaySum: 흐름의 모든 수신된 패킷에 대한 모든 단대단 지연의 합계입니다.
· jitterSum: 모든 단대단 지연 지터(지연 변화) 값의 합
다음에 정의된 대로 흐름의 수신된 패킷 RFC 3393;
· txBytes, txPackets: 흐름에 대해 전송된 바이트/패킷의 총 수;
· rxBytes, rxPackets: 흐름에 대해 수신된 바이트/패킷의 총 수;
· LostPackets: 손실된 것으로 추정되는 총 패킷 수(10개 이상 보고되지 않음)
초);
· timesForwarded: 패킷이 전달된 것으로 보고된 횟수입니다.
· DelayHistogram, jitterHistogram, packetSizeHistogram: 지연에 대한 히스토그램 버전,
지터 및 패킷 크기 각각;
· packetsDropped, bytesDropped: 손실된 패킷 및 바이트 수를 다음에 따라 나눕니다.
손실 이유 코드(프로브에 정의됨)
프로브가 IP 헤더를 포함한 패킷 바이트를 측정한다는 점을 지적할 가치가 있습니다.
L2 헤더는 측정에 포함되지 않습니다.
이러한 통계는 요청 시 XML 형식으로 작성됩니다(사용 섹션 참조).
참고자료
[플로우모니터]
G. Carneiro, P. Fortuna 및 M. Ricardo. 2009. FlowMonitor: 네트워크 모니터링 프레임워크
네트워크 시뮬레이터 3(NS-3)용. 제XNUMX차 국제 ICST 회의록
성능 평가 방법론 및 도구에 관한 회의(VALUETOOLS '09).
http://dx.doi.org/10.4108/ICST.VALUETOOLS2009.7493
용법
모듈 사용법은 매우 간단합니다. 도우미가 모든 것을 처리해 드립니다.
일반적인 용도는 다음과 같습니다.
// 흐름 모니터
Ptr flowMonitor;
FlowMonitorHelper flowHelper;
flowMonitor = flowHelper.InstallAll();
시뮬레이터::중지(초(stop_time));
시뮬레이터::실행();
flowMonitor->SerializeToXmlFile("NameOfFile.xml", true, true);
전에, SerializeToXmlFile () 함수의 두 번째와 세 번째 매개변수는 각각 다음과 같이 사용됩니다.
히스토그램과 프로브별 세부 통계를 활성화/비활성화합니다.
다른 가능한 대안은 Doxygen 문서에서 찾을 수 있습니다.
도우미
도우미 API는 일반 도우미의 패턴 사용을 따릅니다. 도우미를 통해 다음을 수행할 수 있습니다.
노드에 모니터를 설치하고, 모니터 속성을 설정하고, 통계를 인쇄합니다.
한 가지 중요한 점은 다음과 같습니다. ns3::FlowMonitorHelper 인스턴스화는 한 번만 수행되어야 합니다.
본관.
Attributes
모듈은 다음과 같은 속성을 제공합니다. ns3::플로우모니터:
· MaxPerHopDelay(시간, 기본값 10초): 고려해야 할 최대 홉당 지연입니다.
· StartTime(시간, 기본값은 0s): 모니터링이 시작되는 시간입니다.
· DelayBinWidth(이중, 기본값 0.001): 지연 히스토그램에 사용되는 너비입니다.
· JitterBinWidth(이중, 기본값 0.001): 지터 히스토그램에 사용되는 너비입니다.
· PacketSizeBinWidth(이중, 기본값 20.0): packetSize 히스토그램에 사용되는 너비입니다.
· FlowInterruptionsBinWidth(이중, 기본값 0.25):
flowInterruptions 히스토그램;
· FlowInterruptionsMinTime(이중, 기본값 0.5): 최소 도착 간격 시간입니다.
흐름 중단으로 간주됩니다.
산출
기본 모델 출력은 흐름 통계에 대한 XML 형식의 보고서입니다. 예는 다음과 같습니다:
출력은 10.1.3.1에서 10.1.2.2까지의 TCP 흐름에 의해 생성되었습니다.
인덱스 2 프로브가 프로브보다 더 많은 패킷과 바이트를 보고한다는 점은 주목할 가치가 있습니다.
다른 문제들. 패킷이 IP에서 조각화되어 있기 때문에 이는 완전히 정상적인 동작입니다.
해당 노드의 레벨입니다.
또한 수신 노드의 프로브(인덱스 4)가 다음을 계산하지 않는다는 점도 관찰해야 합니다.
프로빙 지점 이전에 재조립이 완료되므로 파편이 발생합니다.
예
예제는 다음 위치에 있습니다. src/흐름-모니터/예제.
또한 다음 예제에서는 flow-monitor 모듈을 사용합니다.
· 예/matrix-topology/matrix-topology.cc
· 예제/routing/manet-routing-compare.cc
· 예제/routing/simple-global-routing.cc
· 예/tcp/tcp-variants-comparison.cc
· 예제/무선/multirate.cc
· example/wireless/wifi-hidden-terminal.cc
문제해결
둘 이상 정의하지 마십시오. ns3::FlowMonitorHelper 시뮬레이션에서.
검증
참고 문헌의 논문에는 모듈 검증에 대한 전체 설명이 포함되어 있습니다.
테스트 네트워크.
히스토그램이 올바르게 작동하는지 확인하기 위한 테스트가 제공됩니다.
인터넷 모델
인터넷 스택
인터넷 스택 집합
베어 클래스 노드 현재로서는 그다지 유용하지 않습니다. 다른 객체는 여기에 집계되어야 합니다.
유용한 노드 기능을 제공합니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 NS-3 소스 코드 디렉토리 소스/인터넷 TCP/IPv4 구현을 제공하며
IPv6 관련 구성요소. 여기에는 IPv4, ARP, UDP, TCP, IPv6, Neighbor Discovery 및
기타 관련 프로토콜.
인터넷 노드는 Node 클래스의 하위 클래스가 아닙니다. 그들은 단순히
IP 관련 개체가 여기에 집합되어 있습니다. 손으로 조립하거나
도우미 기능 InternetStackHelper::설치 () 모든 노드에 다음을 수행합니다.
인수로 전달되었습니다.
무효화
InternetStackHelper::Install (Ptr 노드) const
{
if (m_ipv4Enabled)
{
/* IPv4 스택 */
if (노드->GetObject () != 4)
{
NS_FATAL_ERROR("InternetStackHelper::설치(): 집계 중"
"기존 Ipv4 개체가 있는 노드에 대한 InternetStack");
반환;
}
CreateAndAggregateObjectFromTypeId(노드, "ns3::ArpL3Protocol");
CreateAndAggregateObjectFromTypeId(노드, "ns3::Ipv4L3Protocol");
CreateAndAggregateObjectFromTypeId(노드, "ns3::Icmpv4L4Protocol");
// 라우팅 설정
포인트 ipv4 = 노드->GetObject ();
Ptr ipv4Routing = m_routing->Create(노드);
ipv4->SetRoutingProtocol(ipv4Routing);
}
if (m_ipv6Enabled)
{
/* IPv6 스택 */
if (노드->GetObject () != 6)
{
NS_FATAL_ERROR("InternetStackHelper::설치(): 집계 중"
"기존 Ipv6 개체가 있는 노드에 대한 InternetStack");
반환;
}
CreateAndAggregateObjectFromTypeId(노드, "ns3::Ipv6L3Protocol");
CreateAndAggregateObjectFromTypeId(노드, "ns3::Icmpv6L4Protocol");
// 라우팅 설정
포인트 ipv6 = 노드->GetObject ();
Ptr ipv6Routing = m_routingv6->Create(노드);
ipv6->SetRoutingProtocol(ipv6Routing);
/* IPv6 확장 및 옵션 등록 */
ipv6->RegisterExtensions();
ipv6->등록 옵션();
}
if (m_ipv4Enabled || m_ipv6Enabled)
{
/* UDP 및 TCP 스택 */
CreateAndAggregateObjectFromTypeId(노드, "ns3::UdpL4Protocol");
노드->AggregateObject(m_tcpFactory.Create ());
Ptr 팩토리 = CreateObject ();
노드->AggregateObject(공장);
}
}
여러 구현이 존재하는 경우 NS-3 (TCP, IP 라우팅), 이러한 개체는 다음에 의해 추가됩니다.
팩토리 객체(TCP) 또는 라우팅 도우미(m_routing)
라우팅 프로토콜은 이 기능 외부에서 구성 및 설정됩니다. 기본적으로,
다음 프로토콜이 추가됩니다.
void InternetStackHelper::초기화()
{
SetTcp("ns3::TcpL4Protocol");
Ipv4StaticRoutingHelper staticRouting;
Ipv4GlobalRoutingHelper globalRouting;
Ipv4ListRoutingHelper listRouting;
Ipv6ListRoutingHelper listRoutingv6;
Ipv6StaticRoutingHelper staticRoutingv6;
listRouting.Add(staticRouting, 0);
listRouting.Add(globalRouting, -10);
listRoutingv6.Add(staticRoutingv6, 0);
SetRoutingHelper(listRouting);
SetRoutingHelper(listRoutingv6);
}
기본적으로 IPv4 및 IPv6가 활성화되어 있습니다.
인터넷 노드 구조
IP 가능 노드( NS-3 하나 이상의 IP 스택을 갖기 위해 집계로 보강된 노드)
다음과 같은 내부 구조를 가지고 있습니다.
레이어 -3 프로토콜
NetDevices 위에 있는 가장 낮은 계층에는 다음을 포함하는 "계층 3" 프로토콜이 있습니다.
IPv4, IPv6, ARP 등. 클래스 Ipv4L3프로토콜 구현 클래스입니다.
공용 인터페이스는 일반적으로 클래스입니다. IPv4, 그러나 Ipv4L3Protocol 공개 API도 사용됩니다.
현재 내부적으로.
Ipv4L3Protocol 클래스에서 아래에 설명된 한 가지 방법은 다음과 같습니다. 수신 ():
/ **
* 하위 계층에서는 L3Demux::Lookup을 호출한 후 이 메서드를 호출합니다.
* ARP 하위 클래스는 이 NetDevice가 어느 것인지 알아야 합니다.
* 패킷 수신 주소:
* - NetDevice별 ARP 캐시 구현
* - 올바른 장치에서 arp 응답을 다시 보냅니다.
*/
void 수신( Ptr 장치, Ptr p, uint16_t 프로토콜,
const 주소 &from, const 주소 &to, NetDevice::PacketType packetType);
먼저, 수신 () 함수에 receiveCallback과 일치하는 서명이 있습니다.
수업에서 노드. 이 함수 포인터는 다음과 같은 경우 노드의 프로토콜 핸들러에 삽입됩니다.
인터페이스 추가 () 호출됩니다. 실제 등록은 다음과 같은 명령문으로 수행됩니다.
다음과 같습니다 :
RegisterProtocolHandler( MakeCallback (&Ipv4Protocol::수신, ipv4),
Ipv4L3프로토콜::PROT_NUMBER, 0);
Ipv4L3Protocol 객체는 노드에 집계됩니다. 그러한 Ipv4L3Protocol은 하나만 있습니다
물체. Ipv4L3Protocol로 보낼 패킷이 있는 상위 계층 프로토콜
객체가 호출할 수 있음 GetObject () 다음과 같이 포인터를 얻으려면 :
Ptr ipv4 = m_node->GetObject ();
만약 (ipv4 != 0)
{
ipv4->보내기(패킷, saddr, Daddr, PROT_NUMBER);
}
이 수업은 우리가 활용하는 두 가지 기술을 훌륭하게 보여줍니다. NS-3 객체를 함께 묶으려면:
콜백 및 객체 집계.
IPv4 라우팅에서 패킷이 로컬 노드용이라고 판단되면 해당 패킷을 위로 전달합니다.
스택. 이는 다음 기능으로 수행됩니다.
무효화
Ipv4L3Protocol::LocalDeliver(Ptr 패킷, Ipv4Header const&ip, uint32_t iif)
첫 번째 단계는 IP 프로토콜 번호를 기반으로 올바른 Ipv4L4Protocol 개체를 찾는 것입니다.
예를 들어 TCP는 demux에 프로토콜 번호 6으로 등록되어 있습니다. 받다()
Ipv4L4Protocol의 함수(예: TcpL4프로토콜::수신 호출됩니다.
우리는 아직 Ipv4Interface 클래스를 도입하지 않았습니다. 기본적으로 각 NetDevice는 페어링됩니다.
해당 장치의 IPv4 표현을 사용합니다. Linux에서 이 클래스는 IPv4인터페이스 거칠게
에 해당 구조체 in_device; 주요 목적은 주소 계열을 제공하는 것입니다.
인터페이스에 대한 특정 정보(주소)입니다.
모든 클래스에는 전송, 수신 및 손실된 패킷을 추적하기 위한 적절한 추적이 있습니다.
사용자는 이를 사용하여 패킷이 삭제되었는지 여부(및 위치)를 알아내는 것이 좋습니다. ㅏ
일반적인 실수는 패킷을 보낼 때 로컬 큐의 효과를 잊어버리는 것입니다.
ARP 큐. 이는 점보 패킷이나 패킷 버스트를 보낼 때 특히 혼란스러울 수 있습니다.
UDP를 사용합니다. ARP 캐시 보류 대기열은 제한되어 있으며(3개의 데이터그램) IP 패킷이 제한될 수 있습니다.
조각화되어 ARP 캐시 대기열 크기가 쉽게 초과됩니다. 그러한 경우에는 다음이 유용합니다.
ARP 캐시 보류 크기를 적절한 값으로 늘립니다. 예:
Config::SetDefault ("ns3::ArpCache::PendingQueueSize", UintegerValue (MAX_BURST_SIZE/L2MTU*3));
IPv6 구현은 유사한 아키텍처를 따릅니다. 이중 스택 노드(하나는
IPv4 및 IPv6 모두 지원) IPv6 소켓이 IPv4 연결을
표준 듀얼 스택 시스템이 그렇습니다. 소켓 바인딩 및 IPv6 끝점 수신은 다음을 수행할 수 있습니다.
IPv4 연결을 수신하고 원격 주소를 IPv4 매핑 주소로 반환합니다.
IPV6_V6ONLY 소켓 옵션에 대한 지원은 현재 존재하지 않습니다.
레이어 -4 프로토콜 and 소켓
다음으로 전송 프로토콜, 소켓 및 애플리케이션이 어떻게 연결되는지 설명합니다. ~ 안에
요약하자면, 각 전송 프로토콜 구현은 소켓 팩토리입니다. 다음과 같은 애플리케이션
새 소켓이 필요해
예를 들어, UDP 소켓을 생성하기 위해 애플리케이션은 다음과 같은 코드 조각을 사용합니다.
다음 :
Ptr udpSocketFactory = GetNode ()->GetObject ();
Ptr m_socket = 소켓Factory->CreateSocket();
m_socket->바인드(m_local_address);
...
위의 내용은 UDP 소켓 팩토리에 대한 포인터를 얻기 위해 노드를 쿼리하고 하나를 생성합니다.
이러한 소켓은 C 기반 소켓 API와 유사한 API로 소켓을 사용합니다.
as 연결하기 () and 전송 (). 전달받은 주소는 바인더 (), 연결하기 ()및 전송 ()
기능은 IPv4주소, IPv6주소및 주소. 만약 주소 전달되고
이외의 내용이 포함되어 있습니다. IPv4주소 or IPv6주소, 이 함수는
오류. NS 바인더 (무효의) and 바인드6 (무효의) 함수는 "0.0.0.0" 및 "::"에 바인딩됩니다.
각각.
소켓은 다음을 통해 특정 NetDevice에 바인딩될 수도 있습니다. BindToNetDevice
(Ptr 넷장치) 기능. BindToNetDevice (Ptr 넷장치) 묶을 것이다
소켓을 "0.0.0.0" 및 "::"(호출과 동일) 바인더 () and 바인드6 ()을 제외하고
소켓이 이미 특정 주소에 바인딩되었습니다. 요약하면 올바른 순서
입니다
Ptr udpSocketFactory = GetNode ()->GetObject ();
Ptr m_socket = 소켓Factory->CreateSocket();
m_socket->BindToNetDevice(n_netDevice);
...
또는 :
Ptr udpSocketFactory = GetNode ()->GetObject ();
Ptr m_socket = 소켓Factory->CreateSocket();
m_socket->바인드(m_local_address);
m_socket->BindToNetDevice(n_netDevice);
...
다음은 오류를 발생시킵니다:
Ptr udpSocketFactory = GetNode ()->GetObject ();
Ptr m_socket = 소켓Factory->CreateSocket();
m_socket->BindToNetDevice(n_netDevice);
m_socket->바인드(m_local_address);
...
다음 장을 참조하세요. NS-3 자세한 내용은 소켓을 참조하세요.
지금까지 소켓 팩토리(예: 수업 UDP) 및 소켓이 있을 수 있습니다.
전문화(예: 수업 UDP소켓). 관련된 몇 가지 주요 개체가 더 있습니다.
패킷을 하나 이상의 수신 소켓으로 역다중화하는 특수 작업입니다. 열쇠
이 작업의 개체는 클래스입니다. Ipv4EndPointDemux. 이 디멀티플렉서는 다음의 객체를 저장합니다.
수업 Ipv4EndPoint. 이 클래스는 주소 지정/포트 튜플(로컬 포트, 로컬
소켓과 관련된 주소, 대상 포트, 대상 주소) 및 수신
콜백. 이 수신 콜백에는 소켓에 등록된 수신 함수가 있습니다. 그만큼
조회 () Ipv4EndPointDemux에 대한 함수는 Ipv4EndPoint 객체 목록을 반환합니다.
둘 이상의 소켓이 패킷과 일치할 수 있으므로 목록이 됩니다. 레이어 4 프로토콜 복사본
패킷을 각 Ipv4EndPoint로 전송하고 해당 패킷을 호출합니다. 앞으로 () 메서드는 다음을 호출합니다.
수신 () 소켓에 의해 등록된 함수입니다.
실제 시스템에서 소켓 API로 작업할 때 발생하는 문제는 다음과 같습니다.
특정 유형의 I/O(예: 차단, 비차단,
비동기식, ...). NS-3 소켓 I/O를 위한 비동기 모델을 구현합니다. 응용 프로그램
수신된 데이터를 읽을 준비가 되었음을 알리도록 콜백을 설정하고 콜백은 다음과 같습니다.
데이터를 사용할 수 있을 때 전송 프로토콜에 의해 호출됩니다. 이 콜백은 다음과 같이 지정됩니다.
다음과 같습니다 :
void 소켓::SetRecvCallback(콜백,
Ptr,
const 주소&> receivedData);
수신되는 데이터는 패킷 데이터 버퍼에 전달됩니다. 예제 사용법은 다음과 같습니다.
수업 패킷싱크:
m_socket->SetRecvCallback (MakeCallback(&PacketSink::HandleRead, this));
요약하면 내부적으로 UDP 구현은 다음과 같이 구성됩니다.
· ㅏ UdpImpl UDP 소켓 팩토리 기능을 구현하는 클래스
· ㅏ UdpL4프로토콜 소켓 독립적인 프로토콜 논리를 구현하는 클래스
· ㅏ UDPSocketImpl UDP의 소켓별 측면을 구현하는 클래스
· 클래스 Ipv4EndPoint 주소 지정 튜플(로컬 포트, 로컬 주소,
소켓과 연관된 대상 포트, 대상 주소) 및 수신
소켓에 대한 콜백.
IP 가능 노드 인터페이스
IP 가능 노드의 많은 구현 세부 사항 또는 내부 개체 자체
객체는 시뮬레이터 공개 API에 노출되지 않습니다. 이를 통해 다양한
구현; 예를 들어, 네이티브를 대체합니다. NS-3 포트된 TCP/IP 스택이 있는 모델
암호.
이러한 모든 개체의 C++ 공개 API는 다음 위치에 있습니다. 소스/네트워크 예배 규칙서,
주로 다음을 포함합니다:
· 주소.h
· 소켓.h
· node.h
· 패킷.h
이는 일반적으로 다음에서 사용되는 기본값을 구현하는 기본 클래스 개체입니다.
구현, 상태 변수, 호스트 속성 및
다음과 같이 클라이언트에 공개적으로 사용 가능한 메서드를 구현합니다. 소켓 생성.
예시 통로 of a 패킷
이 두 그림은 패킷이 인터넷을 통해 흐르는 방식에 대한 스택 추적의 예를 보여줍니다.
노드 객체.
[이미지] 패킷의 전송 경로..UNINDENT
[이미지] 패킷의 수신 경로..UNINDENT
IPv4
자리 표시 자 장
IPv6
이 장에서는 다음을 설명합니다. NS-3 IPv6 모델 기능 및 제한사항
사용법과 예시.
IPv6 모델 설명
IPv6 모델은 Linux 구현 이후에 느슨하게 패턴화되었습니다. 구현은
IPv6의 일부 기능은 시뮬레이션 연구에 별로 관심이 없기 때문에 완전하지 않습니다.
IPv6의 일부 기능은 아직 모델링되지 않았습니다. NS-3.
기본 클래스 IPv6 일반 API를 정의하는 반면 클래스는 Ipv6L3프로토콜 실제입니다
프로토콜을 구현하는 클래스입니다. IPv6 스택에서 사용되는 실제 클래스는 다음과 같습니다.
주로 디렉토리에 소스/인터넷.
IPv6 구현은 다음 파일에 포함되어 있습니다.
src/인터넷/모델/icmpv6-header.{cc,h}
src/인터넷/모델/icmpv6-l4-protocol.{cc,h}
src/인터넷/모델/ipv6.{cc,h}
src/인터넷/모델/ipv6-주소 생성기.{cc,h}
src/인터넷/모델/ipv6-autoconfigured-prefix.{cc,h}
src/인터넷/모델/ipv6-end-point.{cc,h}
src/인터넷/모델/ipv6-end-point-demux.{cc,h}
src/인터넷/모델/ipv6-extension.{cc,h}
src/인터넷/모델/ipv6-extension-demux.{cc,h}
src/인터넷/모델/ipv6-extension-header.{cc,h}
src/인터넷/모델/ipv6-header.{cc,h}
src/인터넷/모델/ipv6-인터페이스.{cc,h}
src/인터넷/모델/ipv6-인터페이스-주소.{cc,h}
src/인터넷/모델/ipv6-l3-protocol.{cc,h}
src/인터넷/모델/ipv6-list-routing.{cc,h}
src/인터넷/모델/ipv6-option.{cc,h}
src/인터넷/모델/ipv6-option-demux.{cc,h}
src/인터넷/모델/ipv6-옵션-헤더.{cc,h}
src/인터넷/모델/ipv6-packet-info-tag.{cc,h}
src/인터넷/모델/ipv6-pmtu-cache.{cc,h}
src/인터넷/모델/ipv6-raw-socket-factory.{cc,h}
src/인터넷/모델/ipv6-raw-socket-factory-impl.{cc,h}
src/인터넷/모델/ipv6-raw-socket-impl.{cc,h}
src/인터넷/모델/ipv6-route.{cc,h}
src/인터넷/모델/ipv6-라우팅-프로토콜.{cc,h}
src/인터넷/모델/ipv6-라우팅-테이블-항목.{cc,h}
src/인터넷/모델/ipv6-static-routing.{cc,h}
src/인터넷/모델/ndisc-cache.{cc,h}
src/network/utils/inet6-socket-address.{cc,h}
src/network/utils/ipv6-address.{cc,h}
또한 일부 도우미는 IPv6과 관련되어 있습니다.
src/internet/helper/internet-stack-helper.{cc,h}
src/인터넷/helper/ipv6-address-helper.{cc,h}
src/인터넷/helper/ipv6-인터페이스-컨테이너.{cc,h}
src/internet/helper/ipv6-list-routing-helper.{cc,h}
src/internet/helper/ipv6-routing-helper.{cc,h}
src/internet/helper/ipv6-static-routing-helper.{cc,h}
모델 파일은 대략 다음과 같이 나눌 수 있습니다.
· 프로토콜 모델(예: ipv6, ipv6-l3-프로토콜, icmpv6-l4-프로토콜 등)
· 라우팅 모델(즉, 이름에 '라우팅'이 포함된 모든 것)
· 소켓 및 인터페이스(예: ipv6-raw-socket, ipv6-interface, ipv6-end-point 등)
· 주소에 관한 것
· 헤더, 옵션 헤더, 확장 헤더 등
· 액세서리 클래스(예: ndisc-cache)
용법
다음 설명은 예제 코드에 있는 일반적인 도우미 사용을 기반으로 합니다.
IPv6은 노드에서 활성화할 필요가 없습니다. 사용 가능한 항목에 자동으로 추가됩니다.
인터넷 스택이 설치되면 프로토콜.
... 할 목적으로 지원 IPv6와 함께 IPv4를 설치하면 사용이 가능합니다.
ns3::InternetStackHelper 방법 SetIpv6Stack설치 (부울 할 수있게하다) 설치하기 전에
노드의 InternetStack.
IPv6 전용 네트워크를 보유하려면(즉, 노드에 IPv4 스택을 설치하지 않으려면)
사용해야한다 ns3::InternetStackHelper 방법 SetIpv4Stack설치 (부울 할 수있게하다) 이전
스택 설치.
예를 들어 다음 코드에서 노드 0에는 IPv4와 IPv6가 모두 있고 노드 1만 있습니다.
IPv6 및 노드 2만 IPv4:
NodeContainern;
n.만들기(3);
InternetStackHelper 인터넷;
InternetStackHelper internetV4only;
InternetStackHelper internetV6only;
internetV4only.SetIpv6StackInstall(거짓);
internetV6only.SetIpv4StackInstall(거짓);
인터넷.설치(n.Get(0));
internetV6only.Install (n.Get (1));
internetV4only.Install (n.Get (2));
IPv6 구애 할당
네트워크에서 IPv6를 사용하기 위해 가장 먼저 해야 할 일은 IPv6 주소를 할당하는 것입니다.
모든 IPv6 지원 NS-3 노드에는 최소한 하나의 NetDevice가 있습니다. ns3::LoopbackNetDevice.
루프백 장치 주소는 다음과 같습니다. :: 1. 다른 모든 NetDevice에는 하나 이상의 IPv6이 있습니다.
구애:
· 하나의 링크-로컬 주소: fe80::인터페이스 ID어디로 인터페이스 ID 에서 파생 된
NetDevice MAC 주소입니다.
· 0개 이상의 전역 주소(예: 2001 : db8 :: 1.
일반적으로 인터페이스의 첫 번째 주소는 링크-로컬 주소이며 전역 주소는 다음과 같습니다.
주소는 다음과 같습니다.
IPv6 전역 주소는 다음과 같습니다.
· 수동으로 할당
· 자동 생성
NS-3 두 가지 방법을 모두 사용할 수 있으며, 두 가지 방법의 의미를 이해하는 것이 매우 중요합니다.
양자 모두.
수동으로 할당 된 IPv6 주소
아마도 이 방법이 가장 쉽고 가장 많이 사용되는 방법일 것입니다. 예로서:
포인트 n0 = 객체 생성 ();
포인트 n1 = 객체 생성 ();
NodeContainer net(n0, n1);
CsmaHelper csma;
NetDeviceContainer ndc = csma.Install(넷);
NS_LOG_INFO("IPv6 주소 할당.");
Ipv6AddressHelper ipv6;
ipv6.SetBase(Ipv6Address("2001:db8::"), Ipv6Prefix(64));
Ipv6InterfaceContainer ic = ipv6.Assign(ndc);
이 방법은 두 개의 전역 IPv6 주소를 노드에 추가합니다. IPv6의 경우 평소와 같이
모든 노드에는 링크 로컬 주소도 있습니다. 일반적으로 첫 번째 주소는
인터페이스는 링크-로컬 인터페이스가 되며 전역 주소는 다음과 같습니다.
사람.
전역 주소는 MAC 주소에서 파생됩니다. 결과로서,
다음과 비슷한 주소가 있을 것으로 예상됩니다. 2001:db8::200:ff:fe00:1.
위의 과정을 반복하여 노드에 둘 이상의 전역 주소를 할당할 수 있습니다.
그러나 IPv6AddressHelper 싱글턴 특성을 가지려면 먼저 모든 항목을 할당해야 합니다.
네트워크 주소를 변경한 다음 네트워크 기반을 변경합니다(세트베이스) 그런 다음 새 과제를 수행합니다.
또는 노드에 특정 주소를 할당할 수도 있습니다.
포인트 n0 = 객체 생성 ();
NodeContainer 네트(n0);
CsmaHelper csma;
NetDeviceContainer ndc = csma.Install(넷);
NS_LOG_INFO("IPv6 주소를 구체적으로 할당합니다.");
Ipv6AddressHelper ipv6;
Ptr 장치 = ndc.Get (0);
Ptr 노드 = 장치->GetNode();
Ptr ipv6proto = node->GetObject ();
int32_t ifIndex = 0;
ifIndex = ipv6proto->GetInterfaceForDevice(장치);
Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:db8:f00d:cafe::42"), Ipv6Prefix (64));
ipv6proto->AddAddress(ifIndex, ipv6Addr);
자동 생성 IPv6 주소
이는 클래스에 의해 구현된 RADVD 프로토콜을 사용하여 수행됩니다. 라드브드. 에
이 애플리케이션에 대한 도우미가 없고 사용이 다소 어려울 때(참조
예제/ipv6/radvd.cc).
이 방법을 사용하면 노드는 동적으로 획득합니다(즉, 시뮬레이션 중에).
RADVD 구성에 따른 하나 이상의 전역 주소. 이 주소
RADVD가 발표한 접두사와 노드의 EUI-64를 기반으로 합니다.
무작위 생성 IPv6 주소
IPv6 실제 노드는 개인 정보 보호를 위해 무작위로 생성된 주소를 사용하지만, NS-3 하지
이 기능이 없습니다. 이 기능은 지금까지 흥미로운 것으로 간주되지 않았습니다.
시뮬레이션.
복제 주소 Detection System (아빠)
노드는 DAD를 수행합니다(다음을 사용하여 비활성화할 수 있음). Icmpv6L4프로토콜 기인하다). 에
그러나 DAD를 수신하면 노드는 이에 반응하지 않습니다. 있는 그대로: DAD 반응이 불완전하므로
멀리. 주된 이유는 무작위 생성 주소 기능이 없기 때문입니다. 게다가,
이후 NS-3 노드는 일반적으로 정상적으로 작동하므로 중복된 주소가 있어서는 안 됩니다.
이는 실제 통합 문제를 피하기 위해 향후 변경될 수 있습니다.
시뮬레이션.
주인 and 라우터 행동 in IPv6 and NS-3
IPv6에서는 다음과 같은 사항이 명확하게 구분됩니다. 라우터 and 호스트. 누구나 예상할 수 있듯이,
라우터는 한 인터페이스에서 다른 인터페이스로 패킷을 전달할 수 있지만 호스트는 삭제됩니다.
패킷이 그들에게 전달되지 않았습니다.
불행하게도 이러한 구별로 인해 영향을 받는 것은 전달뿐만이 아닙니다.
전달 자체는 예를 들어 인터페이스에서 들어오는 패킷을 전달하기 위해 미세 조정될 수 있습니다.
다른 인터페이스에서 패킷을 삭제합니다.
In NS-3 노드는 다음과 같이 구성됩니다. 주인 기본적으로. 바꾸는 방법은 크게 2가지가 있습니다
이 행동은:
· 사용 ns3::Ipv6InterfaceContainer 전달 설정(uint32_t i, 불량배 라우터) 어디에 i 이다
컨테이너의 인터페이스 인덱스입니다.
· 변경 ns3::IPv6 속성 IP 전달.
시뮬레이션 중에 둘 중 하나를 사용할 수 있습니다.
다음을 사용하여 세밀한 설정을 수행할 수 있습니다. ns3::Ipv6인터페이스 전달 설정 (부울
앞으로); 인터페이스별로 동작을 변경할 수 있습니다.
노드 전체 구성은 활성화/비활성화하는 편리한 방법으로만 사용됩니다.
전에, ns3::Ipv6인터페이스 특정 설정. 전달을 사용하여 노드에 추가된 Ipv6Interface
활성화되면 전달되도록 설정됩니다. 이는 노드가 있을 때 매우 중요합니다.
시뮬레이션 중에 인터페이스가 추가되었습니다.
이에 따르면 ns3::Ipv6인터페이스 전달 상태에서는 다음과 같은 일이 발생합니다.
· 전달 OFF
· 노드는 라우터 요청에 응답하지 않습니다.
· 노드는 라우터 광고에 반응합니다.
· 노드는 주기적으로 라우터 요청(Router Solicitation)을 보냅니다.
· 라우팅 프로토콜은 노드로 전달되지 않은 패킷을 삭제해야 합니다.
· 포워딩 ON
· 노드는 라우터 요청(Router Solicitation)에 응답합니다.
· 노드는 라우터 광고에 반응하지 않습니다.
· 노드는 라우터 요청을 보내지 않습니다.
· 라우팅 프로토콜은 패킷을 전달해야 합니다.
동작은 ip-sysctl.txt(‐
http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt) 차이점은
난해한 설정을 사용하여 동작을 재정의하는 것은 불가능합니다(예: 전달하지만
라우터 알림, accept_ra=2 또는 전달을 수락하지만 라우터 요청을 보냅니다.
전달=2).
패킷 전달의 의미를 신중하게 고려하십시오. 예를 들어, 노드는
전달을 끄고 인터페이스에서 ICMPv6 PACKET_TOO_BIG 메시지를 보냅니다. 이것은
완전히 정상입니다. 라우팅 프로토콜은 시도하기 전에 패킷을 삭제하기 때문입니다.
전달합니다.
도우미
일반적으로 IPv6 설정에 사용되는 도우미는 다음과 같습니다.
· ns3::InternetStackHelper
· ns3::Ipv6AddressHelper
· ns3::Ipv6InterfaceContainer
사용법은 해당 IPv4 사례와 거의 동일합니다. 예:
NodeContainern;
n.만들기(4);
NS_LOG_INFO("IPv6 인터넷 스택 생성");
InternetStackHelper internetv6;
internetv6.설치(n);
NS_LOG_INFO("채널을 생성하세요.");
CsmaHelper csma;
NetDeviceContainer d = csma.Install(n);
NS_LOG_INFO("네트워크를 생성하고 IPv6 주소를 할당합니다.");
Ipv6AddressHelper ipv6;
ipv6.SetBase(Ipv6Address("2001:db8::"), Ipv6Prefix(64));
Ipv6InterfaceContainer iic = ipv6.Assign(d);
또한 일반적인 작업은 노드 중 하나에서 전달을 활성화하고
다른 노드에서 이를 향한 기본 경로, 예:
iic.SetForwarding(0, true);
iic.SetDefaultRouteInAllNodes (0);
그러면 노드에서 전달이 활성화됩니다. 0 기본 경로를 설정합니다.
ns3::Ipv6Static라우팅 다른 모든 노드에서. 이를 위해서는 다음이 필요합니다.
Ipv6StaticRouting이 노드에 있습니다.
IPv6 라우팅 도우미를 사용하면 사용자는 특정 컴퓨터에서 특정 작업을 수행할 수 있습니다.
라우팅 알고리즘과 라우팅 테이블을 인쇄합니다.
Attributes
에서는 많은 수업을 NS-3 IPv6 구현에는 속성이 포함됩니다. 가장 유용한 것들은 다음과 같습니다:
· ns3::IPv6
· IP 전달, 부울, 기본값은 false입니다. 모든 항목에 대해 전역적으로 IP 전달을 활성화 또는 비활성화합니다.
현재와 미래의 IPv6 장치.
· Mtu디스커버, 부울, 기본값은 true입니다. 비활성화되면 모든 인터페이스에 MTU가 부여됩니다.
1280바이트로 설정합니다.
· ns3::Ipv6L3프로토콜
· 기본Ttl, uint8_t, 기본값 64. 모든 나가는 패킷에 기본적으로 설정된 TTL 값
이 노드에서 생성됩니다.
· SendIcmpv6Redirect, 부울, 기본값은 true입니다. 적절한 경우 ICMPv6 리디렉션을 보냅니다.
· ns3::Icmpv6L4프로토콜
· 아빠, 부울, 기본값은 true입니다. 항상 DAD(중복 주소 감지) 검사를 수행하세요.
· ns3::NdiscCache
· 해결되지 않은 대기열 크기, uint32_t, 기본값 3. NA 보류 중인 패킷의 대기열 크기
댓글.
산출
IPv6 스택은 몇 가지 유용한 추적 소스를 제공합니다.
· ns3::Ipv6L3프로토콜
· Tx, IPv6 패킷을 나가는 인터페이스로 보냅니다.
· Rx, 들어오는 인터페이스로부터 IPv6 패킷을 수신합니다.
· 드롭, IPv6 패킷을 삭제합니다.
· ns3::Ipv6확장
· 드롭, IPv6 패킷을 삭제합니다.
패킷에 알 수 없는 옵션이 포함되어 있으면 최신 추적 소스가 생성됩니다.
처리.
마음 ns3::NdiscCache 패킷도 삭제할 수 있으며 추적에 기록되지 않습니다.
소스 (아직). 이로 인해 전송/수신 패킷 카운터에 약간의 혼란이 발생할 수 있습니다.
Advnaced 용법
IPv6 최고 전달 단위 (MTU) and 분열
NS-3 NetDevices는 L2 시뮬레이션 장치에 따라 MTU를 정의합니다. IPv6에는 다음이 필요합니다.
최소 MTU는 1280바이트이므로 모든 NetDevice는 최소한 이 MTU를 지원해야 합니다.
MTU. 이것이 링크-MTU입니다.
소스-목적지 경로에서 서로 다른 MTU를 지원하기 위해, NS-3 IPv6 모델은
조각화를 수행합니다. 이는 다음보다 큰 패킷을 수신함으로써 트리거될 수 있습니다.
L4 프로토콜(UDP, TCP 등)에서 link-MTU를 사용하거나 ICMPv6 PACKET_TOO_BIG를 수신하여
메시지. 이 모델은 다음과 같은 중요한 예외를 제외하고 RFC 1981을 모방합니다.
· L4 프로토콜에는 경로 MTU 변경이 통보되지 않습니다.
· TCP는 Path-MTU에 따라 세그먼트 크기를 변경할 수 없습니다.
두 가지 제한 사항 모두 적절한 시기에 제거될 예정입니다.
Path-MTU 캐시는 현재 소스-대상 IPv6 주소를 기반으로 합니다. 더 나아가
분류(예: 흐름 라벨)가 가능하지만 아직 구현되지 않았습니다.
Path-MTU 기본 유효 시간은 10분입니다. 캐시 항목이 만료된 후
경로 MTU 정보가 제거되고 다음 패킷이 (결국) 새로운 ICMPv6을 트리거합니다.
PACKET_TOO_BIG 메시지입니다. 1) 이는 RFC 사양과 일치하며 2)
L4 프로토콜은 패킷 재전송을 담당합니다.
예
IPv6의 예는 디렉토리에 있습니다. 예제/ipv6. 이 예는 가장 많은 것에 중점을 둡니다.
조각화, 리디렉션 등과 같은 흥미로운 IPv6 특성입니다.
게다가 대부분의 TCP 및 UDP 예제는 다음 위치에 있습니다. 예제/udp, 예제/TCP등이 있습니다
IPv6 대신 IPv4을 사용하는 명령줄 옵션입니다.
문제해결
사용하는 동안 피해야 할 몇 가지 함정이 있습니다. NS-3 IPv6.
라우팅 루프
IPv6에 사용할 수 있는 유일한 라우팅 방식은 다음과 같습니다. ns3::Ipv6Static라우팅,
기본 라우터는 수동으로 설정해야 합니다. 네트워크에 두 개 이상의 라우터가 있는 경우
(예: 노드 A 및 노드 B), 도우미 기능 사용을 피하세요. SetDefaultRouteInAllNodes for
하나 이상의 라우터.
결과는 A의 B에 대한 기본 경로와 이를 가리키는 기본 경로를 설치하는 것입니다.
B의 A에 루프를 생성합니다.
글로벌 주소 누출
IPv6의 주소는 다음과 같습니다. 글로벌 정의상. IPv6을 사용하는 경우
에뮬레이션 NS-3 이를 위해서는 어떤 대가를 치르더라도 글로벌 인터넷으로 주소가 유출되는 것을 피하십시오.
유출을 방지하기 위해 외부 방화벽을 설정하는 것이 좋습니다.
2001:DB8::/32 구애
IPv6 표준(RFC 3849)은 다음을 정의합니다. 2001:DB8::/32 주소 클래스 선적 서류 비치.
이 설명서에서는 이 규칙을 사용합니다. 그러나 이 클래스의 주소는 다음에서만 사용할 수 있습니다.
문서이며 라우터는 이를 폐기해야 합니다.
검증
IPv6 프로토콜은 아직 실제 구현에 대해 광범위하게 검증되지 않았습니다.
실제 테스트에는 주로 Wireshark를 사용하여 .pcap 추적 파일을 검사하는 작업이 포함됩니다.
결과는 긍정적입니다.
라우팅 개요
NS-3 전통적인 라우팅 접근 방식과 프로토콜을 지원하고,
오픈 소스 라우팅 구현 및 비정통 라우팅에 대한 연구 촉진
기법. 전체 라우팅 아키텍처는 아래에 설명되어 있습니다. 라우팅 아키텍처.
유선 토폴로지에 대해 전역 라우팅을 구성하는 방법을 읽고 싶은 사용자는 다음을 수행할 수 있습니다.
읽기 글로벌 중앙 라우팅. 유니캐스트 라우팅 프로토콜은 다음에 설명되어 있습니다. 유니 캐스트
라우팅. 멀티캐스트 라우팅은 다음에 문서화되어 있습니다. 멀티 캐스트 라우팅.
라우팅 아키텍처
[이미지] 라우팅 개요.UNINDENT
살펴보기 of 라우팅 IPv4의 전체 라우팅 아키텍처를 보여줍니다. 주요 개체는 다음과 같습니다.
Ipv4L3Protocol, Ipv4RoutingProtocol(s)(모든 라우팅/전달이 수행된 클래스)
Ipv4L3Protocol) 및 Ipv4Route에서 위임됩니다.
Ipv4L3Protocol에는 시뮬레이션 시 하나 이상의 Ipv4RoutingProtocol이 추가되어야 합니다.
설정 시간. 이는 Ipv4::SetRoutingProtocol()을 호출하여 명시적으로 수행됩니다.
추상 기본 클래스 Ipv4RoutingProtocol()은 다음으로 구성된 최소 인터페이스를 선언합니다.
RouteOutput() 및 RouteInput()의 두 가지 메서드 중 하나입니다. 아웃바운드로 이동하는 패킷의 경우
호스트인 경우 전송 프로토콜은 Ipv4RoutingProtocol 개체에 대해 Ipv4를 쿼리합니다.
인터페이스이며 Ipv4RoutingProtocol::RouteOutput()을 통해 경로를 요청합니다. Ptr
Ipv4Route 객체가 반환됩니다. 이는 Linux의 dst_cache 항목과 유사합니다. 그만큼
Ipv4Route는 두 번째 조회를 피하기 위해 Ipv4L3Protocol로 전달됩니다. 하지만,
일부 경우(예: Ipv4 원시 소켓)에서는 RouteOutput()을 직접 호출해야 합니다.
Ipv4L3프로토콜.
전달 또는 전달을 위해 인바운드로 수신된 패킷의 경우 다음 단계가 수행됩니다.
Ipv4L3Protocol::Receive()는 Ipv4RoutingProtocol::RouteInput()을 호출합니다. 이는 통과
Ipv4RoutingProtocol 객체에 대한 패킷 소유권. XNUMX개의 콜백이 연결되어 있습니다.
이 호출로:
· 현지배송
· 유니캐스트포워드
· 멀티캐스트포워드
· 오류
Ipv4RoutingProtocol은 결국 각 패킷에 대해 이러한 콜백 중 하나를 호출해야 합니다.
그것에 대한 책임이 있습니다. 이는 기본적으로 입력 라우팅 프로세스가 작동하는 방식입니다.
리눅스.
[이미지] Ipv4Routing 전문화..UNINDENT
이 전체 아키텍처는 다음을 포함하여 다양한 라우팅 접근 방식을 지원하도록 설계되었습니다.
(미래에는) Linux와 같은 정책 기반 라우팅 구현, 사전 예방적이고
시뮬레이션 사용자를 위한 주문형 라우팅 프로토콜 및 단순 라우팅 프로토콜
라우팅에는 별로 관심이 없습니다.
IPv4 라우팅 전문화. 여러 라우팅 프로토콜이 이로부터 어떻게 파생되는지 보여줍니다.
기본 클래스. Ipv4ListRouting 클래스(Ipv4ListRoutingImpl 구현 클래스)는 다음을 제공합니다.
기존 목록 라우팅 접근 방식 NS-3. API는 기본 클래스와 동일합니다.
우선 순위가 지정된 여러 라우팅 프로토콜을 추가하는 기능을 제외한 Ipv4Routing
(Ipv4ListRouting::AddRoutingProtocol(), Ipv4ListRouting::GetRoutingProtocol()).
이러한 라우팅 프로토콜에 대한 자세한 내용은 아래에 설명되어 있습니다. 유니 캐스트 라우팅. 지금은
먼저 전 세계적으로 사용할 수 있는 기본 유니캐스트 라우팅 기능부터 시작하겠습니다.
신경 쓰지 않는 시뮬레이션 사용자를 위해 시뮬레이션 시간 t=0에 라우팅 테이블을 구축합니다.
동적 라우팅.
글로벌 중앙 라우팅
전역 중앙 집중식 라우팅을 "신" 라우팅이라고도 합니다. 그것은 특별하다
시뮬레이션 토폴로지를 따라 이동하고 최단 경로 알고리즘을 실행하는 구현
각 노드의 라우팅 테이블을 채웁니다. 실제 프로토콜 오버헤드 없음(시뮬레이션된 링크에서)
이 접근법으로 인해 발생합니다. 몇 가지 제약이 있습니다:
· 유선 만 : 무선 네트워크에서 사용하기 위한 것이 아닙니다.
· 유니 캐스트 만 : 멀티캐스트를 수행하지 않습니다.
· 확장성: 대규모 토폴로지(예: 1000개 노드)에서 이에 대한 일부 사용자는 다음을 발견했습니다.
현재 구현은 확장성이 좋지 않습니다. 전역 중앙 집중식 라우팅은 다음과 같습니다.
계산 및 런타임 성능을 줄이기 위해 향후 수정됩니다.
현재 지점 간 및 공유를 통한 글로벌 중앙 집중식 IPv4 유니캐스트 라우팅
(CSMA) 링크가 지원됩니다.
기본적으로 NS-3 도우미 API 및 기본 InternetStackHelper, 전역
라우팅 기능이 노드에 추가되고 글로벌 라우팅이
고정 경로보다 우선순위가 낮은 라우팅 프로토콜(예: 사용자가 경로를 삽입할 수 있음)
Ipv4StaticRouting API를 통해 전역에서 찾은 경로보다 우선합니다.
라우팅).
글로벌 유니 캐스트 라우팅 API
공개 API는 매우 작습니다. 사용자 스크립트에는 다음이 포함됩니다.
#include "ns3/internet-module.h"
기본 InternetStackHelper가 사용되는 경우 전역 라우팅 인스턴스는 다음과 같습니다.
각 노드에 집계됩니다. IP 주소가 구성된 후 다음 함수 호출
IPv4 인터페이스가 있는 모든 노드가 전달 테이블을 수신하게 됩니다.
GlobalRouteManager에 의해 자동으로 입력됩니다:
Ipv4GlobalRoutingHelper::PopulateRoutingTables();
참고 : Wi-Fi NetDevice는 작동하지만 무선 효과는 발생하지 않는다는 알림
계정에. 무선의 경우 아래 설명된 OLSR 동적 라우팅을 권장합니다.
시뮬레이션 도중에 이 함수를 다시 호출할 수 있습니다.
다음과 같은 추가 공개 기능:
Ipv4GlobalRoutingHelper::RecomputeRoutingTables();
이전 테이블을 플러시하고 노드에서 새 인터페이스 정보를 쿼리하며
경로를 재구성합니다.
예를 들어, 이 예약 호출로 인해 테이블이 5초에 다시 작성됩니다.
시뮬레이터::일정(초(5),
&Ipv4GlobalRoutingHelper::RecomputeRoutingTables);
동작을 제어하는 두 가지 속성이 있습니다. 첫 번째는
Ipv4GlobalRouting::RandomEcmpRouting. true로 설정하면 패킷이 무작위로 라우팅됩니다.
동일 비용 다중 경로 경로. false(기본값)로 설정하면 하나의 경로만 일관되게 사용됩니다.
사용된. 두 번째는 Ipv4GlobalRouting::RespondToInterfaceEvents입니다. true로 설정하면
인터페이스 알림 이벤트(up/down 또는
주소 추가/제거). false(기본값)로 설정하면 사용자가 수동으로 라우팅하지 않으면 라우팅이 중단될 수 있습니다.
이러한 이벤트 후에 RecomputeRoutingTables()를 호출합니다. 기본값은 false로 설정되어 보존됩니다.
유산 NS-3 프로그램 행동.
글로벌 라우팅 실시
이 섹션은 이것이 어떻게 구현되는지 관심이 있는 독자를 위한 것입니다. 싱글톤
객체(GlobalRouteManager)는 각 노드의 정적 경로를 채우는 역할을 담당합니다.
해당 노드의 공개 IPv4 API를 사용합니다. 토폴로지의 각 노드에 대해 쿼리합니다.
"글로벌 라우터" 인터페이스. 발견되면 해당 인터페이스의 API를 사용하여 "링크"를 얻습니다.
상태 알림(LSA)'은 라우터에 대한 것입니다. 링크 상태 알림은 OSPF에서 사용됩니다.
라우팅하고 우리는 그 형식을 따릅니다.
이러한 모든 계산은 패킷이 흐르기 전에 수행된다는 점에 유의하는 것이 중요합니다.
네트워크에서. 특히 교환되는 오버헤드나 제어 패킷이 없습니다.
이 구현을 사용할 때. 대신에 이 전역 경로 관리자는 다음 목록을 따라가기만 합니다.
필요한 정보를 구축하고 각 노드의 라우팅 테이블을 구성합니다.
GlobalRouteManager는 전체 경로에서 수집된 LSA로 링크 상태 데이터베이스를 채웁니다.
토폴로지. 그런 다음 토폴로지의 각 라우터에 대해 GlobalRouteManager는 OSPF를 실행합니다.
데이터베이스에 대한 SPF(최단 경로 우선) 계산을 수행하고 라우팅 테이블을 채웁니다.
각 노드.
콰가(http://www.quagga.net) OSPF 구현은 다음의 기초로 사용되었습니다.
라우팅 계산 논리. 기존 OSPF SPF 구현을 따르면서 얻을 수 있는 이점 중 하나는 다음과 같습니다.
OSPF는 이미 모든 일반적인 유형의 네트워크에 대한 링크 상태 알림을 정의했습니다.
모래밭:
· 지점 간(직렬 링크)
· 지점 대 다중 지점(프레임 릴레이, 임시 무선)
· 비방송 다중접속(ATM)
· 방송(이더넷)
따라서 이제 이러한 다른 링크 유형을 활성화하는 것이 더 간단해질 것이라고 생각합니다.
기본 OSPF SPF 프레임워크가 마련되어 있는지 확인하세요.
현재 우리는 IPv4 지점 간, 번호가 매겨진 링크 및 공유 브로드캐스트를 처리할 수 있습니다.
(CSMA) 링크. 동일 비용 다중 경로도 지원됩니다. 무선 링크 유형은
구현에 의해 지원되지만 이 구현의 특성으로 인해
채널 효과는 고려되지 않으며 라우팅 테이블은 모든 노드가
동일한 공유 채널에 있는 노드는 다른 모든 노드에서 도달할 수 있습니다(즉, 처리됩니다).
브로드캐스트 CSMA 링크와 같습니다).
GlobalRouteManager는 먼저 노드 목록을 탐색하고 GlobalRouter를 집계합니다.
다음과 같이 각각에 인터페이스합니다.
typedef std::벡터 >::iterator Iterator;
for (반복자 i = NodeList::Begin (); i != NodeList::End (); i++)
{
Ptr 노드 = *i;
Ptr globalRouter = CreateObject (노드);
노드->AggregateObject(globalRouter);
}
이 인터페이스는 나중에 쿼리되어 각 인터페이스에 대한 링크 상태 알림을 생성하는 데 사용됩니다.
라우터와 이 링크 상태 데이터베이스는 OSPF 최단 경로 계산 논리에 공급됩니다.
Ipv4 API는 최종적으로 경로 자체를 채우는 데 사용됩니다.
유니 캐스트 라우팅
현재 IPv4용으로 6개, IPvXNUMX용으로 XNUMX개 정의된 유니캐스트 라우팅 프로토콜이 있습니다.
· 클래스 Ipv4StaticRouting(유니캐스트와 멀티캐스트 모두 포함)
· IPv4 OLSR(Optimized Link State Routing)(에 정의된 MANET 프로토콜) RFC 3626)
· IPv4 Ad Hoc On Demand Distance Vector(AODV)(에 정의된 MANET 프로토콜) RFC 3561)
· IPv4 DSDV(Destination Sequenced Distance Vector)(MANET 프로토콜)
· IPv4 DSR(Dynamic Source Routing)(MANET 프로토콜)
· 클래스 Ipv4ListRouting(우선순위가 지정된 라우팅 프로토콜 목록을 저장하는 데 사용됨)
· 클래스 Ipv4GlobalRouting(전역 경로 관리자가 계산한 경로를 저장하는 데 사용됩니다.
사용되는 것입니다)
· 클래스 Ipv4NixVectorRouting(저장하는 전역 라우팅의 보다 효율적인 버전)
패킷 헤더 필드의 소스 경로)
· 클래스 Ipv6ListRouting(우선순위가 지정된 라우팅 프로토콜 목록을 저장하는 데 사용됨)
· 클래스 Ipv6StaticRouting
· 클래스 RipNg - IPv6 RIPng 프로토콜(RFC 2080)
미래에는 이 아키텍처를 통해 누군가가 Linux와 유사한 기능을 구현할 수도 있습니다.
라우팅 캐시 또는 Click 모듈식 라우터를 사용하여 구현했지만 범위를 벗어났습니다.
지금 당장.
Ipv[4,6]목록 라우팅
이 섹션에서는 현재 기본값을 설명합니다. NS-3 Ipv[4,6]라우팅 프로토콜. 일반적으로,
여러 라우팅 프로토콜이 사용자 공간에서 지원되며 단일 라우팅 프로토콜을 작성하도록 조정됩니다.
커널의 전달 테이블. 현재 NS-3대신 구현에서는 다음을 허용합니다.
자체 라우팅 상태를 구축/유지하기 위한 여러 라우팅 프로토콜 및 IP
구현은 이러한 라우팅 프로토콜 각각을 쿼리합니다(에 의해 결정된 순서대로).
시뮬레이션 작성자) 경로를 찾을 때까지.
우리는 서로 다른 요소의 통합을 더 쉽게 할 수 있기 때문에 이 접근 방식을 선택했습니다.
단일 테이블에 대한 쓰기를 조정하기 어려울 수 있는 라우팅 접근 방식,
대상 IP 주소(예: 소스 라우팅)보다 더 많은 정보가 있는 접근 방식
다음 홉을 결정하는 데 사용되며 패킷이 있어야 하는 주문형 라우팅 접근 방식
캐시.
Ipv[4,6]4ListRouting::AddRoutingProtocol
Ipv4ListRouting 및 Ipv6ListRouting 클래스는 순수 가상 함수 선언을 제공합니다.
라우팅 프로토콜을 추가할 수 있는 방법은 다음과 같습니다.
void AddRoutingProtocol(Ptr 라우팅프로토콜,
int16_t 우선순위);
void AddRoutingProtocol(Ptr 라우팅프로토콜,
int16_t 우선순위);
이러한 메소드는 각각 Ipv4ListRoutingImpl 클래스와 클래스에 의해 구현됩니다.
인터넷 모듈의 Ipv6ListRoutingImpl.
위의 우선순위 변수는 라우팅 프로토콜의 우선순위를 제어합니다.
삽입됨. 이는 서명된 int입니다. 기본적으로 NS-3, 도우미 클래스는
Ipv[4,6]ListRoutingImpl 객체를 인스턴스화하고 여기에 Ipv[4,6]StaticRoutingImpl을 추가합니다.
우선순위가 4,6인 객체. 내부적으로 Ipv[XNUMX]RoutingProtocols 목록이 저장됩니다.
라우팅 프로토콜은 우선순위가 감소하는 순서로 각각 참조됩니다.
일치하는 항목이 발견되었는지 여부. 따라서 Ipv4RoutingProtocol에 우선순위를 부여하려면
정적 라우팅보다 낮으면 0보다 낮은 우선순위로 삽입하세요. 예:
Ptr myRoutingProto = CreateObject ();
listRoutingPtr->AddRoutingProtocol(myRoutingProto, -10);
RouteOutput() 또는 RouteInput()을 호출하면 목록 라우팅 개체가 목록을 검색합니다.
경로를 찾을 때까지 우선순위에 따라 라우팅 프로토콜을 탐색합니다. 이러한 라우팅 프로토콜
적절한 콜백을 호출하고 더 이상 라우팅 프로토콜이 검색되지 않습니다.
최적화 (링크) 주 정부 라우팅 (OLSR)
이 IPv4 라우팅 프로토콜은 원래 ns-2용 OLSR-UM 구현에서 이식되었습니다.
구현은 src/olsr 디렉토리에 있으며 예제 스크립트는 다음 위치에 있습니다.
예제/simple-point-to-point-olsr.cc.
일반적으로 OLSR은 설치하는 OlsrHelper 클래스를 사용하여 기본 프로그램에서 활성화됩니다.
OLSR을 Ipv4ListRoutingProtocol 객체로 변환합니다. 다음 샘플 명령을 사용하면
다른 라우팅 도우미 개체와 함께 이 도우미 클래스를 사용하는 시뮬레이션의 OLSR입니다.
staticRouting 우선순위 10보다 우선순위 값을 0으로 설정하면 다음과 같습니다.
OLSR은 노드의 정적 라우팅 테이블 이전에 경로에 대해 문의합니다.:
노드컨테이너 c:
...
// OLSR 활성화
NS_LOG_INFO("OLSR 라우팅 활성화.");
OlsrHelper olsr;
Ipv4StaticRoutingHelper staticRouting;
Ipv4ListRoutingHelper 목록;
목록.추가(정적 라우팅, 0);
목록.추가(olsr, 10);
InternetStackHelper 인터넷;
internet.SetRoutingHelper(목록);
인터넷.설치(c);
일단 설치되면 SetMainInterface() 명령을 사용하여 OLSR "기본 인터페이스"를 설정할 수 있습니다.
사용자가 기본 주소를 지정하지 않으면 프로토콜은 첫 번째 기본 IP를 선택합니다.
찾은 주소, 먼저 루프백 인터페이스를 시작한 다음 다음 인터페이스를 시작합니다.
IPv4 인터페이스 인덱스 순서대로 비루프백 인터페이스가 발견되었습니다. 루프백 주소
127.0.0.1이 선택되지 않았습니다. 또한, 다수의 프로토콜 상수가 정의되어 있습니다.
olsr-라우팅-프로토콜.cc.
Olsr은 Object::Start()에 대한 호출을 기반으로 시뮬레이션의 0번째 시간에 시작됩니다.
결국 OlsrRoutingProtocol::DoStart()를 호출합니다. 참고: 사용자가 시작할 수 있도록 하는 패치
다른 때에는 프로토콜을 중지하는 것이 좋습니다.
현재 OLSR은 Ipv4ListRouting 객체와 함께 사용하도록 제한되어 있으며 이에 응답하지 않습니다.
장치의 IP 주소 또는 링크 업/다운 알림에 대한 동적 변경; 즉, 토폴로지
변경 사항은 무선 채널을 통한 연결 손실/확보로 인해 발생합니다.
리핑
이 IPv6 라우팅 프로토콜(RFC 2080)는 잘 알려진 RIPv1 및 RIPv2의 진화입니다.
(참조 RFC 1058 and RFC 1723) IPv4용 라우팅 프로토콜.
프로토콜은 매우 간단하며 일반적으로 평면적이고 단순한 네트워크에 적합합니다.
토폴로지.
RIPng는 RIPv1과 RIPv2를 기반으로 하며 동일한 목표를 가지고 있으며
제한. 특히 RIP는 메트릭이 16보다 크거나 같은 모든 경로를 고려합니다.
도달할 수 없을 만큼. 결과적으로 네트워크의 최대 홉 수는 더 적어야 합니다.
15개 이상(라우터 수는 설정되지 않음) 사용자는 다음을 읽으도록 권장됩니다. RFC 2080 and RFC
1058 RIPng 동작 및 제한 사항을 완전히 이해합니다.
라우팅 수렴
RIPng는 거리 벡터 알고리즘을 사용하며 경로는 다음과 같이 업데이트됩니다.
Bellman-Ford 알고리즘(Ford-Fulkerson 알고리즘이라고도 함). 알고리즘은
O(|V|*|E|)의 수렴 시간 여기서 |V| 그리고 |E| 정점(라우터)의 수는 다음과 같습니다.
가장자리 (링크) 각각. 수렴 시간은 숫자라는 점을 강조해야 합니다.
알고리즘의 단계는 각 단계가 메시지에 의해 트리거됩니다. 트리거된 이후
업데이트(즉, 경로가 변경되는 경우)에는 1~5초의 쿨다운이 있으며 토폴로지는 다음을 수행할 수 있습니다.
안정화되기까지는 시간이 좀 필요합니다.
사용자는 라우팅 테이블을 구성하는 동안 라우터가 삭제될 수 있다는 점을 알고 있어야 합니다.
패킷. 데이터 트래픽은 RIPng가 빌드될 수 있을 만큼 충분한 시간이 지난 후에만 전송되어야 합니다.
네트워크 토폴로지. 일반적으로 80초이면 최적이 아닌 결과를 얻기에 충분합니다(그러나
작업 중) 라우팅 설정. 여기에는 경로를 가장 많이 전파하는 데 필요한 시간이 포함됩니다.
트리거 업데이트가 포함된 원격 라우터(16홉).
네트워크 토폴로지가 변경되면(예: 링크가 끊어짐) 복구 시간이 길어질 수 있습니다.
상당히 높으며 초기 설정 시간보다 훨씬 길어질 수도 있습니다. 게다가 네트워크는
토폴로지 복구는 Split Horizoning 전략의 영향을 받습니다.
예 예제/라우팅/ripng-simple-network.cc 네트워크 설정과
네트워크 복구 단계.
스플릿 수평 조정
Split Horizon은 라우팅 불안정성을 방지하기 위한 전략입니다. 세 가지 옵션이 가능합니다:
· 분할 지평선 없음
· 분할 지평선
· 포이즌 리버스
첫 번째 경우 경로는 모든 라우터의 인터페이스에 광고됩니다. 두 번째에는
이 경우 라우터는 경로가 학습된 인터페이스에 경로를 알리지 않습니다.
Poison Reverse는 학습한 인터페이스에 경로를 광고하지만
측정항목이 16(무한대)입니다. 세 가지 기술에 대한 전체 분석을 보려면 다음을 참조하세요. RFC
1058, 섹션 2.2.
예 ripng-simple-network.cc RFC에 설명된 네트워크 토폴로지를 기반으로 하며,
그러나 거기에 설명된 효과는 표시되지 않습니다.
그 이유는 트리거된 업데이트 때문이며, 라우터가
경로를 무효화하면 경로 도달 불가능이 즉시 전파됩니다.
RFC에 설명된 대부분의 문제를 방지합니다.
그러나 복잡한 토폴로지에서는 여전히 경로 불안정 현상이 발생할 수 있습니다.
링크 실패 후 RFC에 설명된 것과 유사합니다. 그 결과, 모든
Split Horizon에 대한 고려 사항은 유효합니다.
태만 노선
RIPng 프로토콜을 설치해야 합니다. 만 라우터에서. 결과적으로 노드는 알지 못합니다.
기본 라우터는 무엇입니까?
이 제한을 극복하려면 사용자는 기본 경로를 수동으로 설치해야 합니다(예:
Ipv6StaticRouting을 사용하거나 RADVd를 사용합니다. RADVd는 다음에서 사용할 수 있습니다. NS-3 인간을
응용 프로그램 모듈이며 강력히 권장됩니다.
프로토콜 매개 변수 and 옵션
RIPng NS-3 구현을 통해 경로와 관련된 모든 타이머를 변경할 수 있습니다.
업데이트 및 경로 수명.
또한 사용자는 노드별로 인터페이스 측정항목을 변경할 수 있습니다.
분할 수평 조정 유형(경로 역전파 방지)은 다음에서 선택할 수 있습니다.
노드별 기준, "분할 지평선 없음", "지평 분할" 및 "독" 중에서 선택할 수 있습니다.
반전 ". 참조 RFC 2080 자세한 내용은 RFC 1058 대한 완전한 논의를 위해
분할 수평 전략.
제한 사항
다음 홉 옵션은 지원되지 않습니다(RFC 2080, 섹션 2.1.1). 다음 홉
이 옵션은 RIPng가 네트워크의 모든 라우터에서 실행되고 있지 않을 때 유용합니다. 지원하다
이 옵션은 향후에 고려될 수 있습니다.
CIDR 접두사 집계는 지원되지 않습니다. 결과적으로 라우팅 테이블과
경로 광고는 필요한 것보다 클 수 있습니다. 접두사 집계가 다음에 추가될 수 있습니다.
미래.
멀티 캐스트 라우팅
다음 기능은 노드에 정적 멀티캐스트 경로를 추가하는 데 사용됩니다.
무효화
Ipv4StaticRouting::AddMulticastRoute(Ipv4Address 원본,
IPv4주소 그룹,
uint32_t 입력인터페이스,
std::벡터 출력인터페이스);
멀티캐스트 경로는 원본 IP 주소, 멀티캐스트 그룹 및 입력을 지정해야 합니다.
네트워크 인터페이스 인덱스를 조건으로 하고 출력 네트워크 인터페이스의 벡터를 제공합니다.
조건과 일치하는 패킷이 전송되는 인덱스입니다.
일반적으로 멀티캐스트 경로에는 두 가지 주요 유형이 있습니다. 첫 번째 종류의 경로가 사용됩니다.
전달하는 동안. 모든 조건을 명시적으로 제공해야 합니다. 두 번째 종류의
경로는 로컬 노드에서 패킷을 가져오는 데 사용됩니다. 차이점은 입력에 있습니다
상호 작용. 전달 경로에는 항상 명시적인 입력 인터페이스가 지정됩니다.
노드 외부의 경로는 항상 입력 인터페이스를 다음에서 지정한 와일드카드로 설정합니다.
인덱스 Ipv4RoutingProtocol::IF_INDEX_ANY.
로컬 노드에서 벗어난 경로의 경우 원본 및 멀티캐스트 그룹에서 와일드카드를 사용할 수 있습니다.
구애. Ipv4Adresses에 사용되는 와일드카드는
Ipv4Address::GetAny () - 일반적으로 "0.0.0.0"입니다. 와일드카드를 사용하면 다음을 지정할 수 있습니다.
다양한 수준의 기본 동작.
예를 들어 원본 주소를 와일드카드로 설정하고 멀티캐스트 그룹을 떠나는 경우
특정을 사용하면 (여러 인터페이스가 있는 노드의 경우) 다른 것을 생성할 수 있습니다.
각 멀티캐스트 그룹에 대해 서로 다른 출력 인터페이스를 사용하여 라우팅합니다.
원본 주소와 멀티캐스트 주소가 와일드카드로 만들어진 경우 기본적으로
여러 인터페이스로 전달할 수 있는 기본 멀티캐스트 주소입니다. 이것을 다음과 비교해보세요.
단일 출력 인터페이스 지정으로 제한되는 실제 기본 멀티캐스트 주소
다른 시스템의 기존 기능과의 호환성을 위해.
또 다른 명령은 기본 멀티캐스트 경로를 설정합니다.
무효화
Ipv4StaticRouting::SetDefaultMulticastRoute(uint32_t outputInterface);
이는 유니캐스트 버전 SetDefaultRoute와 동등한 멀티캐스트입니다. 우리는
라우팅 시스템 대상 멀티캐스트에 대한 특정 경로가 있는 경우 수행할 작업
그룹을 찾을 수 없습니다. 시스템은 희망에 따라 지정된 인터페이스 밖으로 패킷을 전달합니다.
"무엇인가"가 패킷을 라우팅하는 방법을 더 잘 알고 있습니다. 이 방법은 오직
처음에 호스트에서 패킷을 보낼 때. 기본 멀티캐스트 경로는 참조되지 않습니다.
전달하는 동안 - 이 경우 AddMulticastRoute를 사용하여 정확한 경로를 지정해야 합니다.
우리는 기본적으로 어떤 엔터티에 패킷을 보내고 있기 때문에 무엇을 해야할지 더 잘 알 수 있다고 생각합니다.
우리는 출발지 주소와 같은 "미묘한 부분"에 주의를 기울이지 않으며,
여러 인터페이스를 전달합니다. 기본 멀티캐스트 경로가 설정된 경우 반환됩니다.
다음과 같은 경우 원본이나 멀티캐스트 그룹에 관계없이 LookupStatic에서 선택한 경로로
다른 특정 경로를 찾을 수 없습니다.
마지막으로 멀티캐스트를 가져오고 제거하기 위한 여러 추가 기능이 제공됩니다.
경로 :
uint32_t GetNMulticastRoutes (void) const;
Ipv4MulticastRoute *GetMulticastRoute(uint32_t i) const;
Ipv4MulticastRoute *GetDefaultMulticastRoute(void) const;
bool RemoveMulticastRoute(Ipv4Address 원본,
IPv4주소 그룹,
uint32_t inputInterface);
void RemoveMulticastRoute(uint32_t 인덱스);
TCP 모델 in NS-3
이 장에서는 다음에서 사용할 수 있는 TCP 모델을 설명합니다. NS-3.
일반적인 SUPPORT for TCP
NS-3 다중 TCP 구현을 지원하기 위해 작성되었습니다. 구현은 다음에서 상속됩니다.
몇 가지 일반적인 헤더 클래스 소스/네트워크 사용자 코드가 교체될 수 있도록 디렉터리
스크립트를 최소한으로 변경하여 구현합니다.
두 가지 중요한 추상 기본 클래스가 있습니다.
· 수업 Tcp소켓: 이것은 다음에서 정의됩니다. src/인터넷/모델/tcp-socket.{cc,h}. 이 수업
다양한 환경에서 재사용할 수 있는 TcpSocket 속성을 호스팅하기 위해 존재합니다.
구현. 예를 들어, 속성 초기Cwnd 다음 중 하나에 사용할 수 있습니다.
클래스에서 파생된 구현 Tcp소켓.
· 수업 Tcp소켓팩토리: 레이어 4 프로토콜 인스턴스에서 TCP를 생성하는 데 사용됩니다.
올바른 유형의 소켓.
현재 TCP 구현에는 세 가지가 있습니다. NS-3.
· ns-3용으로 기본적으로 구현된 TCP
· 지원 네트워크 시뮬레이션 요람 (NSC)
· 을지 지하다 직접 암호 실행 (DCE)
가상 머신을 결합하는 다양한 방법도 언급되어야 합니다. NS-3
일부 추가 TCP 구현도 사용할 수 있지만 이는 범위를 벗어납니다.
이 장.
NS-3 TCP
ns-3.10 출시 전까지는 NS-3 TCP 모델의 포트가 포함되어 있습니다. GTNetS. 이
ns-3.10에 대한 구현은 Adriam Tam에 의해 실질적으로 재작성되었습니다. 모델은 완전
TCP는 양방향이며 연결 설정을 모델링하고 닫으려고 시도한다는 점에서
논리.
TCP 구현은 다음 파일에 포함되어 있습니다.
src/인터넷/모델/tcp-header.{cc,h}
src/인터넷/모델/tcp-l4-protocol.{cc,h}
src/인터넷/모델/tcp-socket-factory-impl.{cc,h}
src/인터넷/모델/tcp-socket-base.{cc,h}
src/인터넷/모델/tcp-tx-buffer.{cc,h}
src/인터넷/모델/tcp-rx-buffer.{cc,h}
src/인터넷/모델/tcp-rfc793.{cc,h}
src/인터넷/모델/tcp-tahoe.{cc,h}
src/인터넷/모델/tcp-reno.{cc,h}
src/인터넷/모델/tcp-westwood.{cc,h}
src/인터넷/모델/tcp-newreno.{cc,h}
src/인터넷/모델/rtt-estimator.{cc,h}
src/네트워크/모델/시퀀스 번호.{cc,h}
공통 베이스를 서브클래싱하여 TCP 혼잡 제어의 다양한 변형이 지원됩니다.
수업 Tcp소켓베이스. 다음을 포함한 여러 변형이 지원됩니다. RFC 793 (혼잡 없음
컨트롤), Tahoe, Reno, Westwood, Westwood+ 및 NewReno. 기본적으로 NewReno가 사용됩니다. 보다
사용되는 기본 TCP 변형을 변경하는 방법에 대한 이 문서의 사용법 섹션을 참조하세요.
시뮬레이션.
용법
대부분의 경우 TCP 사용은 애플리케이션 계층에서 다음과 같이 설정됩니다. NS-3
어떤 종류의 소켓 팩토리를 사용할 것인지에 대한 응용 프로그램입니다.
다음에 정의된 도우미 함수 사용 src/응용 프로그램/도우미 and 소스/네트워크/도우미, 여기
TCP 수신기를 만드는 방법은 다음과 같습니다.
// 이러한 패킷을 수신하기 위해 스타 "허브"에 패킷 싱크를 만듭니다.
uint16_t 포트 = 50000;
주소inkLocalAddress(InetSocketAddress(Ipv4Address::GetAny(), 포트));
PacketSinkHelperinkHelper("ns3::TcpSocketFactory",inkLocalAddress);
ApplicationContainerinkApp=sinkHelper.Install(serverNode);
inkApp.Start(초(1.0));
inkApp.Stop(초(10.0));
마찬가지로 아래 코드 조각은 TCP를 사용하도록 OnOffApplication 트래픽 소스를 구성합니다.
// 서버에 TCP를 보내는 OnOff 애플리케이션을 만듭니다.
OnOffHelper clientHelper("ns3::TcpSocketFactory", 주소());
주의 깊은 독자라면 위에서 우리가 추상 베이스의 TypeId를 지정했다는 점을 주목할 것입니다.
수업 Tcp소켓팩토리. 스크립트는 어떻게 말합니까? NS-3 그것은 원주민을 원한다 NS-3 TCP
vs. 다른 것? 인터넷 스택이 노드에 추가되면 기본 TCP는
노드에 집계된 구현은 NS-3 TCP. 이는 다음과 같이 재정의될 수 있습니다.
Network Simulation Cradle을 사용하면 아래와 같습니다. 따라서 기본적으로 NS-3
도우미 API, 인터넷 스택이 있는 노드에 집계되는 TCP가 기본입니다. NS-3
TCP.TCP
TCP의 동작을 구성하기 위해 여러 매개변수가 다음을 통해 내보내집니다. NS-3
속성 시스템. 이러한 내용은 다음 문서에 문서화되어 있습니다. 독소
<http://www.nsnam.org/doxygen/classns3_1_1_tcp_socket.html> 학급을 위해 Tcp소켓. 용
예를 들어 최대 세그먼트 크기는 설정 가능한 속성입니다.
인터넷 스택 관련 개체가 생성되기 전에 기본 소켓 유형을 설정하려면 다음 중 하나를 수행하십시오.
시뮬레이션 프로그램 상단에 다음 명령문을 넣을 수 있습니다.
Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpTahoe"));
실제 소켓에 대한 포인터를 갖고 싶어하는 사용자(예: 다음과 같은 소켓 작업이 가능하도록)
Bind(), 소켓 옵션 설정 등은 소켓별로 수행할 수 있습니다.), Tcp 소켓은 다음을 수행할 수 있습니다.
를 사용하여 생성됩니다. 소켓::CreateSocket() 방법. 전달된 TypeId
CreateSocket()은 유형이어야 합니다. ns3::소켓팩토리, 따라서 기본 소켓을 구성합니다.
유형은 기본 TcpL4Protocol과 연관된 속성을 조작하여 수행되어야 합니다.
물체. 이를 해결하는 가장 쉬운 방법은 속성 구성을 이용하는 것입니다.
체계. 아래 예에서는 노드 컨테이너 "n0n1"에 액세스하여 XNUMX번째를 가져옵니다.
요소이며 이 노드에 소켓이 생성됩니다.
// 소켓을 생성하고 바인딩합니다...
TypeId tid = TypeId::LookupByName ("ns3::TcpTahoe");
Config::Set ("/NodeList/*/$ns3::TcpL4Protocol/SocketType", TypeIdValue (tid));
Ptr localSocket =
소켓::CreateSocket(n0n1.Get(0), TcpSocketFactory::GetTypeId());
위에서는 노드 번호에 대한 "*" 와일드카드가 속성 구성 시스템에 전달되었습니다.
따라서 노드 'n0n1.Get(0)'뿐만 아니라 모든 노드의 향후 모든 소켓이 Tahoe로 설정됩니다.
지정된 노드로만 제한하려면 다음과 같이 해야 합니다.
// 소켓을 생성하고 바인딩합니다...
TypeId tid = TypeId::LookupByName ("ns3::TcpTahoe");
std::stringstream nodeId;
nodeId GetId();
std::string 특정Node = "/NodeList/" + nodeId.str () + "/$ns3::TcpL4Protocol/SocketType";
Config::Set(특정 노드, TypeIdValue(tid));
Ptr localSocket =
소켓::CreateSocket(n0n1.Get(0), TcpSocketFactory::GetTypeId());
TCP 소켓이 생성되면 기존 소켓 논리를 따르고 다음 중 하나를 수행할 수 있습니다.
connect() 및 send()(TCP 클라이언트의 경우) 또는 바인딩(), Listen() 및 accept()(TCP 클라이언트의 경우)
섬기는 사람). 소켓이 사용되는 방식에 대한 검토는 소켓-API를 참조하세요. NS-3.
검증
여러 TCP 검증 테스트 결과는 다음에서 확인할 수 있습니다. 위키 페이지 이것을 설명하는
구현.
Current 한계
· SACK은 지원되지 않습니다
네트워크 시뮬레이션 요람
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 네트워크 시뮬레이션 요람 (NSC) 실제 네트워크 코드를 래핑하기 위한 프레임워크입니다.
시뮬레이터로 변환하여 약간의 추가 비용으로 실제 동작을 시뮬레이션할 수 있습니다. 이것
테스트 네트워크를 사용하여 상황을 비교하여 작업이 검증되었습니다.
시뮬레이터의 상황. 현재까지 NSC가 생산할 수 있는 것으로 나타났습니다.
매우 정확한 결과. NSC는 FreeBSD, OpenBSD, lwIP의 네 가지 실제 스택을 지원합니다.
그리고 리눅스. 네트워크 스택을 수동으로 변경하지 않는 것이 강조되었습니다. 아니다
다음 중 하나의 네트워크 프로토콜 구현에서 코드 한 줄이 변경되었습니다.
위의 4개 스택. 그러나 프로그래밍 방식으로 변경하기 위해 사용자 정의 C 파서가 구축되었습니다.
소스 코드.
NSC는 이전에 다음으로 포팅되었습니다. NS-2 및 OMNeT++에 추가되었습니다. NS-3 9 월
2008(ns-3.2 릴리스). 이 섹션에서는 NS-3 NSC 포트 및 사용 방법.
어느 정도 NSC는 Linux 커널 지원으로 대체되었습니다. 직접 암호
실행 (DCE). 그러나 NSC는 베이크 빌드 시스템을 통해 계속 사용할 수 있습니다. NSC
Linux 커널 2.6.18 및 2.6.26을 지원하지만 최신 버전의 커널은 지원되지 않습니다.
포팅.
사전 조건
현재 NSC는 테스트를 거쳐 Linux i386 및 Linux 플랫폼에서 작동하는 것으로 나타났습니다.
x86-64. NSC는 powerpc를 지원하지 않습니다. FreeBSD 또는 OS X에서의 사용은 지원되지 않습니다(비록
일할 수도 있습니다).
NSC를 구축하려면 flex 및 bison 패키지가 필요합니다.
구성 and 다운로드
ns-3.17 이상부터 NSC는 자체 저장소에서 별도로 다운로드해야 합니다.
또는 사용시 다운로드 굽다 빌드 체계 of NS-3.
ns-3.17 이상 릴리스의 경우 베이킹을 사용할 때 NSC를 다음의 일부로 구성해야 합니다.
다음과 같은 "알리논" 구성:
$ CD 굽기
$ python baking.py 구성 -e ns-allinone-3.19
$ 파이썬 baking.py 다운로드
$ 파이썬 baking.py 빌드
출시된 버전 대신 다음을 지정하여 ns-3 개발 버전을 사용할 수 있습니다.
위의 구성 단계에 "ns-3-allinone"을 추가합니다.
NSC는 다음에서 다운로드할 수도 있습니다. 그것의 다운로드 대지 Mercurial 사용 :
$ hg 클론 https://secure.wand.net.nz/mercurial/nsc
ns-3.17 릴리스 이전에는 NSC가 allinone tarball에 포함되어 릴리스되었습니다.
버전은 별도로 다운로드할 필요가 없습니다.
건물 and 검증
NSC는 베이킹 빌드 프로세스의 일부로 빌드될 수 있습니다. 대안으로 NSC를 구축할 수도 있습니다.
빌드 시스템을 사용하여 자체적으로 예:
$ CD nsc-dev
$ 파이썬 scons.py
NSC가 수동으로 또는 베이킹 시스템을 통해 구축되면 NS-3
소스 디렉터리를 열고 다음 구성을 실행해 보세요.
$ ./waf 구성
NSC가 이전에 구축되어 waf에 의해 발견된 경우 다음이 표시됩니다.
네트워크 시뮬레이션 크래들: 활성화됨
NSC를 찾지 못한 경우 다음이 표시됩니다.
네트워크 시뮬레이션 크래들: 활성화되지 않음(NSC를 찾을 수 없음(--with-nsc 옵션 참조))
이 경우 NSC 라이브러리에 대한 상대 또는 절대 경로를 다음과 같이 전달해야 합니다.
"--with-nsc" 구성 옵션; 예를 들어
$ ./waf 구성 --with-nsc=/path/to/my/nsc/directory
럭셔리 NS-3 ns-3.17 릴리스 이전 릴리스에서는 build.py ns-3-allinone의 스크립트
디렉토리에 있으면 플랫폼이 지원하지 않는 한 NSC는 기본적으로 구축됩니다. 에게
빌드할 때 명시적으로 비활성화 NS-3, 입력 :
$ ./waf 구성 --enable-examples --enable-tests --disable-nsc
waf가 NSC를 감지하면 건물이 구축됩니다. NS-3 NSC의 경우 waf와 동일한 방식으로 수행됩니다.
그것 없이는. 한 번 NS-3 빌드가 완료되면 다음 테스트 스위트를 실행해 보세요.
$ ./test.py -s ns3-tcp-상호 운용성
NSC가 성공적으로 구축되면 다음 테스트가 결과에 표시됩니다.
PASS TestSuite ns3-tcp-상호 운용성
이는 NSC를 사용할 준비가 되었음을 확인합니다.
용법
몇 가지 예제 파일이 있습니다. 노력하다:
$ ./waf --run tcp-nsc-zoo
$ ./waf --tcp-nsc-lfn 실행
이 예에서는 일부를 예치합니다. .pcap 다음으로 검사할 수 있는 디렉터리의 파일
tcpdump 또는 와이어샤크.
살펴보자 예제/tcp/tcp-nsc-zoo.cc 일반적인 용도에 대한 파일입니다. 어떻게 합니까?
네이티브를 사용하는 것과 다릅니다 NS-3 TCP? NSC를 사용할 때 하나의 기본 구성 라인이 있습니다.
그리고 NS-3 설정해야 하는 도우미 API:
InternetStackHelper internetStack;
internetStack.SetNscStack("liblinux2.6.26.so");
// 이는 노드 0과 1을 NSC Linux 2.6.26 스택으로 전환합니다.
internetStack.설치(n.Get(삼));
internetStack.설치(n.Get(삼));
핵심라인은 SetNscStack. 이는 InternetStack 도우미에게 집계를 지시합니다.
네이티브 대신 NSC TCP 인스턴스 NS-3 나머지 노드에 대한 TCP입니다. 그건 중요해
이 함수가 호출되도록 전에 전화 설치() 위에 보이는 것과 같이 기능을 수행합니다.
어떤 스택을 사용할 수 있나요? 현재는 Linux 2.6.18과 Linux에 중점을 두고 있습니다.
2.6.26 스택 NS-3. 어떤 스택이 빌드되었는지 확인하려면 다음 찾기를 실행할 수 있습니다.
명령 NS-3 최상위 디렉토리:
$ nsc -name "*.so" 찾기 -f 유형
nsc/linux-2.6.18/liblinux2.6.18.so
nsc/linux-2.6.26/liblinux2.6.26.so
이는 라이브러리 이름 liblinux2.6.18.so를 전달하거나 또는
liblinux2.6.26.so를 위의 구성 단계로 이동합니다.
스택 구성
NSC TCP는 다음과 같이 TCP 소켓 전체에 공통적으로 적용되는 동일한 구성 속성을 공유합니다.
위에 설명되어 있고 문서화되어 있습니다. 독소
또한 NSC TCP는 많은 구성 변수를 NS-3 속성
시스템을 통해 sysctl-같은 인터페이스. 에서 예제/tcp/tcp-nsc-zoo 예를 들어 볼 수 있습니다
다음 구성:
// 이는 노드 1의 TCP SACK, wscale 및 타임스탬프를 비활성화합니다(속성
sysctl 값을 나타냅니다).
Config::Set ("/NodeList/1/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_sack",
문자열값("0"));
Config::Set ("/NodeList/1/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_timestamps",
문자열값("0"));
Config::Set ("/NodeList/1/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_window_scaling",
문자열값("0"));
이러한 추가 구성 변수는 기본적으로 사용할 수 없습니다. NS-3 TCP.TCP
또한 TCP 속성의 기본값은 다음과 같습니다. NS-3 TCP는 nsc TCP와 다를 수 있습니다.
구현. 구체적으로 NS-3:
1. TCP 기본 MSS는 536입니다.
2. TCP 지연 승인 횟수는 2입니다.
따라서 nsc를 사용하여 얻은 결과를 비교할 때 NS-3 TCP, 케어
이러한 값이 적절하게 설정되었는지 확인하기 위해 수행해야 합니다. 보다
예를 보려면 /examples/tcp/tcp-nsc-comparision.cc를 참조하세요.
NSC API
이 하위 섹션에서는 NSC가 제공하는 API에 대해 설명합니다. NS-3 또는 다른 시뮬레이터. NSC
에 정의된 여러 클래스 형태로 API를 제공합니다.
sim/sim_interface.h nsc 디렉토리에 있습니다.
· INetStack INetStack에는 운영 체제 네트워크에 대한 '낮은 수준' 작업이 포함되어 있습니다.
스택, 예: 네트워크 스택과의 입출력 함수(이것을
'네트워크 드라이버 인터페이스'. 새로운 TCP 또는 UDP 소켓을 생성하는 기능도 있습니다.
· ISendCallback 이것은 패킷이 네트워크로 전송되어야 할 때 NSC에 의해 호출됩니다.
이 시뮬레이터는 이 콜백을 사용하여 패킷을 시뮬레이터에 다시 주입해야 합니다.
실제 데이터는 최종 목적지로 전달/라우팅될 수 있습니다.
수신()으로 전달되고 결국 다음을 통해 수신자 NSC 인스턴스로 돌아갑니다.
INetStack->if_receive() ).
· INetStream소켓 이는 특정 연결 끝점(파일
설명자). 여기에는 이 끝점에서 작동하는 메서드가 포함되어 있습니다. 연결하다, 연결을 끊다,
수락, 듣기, send_data/read_data, ...
· IInterruptCallback 여기에는 NSC가 언제든지 호출하는 웨이크업 콜백이 포함되어 있습니다.
흥미로운 일이 일어납니다. wakeup()을 운영 체제의 대체물로 생각하십시오.
시스템 깨우기 기능: 운영 체제가 프로세스를 깨울 때마다
작업이 완료되기를 기다리고 있었습니다(예: 작업 중 TCP 핸드셰이크
connect()), NSC는 시뮬레이터가 상태를 확인할 수 있도록 wakeup() 콜백을 호출합니다.
연결 끝점의 변경.
NS-3 이행
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 NS-3 구현은 위의 NSC API를 활용하며 다음과 같이 구현된다.
세 가지 주요 부분은 다음과 같습니다.
· ns3::NscTcpL4프로토콜: Ipv4L4Protocol의 하위 클래스(및 두 개의 nsc 클래스: ISendCallback)
및 IInterruptCallback)
· ns3::NscTcpSocketImpl: TcpSocket의 하위 클래스
· ns3::NscTcpSocketFactoryImpl: 새로운 NSC 소켓을 생성하는 팩토리
src/인터넷/모델/nsc-tcp-l4-프로토콜 메인 수업이다. 초기화 시 로드됩니다.
nsc 네트워크 스택을 사용할 것입니다(dlopen()을 통해). 이 클래스의 각 인스턴스는 서로 다른 클래스를 사용할 수 있습니다.
스택. 사용할 스택(=공유 라이브러리)은 SetNscLibrary() 메서드를 사용하여 설정됩니다.
인터넷 스택 도우미를 통해 간접적으로 호출되는 시간입니다.) 그런 다음 nsc 스택이 설정됩니다.
따라서 (타이머 등). NscTcpL4Protocol::Receive() 함수는 패킷을 전달합니다.
추가 처리를 위해 nsc 스택으로 수신합니다(완전한 tcp/ip 패킷이어야 함). 에게
패킷을 보낼 수 있도록 이 클래스는 nsc send_callback 메소드를 구현합니다. 이 방법
nsc 스택이 네트워크로 패킷을 보내려고 할 때마다 nsc에 의해 호출됩니다. 그것은
인수는 완전한 TCP/IP 패킷과 길이 값을 포함하는 원시 버퍼입니다. 이것
따라서 메소드는 원시 데이터를 다음에서 사용할 수 있는 Ptr으로 변환해야 합니다. NS-3. 하기 위해
다양한 ipv4 헤더 문제를 방지하려면 nsc ip 헤더가 포함되지 않습니다. 대신에 TCP는
헤더와 실제 페이로드는 Ptr에 저장되고, 그 후 패킷은
패킷을 보내기 위해 레이어 3으로 전달됩니다. (더 이상 특별한 처리가 필요하지 않습니다.)
전송 코드 경로에서).
이 수업은 ns3::NscTcpSocketImpl nsc wakeup() 콜백과
수신 경로(대기 중인 데이터의 전송 일정을 확인하기 위해)
src/인터넷/모델/nsc-tcp-socket-impl nsc 소켓 인터페이스를 구현합니다. 각 인스턴스
자체 nscTcpSocket이 있습니다. Send()인 데이터는 다음을 통해 nsc 스택으로 전달됩니다.
m_nscTcpSocket->send_data(). (nsc-tcp-l4가 아닌 이것이 비교했을 때 가장 큰 차이점입니다.
에 NS-3 TCP). 또한 클래스는 기본 클래스 이전에 Send()인 데이터를 대기열에 추가합니다.
설명자가 ESTABLISHED 상태에 들어갔습니다. 이 클래스는 nsc-tcp-l4에서 호출됩니다.
클래스, nsc-tcp-l4 wakeup() 콜백이 nsc에 의해 호출될 때. nsc-tcp-socket-impl 그런 다음
현재 연결 상태(SYN_SENT, ESTABLISHED, LISTEN...)를 확인하고 일정을 예약합니다.
필요에 따라 적절한 콜백. LISTEN 소켓은 새로운 소켓이 있는지 확인하기 위해 Accept를 예약합니다.
연결이 승인되어야 하며, ESTABLISHED 소켓은 보류 중인 데이터 쓰기를 예약합니다.
읽기 콜백 예약 등
참고 ns3::NscTcpSocketImpl nsc-tcp와 직접 상호 작용하지 않습니다. 대신 데이터는
nsc로 리디렉션되었습니다. nsc-tcp는 웨이크업 콜백이 다음과 같을 때 노드의 nsc-tcp-socket을 호출합니다.
nsc에 의해 호출됩니다.
제한 사항
· NSC는 단일 인터페이스 노드에서만 작동합니다. 다중 인터페이스 노드에서 실행하려고 시도 중입니다.
프로그램 오류가 발생하게 됩니다.
· Cygwin 및 OS X PPC는 지원되지 않습니다. OS X Intel은 지원되지 않지만 작동할 수 있습니다.
· NSC의 비 Linux 스택은 지원되지 않습니다. NS-3
· 모든 소켓 API 콜백이 지원되는 것은 아닙니다.
자세한 내용은 다음 링크를 참조하세요 이 위키 페이지.
코델 변발 이행 in NS-3
이 장에서는 CoDel([Nic12], [Nic14]) 대기열 구현에 대해 설명합니다. NS-3.
버퍼블로트에 대한 솔루션으로 Kathleen Nichols와 Van Jacobson이 개발함 [Buf14]
문제는 CoDel(Controlled Delay Management)은 패킷의
패킷 삭제에 대한 결정을 내리기 위한 체류 시간(대기열에 있는 시간)입니다.
모델 상품 설명
CoDel 모델의 소스 코드는 디렉토리에 있습니다. 소스/인터넷/모델 and
2개의 파일로 구성되어 있습니다 codel-queue.h and codel-queue.cc CoDelQueue 클래스 정의 및
도우미 CoDelTimestampTag 클래스. 코드가 다음으로 포팅되었습니다. NS-3 Andrew McGregor가 작성함
Dave Täht와 Eric Dumazet이 구현한 Linux 커널 코드.
· 수업 CoDelQueue: 이 클래스는 기본 CoDel 알고리즘을 구현합니다.
· CoDelQueue::DoEnqueue (): 이 루틴은 이전의 현재 시간으로 패킷에 태그를 지정합니다.
대기열에 밀어 넣습니다. 타임스탬프 태그는 다음에서 사용됩니다. CoDelQueue::DoDequeue() 에
패킷의 체류 시간을 계산합니다. 패킷 도착 시 대기열이 가득 찬 경우
루틴은 패킷을 삭제하고 대기열 오버플로로 인해 삭제된 횟수를 기록합니다.
에 저장되어 있는 것 m_dropOverLimit.
· CoDelQueue::ShouldDrop (): 이 루틴은 CoDelQueue::DoDequeue()님의 도우미 루틴
이는 체류 시간을 기준으로 패킷을 삭제해야 하는지 여부를 결정합니다.
체류시간을 초과하는 경우 m_target 적어도 지속적으로 위 수준을 유지합니다.
m_간격, 루틴이 반환됩니다. 참된 패킷을 삭제해도 괜찮다는 것을 나타냅니다.
그렇지 않으면 반환됩니다. 그릇된.
· CoDelQueue::DoDequeue (): 이 루틴은 다음을 기반으로 실제 패킷 삭제를 수행합니다.
CoDelQueue::ShouldDrop ()의 반환 값을 확인하고 다음 드롭을 예약합니다.
· 수업 CoDelTimestamp태그: 이 클래스는 패킷에 대한 타임스탬프 태깅을 구현합니다. 이것
태그는 패킷의 체류 시간(해당 시간 간의 차이)을 계산하는 데 사용됩니다.
패킷이 대기열에서 제거되고 대기열에 푸시된 시간입니다.
2개의 지점이 있습니다 CoDelQueue::DoDequeue ():
1. 현재 대기열이 삭제 상태인 경우, 이는 체류 시간이 종료되었음을 의미합니다.
위에 남아 m_target ~ 이상 m_간격, 루틴은 다음이 괜찮은지 결정합니다.
낙하 상태를 그대로 두지 않으면 다음 낙하 시간이 됩니다. 언제 CoDelQueue::ShouldDrop ()
반품 그릇된, 대기열은 삭제 상태에서 벗어날 수 있습니다(설정됨). m_dropping 에 그릇된).
그렇지 않으면 대기열이 계속해서 패킷을 삭제하고 다음 삭제 시간을 업데이트합니다.
(m_drop다음) 다음 조건 중 하나가 충족될 때까지:
1. 큐가 비어 있으면 큐가 삭제 상태를 벗어나 종료됩니다.
CoDelQueue::ShouldDrop () 루틴;
2. CoDelQueue::ShouldDrop () 반품 그릇된 (체류 시간이 아래로 내려간다는 의미)
m_target) 큐가 삭제 상태를 벗어나는 경우
3. 아직 다음 드랍 시간은 아닙니다(m_drop다음 현재 시간보다 작음)
큐는 조건을 다시 확인하기 위해 다음 패킷 큐에서 제거될 때까지 기다립니다.
2. 큐가 삭제 상태가 아닌 경우 루틴은 삭제 상태로 진입하고
다음과 같은 경우 첫 번째 패킷을 삭제합니다. CoDelQueue::ShouldDrop () 반품 참된 (체류를 의미
시간이 지나갔어 m_target 적어도 m_간격 처음으로 또는 사라졌습니다
대기열이 삭제 상태를 떠난 후 다시 위의 내용을 다시 참조하세요.
참고자료
[닉12]
K. Nichols 및 V. Jacobson, 대기열 지연 제어, ACM 대기열, Vol. 10년 5월 2012일 XNUMX호.
온라인에서 이용 가능 http://queue.acm.org/detail.cfmid = 2209336.
[닉14]
K. Nichols 및 V. Jacobson, 인터넷 초안: 제어된 지연 활성 대기열 관리,
2014년 XNUMX월. 온라인에서 확인 가능
http://tools.ietf.org/html/draft-nichols-tsvwg-codel-02.
[버프14]
Bufferbloat.net. 다음에서 온라인으로 구매 가능 http://www.bufferbloat.net/.
Attributes
CoDelQueue 클래스가 보유하는 주요 속성은 다음과 같습니다.
· 모드 : CoDel 작동 모드(BYTES, PACKETS 또는 ILLEGAL). 기본 모드는 BYTES입니다.
· 최대 패킷 수: 대기열이 보유할 수 있는 최대 패킷 수입니다. 기본값은 다음과 같습니다.
DEFAULT_CODEL_LIMIT(1000개 패킷)
· 최대바이트: 큐가 보유할 수 있는 최대 바이트 수입니다. 기본값은 1500 *입니다.
DEFAULT_CODEL_LIMIT(1500 * 1000바이트)
· 최소바이트: CoDel 알고리즘의 minbytes 매개변수입니다. 기본값은 1500바이트입니다.
· 간격: 슬라이딩 최소 창. 기본값은 100ms입니다.
· 목표: CoDel 알고리즘은 대기열 지연을 목표로 합니다. 기본값은 5ms입니다.
예
첫 번째 예는 codel-vs-droptail-basic-test.cc 에 위치한 소스/인터넷/예제. 에
파일을 실행합니다(아래 첫 번째 호출은 사용 가능한 명령줄 옵션을 보여줍니다).
$ ./waf --run "codel-vs-droptail-basic-test --PrintHelp"
$ ./waf --run "codel-vs-droptail-basic-test --queueType=CoDel --pcapFileName=codel.pcap --cwndTrFileName=cwndCodel.tr"
이전 명령의 예상 출력은 두 개의 파일입니다. codel.pcap 파일 및
cwndCoDel.tr (ASCII 추적) 파일 .pcap 파일은 Wireshark 또는
TCP추적:
$ tcptrace -l -r -n -W codel.pcap
두 번째 예는 codel-vs-droptail-asymmetric.cc 에 위치한 소스/인터넷/예제.
이 예는 일반적인 케이블 모뎀 배포 시나리오를 모델링하기 위한 것입니다. 실행하려면
파일 :
$ ./waf --run "codel-vs-droptail-asymmetric --PrintHelp"
$ ./waf --codel-vs-droptail-asymmetric 실행
이전 명령의 예상 출력은 6개의 pcap 파일입니다.
· codel-vs-droptail-asymmetric-CoDel-server-lan.pcap
· codel-vs-droptail-asymmetric-CoDel-router-wan.pcap
· codel-vs-droptail-비대칭-CoDel-router-lan.pcap
· codel-vs-droptail-asymmetric-CoDel-cmts-wan.pcap
· codel-vs-droptail-asymmetric-CoDel-cmts-lan.pcap
· codel-vs-droptail-비대칭-CoDel-host-lan.pcap
하나의 속성 파일:
· codel-vs-droptail-asymmetric-CoDel.attr
5개의 ASCII 추적 파일:
· codel-vs-droptail-asymmetric-CoDel-drop.tr
· codel-vs-droptail-asymmetric-CoDel-drop-state.tr
· codel-vs-droptail-asymmetric-CoDel-sojourn.tr
· codel-vs-droptail-asymmetric-CoDel-length.tr
· codel-vs-droptail-asymmetric-CoDel-cwnd.tr
검증
CoDel 모델은 다음을 사용하여 테스트되었습니다. CoDelQueueTestSuite 에 정의된 클래스
src/인터넷/테스트/codel-queue-test-suite.cc. 이 제품군에는 5가지 테스트 사례가 포함되어 있습니다.
· 테스트 1: 첫 번째 테스트에서는 삭제 없이 대기열에 추가/제거되었는지 확인하고 다음을 확인합니다.
CoDel 속성을 올바르게 설정할 수 있습니다.
· 테스트 2: 두 번째 테스트에서는 대기열 오버플로로 인해 삭제된 대기열을 확인합니다.
· 테스트 3: 세 번째 테스트는 Linux의 명시적 포트에 대해 NewtonStep() 산술을 확인합니다.
이행
· 테스트 4: 네 번째 테스트에서는 Linux의 명시적 포트에 대해 ControlLaw()를 확인합니다.
이행
· 테스트 5: 다섯 번째 테스트에서는 CoDel에 따라 enqueue/dequeue와 drop을 확인합니다.
연산
테스트 스위트는 다음 명령을 사용하여 실행할 수 있습니다.
$ ./waf 구성 --enable-examples --enable-tests
$ ./waf 빌드
$ ./test.py -s 코델-큐
or
$ NS_LOG="CoDelQueue" ./waf --run "test-runner --suite=codel-queue"
페이지 나누기
저금리 WIRELESS 개인 지역 네트워크 (LR-WPAN)
이 장에서는 저속 무선 통신을 위한 ns-3 모델의 구현에 대해 설명합니다.
IEEE 표준 802.15.4(2006)에 지정된 개인 영역 네트워크(LR-WPAN).
모델 상품 설명
lr-wpan 모듈의 소스 코드는 디렉토리에 있습니다. src/lr-wpan.
디자인
모델 디자인은 건축학적 관점에서 표준을 밀접하게 따릅니다.
[이미지] lr-wpan 모델의 아키텍처 및 범위.UNINDENT
그림의 회색 영역(IEEE Std. 3-802.15.4의 그림 2006에서 수정됨)은
모델의 범위.
Nicola Baldo의 Spectrum NetDevice가 구현의 기초입니다.
또한 구현에서는 Zheng과 Lee가 개발한 ns-2 모델을 차용할 계획입니다.
에서 귀하를 참조하는 데 사용됩니다.
API
API는 ns-3 명명 규칙 및 관용구에 맞게 조정된 표준을 밀접하게 따릅니다. 그만큼
API는 다음과 같이 서비스 기본 개념을 중심으로 구성됩니다.
IEEE Std.의 그림 14에서 채택한 그림. 802.15.4-2006.
[이미지] 서비스 기본 요소.UNINDENT
API는 네 가지 개념적 서비스 및 서비스 액세스 지점(SAP)을 중심으로 구성됩니다.
· MAC 데이터 서비스(MCPS)
· MAC 관리 서비스(MLME)
· PHY 데이터 서비스(PD)
· PHY 관리 서비스(PLME)
일반적으로 프리미티브는 다음과 같이 표준화됩니다(예: IEEE의 Sec 7.1.1.1.1
802.15.4-2006)::
MCPS-DATA.요청(
원본 주소 모드,
DstAddr모드,
DstPANId,
DstAddr,
msdu길이,
msdu,
msdu핸들,
Tx옵션,
보안 레벨,
키 ID 모드,
키소스,
키인덱스
)
이는 다음과 같은 ns-3 클래스 및 메소드에 매핑됩니다.
McpsDataRequestParameters 구조체
{
uint8_t m_srcAddrMode;
uint8_t m_dstAddrMode;
...
};
무효화
LrWpanMac::McpsDataRequest(McpsDataRequestParameters 매개변수)
{
...
}
맥
현재 MAC는 비콘 없이 슬롯 없는 CSMA/CA 변형을 구현합니다. 현재
코디네이터 및 관련 API는 지원되지 않습니다.
구현된 MAC은 Contiki의 NullMAC, 즉 절전 기능이 없는 MAC과 유사합니다.
라디오는 항상 활성 상태(수신 또는 전송)이거나 완전히 차단된 것으로 가정됩니다.
아래에. CCA를 수행하는 동안 프레임 수신은 비활성화되지 않습니다.
지원되는 주요 API는 데이터 전송 API(McpsDataRequest/Indication/Confirm)입니다.
Stc 802.15.4-2006, 섹션 7.5.1.4에 따른 CSMA/CA가 지원됩니다. 프레임 수신 및
Std 802.15.4-2006, 섹션 7.5.6.2에 따른 거부가 지원됩니다.
인정. 짧은 주소 지정만 완전히 구현되었습니다. 다양한 추적 소스는
지원되며 추적 소스를 싱크에 연결할 수 있습니다.
PHY
물리 계층 구성 요소는 Phy 모델, 오류율 모델 및 손실로 구성됩니다.
모델. 오류율 모델은 현재 IEEE 802.15.4 2.4GHz의 오류율을 모델링합니다.
OQPSK용 AWGN 채널; 모델 설명은 IEEE Std 802.15.4-2006에서 찾을 수 있습니다.
섹션 E.4.1.7. Phy 모델은 SpectrumPhy를 기반으로 하며 사양을 따릅니다.
IEEE Std 6-802.15.4의 섹션 2006에 설명되어 있습니다. PHY 서비스 사양을 모델링하고,
PPDU 형식, PHY 상수 및 PIB 특성. 현재는 전송만 지원합니다.
섹션 2.4에 따라 6.5.3.1GHz로 지정된 전력 스펙트럼 밀도 마스크. 소음 전력
밀도는 주파수 대역에 걸쳐 균일하게 분포된 열 잡음을 가정합니다. 손실
모델은 기존의 모든 단순(비스펙트럼 물리) 손실 모델을 완벽하게 활용할 수 있습니다. Phy 모델
기존 단일 스펙트럼 채널 모델을 사용합니다. 물리 계층은 패킷을 모델로 합니다.
즉, 프리앰블/SFD 감지가 수행되지 않습니다. 패킷 수신이 시작됩니다.
SNR이 -5dB보다 큰 경우 프리앰블의 첫 번째 비트(모델링되지 않음)
IEEE Std 802.15.4-2006, 부록 E, 그림 E.2. 패킷 수신은 다음 시간 이후에 완료됩니다.
패킷이 완전히 전송되었습니다. 수신 중에 도착하는 다른 패킷이 합산됩니다.
간섭 / 소음에.
현재 수신기 감도는 -106.58dBm의 고정 값으로 설정되어 있습니다. 이것
이 신호에 대한 1바이트 참조 패킷의 패킷 오류율 20%에 해당합니다.
IEEE Std 802.15.4-2006, 섹션 6.1.7에 따른 전력. 앞으로도 우리는 제공 할 것입니다
감도를 다른 값으로 변경하는 기능을 지원합니다.
[이미지] 패킷 오류율과 신호 전력.UNINDENT
NetDevice
다른 기술 프로파일(예: 6LoWPAN 및 ZigBee)이
자체 NetDevice 클래스를 작성하면 캡슐화하는 기본 LrWpanNetDevice가 제공됩니다.
일반적인 LrWpan 장치를 생성하고 서로 연결하는 일반적인 작업입니다.
범위 and 제한 사항
이 문서의 향후 버전에는 부록 D와 유사한 PICS 형식이 포함될 것입니다.
IEEE 802.15.4-2006. 현재 강조점은 802.15.4 작동의 슬롯되지 않은 모드입니다.
Zigbee에서 사용하기 위한 것이며 범위는 기본 기능을 갖춘 단일 모드(CSMA/CA)를 활성화하는 것으로 제한됩니다.
데이터 전송 기능. PAN 코디네이터와의 연계는 아직 지원되지 않으며,
확장된 주소 지정의 사용. 간섭은 AWGN으로 모델링되지만 현재는 그렇지 않습니다.
철저히 테스트되었습니다.
NetDevice Tx 대기열은 제한되지 않습니다. 즉, 대기열로 인해 패킷이 삭제되지 않습니다.
꽉 차는 중. 과도한 전송 재시도 또는 채널 접속으로 인해 삭제될 수 있습니다.
실패.
참고자료
· 무선 매체 액세스 제어(MAC) 및 물리 계층(PHY) 사양
저속 무선 개인 영역 네트워크(WPAN), IEEE 컴퓨터 협회, IEEE Std
802.15.4-2006, 8년 2006월 XNUMX일.
·
J. Zheng, Myung J. Lee, "IEEE 802.15.4의 종합적인 성능 연구", 센서
네트워크 운영, IEEE Press, Wiley Interscience, 4장, pp. 218-237, 2006.
용법
사용 lr-wpan
추가 lr-wpan ns-3으로 빌드된 모듈 목록으로 이동합니다.
돕는 사람
도우미는 다른 장치 도우미를 따라 패턴화됩니다. 특히 추적(ascii 및
pcap)도 비슷하게 활성화되고 모든 lr-wpan 로그 구성 요소 활성화가 수행됩니다.
비슷하게. 도우미의 사용 예시는 다음과 같습니다. 예제/lr-wpan-data.cc. ASCII의 경우
추적의 경우 전송 및 수신 추적이 Mac 계층에 연결됩니다.
이 도우미를 사용할 때 채널에 추가되는 기본 전파 손실 모델은 다음과 같습니다.
기본 매개변수가 있는 LogDistancePropagationLossModel.
예
다음 예제가 작성되었으며 다음에서 찾을 수 있습니다. src/lr-wpan/예제/:
· lr-wpan-data.cc: 엔드투엔드 데이터 전송을 보여주는 간단한 예입니다.
· lr-wpan-오류-거리-plot.cc: 패킷 성공의 변화를 플롯하는 예
거리에 따른 비율.
· lr-wpan-error-model-plot.cc: phy를 테스트하는 예입니다.
· lr-wpan-패킷-print.cc: MAC 헤더 필드를 인쇄하는 예입니다.
· lr-wpan-phy-test.cc: phy를 테스트하는 예입니다.
특히, 이 모듈은 매우 단순화된 엔드투엔드 데이터 전송 시나리오를 가능하게 합니다.
에서 구현 된 lr-wpan-data.cc. 그림은 트리거되는 일련의 이벤트를 보여줍니다.
MAC이 상위 계층으로부터 DataRequest를 수신할 때. 클리어 채널을 호출합니다.
PHY에서 평가(CCA)하고, 성공하면 프레임을 PHY로 보냅니다.
채널을 통해 전송되고 피어 노드에 DataIndication이 생성됩니다.
[이미지] 간단한 LR-WPAN 데이터 종단 간 전송을 위한 데이터 예.UNINDENT
예 lr-wpan-오류-거리-plot.cc 패킷 성공률(PSR)을 다음과 같이 표시합니다.
기본 LogDistance 전파 손실 모델과
802.15.4 오류 모델. 채널(기본값 11), 패킷 크기(기본값 20바이트) 및
전송 전력(기본값 0dBm)은 명령줄 인수에 따라 달라질 수 있습니다. 프로그램
라는 파일을 출력합니다. 802.15.4-psr-distance.plt. 이 파일을 gnuplot에 로드하면
파일 802.15.4-psr-distance.eps, PDF 또는 기타 형식으로 변환할 수 있습니다. 그만큼
기본 출력은 아래와 같습니다.
[이미지] 프로그램의 기본 출력 lr-wpan-오류-거리-plot.cc.UNINDENT
테스트
다음 테스트가 작성되었으며, 이는 다음에서 찾을 수 있습니다. src/lr-wpan/tests/:
· lr-wpan-ack-test.cc: 승인이 사용 및 발행되고 있는지 확인하십시오.
올바른 순서.
· lr-wpan-collision-test.cc: 간섭이 있는 패킷의 올바른 수신을 테스트하고
충돌.
· lr-wpan-error-model-test.cc: 오류 모델이 예측 가능한 값을 제공하는지 확인합니다.
· lr-wpan-패킷-test.cc: 802.15.4 MAC 헤더/트레일러 클래스 테스트
· lr-wpan-pd-plme-sap-test.cc: IEEE 802.15.4에 따라 PLME 및 PD SAP를 테스트합니다.
· lr-wpan-스펙트럼-값-헬퍼-테스트.cc: 전력 간 변환을 테스트합니다.
(스칼라 수량으로 표시) 및 스펙트럼 파워는 다시 25% 내에 속합니다.
가능한 채널 및 입력 전력 범위에 대한 허용 오차.
검증
모델은 실제 하드웨어에 대해 검증되지 않았습니다. 오류 모델은
IEEE Std 802.15.4-2006, 섹션 E.4.1.7(그림 E.2)의 데이터에 대해 검증되었습니다. 그만큼
MAC 동작(CSMA 백오프)은 예상 동작과 비교하여 직접 검증되었습니다. 그만큼
아래 플롯은 오류 모델 검증의 예이며 다음을 실행하여 재현할 수 있습니다.
lr-wpan-error-model-plot.cc:
[이미지] 프로그램의 기본 출력 lr-wpan-error-model-plot.cc.UNINDENT
LTE MODULE
디자인 문서
살펴보기
LTE-EPC 시뮬레이션 모델의 개요가 그림에 나와 있습니다. 살펴보기 of 전에,
LTE-EPC 시뮬레이션 모델. 두 가지 주요 구성 요소가 있습니다.
· LTE 모델. 이 모델에는 LTE 무선 프로토콜 스택(RRC, PDCP, RLC, MAC,
PHY). 이러한 엔터티는 전적으로 UE 및 eNB 노드 내에 상주합니다.
· EPC 모델. 이 모델에는 핵심 네트워크 인터페이스, 프로토콜 및 엔터티가 포함됩니다.
이러한 엔터티와 프로토콜은 SGW, PGW 및 MME 노드 내에 있으며 부분적으로
eNB 노드 내.
[이미지] LTE-EPC 시뮬레이션 모델 개요.UNINDENT
디자인 기준
LTE 모델
LTE 모델은 LTE의 다음 측면에 대한 평가를 지원하도록 설계되었습니다.
시스템 :
· 전파자원 관리
· QoS 인식 패킷 스케줄링
· 셀 간 간섭 조정
· 동적 스펙트럼 액세스
LTE 시스템을 정확한 수준으로 모델링하기 위해
위에서 언급한 측면을 평가하여 다음 요구 사항을 충족했습니다.
존경받는:
1. 무선 수준에서 모델의 세분성은 최소한 모델의 세분성이어야 합니다.
리소스 블록(RB). 실제로 이것은 자원에 사용되는 기본 단위입니다.
배당. 이 최소 수준의 세분성 없이는 모델링이 불가능합니다.
정확하게 패킷 스케줄링 및 셀 간 간섭을 수행합니다. 그 이유는, 이후로
패킷 스케줄링은 RB별로 이루어지며 eNB는 하위 집합에서만 전송할 수 있습니다.
사용 가능한 모든 RB 중 하나이므로 해당 RB에서만 다른 eNB를 간섭합니다.
전송 중입니다. 이 요구 사항은 시스템 채택을 배제합니다.
레벨 시뮬레이션 접근 방식은 자원 할당을 평가합니다.
통화/전달자 설정의 세분성.
2. 시뮬레이터는 최대 수십 개의 eNB와 수백 개의 사용자 장비(UE)로 확장되어야 합니다.
이는 링크 수준 시뮬레이터의 사용을 배제합니다.
인터페이스는 기호 수준까지 세분화되어 모델링됩니다. 이는
모든 PHY 계층 신호를 구현하려면 심볼 레벨 모델이 필요합니다.
엄청난 계산 복잡성으로 인해 시뮬레이션이 심각하게 제한되는 처리입니다. 사실은,
링크 수준 시뮬레이터는 일반적으로 단일 eNB와 하나 또는 몇 개의 UE로 제한됩니다.
3. 시뮬레이션 내에서 서로 다른 셀을 구성하는 것이 가능해야 합니다.
그들은 서로 다른 반송파 주파수와 시스템 대역폭을 사용합니다. 사용되는 대역폭
동적 스펙트럼을 지원하려면 서로 다른 셀이 겹쳐질 수 있어야 합니다.
[Ofcom2600MHz] 및 [RealWireless]에 설명된 것과 같은 라이센스 솔루션.
간섭 계산은 이 경우를 적절하게 처리해야 합니다.
4. LTE 표준을 더욱 대표하고 최대한 가깝게 만들기 위해
실제 구현을 위해서는 시뮬레이터가 MAC Scheduler API를 지원해야 합니다.
FemtoForum [FFAPI]에서 게시했습니다. 이 인터페이스는 다음에 의해 사용될 것으로 예상됩니다.
스케줄링 및 무선 자원 구현을 위한 펨토셀 제조업체
관리(RRM) 알고리즘. 이 인터페이스에 대한 지원을 도입함으로써
시뮬레이터를 통해 LTE 장비 공급업체와 운영자가
시뮬레이션 환경은 실제 환경에 배포되는 것과 정확히 동일한 알고리즘을 사용합니다.
시스템.
5. LTE 시뮬레이션 모델에는 다음에 정의된 API의 자체 구현이 포함되어야 합니다.
[FFAPI]. 특정 공급업체와 바이너리 또는 데이터 구조가 호환되지 않음
동일한 인터페이스의 구현이 예상됩니다. 따라서 호환성 계층
공급업체별 MAC 스케줄러를 사용할 때마다 삽입해야 합니다.
모의 실험 장치. 이 요구 사항은 시뮬레이터가 독립적이 되도록 하는 데 필요합니다.
이 인터페이스 사양의 공급업체별 구현에서 가져온 것입니다. 우리는
[FFAPI]는 논리적 사양일 뿐이며 그 구현(예: 번역
특정 프로그래밍 언어로)는 공급업체에 맡겨집니다.
6. 이 모델은 상위 장치에 의한 IP 패킷 전송을 시뮬레이션하는 데 사용됩니다.
레이어. 이와 관련하여, LTE에서는 스케줄링 및
무선 자원 관리는 IP 패킷과 직접 작동하지 않고 RLC와 작동합니다.
PDU는 IP 패킷을 분할하고 연결하여 얻은 것입니다.
RLC 엔터티. 따라서 RLC 계층의 이러한 기능은 모델링되어야 합니다.
정확히.
EPC 모델
EPC 모델의 주요 목적은 엔드투엔드 시뮬레이션을 위한 수단을 제공하는 것입니다.
LTE 모델을 통한 IP 연결. 이를 위해 상호 연결을 지원합니다.
여러 UE가 인터넷에 연결된 여러 eNB의 무선 액세스 네트워크를 통해
단일 SGW/PGW 노드(그림 참조) 살펴보기 of 전에, LTE-EPC 시뮬레이션 모델.
EPC 모델에 대해 다음과 같은 설계 선택이 이루어졌습니다.
1. 지원되는 유일한 패킷 데이터 네트워크(PDN) 유형은 IPv4입니다.
2. SGW 및 PGW 기능 엔터티는 단일 노드 내에서 구현됩니다.
따라서 SGW/PGW 노드라고 합니다.
3. SGW 간 이동성 시나리오는 관심 대상이 아닙니다. 따라서 단일 SGW/PGW
노드는 모든 시뮬레이션 시나리오에 존재합니다.
4. EPC 모델의 요구 사항은 엔드투엔드 시뮬레이션에 사용할 수 있다는 것입니다.
현실적인 응용 프로그램의 성능. 따라서 다음과 함께 사용할 수 있어야 합니다.
EPC는 TCP 또는 UDP 위에서 작동하는 일반 ns-3 애플리케이션을 모델링합니다.
5. 또 다른 요구 사항은 다음을 사용하여 네트워크 토폴로지를 시뮬레이션할 수 있다는 것입니다.
여러 eNB가 존재하며 그 중 일부는 백홀을 갖추고 있을 수 있음
제한된 기능으로 연결됩니다. 이러한 시나리오를 시뮬레이션하기 위해 사용자는
eNB와 SGW/PGW 간에 사용되는 데이터 평면 프로토콜을 모델링해야 합니다.
정확히.
6. 단일 UE가 서로 다른 애플리케이션을 사용하는 것이 가능해야 합니다.
QoS 프로필. 따라서 각 UE에 대해 여러 개의 EPS Bearer를 지원해야 합니다. 이것
UE에서 수행된 IP를 통한 TCP/UDP 트래픽의 필수 분류를 포함합니다.
업링크에서는 PGW에서, 다운링크에서는 PGW에서.
7. EPC 모델의 초점은 주로 EPC 데이터 평면에 있습니다. 정확한 모델링
EPC 제어 평면은 당분간 필수 사항이 아닙니다. 그러므로,
필요한 제어 평면 상호 작용은 다음과 같은 단순화된 방식으로 모델링될 수 있습니다.
다양한 시뮬레이션 개체 간의 직접적인 상호 작용을 활용합니다.
도우미 개체를 제공했습니다.
8. EPC 모델의 초점은 ECM 연결 모드의 활성 사용자 시뮬레이션에 있습니다.
따라서 ECM 유휴 모드에만 관련된 모든 기능(특히,
추적 영역 업데이트 및 페이징)은 전혀 모델링되지 않습니다.
9. 모델은 둘 사이에서 X2 기반 핸드오버를 수행할 수 있는 가능성을 허용해야 합니다.
eNB.
아키텍처
LTE 모델
UE 아키텍처
UE의 LTE 무선 프로토콜 스택 모델의 아키텍처는 다음과 같습니다.
인물 LTE 라디오 프로토콜 스택 아키텍처 for 전에, UE on 전에, 데이터 평면 and LTE 라디오
프로토콜 스택 아키텍처 for 전에, UE on 전에, 제어 평면 각각 하이라이트
데이터 플레인과 컨트롤 플레인.
[이미지] 데이터 평면의 UE를 위한 LTE 무선 프로토콜 스택 아키텍처.UNINDENT
[이미지] 제어 평면의 UE에 대한 LTE 무선 프로토콜 스택 아키텍처.UNINDENT
UE의 PHY/채널 모델의 아키텍처는 그림에 표시됩니다. PHY and
채널 모델 아키텍처 for 전에, UE.
[이미지] UE.UNINDENT의 PHY 및 채널 모델 아키텍처
eNB 아키텍처
eNB의 LTE 무선 프로토콜 스택 모델의 아키텍처는 다음과 같습니다.
인물 LTE 라디오 프로토콜 스택 아키텍처 for 전에, eNB on 전에, 데이터 평면 and LTE 라디오
프로토콜 스택 아키텍처 for 전에, eNB on 전에, 제어 평면 각각 하이라이트
데이터 플레인과 컨트롤 플레인.
[이미지] 데이터 평면의 eNB에 대한 LTE 무선 프로토콜 스택 아키텍처.UNINDENT
[이미지] 제어 평면의 eNB에 대한 LTE 무선 프로토콜 스택 아키텍처.UNINDENT
eNB의 PHY/채널 모델의 아키텍처는 그림에 표시되어 있습니다. PHY and
채널 모델 아키텍처 for 전에, eNB.
[이미지] eNB.UNINDENT용 PHY 및 채널 모델 아키텍처
EPC 모델
EPC 데이터 평면
그림에서 LTE-EPC 데이터 평면 프로토콜 스택, 우리는 end-to-end LTE-EPC 데이터를 나타냅니다.
시뮬레이터에서 모델링된 평면 프로토콜 스택입니다. 그림에서 알 수 있듯이
데이터 플레인 모델에 도입된 가장 큰 단순화는
단일 SGW/PGW 노드 내의 SGW 및 PGW 기능으로 인해 S5가 필요하지 않습니다.
또는 8GPP에서 지정한 S3 인터페이스. 반면에 S1-U 프로토콜 스택 모두에 대해
LTE 무선 프로토콜 스택에는 3GPP에서 지정한 모든 프로토콜 계층이 존재합니다.
[이미지] LTE-EPC 데이터 플레인 프로토콜 스택.UNINDENT
EPC 제어 평면
제어 평면 모델 구현의 아키텍처가 그림에 나와 있습니다. EPC
제어 모델. 명시적으로 모델링된 제어 인터페이스는 S1-AP, X2-AP입니다.
그리고 S11 인터페이스.
S1-AP와 S11 인터페이스는 다음과 같이 단순화된 방식으로 모델링되었습니다.
단 한 쌍의 인터페이스 클래스를 사용하여 엔터티 간의 상호 작용을 모델링합니다.
서로 다른 노드(S1-AP 인터페이스의 경우 eNB와 MME, MME와 MME)에 상주합니다.
S11 인터페이스의 경우 SGW). 실제로 이는 이러한 기본 요소를 의미합니다.
인터페이스는 두 개체 간의 직접 함수 호출에 매핑됩니다. 다른 한편으로는
한편, X2-AP 인터페이스는 X2 링크를 통해 전송된 프로토콜 데이터 단위를 사용하여 모델링되고 있습니다.
(점대점 링크로 모델링됨) 이러한 이유로 X2-AP 인터페이스 모델은 더
현실적인.
[이미지] EPC 제어 모델.UNINDENT
채널 and 번식
채널 모델링 목적으로 LTE 모듈은 다음을 사용합니다. 스펙트럼채널 인터페이스 제공
스펙트럼 모듈을 통해 이 글을 쓰는 시점에는 이러한 인터페이스의 두 가지 구현이 있습니다.
사용할 수 있습니다 : 단일모델스펙트럼채널 and 다중모델스펙트럼채널, 그리고 LTE
모듈을 사용하려면 다음을 사용해야 합니다. 다중모델스펙트럼채널 제대로 작동하려면. 이것
이는 다양한 주파수 및 대역폭 구성을 지원해야 하기 때문입니다. 모두
에서 지원하는 전파 모델 다중모델스펙트럼채널 내에서 사용할 수 있습니다.
LTE 모듈.
of 전에, 건물 모델 과 LTE
LTE 모듈과 함께 사용하도록 권장되는 전파 모델은 다음과 같습니다.
실제로 LTE를 사용하여 특별히 설계된 건물 모듈(물론
다른 무선 기술과 함께 사용됨). 의 문서를 참조하십시오.
제공하는 전파 모델에 대한 일반 정보를 위한 건물 모듈입니다.
이 섹션에서는 특히 다음과 같은 경우에 적용되는 몇 가지 고려 사항을 강조하겠습니다.
건물 모듈은 LTE 모듈과 함께 사용됩니다.
다음에 사용되는 명명 규칙은 다음과 같습니다.
· 사용자 장비: UE
· 매크로 기지국: MBS
· 소형 셀 기지국(예: 피코/펨토셀): SC
LTE 모듈은 FDD만 고려하고 다운링크 및 업링크 전파를 구현합니다.
갈라져. 결과적으로 다음과 같은 경로 손실 계산이 수행됩니다.
· MBS UE (실내 및 실외)
· SC(실내외) UE(실내외)
LTE 모델은 다음과 같은 경로 손실 계산을 제공하지 않습니다.
· UE UE
· MBS MBS
· MBS SC
· SC SC
건물 모델은 노드의 실제 유형을 알지 못합니다. 즉, 인식하지 못한다
송신 노드가 UE인지, MBS인지, SC인지 여부. 오히려 건물 모델은 오직
노드의 위치에 대해: 실내인지 실외인지, z축은 무엇인지
옥상 수준을 존중합니다. 결과적으로 실외에 배치된 eNB 노드의 경우
옥상 수준 위의 z 좌표에서 MBS의 일반적인 전파 모델은 다음과 같습니다.
건물 모듈에서 사용됩니다. 반대로, 실외에 있지만 실외에 위치한 eNB의 경우
옥상 또는 실내에서는 피코 및 펨토셀의 일반적인 전파 모델이 사용됩니다.
적어도 하나의 실내 노드를 포함하는 통신의 경우 해당 벽 침투
손실은 건물 모델에 의해 계산됩니다. 여기에는 다음 사용 사례가 포함됩니다.
· MBS 실내 UE
· 실외 SC 실내 UE
· 실내 SC 실내 UE
· 실내 SC 실외 UE
실제 모델에 대한 자세한 내용은 건물 모듈 문서를 참조하세요.
각 경우에 사용됩니다.
페이딩 모델
LTE 모듈에는 개발된 모델에서 파생된 추적 기반 페이딩 모델이 포함되어 있습니다.
GSoC 2010 [Piro2011]. 이 모델의 가장 큰 특징은
시뮬레이션 런타임 중 페이딩 평가는 계산된 추적을 기반으로 합니다. 이것은
시뮬레이터의 계산 복잡성을 제한하기 위해 수행되었습니다. 반면에, 그것은 필요합니다
흔적을 저장하기 위한 거대한 구조물; 그러므로, 수 사이의 절충안
가능한 매개변수와 메모리 점유율을 찾아야 합니다. 가장 중요한 것들은 다음과 같습니다:
· 사용자 속도: 사용자 간의 상대 속도(도플러 주파수에 영향을 미침)
회전은 페이딩의 시간 변화 특성에 영향을 미칩니다)
· 탭 수(및 상대 전력): 고려되는 다중 경로 수,
페이딩의 주파수 특성에 영향을 미칩니다.
· 추적의 시간 세분성: 추적의 샘플링 시간.
· 추적의 주파수 세분성: 평가할 주파수 값의 수입니다.
· 추적 길이: 이상적으로는 시뮬레이션 시간만큼 크지만 윈도잉을 통해 줄어들 수 있습니다.
기구.
· 사용자 수: 사용할 독립적인 추적 수(이상적으로는 사용자당 하나의 추적)
사용자).
수학적 채널 전파 모델과 관련하여 다음과 같이 제공되는 모델을 제안합니다.
전에, 레일리찬 Matlab의 기능(잘 수용되는 채널을 제공하므로)
시간과 주파수 영역 모두에서 모델링. 자세한 내용은 독자에게 있습니다.
[수학]을 참조하세요.
시뮬레이터는 matlab 스크립트를 제공합니다
(src/lte/model/fading-traces/fading-trace-generator.m)을 기반으로 추적을 생성합니다.
시뮬레이터에서 사용하는 형식입니다. 자세하게는 rayleighchan으로 생성된 채널 객체는
함수는 다음을 얻기 위해 이산시간 임펄스 신호를 필터링하는 데 사용됩니다.
채널 임펄스 응답. 필터링은 서로 다른 TTI에 대해 반복되어 다음을 생성합니다.
후속 시간 상관 채널 응답(TTI당 하나). 그러면 채널 응답은 다음과 같습니다.
로 처리 펠웰치 전력 스펙트럼 밀도 값을 얻기 위한 함수입니다.
그런 다음 시뮬레이터 모델과 호환되는 적절한 형식의 파일에 저장됩니다.
변수의 개수가 꽤 많기 때문에 이를 모두 고려하여 트레이스를 생성합니다.
거대한 크기의 흔적이 많이 생성될 수 있습니다. 이 문제에 대해 우리는 다음 사항을 고려했습니다.
3GPP 페이딩 전파 조건을 기반으로 한 매개변수의 가정은 다음과 같습니다.
([TS2]의 부록 B.36104 참조):
· 사용자 속도: 일반적으로 몇 가지 개별 값만 고려됩니다. 즉:
· 보행자 시나리오의 경우 0kmph 및 3kmph
· 차량 시나리오의 경우 30kmph 및 60kmph
· 도시 시나리오의 경우 0, 3, 30 및 60
· 채널 탭: 일반적으로 제한된 수의 채널 탭 세트만 고려됩니다.
예를 들어 [TS2]의 Annex B.36104에는 세 가지 모델이 언급되어 있습니다.
· 시간 세분성: TTI당 하나의 페이딩 값이 필요합니다. 즉, 1ms마다(이것이
ns-3 LTE PHY 모델의 시간별 세분성).
· 주파수 세분성: RB당 하나의 페이딩 값이 필요합니다.
ns-3 LTE 모델에서 사용되는 스펙트럼 모델의 세분성).
· 추적 길이: 시뮬레이터에는 구현된 윈도우 메커니즘이 포함되어 있습니다.
각 창의 추적 창을 선택하는 것으로 구성된 GSoC 2011 동안
무작위로 길이를 지정합니다.
· 사용자별 페이딩 프로세스: 사용자는 동일한 페이딩 추적을 공유하지만 각 사용자에 대해
추적의 다른 시작점이 무작위로 선택됩니다. 이 선택은
사용자당 하나의 페이딩 추적을 제공할 필요가 없습니다.
우리가 고려한 매개 변수에 따르면 다음 공식은
페이딩 트레이스의 총 크기 S_{traces}:
여기서 S_{sample}은 샘플의 크기(바이트)입니다(예: 배정밀도의 경우 8,
부동 소수점 정밀도의 경우 4), N_{RB}는 고려되는 RB의 수 또는 RB의 집합이며,
T_{trace}는 트레이스의 전체 길이이고, T_{sample}은 트레이스의 시간 분해능입니다.
(1 ms)이고 N_{scenarios}는 원하는 페이딩 시나리오의 수입니다(즉,
다양한 채널 탭 세트와 사용자 속도 값의 조합). 우리는 추적을 제공합니다
부록 B.3에 정의된 각 탭 구성에 대해 하나씩 2가지 다른 시나리오에 대해
[TS36104]:
· 보행자: 노드 속도가 3kmph입니다.
· 차량: 노드 속도가 60kmph입니다.
· 도시: 노드 속도가 3kmph입니다.
따라서 N_{scenarios} = 3. 모든 추적에는 T_{trace} = 10초 및 RB_{NUM} = 100이 있습니다. 이 결과는
총 24MB 바이트의 추적.
안테나
를 기반으로 하여 SpectrumPhy, LTE PHY 모델은 ns-3을 통해 안테나 모델링을 지원합니다.
안테나 모델 수업. 따라서 이 클래스를 기반으로 하는 모든 모델은 모든 eNB 또는
UE 인스턴스. 예를 들어, 코사인안테나모델 eNB 장치와 연결됨
매크로 기지국의 한 섹터를 모델링할 수 있습니다. 기본적으로 등방성안테나모델
eNB와 UE 모두에 사용됩니다.
PHY
살펴보기
본 LTE 시뮬레이터에서 제공하는 물리 계층 모델은 에서 설명한 모델을 기반으로 합니다.
[Piro2011], 다음과 같이 수정되었습니다. 이제 모델에는 인터 셀이 포함됩니다.
상호 참조 계산 및 두 패킷을 모두 포함한 업링크 트래픽 시뮬레이션
전송 및 CQI 생성.
서브 프레임 Structure
서브프레임은 그림과 같이 제어 부분과 데이터 부분으로 구분됩니다. LTE 서브 프레임
부문..
[그림] LTE 서브프레임 분할..UNINDENT
RB 기반 시뮬레이터의 입도(granularity), 제어 및 참조를 고려
따라서 신호 전달은 이러한 제약을 고려하여 모델링되어야 합니다. 에 따르면
표준 [TS36211]에서는 하향링크 제어 프레임이 각 서브프레임의 시작 부분에서 시작됩니다.
전체 시스템 대역폭에 걸쳐 최대 3개의 기호까지 지속됩니다.
지속 시간은 PCFICH(물리 제어 형식 표시기 채널)에 의해 제공됩니다. 그만큼
그런 다음 할당에 대한 정보는 나머지 리소스에 매핑됩니다.
소위 물리적 다운링크 제어 채널에서 PCFICH에 의해 정의된 기간
(PDCCH). PDCCH는 DCI(Downlink Control Information)라는 단일 메시지를 전송합니다.
MAC 계층에서 오는 스케줄러는 리소스 할당을 나타냅니다.
특정 사용자. PCFICH 및 PDCCH는 제어 전송으로 모델링됩니다.
사용 가능한 전체에 걸쳐 밀리초의 3/14 고정 지속 시간의 프레임
왜냐하면 스케줄러는 제어 영역의 크기를 추정하지 않기 때문입니다. 이것
이는 단일 전송 블록이 고정된 전체 제어 프레임을 모델링한다는 것을 의미합니다.
사용 가능한 모든 RB에 걸쳐 전력(즉, PDSCH에 사용되는 전력)을 제공합니다. 이에 따르면
기능을 통해 이 전송은 참조 신호에 대한 귀중한 지원을 나타냅니다.
(RS). 이를 통해 모든 TTI에서 간섭 시나리오를 평가할 수 있습니다.
모든 eNB는 각각의 eNB를 통해 제어 프레임을 (동시에) 전송하고 있습니다.
사용 가능한 대역폭. 이 모델에는 파워 부스팅이 포함되어 있지 않습니다.
이는 구현된 채널 추정 모델의 개선 사항을 반영하지 않습니다.
SRS(Sounding Reference Signal)는 다운링크 제어 프레임과 유사하게 모델링됩니다.
SRS는 전체 시스템에서 서브프레임의 마지막 심볼에 주기적으로 배치된다.
대역폭. RRC 모듈에는 이미 동적으로 할당하는 알고리즘이 포함되어 있습니다.
에 따라 eNB에 연결된 실제 UE 수의 함수로서의 주기성
UE-특정 절차 ([TS8.2]의 36213절 참조).
맥 에 채널 지연
실제 MAC 및 PHY 구현의 대기 시간을 모델링하기 위해 PHY 모델은
TTI 배수(1ms)의 MAC-채널 지연입니다. 데이터와 제어의 전송
패킷은 이 양만큼 지연됩니다.
CQI 피드백
CQI 피드백 생성은 [FFAPI]에 지정된 내용에 따라 수행됩니다. ~ 안에
세부적으로 우리는 주기적인 광대역 CQI(즉, 단일 값
사용 중인 모든 RB를 대표하는 것으로 간주되는 채널 상태) 및 대역 내 CQI(즉,
각 RB의 채널 상태를 나타내는 값 집합).
보고할 CQI 인덱스는 먼저 SINR 측정값을 획득하여 얻은 다음
이 SINR 측정값을 적응형 변조 및 코딩에 전달하여 이를 매핑합니다.
CQI 지수.
다운링크에서 CQI 피드백을 생성하는 데 사용되는 SINR은 두 가지 다른 방법으로 계산할 수 있습니다.
방법 :
1. Ctrl 키 방법: SINR은 기준 신호 전력을 결합하여 계산됩니다.
신호(시뮬레이션에서는 PDCCH와 동일함) 및 간섭
PDCCH로부터 전력을 공급받습니다. 이 접근법은 모든 이웃 eNB를 하나의 eNB로 간주하게 됩니다.
이 eNB가 실제로 PDSCH를 수행하는지 여부에 관계없이 간섭자
전송 및 최종 간섭에 사용되는 전력 및 RB에 관계없이
PDSCH 전송.
2. 혼합 된 방법: SINR은 기준 신호 전력을 결합하여 계산됩니다.
신호(시뮬레이션에서는 PDCCH와 동일함) 및 간섭
PDSCH의 전력. 이 접근 방식을 사용하면 다음과 같은 요소만 간섭자로 간주됩니다.
PDSCH를 통해 적극적으로 데이터를 전송하고 있는 이웃 eNB
서로 다른 간섭 양을 설명하는 대역 내 CQI를 생성합니다.
실제 간섭 수준에 따른 RB. PDSCH가 없는 경우
임의의 eNB에 의해 전송이 수행되는 경우, 이 방법에서는 간섭이 발생한다는 점을 고려합니다.
0, 즉 SINR은 신호 대 잡음의 비율로만 계산됩니다.
이 두 가지 CQI 생성 접근 방식 사이를 전환하려면, LteHelper::UsePdschForCqiGeneration
구성해야 합니다. 첫 번째 접근 방식은 false이고 두 번째 접근 방식은 true입니다(true는
기본값):
Config::SetDefault ("ns3::LteHelper::UsePdschForCqiGeneration", BooleanValue (true));
업링크에서는 두 가지 유형의 CQI가 구현됩니다.
· SRS 기반, UE에 의해 주기적으로 전송됩니다.
· 실제 전송된 데이터로부터 계산된 PUSCH 기반.
스케줄러 인터페이스에는 속성 시스템 호출이 포함됩니다. UlCqi필터 관리를 위해
성격에 따라 CQI를 필터링하는 방법은 다음과 같습니다.
· SRS_UL_CQI SRS 기반 CQI만 저장합니다.
· PUSCH_UL_CQI PUSCH 기반 CQI만 저장하는 경우.
· ALL_UL_CQI 수신된 모든 CQI를 저장합니다.
주목해야 할 점은, FfMac스케줄러 인터페이스만 제공하며 이는 중요합니다.
이러한 속성을 관리하기 위한 코드를 포함하는 실제 스케줄러 구현
(이 문제에 대한 자세한 내용은 스케줄러 관련 섹션을 참조하세요.)
간섭 모델
PHY 모델은 잘 알려진 가우스 간섭 모델을 기반으로 합니다.
간섭 신호의 전력(선형 단위)을 합산하여 다음을 결정합니다.
전반적인 간섭 전력.
그림의 시퀀스 다이어그램 순서 도표 of 전에, PHY 간섭 계산
순서 SINR을 계산하기 위해 간섭 신호를 처리하는 방법과 SINR을 계산하는 방법을 보여줍니다.
그런 다음 CQI 피드백 생성에 사용됩니다.
[이미지] PHY 간섭 계산 절차의 시퀀스 다이어그램.UNINDENT
LTE 스펙트럼 모델
LTE에서 eNB와 UE의 무선 스펙트럼 사용은 [TS36101]에 설명되어 있습니다. 에서
시뮬레이터에서 무선 스펙트럼 사용량은 다음과 같이 모델링됩니다. f_c는 LTE Absolute를 나타냅니다.
100kHz에서 반송파 주파수를 식별하는 무선 주파수 채널 번호
래스터; 또한 B를 전송 대역폭 구성으로 설정합니다.
자원 블록. 시뮬레이션에 사용된 모든 쌍(f_c,B)에 대해 해당하는
sec-spectrum-module 에서 제공하는 기능을 사용하는 SpectrumModel. 모델을 사용하여
[Baldo2009]에 설명된 Spectrum 프레임워크. f_c 및 B는 모든 항목에 대해 구성할 수 있습니다.
시뮬레이션에서 eNB가 인스턴스화되었습니다. 따라서 각 eNB는 서로 다른 스펙트럼 모델을 사용할 수 있습니다.
모든 UE는 연결된 eNB의 스펙트럼 모델을 자동으로 사용합니다. 사용하여
[Baldo2009]에 설명된 MultiModelSpectrumChannel을 사용하는 eNB 간의 간섭
다양한 스펙트럼 모델이 적절하게 설명됩니다. 이를 통해 동적 시뮬레이션이 가능합니다.
예를 들어 스펙트럼 라이센스 정책과 같은 스펙트럼 액세스 정책은 다음과 같습니다.
[Ofcom2600MHz]에서 논의되었습니다.
Data PHY 오류 모델
시뮬레이터는 다음과 같은 데이터 평면(즉, PDSCH 및 PUSCH)의 오류 모델을 포함합니다.
표준 LSM(링크-시스템 매핑) 기술에 적용됩니다. 선택은 다음과 일치합니다.
OFDMA 무선 전송 기술의 표준 시스템 시뮬레이션 방법론. 덕분에
LSM은 높은 정확도를 유지하는 동시에
계산 복잡도가 증가합니다. 단일 링크 레이어 매핑을 기반으로 합니다.
시스템(우리의 경우 네트워크)에 대한 링크 수준 시뮬레이터를 통해 얻은 성능
시뮬레이터. 특히 링크 레이어 시뮬레이터는 성능을 생성하는 데 사용됩니다.
일반적으로 코드 블록 오류율 측면에서 PHY 계층 관점의 단일 링크
(BLER), 특정 정적 조건에서. LSM을 사용하면 이러한 매개변수를 더 많은 용도로 사용할 수 있습니다.
더 많은 링크가 있는 시스템/네트워크 시뮬레이터의 일반적인 복잡한 시나리오,
간섭 및 "색깔" 채널 전파 현상(예: 주파수 선택성)
페이딩).
이를 위해 비엔나 LTE 시뮬레이터 [ViennaLteSim]가 다음과 같은 용도로 사용되었습니다.
링크 레이어 성능 추출 및 상호 정보 기반 유효 SINR
(MIESM) 최근 Signet에서 발표한 작업의 일부를 사용하여 LSM 매핑 기능으로 사용
파도바대학교 그룹 [PaduaPEM].
MIESM
구체적인 LSM 방식은 상호정보 활용을 기반으로 한 방식이다.
일반적으로 코딩된 비트당 상호 정보(MIB 또는 MMIB)라고 하는 메트릭
다중 MIB의 평균이 포함됩니다). 또 다른 옵션은 다음과 같이 표시됩니다.
지수 ESM(EESM); 그러나 최근 연구에 따르면 MIESM이 EESM보다 성능이 뛰어난 것으로 나타났습니다.
정확성 조건 [LozanoCost].
[이미지] MIESM 계산 절차 다이어그램.UNINDENT
상호 정보(MI)는 성상도 매핑에 따라 달라지며 다음과 같을 수 있습니다.
심볼에 대한 MI를 평가하여 전송 블록(TB) 단위로 계산됩니다.
부반송파. 그러나 이는 네트워크 시뮬레이터에 비해 너무 복잡합니다. 따라서 우리의
RB 내의 플랫 채널 응답 구현이 고려되었습니다. 그러므로
TB의 전체 MI는 TB에 사용된 각 RB별로 평가된 MI를 평균하여 계산됩니다.
자세히 구현된 방식은 그림에 나와 있습니다. MIESM 계산 순서
도표여기서 우리는 모델이 각 RB의 MI 값을 평가하여 시작한다는 것을 알 수 있습니다.
그림에서는 SINR 샘플로 표시됩니다. 그런 다음 등가 MI는 다음과 같이 평가됩니다.
MI 값을 평균하여 TB 기준. 마지막으로, 이후 추가 조치를 취해야 합니다.
링크 수준 시뮬레이터는 블록 오류율 측면에서 링크 성능을 반환합니다.
(BLER) 블록이 코드인 AWGN(추가 백색 과시안 잡음) 채널
블록(CB)은 터보 인코더에 의해 독립적으로 인코딩/디코딩됩니다. 이 문제에 대해서는
실제 CB 크기를 추정하기 위해 표준 3GPP 분할 방식이 사용되었습니다.
([TS5.1.2]의 섹션 36212에 설명되어 있음) 이 방식은 TB를 N_{K_-}로 나눕니다.
K_- 크기의 블록과 K_+ 크기의 N_{K+} 블록. 따라서 전체 TB BLER(TBLER)은
다음과 같이 표현할 수 있습니다.
여기서 CBLER_i는 링크 레벨 시뮬레이터에 따라 획득된 CB i의 BLER입니다.
CB BLER 곡선. CBLER_i를 추정하기 위해 MI 평가가 구현되었습니다.
[wimaxEmd]에 정의된 수치 근사에 따라. 게다가 줄이기 위해
계산의 복잡성으로 인해 근사치가 조회로 변환되었습니다.
테이블. 구체적으로 AWGN을 근사화하기 위해 Gaussian 누적 모델을 사용하였다.
표준 AWGN에 꼭 맞는 세 가지 매개변수가 있는 BLER 곡선
공연, 공식:
여기서 x는 TB의 MI이고, b_{ECR}은 "전환 중심"을 나타내고 c_{ECR}은
각각에 대한 가우스 누적 분포의 "천이 폭"과 관련됩니다.
채널에 따른 실제 전송률인 ECR(Effective Code Rate)
코딩과 MCS. 우리가 고려한 모델의 계산 복잡성을 제한하기 위해
실제로 가능한 ECR의 하위 집합만 잠재적으로 5076개의 ECR을 갖게 됩니다.
(즉, 27개의 MCS 및 188개의 CB 크기). 이와 관련하여 우리는 CB 크기를 일부로 제한합니다.
대표 값(예: 40, 140, 160, 256, 512, 1024, 2048, 4032, 6144)
나머지는 실제에 가까운 최악의 CB가 사용됩니다(즉, 더 작은 CB
실제 크기와 관련하여 사용 가능한 크기 값). 이 선택은 일반적인
CB 크기가 BLER에 크게 영향을 미치지 않는 터보 코드의 성능.
그러나 1000비트보다 작은 CB 크기의 경우 효과는 다음과 같을 수 있습니다.
관련성(즉, 2dB까지) 따라서 우리는 이 불균형 샘플링 간격을 다음과 같이 채택합니다.
필요한 곳에 더 정밀한 작업을 수행합니다. 이 동작은 수치로 확인됩니다.
Annes 섹션에 제시되어 있습니다.
블레어 곡선
이런 점에서 우리는 [PaduaPEM]에서 얻은 곡선의 일부를 재사용했습니다. 세부적으로 우리는
개발자의 지원을 받아 CB BLER 곡선에 CB 크기 종속성을 도입했습니다.
[PaduaPEM] 및 LTE 비엔나 시뮬레이터. 실제로 출시된 모듈은 다음을 제공합니다.
MCS와 관련된 것(즉, 주어진 고정 ECR)에 대해서만 링크 계층 성능을 발휘합니다. ~ 안에
시뮬레이션 캠페인을 통해 평가된 각각에 대한 새로운 오류율 곡선을 자세히 설명합니다.
AWGN 잡음이 있는 단일 링크 및 CB 크기 104에 대한 링크 계층 시뮬레이터를 사용하여,
140, 256, 512, 1024, 2048, 4032 및 6144. 이 곡선은 가우스로 매핑되었습니다.
대응자 b_{ECR}을 얻기 위해 위에 제시된 누적 모델 공식 및
c_{ECR} 매개변수.
링크 레벨 시뮬레이터로 얻은 모든 MCS의 BLER 성능은
다음 그림(파란색 선)과 가우시안에 대한 대응 매핑
누적 분포(빨간색 점선).
[이미지] MCS 1, 2, 3, 4용 BLER..UNINDENT
[이미지] MCS 5, 6, 7, 8용 BLER..UNINDENT
[이미지] MCS 9, 10, 11, 12용 BLER..UNINDENT
[이미지] MCS 13, 14, 15, 16용 BLER..UNINDENT
[이미지] MCS 17, 17, 19, 20용 BLER..UNINDENT
[이미지] MCS 21, 22, 23, 24용 BLER..UNINDENT
[이미지] MCS 25, 26, 27, 28용 BLER..UNINDENT
[이미지] MCS 29용 BLER..UNINDENT
통합 of 전에, 블레어 곡선 in 전에, NS-3 LTE 모듈
구현된 모델은 최근 LTE PHY Error Model의 LSM에 대한 곡선을 사용합니다.
Signet Group [PaduaPEM]에 의해 ns3 커뮤니티에 출시되었으며 새로 생성된 것
다양한 CB 크기용. 그만큼 LteSpectrumPhy 클래스는 TB BLER 평가를 담당합니다.
에서 제공하는 방법 덕분에 LTEMiError모델 담당하는 수업
RB당 인지된 SINR의 벡터, MCS 및
CB에서 TB의 분할을 적절하게 모델링하기 위한 크기입니다. 얻기 위해서는
인지된 SINR의 벡터 두 인스턴스 LtePemSinrChunk프로세서 (의 아이
LteChunk프로세서 물리적 오류 성능을 얻기 위해 SINR을 평가하는 데 전념함)
UE 다운링크 및 eNB 업링크에 연결됨 LteSpectrumPhy 평가를 위한 모듈
PDSCH(UE 측) 및 ULSCH(eNB 측) 각각의 오류 모델 분포.
무손실 채널 작업을 위해 모델을 비활성화할 수 있습니다. Pem 활성화됨
의 속성 LteSpectrumPhy 클래스(기본적으로 활성 상태임). 이는 다음과 같이 수행할 수 있습니다.
표준 ns3 속성 시스템 프로시저에 대한 내용은 다음과 같습니다.
Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
Control 채널 PHY 오류 모델
시뮬레이터에는 다운링크 제어 채널(PCFICH 및 PDCCH)에 대한 오류 모델이 포함되어 있습니다.
업링크에서는 오류가 없는 이상적인 채널로 가정됩니다. 모델은 다음을 기반으로 합니다.
주파수 선택의 효과를 고려하기 위해 이전에 제시된 MIESM 접근 방식
대부분의 제어 채널은 사용 가능한 전체 대역폭에 걸쳐 있기 때문입니다.
PCFICH + PDCCH 오류 모델
이러한 채널의 오류 분포에 채택된 모델은 평가를 기반으로 합니다.
4GPP의 RAN3에서 수행된 연구에서 다양한 공급업체가
PDCCH와 공동으로 PCFICH의 복조 성능을 제공합니다. 이는 다음과 같은 사실 때문입니다.
PCFICH는 실제 차원을 UE에 전달하는 역할을 담당하는 채널입니다.
PDCCH(1~3개의 심볼에 걸쳐 있음) 그러므로 올바른 해독은
DCI는 두 가지 모두의 올바른 해석에 따라 달라집니다. 3GPP에서는 이 문제가
셀 에지 성능을 향상시키는 것으로 평가된 [FujitsuWhitePaper]
신호 저하로 인해 인접 셀 간의 간섭이 상대적으로 높을 수 있습니다. ㅏ
비슷한 문제가 펨토셀 시나리오에서도 나타났고, 일반적으로 HetNet에서도 나타났습니다.
병목 현상이 주로 PCFICH 채널에서 감지된 시나리오[Bharucha2011]
동일한 서비스 영역에 많은 eNB가 배치된 경우 이 채널이 충돌할 수 있습니다.
주파수에서도 PDCCH 채널의 정확한 검출이 불가능합니다.
시뮬레이터에서 수신 중에 인지된 SINR은 다음과 같이 추정되었습니다.
PCFICH의 오류 분포를 평가하기 위해 위에 제시된 MIESM 모델과
PDCCH. 상세하게는 모든 RB의 SINR 샘플이 MI 평가에 포함됩니다.
제어 프레임과 연관되며, 이 값에 따라 유효 SINR(eSINR)
MI 평가 프로세스를 거꾸로 하여 얻습니다. 다음의 경우에는 주의해야 합니다.
MIMO 전송, PCFICH와 PDCCH 모두 항상 전송 다이버시티 모드를 사용합니다.
표준으로 정의됩니다. eSINR에 따르면 디코딩 오류가 감지되었습니다.
확률은 [R4-081920]에 제시된 결과의 함수로 추정될 수 있습니다. 경우에
오류가 발생하면 DCI가 폐기되므로 UE는 해당 DCI를 수신할 수 없습니다.
특파원 Tbs, 따라서 손실이 발생했습니다.
MIMO 모델
송신기와 수신기 측 모두에서 다중 안테나를 사용하는 것으로 알려져 있습니다.
다중 입력 및 다중 출력(MIMO)은 다음과 같은 문헌에서 잘 연구된 문제입니다.
지난 몇 년. 대부분의 작업은 분석적으로 이득을 평가하는 데 집중됩니다.
용량 측면에서 다양한 MIMO 방식이 있을 수 있습니다. 그러나 누군가는 또한 제공합니다
수신 전력 측면에서 이득 정보 [CatreuxMIMO].
위의 고려 사항에 따라 다음을 고려하면보다 유연한 모델을 얻을 수 있습니다.
MIMO 체계가 통계적 관점에서 시스템에 가져오는 이득. 처럼
앞서 강조한 [CatreuxMIMO]는 여러 MIMO 솔루션의 통계적 이득을 제시합니다.
안테나 사이에 상관 관계가 없는 경우 SISO와 관련됩니다. 작품에서는
이득은 출력 SINR의 누적 분포 함수(CDF)로 표시됩니다.
SISO, MIMO-Alamouti, MIMO-MMSE, MIMO-OSIC-MMSE 및 MIMO-ZF 체계와 관련된 내용입니다.
결과를 자세히 설명하면 출력 SINR 분포는 다음과 같이 근사화될 수 있습니다.
고려된 체계의 함수로서 다른 평균과 분산을 갖는 로그 정규식입니다.
그러나 차이는 크게 다르지 않으며 대략적으로 동일합니다.
SISO 모드의 섀도잉 구성 요소에 이미 포함되어 있습니다.
건물전파손실모델, 상세히:
· SISO: = 13.5 및 ma = 20[dB].
· MIMO-Alamouti: = 17.7 및 ma = 11.1[dB].
· MIMO-MMSE: = 10.7 및 ma = 16.6[dB].
· MIMO-OSIC-MMSE: = 12.6 및 ma = 15.5[dB].
· MIMO-ZF: = 10.3 및 ma = 12.6[dB].
따라서 PHY 계층은 수신기가 인지하는 이득으로 MIMO 모델을 구현합니다.
SISO를 사용하여 얻은 것에 대해 MIMO 방식을 사용할 때. 우리는 이러한
MIMO에서 안테나간 상관관계가 없는 경우를 지칭하는 이득
계획; 따라서 경로 상관으로 인한 성능 저하를 모델링하지 않습니다.
UE PHY 측정 모델
[TS36214]에 따르면, UE는 eNB의 측정 세트를 보고해야 합니다.
장치는 RSRP(기준 신호 수신 전력)와
참조 신호 수신 품질(RSRQ). 전자는 수신된 전력의 척도입니다.
특정 eNB에는 채널 간섭과 열 잡음도 포함됩니다.
UE는 물리적 셀 ID(PCI)와 함께 측정값을 보고해야 합니다.
셀. RSRP와 RSRQ 측정은 모두 RS 수신 중에 수행되며,
PCI는 PSS(1차 동기화 신호)를 통해 획득됩니다. PSS가 전송됩니다.
eNB는 각 5개의 서브프레임에 대해 자세히 설명하며 서브프레임 1과 6에서 자세히 설명합니다. 실제 시스템에서는
504개의 개별 PCI를 사용할 수 있으므로 근처의 두 eNB가
동일한 PCI; 그러나 시뮬레이터에서는 시뮬레이션 메타데이터를 사용하여 PCI를 모델링하고 다음을 허용합니다.
최대 65535개의 개별 PCI를 사용하여 65535개 미만인 경우 PCI 충돌을 방지합니다.
eNB는 동일한 시나리오에서 시뮬레이션됩니다.
[TS36133] 섹션 9.1.4 및 9.1.7에 따르면 RSRP는 PHY 계층에서 dBm 단위로 보고됩니다.
RSRQ는 dB 단위입니다. RSRP와 RSRQ의 값은 다음을 통해 상위 계층에 제공됩니다.
C-PHY SAP(이를 통해 Ue측정매개변수 struct)에 정의된 대로 200ms마다
[TS36331]. 레이어 1 필터링은 수집된 모든 측정값을 평균하여 수행됩니다.
마지막 창 슬롯 동안. 보고 주기는 연구를 위해 조정될 수 있습니다.
목적을 수단으로 LteUePhy::UeMeasurementsFilterPeriod 속성을 사용하지 않는 것입니다.
RSRP와 RSRQ의 공식은 PHY의 가정을 고려하여 단순화될 수 있습니다.
채널이 RB 내에서 편평한 레이어, 가장 높은 수준의 정확도입니다. 사실, 이
이는 RB 내의 모든 RE가 동일한 권한을 갖는다는 것을 의미합니다. 따라서:
여기서 P(k,m)은 RB k 내 RE m의 신호 전력을 나타내며, 이는 관찰된 바와 같습니다.
이전에 는 동일한 RB 내에서 일정하고 P(k)와 같습니다. M은 다음을 전달하는 RE의 수입니다.
RB의 RS이고 K는 RB의 수입니다. P(k), 그리고 일반적으로 모든
이 섹션에 정의된 전력은 시뮬레이터에서 RB의 PSD로부터 얻습니다.
(이는 LTE간섭전력청크 프로세서), 상세히:
여기서 PSD_{RB}(k)는 RB k의 전력 스펙트럼 밀도이고, 180000은 대역폭(Hz)입니다.
는 RB의 수이고 12는 OFDM 심볼의 RB당 RE 수입니다. 마찬가지로 RSSI의 경우
있다
여기서 S는 RB에서 RS를 전달하는 OFDM 심볼의 수이고 R은 RE의 수입니다.
P(k,s,r), I(k,s,r) 및 N(k,s,r)이 OFDM 심볼(2로 고정됨)에 RS를 전달하는 동안
서빙 셀의 인지된 전력, 간섭 전력 및
RE r의 잡음 전력(기호 s). RSRP의 경우 RB 내의 측정은 다음과 같습니다.
PHY 모델에 따르면 항상 서로 동일합니다. 따라서 P(k,s,r) = P(k),
I(k,s,r) = I(k) 및 N(k,s,r) = N(k), 이는 RSSI가 다음과 같이 계산될 수 있음을 의미합니다.
PHY 수신 체인 구현의 제약 사항을 고려하고,
계산 복잡도 수준을 낮게 유지하므로 RSRP만 직접 얻을 수 있습니다.
모든 세포. 이는 다음과 같은 사실 때문입니다. LteSpectrumPhy 평가하기 위해 고안되었습니다.
서빙 eNB의 신호에 대해서만 간섭이 발생합니다. 이는 PHY가
계층은 서빙 eNB를 사용하여 전력 신호 정보를 관리하는 데 최적화되어 있습니다.
참조. 그러나 현재의 이웃 셀 i의 RSRP와 RSRQ는 추출될 수 있다.
다음에 상세히 설명된 바와 같이 서빙 셀 j에 대해 이용 가능한 정보:
여기서 RSRP_i는 이웃 셀 i의 RSRP이고, P_i(k)는 임의의 RE에서 인지되는 전력입니다.
RB k 내에서 K는 총 RB 개수, RSSI_i는 이웃 셀 i의 RSSI
UE가 셀 j에 부착된 경우(모든 수신 전력의 합이므로,
RSSI_j와 일치), I_j(k)는 RB k의 임의의 RE에서 UE가 인지한 총 간섭입니다.
셀 i에 첨부된 경우( LTE간섭전력청크 프로세서), P_j(k)는
RB k 및 N의 임의 RE에서 셀 j가 인식하는 전력은 전력 잡음 스펙트럼입니다.
모든 RE의 밀도. 평가된 RSRQ가 다음과 같은 경우 샘플은 유효한 것으로 간주됩니다.
위로 LteUePhy::RsrqUeMeasThreshold 속성을 사용하지 않는 것입니다.
하크
구현된 HARQ 방식은 결합된 IR(증분적 중복) 솔루션을 기반으로 합니다.
지속적인 데이터 흐름을 가능하게 하기 위해 여러 중지 및 대기 프로세스를 사용합니다. 자세하게는,
채택된 솔루션은 부드러운 결합 잡종 IR 가득 찬 증분 여분 (또한
IR 유형 II), 이는 재전송에 새로운 정보만 포함됨을 의미합니다.
이전 것들에게. HARQ의 자원 할당 알고리즘이 구현되었습니다.
각 스케줄러 클래스 내에서(즉, RrFfMac스케줄러 and PfFfMac스케줄러,
자세한 내용은 해당 해당 섹션을 참조하세요).
HARQ가 구현되었습니다. LteSpectrumPhy and LteHarqPhy 수업은
이 섹션에서 자세히 설명합니다.
표준에 따르면 UL 재전송은 동기식이므로
원래 전송 후 7ms가 할당되었습니다. 반면에 DL의 경우에는 다음과 같습니다.
비동기식이므로 7ms부터 시작하여 보다 유연한 방식으로 할당할 수 있으며
이는 특정 스케줄러 구현의 문제입니다. HARQ 프로세스 동작은 다음과 같습니다.
그림에 묘사:참조:fig-harq-프로세스-구성표.
MAC 계층에서는 스케줄러에 존재하는 HARQ 개체가 제어를 담당합니다.
새로운 패킷을 생성하고 재전송을 관리하기 위한 8개의 HARQ 프로세스
DL과 UL. 스케줄러는 eNB 및 UE PHY 계층에서 HARQ 피드백을 수집합니다.
(각각 UL 및 DL 연결에 대해) FF API 프리미티브를 사용
SchedUlTriggerReq and SchedUlTriggerReq. HARQ 피드백과 RLC에 따르면
상태를 버퍼링하면 스케줄러는 두 가지 재전송을 모두 포함하는 DCI 세트를 생성합니다.
HARQ 블록은 일반적으로 잘못된 전송과 새로운 전송을 수신하여 해당 블록에 우선순위를 부여합니다.
이전의. 이 문제에 대해 스케줄러는 다음과 같은 경우 한 가지 제약 조건을 고려해야 합니다.
HARQ 재전송을 위해 자원을 할당하려면 동일한 변조 차수를 사용해야 합니다.
첫 번째 전송 시도(즉, [0..9]의 MCS에 대한 QPSK, [16..10]의 MCS에 대한 16QAM)
및 [64..17]의 MCS에 대한 28QAM). 이 제한은 요율 지정에서 비롯됩니다.
3GPP 표준 [TS36212]의 일치자, 여기서 알고리즘은 변조 순서를 수정합니다.
중복 버전의 다양한 블록을 생성합니다.
PHY 오류 모델 모델(즉, LTEMiError모델 이전에 이미 제시된 클래스)가
[wimaxEmd]에 따라 IR HARQ를 고려하도록 확장되었습니다.
재전송의 경우 MIESM 매핑을 위한 AWGN 곡선 매핑은 다음과 같이 제공됩니다.
여기서 X는 원본 정보 비트 수, C_i는 코딩된 비트 수, M_i는
총 q 재전송 횟수에 대해 수신된 HARQ 블록당 상호 정보.
따라서 오류 모델로 오류 확률을 반환할 수 있도록
시뮬레이터에 구현된 것은 R_{eff} 및 MI_{I eff}를 평가하고 값을 반환합니다.
에 대해 가장 가까운 낮은 속도를 갖는 동일한 변조의 ECR의 오류 확률
R_{eff}. HARQ 재전송의 효과를 고려하기 위해 새로운 곡선 세트
원래 MCS에 사용된 표준에 맞춰 통합되었습니다. 새로운 곡선
가장 보수적인 변조 MCS가 사용되는 경우를 다루기 위한 것입니다.
이는 표준 MCS 중 하나에 비해 낮은 R_{eff} 생성을 의미합니다. 이에
1, 2, 3번 재전송에 대한 곡선은 10번과 17번에 대해 평가되었습니다.
MCS 0 생성된 코드 속도가 이미 XNUMX이므로 첫 번째 재전송만 고려했습니다.
매우 보수적(예: 0.04)이며 수신에 대해 충분히 견고한 오류율을 반환합니다.
(즉, BLER의 침체는 -18dB 주위에 집중됩니다.) 주목해야 할 점은,
첫 번째 TB 전송의 크기는 모든 정보 비트를 포함하는 것으로 가정되었습니다.
코딩되다; 따라서 X는 HARQ 프로세스에서 전송된 첫 번째 TB의 크기와 같습니다. 그만큼
모델은 코드워드에 패리티 비트가 최종적으로 존재한다고 가정합니다.
링크 수준 곡선에서 고려됩니다. 이는 최소 R_{eff}가
모델에 도달하면 추가 패리티 전송으로 인한 이득은 포함되지 않습니다.
비트.
[이미지] LTE.UNINDENT의 HARQ 프로세스 동작
HARQ 블록의 디코딩을 관리하는 데 전념하는 HARQ 부분은 다음과 같습니다.
에서 구현 LteHarqPhy and LteSpectrumPhy 클래스. 전자가 담당한다
각 활성 프로세스에 대한 HARQ 정보를 유지합니다. 후자는 다음과 상호 작용합니다.
LTEMiError모델 수신된 블록의 정확성을 평가하기 위한 클래스이며 다음을 포함합니다.
스케줄러에서 HARQ 엔터티와 통신을 담당하는 메시징 알고리즘
해독의 결과. 이러한 메시지는
dlInfoListElement DL의 경우 ulInfoList요소 UL의 경우 PUCCH를 통해 전송되며
PHICH는 각각의 가정에 따라 이상적인 오류 없는 모델을 갖습니다.
구현. HARQ와 LTE 프로토콜 스택 간의 반복에 대한 스케치
그림:참조:fig-harq-아키텍처.
마지막으로 HARQ 엔진은 MAC 및 PHY 계층 모두에서 항상 활성화됩니다. 그러나 경우에
스케줄러는 HARQ를 지원하지 않습니다. 시스템은 HARQ와 계속 작동합니다.
기능이 금지되었습니다(즉, 버퍼가 채워졌으나 사용되지 않음). 이 구현
특성은 HARQ 이전에 구현된 스케줄러와의 하위 호환성을 제공합니다.
완성.
[이미지] HARQ와 LTE 프로토콜 스택 간의 상호 작용.UNINDENT
맥
자원 배당 모델
이제 LTE에서 자원 할당이 어떻게 처리되는지 간략하게 설명하고, 이를 명확하게 설명합니다.
시뮬레이터에서 모델링했습니다. 스케줄러는 특정 구조 생성을 담당합니다.
라는 Data Control 표시 (DCI)는 eNB의 PHY에 의해 전송됩니다.
연결된 UE들에게 서브프레임별 자원 할당을 알려주기 위해
기초. 다운링크 방향으로 이 작업을 수행하려면 스케줄러가 특정 항목을 채워야 합니다.
변조 및 코딩과 같은 모든 정보가 포함된 DCI 구조의 필드
사용할 MCS(Scheme), MAC 전송 블록(TB) 크기 및 할당 비트맵
이는 eNB가 각 사용자에게 전송한 데이터를 포함할 RB를 식별합니다.
리소스를 물리적 RB에 매핑하기 위해 다음을 채택합니다. 지역화 매핑 접근 (참조
[Sesia2009], 섹션 9.2.2.1); 따라서 주어진 서브프레임에서 각 RB는 항상 다음에 할당됩니다.
두 슬롯 모두에 동일한 사용자가 있습니다. 할당 비트맵은 다양한 형식으로 코딩될 수 있습니다. ~에
이 구현에서 우리는 다음을 고려했습니다. 배당 타입 0 [TS36213]에 정의되어 있습니다.
RB는 서로 다른 크기의 리소스 블록 그룹(RBG)으로 그룹화됩니다.
사용 중인 전송 대역폭 구성의 함수로 사용됩니다.
특정 대역폭 값의 경우 그룹 크기가 RB가 아니기 때문에 모든 RB를 사용할 수는 없습니다.
그룹의 공약수. 예를 들어 대역폭이 다음과 같은 경우입니다.
25 RB, 즉 RBG 크기는 2 RB가 되므로 1 RB는 그렇지 않습니다.
주소 지정 가능. 업링크에서는 인접한 RB만 DCI 형식을 지정할 수 있으므로 DCI 형식이 다릅니다.
SC-FDMA 변조로 인해 사용됩니다. 결과적으로 모든 RB는 다음과 같이 할당될 수 있습니다.
대역폭 구성에 관계없이 eNB.
적응 조정 and 코딩
시뮬레이터는 두 가지 AMC(Adaptive Modulation and Coding) 모델을 제공합니다.
GSoC 모델[Piro2011]과 물리적 오류 모델을 기반으로 한 모델(
다음 섹션).
이전 모델은 [Piro2011]에서 설명한 모델을 수정한 버전으로,
[Seo2004]에서 영감을 받았습니다. 우리 버전은 다음에 설명되어 있습니다. 내가 표시하자
일반 사용자이고 mma_i를 SINR로 둡니다. 사용자 i의 스펙트럼 효율 \ta_i를 얻습니다.
다음 방정식을 사용합니다.
[R1-081483]에 설명된 절차는 해당 MCS 방식을 얻는 데 사용됩니다. 그만큼
스펙트럼 효율은 채널 품질 표시기(CQI)를 기반으로 양자화되어 다음과 같이 반올림됩니다.
가장 낮은 값을 가지며 해당 MCS 방식에 매핑됩니다.
마지막으로 [R1-081483]의 MCS 지수 간에 약간의 불일치가 있음을 확인합니다.
그리고 이는 표준에 의해 표시됩니다: [TS36213] 표 7.1.7.1-1은 MCS 지수를 나타냅니다.
0에서 31로 이동하며 0은 유효한 MCS 체계로 보이지만(TB 크기는 0이 아님)
[R1-081483] 첫 번째 유용한 MCS 지수는 1입니다. 따라서 의도한 대로 값을 얻으려면
표준에 따라 [R1-1]에 보고된 지수에서 081483을 빼야 합니다.
대체 모델은 이 시뮬레이터를 위해 개발된 물리적 오류 모델을 기반으로 합니다.
다음 하위 섹션에서 설명합니다. 이 방식은 MCS 선택을 적용할 수 있습니다.
특정 CQI 보고에 따른 실제 PHY 계층 성능. 에 따르면
그들의 정의에 따르면, CQI 인덱스는 변조된 단일 PDSCH TB가 할당될 때 할당됩니다.
[TS7.2.3]의 표 1-36213의 해당 CQI 인덱스에 대응하는 코딩 방식 및 코드 레이트
0.1 미만의 오류 확률로 수신될 수 있습니다. 광대역 CQI의 경우,
참조 TB에는 참조를 기반으로 하기 위해 사용 가능한 모든 RBG가 포함됩니다.
사용 가능한 전체 자원; 반면, 부대역 CQI의 경우 기준 TB는 RBG 크기로 지정됩니다.
교통편 블록 모델
시뮬레이터에서 제공하는 MAC 전송 블록(TB) 모델은 다음과 같이 단순화됩니다.
3GPP 사양을 준수합니다. 특히, 시뮬레이터 관련 클래스
(PacketBurst)는 시뮬레이터와 동등한 수준을 달성하기 위해 MAC SDU를 집계하는 데 사용됩니다.
상응하는 구현 복잡성 없이 TB의 다중화
RLC 계층과의 서로 다른 논리 채널은 전용 패킷을 사용하여 수행됩니다.
다음과 부분적으로 동일한 기능을 수행하는 태그(LteRadioBearerTag)
3GPP에서 지정한 MAC 헤더의 헤더입니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 펨토포럼 맥 스케줄러 인터페이스
이 섹션에서는 LTE MAC 스케줄러 인터페이스의 ns-3 특정 버전에 대해 설명합니다.
FemtoForum [FFAPI]에서 게시한 사양입니다.
FemtoForum MAC 스케줄러 인터페이스 [FFAPI]의 ns-3 특정 버전을 구현했습니다.
C++ 추상 클래스 세트로; 특히 각 기본 요소는 C++로 변환됩니다.
특정 클래스의 메소드. 용어 구현 여기서는 채택된 것과 동일한 의미로 사용됩니다.
[FFAPI]에서는 논리적 인터페이스를 변환하는 프로세스를 나타냅니다.
특정 프로그래밍 언어에 대한 사양입니다. [FFAPI]의 프리미티브는 그룹화됩니다.
스케줄러 구성을 처리하는 CSCHED 기본 요소와
스케줄러 실행을 처리하는 SCHED 기본 요소입니다. 게다가 [FFAPI]
두 가지 다른 종류의 프리미티브를 정의합니다. REQ 유형의 프리미티브는 MAC에서 MAC으로 이동합니다.
스케줄러 및 IND/CNF 유형의 스케줄러는 스케줄러에서 MAC으로 이동합니다. 이것을 번역하려면
특성을 C++로 구현하여 서비스를 구현하는 다음 추상 클래스를 정의합니다.
기본 요소를 발행하는 데 사용되는 SAP(액세스 포인트):
· NS FfMacSchedSap공급자 클래스는 SCHED에 해당하는 모든 C++ 메서드를 정의합니다.
REQ 유형의 기본 요소;
· NS FfMacSchedSap사용자 클래스는 SCHED에 해당하는 모든 C++ 메서드를 정의합니다.
CNF/IND 유형의 기본 요소;
· NS FfMacCschedSapProvider 클래스는 다음에 해당하는 모든 C++ 메서드를 정의합니다.
REQ 유형의 CSCHED 기본 요소;
· NS FfMacCschedSap사용자 클래스는 CSCHED에 해당하는 모든 C++ 메서드를 정의합니다.
CNF/IND 유형의 기본 요소;
MAC 스케줄러 인터페이스에는 제어 블록, 서브프레임 블록 등 3개의 블록이 포함됩니다.
및 스케줄러 블록. 이러한 각 블록은 MAC 스케줄러 인터페이스의 한 부분을 제공합니다.
아래 그림은 우리가 정의한 블록과 SAP의 관계를 보여줍니다.
MAC 스케줄러 인터페이스 구현.
[이미지]
위의 원칙 외에도 다음과 같은 설계 선택이 이루어졌습니다.
· MAC 스케줄러 인터페이스 클래스의 정의는 명명 규칙을 따릅니다.
의 NS-3 코딩 스타일. 특히, 우리는 CamelCase 규칙을 따릅니다.
원시적 이름. 예를 들어, 원시 CSCHED_CELL_CONFIG_REQ 로 번역된다
CschedCellConfigReq 인간을 NS-3 암호.
· 기본 매개변수에는 동일한 명명 규칙이 적용됩니다. 다음과 같이
기본 매개변수는 클래스의 멤버 변수이며 접두사가 붙습니다.
m_.
· 데이터 구조에서 벡터와 목록의 사용과 관련하여 [FFAPI]는 다음과 같습니다.
거의 C 지향 API입니다. 그러나 ns-3에서는 C++가 사용된다는 점을 고려하면
C 배열의 사용은 권장되지 않습니다. 우리는 STL 벡터(std :: vector)
C 어레이를 사용하는 대신 MAC 스케줄러 인터페이스 구현
[FFAPI]가 작성된 방식으로 암시적으로 제안됩니다.
· C++에서는 생성자와 소멸자가 있는 멤버가 허용되지 않습니다. 노동 조합. 따라서 모두
라고 불리는 데이터 구조 노동 조합 [FFAPI]에서는 다음과 같이 정의되었습니다.
구조체 우리의 코드에서.
아래 그림은 eNB 내에서 MAC Scheduler Interface가 어떻게 사용되는지 보여줍니다.
[이미지]
CSCHED SAP와 SCHED SAP의 사용자 측은 eNB MAC 내에서 구현되며,
즉, 파일에서 lte-enb-mac.cc. eNB MAC은 다른 스케줄러와 함께 사용할 수 있습니다.
수정 없이 구현. 동일한 그림은 또한 예를 들어 어떻게
Round Robin Scheduler가 구현되었습니다. eNB의 MAC, Round Robin과 상호 작용하기 위해
스케줄러는 SCHED SAP 및 CSCHED SAP 인터페이스의 공급자 측을 구현합니다. ㅏ
유사한 접근 방식을 사용하여 다른 스케줄러를 구현할 수도 있습니다. 각각에 대한 설명
우리가 LTE 시뮬레이션 모듈의 일부로 제공하는 스케줄러 구현 중
다음 하위 섹션에 제공됩니다.
일주 남자 이름 (RR) 스케줄러
RR(Round Robin) 스케줄러는 아마도 문헌에서 볼 수 있는 가장 간단한 스케줄러일 것입니다.
이는 활성 흐름, 즉 논리적 흐름 간에 사용 가능한 리소스를 나누어 작동합니다.
비어 있지 않은 RLC 대기열이 있는 채널. RBG 개수가 해당 개수보다 많은 경우
활성 플로우의 수에 따라 모든 플로우는 동일한 서브프레임에 할당될 수 있습니다. 그렇지 않은 경우
활성 흐름 수가 RBG 수보다 크지만 모든 흐름이 가능하지는 않습니다.
주어진 서브프레임에서 스케줄링됩니다. 그러면 다음 서브프레임에서 할당이 시작됩니다.
할당되지 않은 마지막 흐름. 각 사용자별로 채택할 MCS가 완료되었습니다.
수신된 광대역 CQI에 따라.
HARQ와 관련하여 RR은 비적응 버전을 구현합니다.
재전송 시도 할당 RR은 동일한 할당 구성을 사용합니다.
이는 동일한 RBG 및 MCS를 유지함을 의미합니다. 할당된 UE
HARQ 재전송은 다음과 같은 경우 새로운 데이터 전송에 고려되지 않습니다.
동일한 TTI에서 이용 가능한 전송 기회. 마지막으로 HARQ는 다음을 사용하여 비활성화할 수 있습니다.
이전 테스트 사례 및 코드와의 하위 호환성을 유지하기 위한 ns3 속성 시스템,
상세히:
Config::SetDefault ("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue (false));
스케줄러는 특성에 따라 업링크 CQI 필터링을 구현합니다.
UlCqi필터 속성, 자세히:
· SRS_UL_CQI: 내부 속성에는 SRS 기반 CQI만 저장됩니다.
· PUSCH_UL_CQI: 내부 속성에는 PUSCH 기반 CQI만 저장됩니다.
· ALL_UL_CQI: 모든 CQI는 동일한 내부 속성(즉, 마지막 CQI)에 저장됩니다.
수신된 데이터는 그 성격과 독립적으로 저장됩니다.
비례항 공정한 (FP) 스케줄러
PF(Proportional Fair) 스케줄러[Sesia2009]는 사용자가
순간 채널 품질은 자체 평균 채널 상태에 비해 높습니다.
시간. i,j는 일반 사용자를 나타냅니다. t를 서브프레임 인덱스로, k를 리소스로 설정
블록 인덱스; M_{i,k}(t)는 무엇에 따라 자원 블록 k에서 사용자 i가 사용할 수 있는 MCS인지 확인하십시오.
AMC 모델에 의해 보고됨(참조: 적응 조정 and 코딩); 마지막으로 S(M, B)를
자원의 수가 B인 경우 [TS36213]에 정의된 비트 단위의 TB 크기
블록이 사용됩니다. 리소스 블록 그룹에서 사용자 i에 대해 달성 가능한 속도 R_{i}(k,t)(비트/초)
서브프레임 t에서의 k는 다음과 같이 정의됩니다.
여기서 au는 TTI 기간입니다. 각 서브프레임 t의 시작에서 각 RBG는
특정 사용자. 구체적으로, 시간 t에서 RBG k가 할당된 인덱스(144}_{k}(t)는 다음과 같다.
다음과 같이 결정
여기서 T_{j}(t)는 사용자 j가 인지한 과거 처리량 성능입니다. 에 따르면
위의 스케줄링 알고리즘을 통해 사용자는 서로 다른 RBG에 할당될 수 있습니다.
채널의 현재 상태와 과거에 따라 인접 여부
처리 성능 T_{j}(t). 후자는 서브프레임 t의 끝에서 결정됩니다.
다음 지수 이동 평균 접근법을 사용합니다.
여기서 lpha는 지수 이동의 시간 상수(서브프레임 수)입니다.
평균, 384s는 서브프레임 t에서 사용자 i에 의해 달성된 실제 처리량입니다. 360은
다음 절차에 따라 측정됩니다. 먼저 MCS 840 j를 결정합니다.
그런 다음 총 개수 936j를 결정합니다.
어디 |
HARQ와 관련하여 PF는 비적응 버전을 구현합니다.
재전송 시도 할당 스케줄러는 동일한 할당을 사용합니다.
이는 동일한 RBG 및 MCS를 유지함을 의미합니다. UE
HARQ 재전송을 위해 할당된 데이터는 새로운 전송에는 고려되지 않습니다.
동일한 TTI에서 전송 기회가 있는 경우 데이터. 마지막으로 HARQ
이전 버전과의 호환성을 유지하기 위해 ns3 속성 시스템을 사용하여 비활성화할 수 있습니다.
테스트 케이스 및 코드에 대한 자세한 내용은 다음과 같습니다.
Config::SetDefault ("ns3::PfFfMacScheduler::HarqEnabled", BooleanValue (false));
최고 맞춤형 설비 (MT) 스케줄러
최대 처리량(MT) 스케줄러[FCapo2012]는 전체 처리량을 최대화하는 것을 목표로 합니다.
eNB의 이는 달성 가능한 최대 속도를 달성할 수 있는 사용자에게 각 RB를 할당합니다.
현재 TTI. 현재 NS-3의 MT 스케줄러에는 주파수 도메인의 두 가지 버전이 있습니다.
(FDMT) 및 시간 도메인(TDMT). FDMT에서는 매 TTI, MAC 스케줄러가 RBG를 UE에 할당합니다.
부대역 CQI에 의해 계산된 달성 가능한 최고 속도를 가진 사람. TDMT에서는 매 TTI, MAC
스케줄러는 광대역 CQI로 계산된 달성 가능한 최고 속도를 갖는 하나의 UE를 선택합니다.
그런 다음 MAC 스케줄러는 현재 TTI에서 이 UE에 모든 RBG를 할당합니다. 계산
FDMT 및 TDMT의 달성 가능한 속도는 PF의 달성 속도와 동일합니다. i,j는 일반적인 것을 나타낸다고 하자
사용자; t를 서브프레임 인덱스라고 하고, k를 자원 블록 인덱스라고 하고; M_{i,k}(t)를
AMC 모델에 의해 보고된 내용에 따라 사용자 i가 자원 블록 k에서 사용할 수 있는 MCS(참조:
적응 조정 and 코딩); 마지막으로 S(M, B)를 다음에 정의된 비트 단위의 TB 크기로 설정합니다.
[TS36213] B개의 자원블록을 사용하는 경우. 달성 가능한 비율
서브프레임 t에서 자원 블록 k의 사용자 i에 대한 비트/초의 R_{i}(k,t)는 다음과 같이 정의됩니다.
여기서 au는 TTI 기간입니다. 각 서브프레임 t의 시작에서 각 RB는
특정 사용자. 구체적으로, 시점 t에서 RB k가 할당된 인덱스(144}_{k}(t)는 다음과 같다.
다음과 같이 결정
동일한 달성 가능 속도를 갖는 여러 UE가 있는 경우 현재 구현은 항상
스크립트에서 생성된 첫 번째 UE를 선택합니다. MT는 셀 처리량을 극대화할 수 있지만
채널 상태가 좋지 않은 UE에게는 공정성을 제공할 수 없습니다.
맞춤형 설비 에 평균 (TTA) 스케줄러
TTA(평균 처리량) 스케줄러[FCapo2012]는 중간 단계로 간주될 수 있습니다.
MT와 PF 사이. TTA에 사용되는 측정항목은 다음과 같이 계산됩니다.
여기서 비트/초 단위의 R_{i}(k,t)는 리소스 블록 k에서 사용자 i가 달성할 수 있는 속도를 나타냅니다.
서브프레임 t. 계산 방법은 이미 MT 및 PF에 나와 있습니다. 한편, R_{i}(t)
비트/s는 서브프레임 t에서 i에 대해 달성 가능한 속도를 나타냅니다. 그 둘의 차이점은
달성 가능한 비율은 MCS를 얻는 방법입니다. R_{i}(k,t)에 대해 MCS는 부대역 CQI에 의해 계산되는 반면,
R_{i}(t)는 광대역 CQI에 의해 계산됩니다. TTA 스케줄러는 빈도로만 구현 가능
특정 RBG의 달성 가능한 속도는 FD에만 관련되어 있기 때문에 도메인(FD)
일정.
블라인드 평균 맞춤형 설비 스케줄러
Blind Average Throughput 스케줄러[FCapo2012]는 모든 사용자에게 동일한 처리량을 제공하는 것을 목표로 합니다.
eNB 아래의 UE. TTA에 사용되는 측정항목은 다음과 같이 계산됩니다.
여기서 T_{j}(t)는 사용자 j가 인지한 과거 처리 성능이며
PF 스케줄러에서도 같은 방법으로 계산됩니다. 시간 영역에서 블라인드 평균 처리량
(TD-BET) 스케줄러는 우선 순위가 가장 높은 UE를 선택하고 모든 RBG를 할당합니다.
이 UE에게. 반면, 주파수 영역 블라인드 평균 처리량(FD-BET)에서는
매 TTI마다 스케줄러는 먼저 과거 평균 처리량이 가장 낮은 하나의 UE를 선택합니다(가장 큰
우선순위 측정항목). 그런 다음 스케줄러는 이 UE에 하나의 RBG를 할당하고 예상되는 값을 계산합니다.
이 UE의 처리량을 확인하고 이를 과거 평균 처리량 T_{j}(t)와 비교하는 데 사용합니다.
다른 UE. 스케줄러는 예상할 때까지 이 UE에 RBG를 계속 할당합니다.
처리량은 모든 UE의 과거 평균 처리량 T_{j}(t) 중 가장 작은 것이 아닙니다. 그 다음에
스케줄러는 과거가 가장 낮은 새로운 UE에 대해 RBG를 할당하기 위해 동일한 방법을 사용합니다.
모든 RBG가 UE에 할당될 때까지의 평균 처리량 T_{j}(t)입니다. 이것의 원리
즉, 모든 TTI에서 스케줄러는 두 TTI 간에 동일한 처리량을 달성하기 위해 최선을 다합니다.
모든 UE.
Token 은행 공정한 열 스케줄러
TBFQ(Token Bank Fair Queue)는 누수 버킷에서 파생되는 QoS 인식 스케줄러입니다.
기구. TBFQ에서 사용자 i의 트래픽 흐름은 다음과 같은 매개변수로 특징지어집니다.
· t_{i}: 패킷 도착률(byte/sec)
· r_{i}: 토큰 생성 속도(바이트/초)
· p_{i}: 토큰 풀 크기(바이트)
· E_{i} : 토큰으로부터 빌리거나 주어진 토큰의 개수를 기록하는 카운터
플로우별 뱅크 i ; E_{i}는 0보다 작을 수 있습니다.
각 K바이트 데이터는 k개의 토큰을 소비합니다. 또한 TBFQ는 공유 토큰 뱅크(B)를 유지하여
서로 다른 흐름 간의 트래픽 균형을 유지합니다. 토큰 생성률 r_{i}가 다음보다 큰 경우
패킷 도착률 t_{i}이면 토큰 풀에서 오버플로된 토큰이 토큰에 추가됩니다.
은행, E_{i}는 같은 금액만큼 증가합니다. 그렇지 않으면 흐름을 철회해야 합니다.
우선순위 지표 frac{E_{i}}{r_{i}}를 기반으로 하는 토큰 뱅크의 토큰 및 E_{i}는
감소했습니다. 분명히 사용자가 토큰 뱅크에 더 많이 기여하는 것이 더 높은 우선순위를 갖습니다.
토큰을 빌리세요; 반면에 사용자는 은행에서 더 많은 토큰을 빌립니다.
토큰을 계속 인출하는 것이 우선순위입니다. 따라서 다수의 사용자가 사용하는 경우
동일한 토큰 생성 속도, 트래픽 속도 및 토큰 풀 크기로 인해 사용자는 더 높은 어려움을 겪습니다.
간섭으로 인해 은행에서 토큰을 빌릴 수 있는 기회가 더 많아졌습니다. 또한 TBFQ는 경찰을 수사할 수 있습니다.
처리량을 제한하기 위해 토큰 생성 속도를 설정하여 트래픽을 차단합니다. 추가적으로,
TBFQ는 또한 각 흐름에 대해 다음 세 가지 매개변수를 유지합니다.
· 부채 한도 d_{i}: E_{i}가 이 임계값보다 낮으면 사용자 i는 더 이상 토큰을 빌릴 수 없습니다.
은행에서. 이는 악의적인 UE가 너무 많은 토큰을 빌리는 것을 방지하기 위한 것입니다.
· 신용 한도 c_{i}: UE i가 은행에서 한 번에 빌릴 수 있는 최대 토큰 수
시간.
· 신용 임계값 C: E_{i}가 부채 한도에 도달하면 UE i는 C 토큰을 은행에 저장해야 합니다.
은행에서 토큰을 추가로 빌리기 위해.
NS-3의 LTE에는 주파수 도메인 TBFQ(FD-TBFQ)와 시간이라는 두 가지 버전의 TBFQ 스케줄러가 있습니다.
도메인 TBFQ(TD-TBFQ). FD-TBFQ에서 스케줄러는 항상 가장 높은 메트릭을 가진 UE를 선택하고
UE의 RLC 버퍼 내에 패킷이 없을 때까지 가장 높은 부대역 CQI를 갖는 RBG를 할당합니다.
또는 모든 RBG가 할당됩니다[FABokhari2009]. TD-TBFQ에서는 최대 UE를 선택한 후
메트릭을 사용하여 광대역 CQI [WKWong2004]를 사용하여 이 UE에 모든 RBG를 할당합니다.
우선 세트 스케줄러
PSS(우선순위 설정 스케줄러)는 TD(시간 도메인)와 QoS 인식 스케줄러를 결합한 것입니다.
주파수 도메인(FD) 패킷 스케줄링 작업을 하나의 스케줄러로 통합합니다[GMonghal2008]. 그것
지정된 TBR(Target Bit Rate)에 따라 UE 간의 공정성을 제어합니다.
TD 스케줄러 부분에서 PSS는 먼저 비어 있지 않은 RLC 버퍼가 있는 UE를 선택한 다음 이를 나눕니다.
TBR을 기준으로 두 세트로 나뉩니다.
· 세트 1: 과거 평균 처리량이 TBR보다 작은 UE; TD 스케줄러가 계산합니다.
BET(Blind Equal Throughput) 스타일의 우선순위 측정항목:
· 세트 2: 과거 평균 처리량이 TBR보다 크거나 같은 UE; TD 스케줄러
PF(Proportional Fair) 스타일로 우선순위 측정항목을 계산합니다.
세트 1에 속한 UE는 세트 2에 속한 UE보다 우선순위가 높습니다. 그런 다음 PSS는 다음을 선택합니다.
두 세트에서 가장 높은 메트릭을 가진 N_{mux} UE를 그리고 해당 UE를 FD 스케줄러로 전달합니다. PSS에서는
FD 스케줄러는 선택된 메트릭을 최대화하는 RBG k를 UE n에 할당합니다. 두 개의 PF 스케줄러
PF 스케줄러에서 사용됩니다.
· 비례박람회(PFsch) 예정
· 평균에 대한 반송파 간섭(CoIta)
여기서 Tsch_{j}(t)는 사용자 j가 인지한 과거 처리량 성능과 유사합니다.
i번째 사용자가 실제로 서비스를 받을 때만 업데이트된다는 차이점이 있습니다. CoI[j,k]는
UE j의 RBG k에 대한 SINR의 추정. PFsch와 CoIta는 모두 FD를 분리하기 위한 것입니다.
TD 스케줄러의 메트릭. 또한 PSS FD 스케줄러는 가중치 메트릭 W[n]도 제공합니다.
UE 수가 적은 경우 공정성 제어에 도움이 됩니다.
여기서 T_{j}(t)는 사용자 j가 인지한 과거 처리량 성능입니다. 따라서
RBG k, FD 스케줄러는 주파수의 곱을 최대화하는 UE j를 선택합니다.
가중치 W[n]에 의한 도메인 메트릭(Msch, MCoI). 이 전략은 처리량을 보장합니다.
품질이 낮은 UE는 TBR을 선호하는 경향이 있습니다.
Config::SetDefault ("ns3::PfFfMacScheduler::HarqEnabled", BooleanValue (false));
스케줄러는 특성에 따라 업링크 CQI 필터링을 구현합니다.
UlCqi필터 속성, 자세히:
· SRS_UL_CQI: 내부 속성에는 SRS 기반 CQI만 저장됩니다.
· PUSCH_UL_CQI: 내부 속성에는 PUSCH 기반 CQI만 저장됩니다.
· ALL_UL_CQI: 모든 CQI는 동일한 내부 속성(즉, 마지막 CQI)에 저장됩니다.
수신된 데이터는 그 성격과 독립적으로 저장됩니다.
채널 and QoS를 인식 스케줄러
CQA(Channel and QoS Aware) 스케줄러[Bbojovic2014]는 LTE MAC 다운링크 스케줄링입니다.
HOL(Head of Line) 지연, GBR 매개변수 및 채널을 고려하는 알고리즘
다양한 하위 대역에 대한 품질. CQA 스케줄러는 공동 TD 및 FD 스케줄링을 기반으로 합니다.
TD(각 TTI에서)에서 CQA 스케줄러는 우선순위별로 사용자를 그룹화합니다. 목적
그룹화는 HOL이 가장 높은 흐름을 먼저 고려하도록 FD 스케줄링을 시행하는 것입니다.
지연. 사용자 j=1,...,N에 대한 그룹화 측정항목 m_{td}는 다음과 같은 방식으로 정의됩니다.
여기서 d_{hol}^{j}(t)는 흐름 j의 HOL 지연의 현재 값이고, g는 그룹화입니다.
그룹의 세분성을 결정하는 매개변수, 즉 그룹의 흐름 수
FD 스케줄링 반복에서 고려됩니다.
TD 반복에서 선택된 흐름 그룹은 FD 스케줄링으로 전달됩니다.
m_{td} 지표의 가장 높은 값을 갖는 흐름부터 시작하여 모든 RBG가
해당 TTI에 할당됩니다. FD에서 각 RBG k=1,...,K에 대해 CQA 스케줄러
현재 RBG를 우리가 계산한 FD 메트릭의 최대값을 갖는 사용자 j에게 할당합니다.
다음과 같이 정의합니다.
여기서 m_{GBR}^j(t)는 다음과 같이 계산됩니다.
여기서 GBR^j는 흐름 j의 EPS 베어러에 지정된 비트 전송률이고, r i e R j( ) s h ps aeraged 처리량은 다음과 같습니다.
이동 평균으로 계산됩니다. r^{j}(t)는 시간 t에서 달성된 처리량입니다.
lpha는 0 lpha ..sp가 되는 계수입니다. m_{ca}^{(k,j)}(t)에 대해 두 가지를 고려합니다.
다양한 측정항목: m_{pf}^{(k,j)}(t) 및 m_{ff}^{(k,j)}(t). m_{pf}는 비례입니다
다음과 같이 정의되는 공정한 측정항목:
여기서 R_e^{(k,j)}(t)는 RBG k에 대해 사용자 j가 달성할 수 있는 예상 처리량입니다.
채널을 매핑하는 적응형 변조 및 코딩(AMC) 방식으로 계산됩니다.
전송 블록 크기(비트)에 대한 품질 표시기(CQI) 값입니다.
우리가 고려하는 또 다른 채널 인식 지표는 m_{ff}입니다.
[GMonghal2008] 이는 사용자에 대한 RBG k에 대한 주파수 선택적 페이딩 이득을 나타냅니다.
j는 다음과 같은 방식으로 계산됩니다.
여기서 CQI^{(k,j)}(t)는 k번째 RBG에 대해 사용자 j가 마지막으로 보고한 CQI 값입니다.
사용자는 속성을 설정하여 m_{pf} 또는 m_{ff}를 사용할지 선택할 수 있습니다.
ns3::CqaFfMacScheduler::CqaMetric 각각에 "CqaPf" or "쯧쯧".
랜덤 무작위 접속하다
LTE 모델에는 일부 단순화를 기반으로 하는 Random Access 절차 모델이 포함되어 있습니다.
각 메시지와 신호에 대한 가정은 다음과 같습니다.
사양 [TS36321]에 설명되어 있습니다.
· 랜덤 무작위 접속하다 (라) 전문: 실제 LTE 시스템에서는 Zadoff-Chu에 해당합니다.
(ZC) 사용 가능한 여러 형식 중 하나를 사용하고 PRACH 슬롯으로 전송되는 시퀀스
이는 원칙적으로 PUSCH와 겹칠 수 있습니다. PRACH 구성 인덱스 14는 다음과 같습니다.
즉, 프리앰블은 모든 시스템 프레임 번호와 서브프레임 번호로 전송될 수 있다고 가정합니다.
RA 프리앰블은 LteControlMessage 클래스를 사용하여 모델링됩니다.
무선 자원을 소비하지 않는 메시지. 서문의 충돌
동일한 셀의 여러 UE에 의한 전송은 프로토콜을 사용하여 모델링됩니다.
간섭 모델, 즉 두 개 이상의 동일한 프리앰블이 전송될 때마다
동일한 TTI의 동일한 셀에서는 이러한 동일한 프리앰블 중 어느 것도 수신되지 않습니다.
eNB. 이 충돌 모델 외에는 오류 모델이 연결되지 않습니다.
RA 서문 수신.
· 랜덤 무작위 접속하다 응답 (RAR): 실제 LTE 시스템에서는 특별한 MAC PDU로 전송됩니다.
DL-SCH. MAC 제어 요소는 시뮬레이터에서 정확하게 모델링되지 않기 때문에
(RLC 및 그 이상의 PDU만 해당) RAR은 다음을 수행하는 LteControlMessage로 모델링됩니다.
무선 자원을 소비하지 않습니다. 하지만 RA 절차 중에 LteEnbMac은
FF MAC을 사용하여 RAR에 대한 자원 할당을 스케줄러에 요청
스케줄러 기본 SCHED_DL_RACH_INFO_REQ. 따라서 향상된 스케줄러
구현(현재는 사용할 수 없음)은 무선 리소스를 할당할 수 있습니다.
RAR, 따라서 전송을 위한 무선 자원 소비를 모델링합니다.
RAR.
· 관심 있는 분야를 알려주세요(선택사항) 3: 실제 LTE 시스템에서는 지정된 자원을 통해 전송되는 RLC TM SDU입니다.
RAR의 UL Grant에서. 시뮬레이터에서는 실제 RLC TM RLC로 모델링됩니다.
호출 시 스케줄러에 의해 UL 자원이 할당되는 PDU
SCHED_DL_RACH_INFO_REQ.
· 투쟁 분해능 (CR): 실제 LTE 시스템에서는 다음과 같은 문제를 해결하기 위해 CR 단계가 필요합니다.
둘 이상의 UE가 동일한 TTI에서 동일한 RA 프리앰블을 전송했고 eNB가
충돌에도 불구하고 이 프리앰블을 감지할 수 있습니다. 이번 이벤트는 아니기 때문에
RA 프리앰블 수신에 사용되는 프로토콜 간섭 모델로 인해 발생하며,
CR 단계는 시뮬레이터에서 모델링되지 않습니다. 즉, CR MAC CE는 결코 전송되지 않습니다.
eNB와 UE는 RAR을 수신하면 RA가 성공한 것으로 간주합니다. 로서
결과적으로, CR MAC CE의 전송을 위해 소비되는 무선 자원은 다음과 같습니다.
모델링되지 않았습니다.
그림 순서 도표 of 전에, 경쟁 기반 맥 랜덤 무작위 접속하다 순서 and 순서
도표 of 전에, 비경쟁 기반 맥 랜덤 무작위 접속하다 순서 순서를 보여줍니다
경쟁 기반 및 비경합 기반 MAC 랜덤 액세스에 대한 다이어그램
절차를 통해 MAC과 다른 엔터티 간의 상호 작용을 강조합니다.
[그림] 경쟁 기반 MAC Random Access 절차의 시퀀스 다이어그램.UNINDENT
[그림] 비경합 기반 MAC Random Access의 시퀀스 다이어그램
절차.UNINDENT
RLC
살펴보기
RLC 엔터티는 3GPP 기술 사양 [TS36322]에 명시되어 있으며 다음과 같이 구성됩니다.
세 가지 다른 유형의 RLC: 투명 모드(TM), 비승인 모드(UM) 및
확인 모드(AM). 시뮬레이터에는 이러한 엔터티 각각에 대해 하나의 모델이 포함되어 있습니다.
RLC 엔터티는 상위 PDCP 계층과 MAC에 RLC 서비스 인터페이스를 제공합니다.
하위 MAC 계층에 대한 서비스 인터페이스. RLC 엔터티는 PDCP 서비스 인터페이스를 사용합니다.
상위 PDCP 계층에서는 MAC 서비스 인터페이스를, 하위 MAC 계층에서는 MAC 서비스 인터페이스를 제공합니다.
그림 실시 모델 of PDCP, RLC and 맥 엔티티 and SAP 를 보여줍니다
RLC 엔터티의 구현 모델 및 다른 모든 엔터티와의 관계
프로토콜 스택의 서비스.
[이미지] PDCP, RLC, MAC 엔터티 및 SAPs.UNINDENT의 구현 모델
예배 인터페이스
RLC 예배 인터페이스
RLC 서비스 인터페이스는 두 부분으로 나뉩니다.
· NS RlcSap공급자 일부는 RLC 계층에서 제공되고 상위 PDCP 계층에서 사용됩니다.
and
· NS RlcSap사용자 일부는 상위 PDCP 계층에서 제공되고 RLC 계층에서 사용됩니다.
UM과 AM RLC 엔터티 모두 상위 엔터티에 동일한 RLC 서비스 인터페이스를 제공합니다.
PDCP 계층.
RLC 예배 프리미티브
다음 목록은 RLC 서비스에서 제공하는 서비스 프리미티브를 지정합니다.
인터페이스 :
· RlcSapProvider::TransmitPdcpPdu
· PDCP 개체는 이 프리미티브를 이용하여 하위 RLC 개체에게 PDCP PDU를 보낸다.
송신기 피어에서
· RlcSapUser::ReceivePdcpPdu
· RLC 엔터티는 이 프리미티브를 이용하여 상위 PDCP 엔터티에게 PDCP PDU를 보낸다.
수신자 피어에서
맥 예배 인터페이스
MAC 서비스 인터페이스는 두 부분으로 구분됩니다.
· NS MacSap공급자 일부는 MAC 계층에서 제공되고 상위 RLC 계층에서 사용됩니다.
and
· NS MacSap사용자 부분은 상위 RLC 계층에서 제공되고 MAC 계층에서 사용됩니다.
맥 예배 프리미티브
다음 목록은 MAC 서비스에서 제공하는 서비스 프리미티브를 지정합니다.
인터페이스 :
· MacSapProvider::TransmitPdu
· RLC 엔터티는 이 프리미티브를 사용하여 RLC PDU를 하위 MAC 엔터티로 보냅니다.
송신기 피어
· MacSapProvider::ReportBufferStatus
· RLC 엔터티는 이 프리미티브를 사용하여 MAC 엔터티에 보류 중인 크기를 보고합니다.
송신기 피어의 버퍼
· MacSapUser::NotifyTxOpportunity
· MAC 엔터티는 RLC 엔터티에게 전송을 알리기 위해 이 프리미티브를 사용합니다.
기회
· MacSapUser::ReceivePdu
· MAC 엔터티는 이 프리미티브를 이용하여 상위 RLC 엔터티에게 RLC PDU를 보낸다.
수신자 피어에서
AM RLC
AM(Acknowledge Mode) RLC 엔터티에서의 데이터 전송 처리 과정을 설명합니다.
[TS5.1.3]의 섹션 36322에 있습니다. 이 섹션에서는 다음과 같은 몇 가지 세부 사항을 설명합니다.
RLC 엔터티의 구현.
버퍼 for 전에, 부치다 운영
AM RLC 엔터티의 구현은 전송 작업을 위해 3개의 버퍼를 유지합니다.
· 전달 버퍼: RLC SDU 큐입니다. AM RLC 개체가 SDU를 수신한 경우
상위 PDCP 엔터티의 TransmitPdcpPdu 서비스 프리미티브에서 이를 대기열에 넣습니다.
전송 버퍼에서. 우리는 RLC 버퍼 크기에 제한을 두고 조용히
버퍼가 가득 차면 SDU를 삭제합니다.
· 전송 된 PDU 버퍼: 전송된 RLC PDU의 큐입니다.
ACK/NACK이 아직 수신되지 않았습니다. AM RLC 개체가 MAC에 PDU를 보낼 때
엔터티에서는 전송된 PDU의 복사본을 전송된 PDU 버퍼에 넣습니다.
· 재방송 버퍼: 고려되는 RLC PDU의 큐입니다.
재전송(즉, NACK되었습니다). AM RLC 엔터티는 이 PDU를
재전송 버퍼는 전송 버퍼에서 PDU를 재전송하는 경우입니다.
전송 운영 in 다운 링크
다음 시퀀스 다이어그램은 다양한 엔터티(RRC,
PDCP, AM RLC, MAC 및 MAC 스케줄러)는 하향링크에서 eNB의 데이터 수행
연락.
그림 순서 도표 of 데이터 PDU 전달 in 다운 링크 상위 레이어가 어떻게 표시되는지 보여줍니다.
데이터 PDU 전송 및 다양한 엔터티/서비스에서 데이터 흐름을 처리하는 방법
LTE 프로토콜 스택.
[그림] 다운링크에서 데이터 PDU 전송의 순서도.UNINDENT
PDCP 엔터티는 Transmit_PDCP_PDU 서비스 원시적인 데이터를 전송하기 위해
PDU. AM RLC 엔터티는 AM 데이터에 따라 이 서비스 프리미티브를 처리합니다.
[TS5.1.3]의 섹션 36322에 정의된 전송 절차.
때 Transmit_PDCP_PDU 서비스 프리미티브가 호출되면 AM RLC 엔터티는
다음 작업:
· 데이터 SDU를 전송 버퍼에 넣습니다.
· 버퍼의 크기를 계산합니다(버퍼의 크기를 계산하는 방법은 다음과 같습니다).
나중에 설명).
· 를 불러 Report_Buffer_Status eNB MAC 엔터티의 서비스 프리미티브를
AM RLC 개체의 버퍼 크기를 eNB MAC 개체에 알립니다. 그런 다음,
eNB MAC 엔터티는 다음을 사용하여 MAC 스케줄러의 버퍼 상태를 업데이트합니다.
FF MAC 스케줄러 API의 SchedDlRlcBufferReq 서비스 기본 요소입니다.
이후 MAC 스케줄러가 일부 데이터를 전송할 수 있다고 결정하면 MAC 엔터티는
이를 RLC 엔터티에 알립니다. 즉, RLC 엔터티를 호출합니다. Notify_Tx_Opportunity 서비스 기본,
그러면 AM RLC 엔터티는 다음을 수행합니다.
· SDU를 분할 및/또는 연결하여 단일 데이터 PDU를 생성합니다.
전송 버퍼.
· 데이터 PDU를 전송 버퍼에서 전송된 PDU 버퍼로 이동합니다.
· [TS5.1.3.1.1]의 섹션 36322에 따라 상태 변수를 업데이트합니다.
· 를 불러 송신_PDU 데이터 PDU를 MAC 엔터티로 보내기 위한 기본 요소입니다.
재방송 in 다운 링크
그림의 시퀀스 다이어그램 순서 도표 of 데이터 PDU 재방송 in 다운 링크
다양한 엔터티(AM RLC, MAC 및 MAC 스케줄러) 간의 상호 작용을 보여줍니다.
AM RLC 엔터티에 의해 데이터 PDU가 재전송되어야 할 때 다운링크의 eNB.
[이미지] 다운링크에서 데이터 PDU 재전송의 순서도.UNINDENT
송신 AM RLC 개체는 피어 AM RLC 개체로부터 STATUS PDU를 수신할 수 있습니다.
STATUS PDU는 [TS5.3.2]의 섹션 36322에 따라 전송되며
[TS5.2.1]의 섹션 36322에 따라 수신이 이루어집니다.
데이터 PDU가 전송된 PDU 버퍼에서 재전송되면 해당 PDU도 다음으로 이동됩니다.
재전송 버퍼.
전송 운영 in 업 링크
그림의 시퀀스 다이어그램 순서 도표 of 데이터 PDU 전달 in 업 링크 쇼
UE의 다양한 엔터티(RRC, PDCP, RLC 및 MAC) 간의 상호 작용과
상위 계층에서 데이터 PDU를 전송할 때 업링크의 eNB(MAC 및 스케줄러).
[이미지] 업링크에서 데이터 PDU 전송의 순서도.UNINDENT
이는 다운링크의 시퀀스 다이어그램과 유사합니다. 가장 큰 차이점은 이것에서
Report_Buffer_Status가 UE MAC에서 eNB의 MAC Scheduler로 전송되는 경우
제어 채널을 사용하여 무선으로.
재방송 in 업 링크
그림의 시퀀스 다이어그램 순서 도표 of 데이터 PDU 재방송 in 업 링크 쇼
UE(AM RLC 및 MAC)의 다양한 엔터티와 eNB 간의 상호 작용
(MAC) 데이터 PDU가 AM RLC 엔터티에 의해 재전송되어야 할 때 업링크에서.
[이미지] 업링크에서 데이터 PDU 재전송의 순서도.UNINDENT
계산 of 전에, 버퍼 크기
전송 버퍼에는 RLC SDU가 포함되어 있습니다. RLC PDU는 하나 이상의 SDU 세그먼트에
RLC 헤더. 하나의 RLC PDU의 RLC 헤더 크기는 SDU의 개수에 따라 달라집니다.
PDU에 포함된 세그먼트입니다.
3GPP 표준([TS6.1.3.1]의 섹션 36321)은 업링크에 대해
RLC 및 MAC 헤더는 보고될 버퍼 크기에서 고려되지 않습니다.
버퍼 상태 보고서. 다운링크의 경우 동작이 지정되지 않습니다. 어느 것도 아니다
[FFAPI]는 이를 수행하는 방법을 지정합니다. 우리의 RLC 모델은 다음과 같은 계산을 가정하여 작동합니다.
다운링크의 버퍼 크기는 업링크와 동일하게 수행됩니다.
RLC 및 MAC 헤더 크기.
이 선택은 MAC 스케줄러와의 상호 운용에 영향을 미칩니다.
에 대한 응답 Notify_Tx_Opportunity 서비스 프리미티브, RLC는
RLC 오버헤드를 포함하여 MAC에서 요청한 크기보다 크지 않은 PDU입니다. 따라서 불필요한
예를 들어 MAC가 다음과 정확히 동일한 전송을 통지하는 경우 조각화가 발생할 수 있습니다.
RLC에 의해 이전에 보고된 버퍼 크기. Scheduler에 맡겨진 것으로 가정합니다.
변속기 크기 선택을 위한 스마트한 전략 구현
결국 불필요한 조각화의 비효율성을 피하기 위한 기회입니다.
연쇄 and 분할
AM RLC 엔터티는 각 전송마다 정확히 하나의 RLC PDU를 생성하고 전송합니다.
전송 기회에 의해 보고된 크기보다 작더라도 기회입니다.
예를 들어, STATUS PDU가 전송되어야 한다면 이 PDU만 전송됩니다.
전송 기회.
AM RLC 엔터티의 SDU 큐에 대한 분할 및 연결은 동일합니다.
철학은 UM RLC 엔터티와 동일한 절차이지만 새로운 상태 변수가 있습니다.
([TS36322] 섹션 7.1 참조) AM RLC 엔터티에만 존재합니다.
3GPP 사양에 따르면
재전송 버퍼.
재분할
AM RLC 엔터티의 현재 모델은
재전송 버퍼. 오히려 AM RLC 엔터티는 충분히 큰 데이터를 수신하기를 기다립니다.
전송 기회.
지원되지 않음 풍모
[TS36322]의 다음 절차는 지원되지 않습니다.
· “RLC SDU의 성공적인 전달 표시 보내기”(섹션 5.1.3.1.1 참조)
· “최대 재전송에 도달했음을 상위 계층에 표시”(섹션 참조)
5.2.1)
· “SDU 폐기 절차”(섹션 5.3 참조)
· “재구축 절차”(섹션 5.4 참조)
AM RLC 엔터티에 대한 RLC SAP의 추가 기본 요소는 지원되지 않습니다. ~ 안에
특정한:
· PDCP에 의해 통보된 SDU 폐기 없음
· AM RLC 엔터티에서 PDCP 엔터티로의 전달 성공/실패에 대한 알림 없음
UM RLC
이 섹션에서는 UM(Unacknowledge Mode) RLC 엔터티의 구현을 설명합니다.
전송 운영 in 다운 링크
UM RLC의 전송 동작은 이전 AM RLC의 동작과 유사합니다.
섹션에 설명되어 있습니다. 전송 운영 in 다운 링크, 차이점은 다음과 같습니다.
[TS36322]의 사양에 따라 재전송이 이루어지지 않으며, STATUS가 없습니다.
PDU.
전송 운영 in 업 링크
업링크의 전송 동작은 다운링크의 동작과 유사합니다.
Report_Buffer_Status가 UE MAC에서 MAC Scheduler로 전송된다는 차이점이 있습니다.
제어 채널을 사용하여 eNB를 무선으로 전송합니다.
계산 of 전에, 버퍼 크기
UM RLC의 버퍼 크기 계산은 다음과 같은 접근 방식을 사용하여 수행됩니다.
AM RLC, 섹션을 참조하세요. 계산 of 전에, 버퍼 크기 해당하는
기술.
TM RLC
이 섹션에서는 투명 모드(TM) RLC 엔터티의 구현을 설명합니다.
전송 운영 in 다운 링크
시뮬레이터에서 TM RLC는 여전히 상위 계층에 동일한 서비스 인터페이스를 제공합니다.
AM 및 UM RLC 개체에 의해 PDCP 계층에 제공됩니다. 실제로 이 인터페이스는
RLC SDU 전송을 위해 RRC 엔터티(PDCP 엔터티 아님)에 의해 사용됩니다. 이 선택은
TM RLC가 상위 계층에 서비스를 제공한다는 사실에 동기를 부여하여,
[TS36322]에 따르면 UM 및 AM RLC 엔터티가 제공하는 것의 하위 집합입니다.
PDCP층; 따라서 단순화를 위해 동일한 인터페이스를 재사용했습니다.
하향링크에서의 전송 동작은 다음과 같이 수행된다. 때
Transmit_PDCP_PDU 서비스 원시적인 상위 계층에서 호출되면 TM RLC가 다음 작업을 수행합니다.
다음 :
· SDU를 전송 버퍼에 넣습니다.
· 전송 버퍼의 크기를 계산합니다.
· 를 불러 Report_Buffer_Status eNB MAC 엔터티의 서비스 프리미티브
그 후, MAC 스케줄러가 논리 스케줄러에 의해 일부 데이터를 전송할 수 있다고 결정하면
TM RLC 개체가 속한 채널이 있으면 MAC 개체는 이를 TM RLC에게 알려준다.
엔터티를 호출하여 Notify_Tx_Opportunity 서비스 기본. 이 내용을 받으면
기본적으로 TM RLC 엔터티는 다음을 수행합니다.
· TX 기회의 크기가 해당 기회의 크기보다 크거나 같은 경우
전송 버퍼의 헤드 오브 라인 SDU
· 전송 버퍼에서 헤드 오브 라인 SDU를 대기열에서 제거합니다.
· RLC 헤더 없이 해당 SDU 전체를 포함하는 하나의 RLC PDU를 생성합니다.
· 를 불러 송신_PDU RLC PDU를 MAC 엔터티로 보내기 위한 기본 요소입니다.
전송 운영 in 업 링크
업링크의 전송 동작은 다운링크의 동작과 유사합니다.
UL 할당으로 인해 전송 기회가 발생할 수도 있다는 차이점
명시적인 버퍼 상태 보고 없이 무작위 액세스 절차의 일부로 GRANT
TM RLC 법인이 발행합니다.
계산 of 전에, 버퍼 크기
사양 [TS36322]에 따라 TM RLC는 PDU에 RLC 헤더를 추가하지 않습니다.
전송되고 있습니다. 이로 인해 MAC 계층에 보고되는 버퍼 크기는 다음과 같습니다.
전송 버퍼에 있는 모든 패킷의 크기를 합산하여 간단히 계산됩니다.
정확한 버퍼 크기를 MAC에 알립니다.
SM RLC
3GPP 이후에 모델링된 AM, UM 및 TM 구현 외에도
사양에 따라 포화 모드(SM)라고 하는 단순화된 RLC 모델이 제공됩니다.
RLC. 이 RLC 모델은 위 계층(예: PDCP)의 PDU를 허용하지 않습니다. 오히려,
SM RLC는 다음의 통지에 응답하여 RLC PDU 생성을 처리합니다.
MAC에서 통보한 전송 기회. 즉, SM RLC는 다음을 시뮬레이션합니다.
포화 조건, 즉 RLC 버퍼가 항상 가득 차 있다고 가정합니다.
스케줄러가 통지할 때마다 새 PDU를 생성합니다.
SM RLC는 LTE Radio 모델만 사용하는 단순화된 시뮬레이션 시나리오에 사용됩니다.
EPC 없이, 따라서 IP 네트워킹 지원 없이 사용됩니다. 우리는
SM RLC는 비현실적인 트래픽 모델이지만 여전히 올바른 트래픽 모델을 허용합니다.
서로 다른(비실시간) QoS에 속하는 여러 흐름이 있는 시나리오 시뮬레이션
다양한 스케줄러에서 얻은 QoS 성능을 테스트하기 위해 클래스를 사용합니다. 이것은 할 수 있다
전송 자원을 할당하는 것은 스케줄러의 작업이기 때문에 수행되어야 합니다.
지정된 각 무선 베어러의 특성(예: 보장된 비트 전송률)
시뮬레이션 프로그램 내의 각 Bearer 정의에 따라.
지연 제약이 있는 실시간 QoS 트래픽과 함께 작동하도록 설계된 스케줄러의 경우,
SM RLC는 아마도 적절한 선택이 아닐 것입니다. 그 이유는 실제적인 자료가 없기 때문입니다.
RLC SDU(버퍼 상태 보고서의 인공 생성으로 대체됨)는
스케줄러에 의미 있는 HOL 지연 정보를 제공할 수 있습니다.
실시간 스케줄링 정책 구현을 위해 선택되는 측정 기준인 경우가 많습니다.
교통 흐름. 이러한 스케줄러의 시뮬레이션 및 테스트를 위해서는 다음을 사용하는 것이 좋습니다.
대신 UM 또는 AM RLC 모델을 사용하세요.
PDCP
PDCP 모델 살펴보기
PDCP 엔터티의 규격에 대한 참고문서는 [TS36323]이다. 존경를 가지고
이 사양에 따라 시뮬레이터에 구현된 PDCP 모델은
다음과 같은 특징 :
· 데이터 전송(사용자 평면 또는 제어 평면);
· PDCP SN의 유지 관리;
· SN 상태 이전(인계 시 사용)
다음 기능은 현재 지원되지 않습니다.
· ROHC 프로토콜을 사용하여 IP 데이터 흐름의 헤더 압축 및 압축 해제;
· 하위 계층 재설정 시 상위 계층 PDU의 순차적 전달;
· 하위 계층 재설정 시 하위 계층 SDU의 중복 제거
RLC AM에 매핑된 무선 베어러;
· 사용자 평면 데이터와 제어 평면 데이터의 암호화 및 해독;
· 제어 평면 데이터의 무결성 보호 및 무결성 검증;
· 타이머 기반 폐기;
· 중복 폐기.
PDCP 예배 인터페이스
PDCP 서비스 인터페이스는 두 부분으로 구분됩니다.
· NS PdcpSap공급자 일부는 PDCP 계층에서 제공되고 상위 계층에서 사용됩니다.
and
· NS PdcpSap사용자 일부는 상위 계층에서 제공되고 PDCP 계층에서 사용됩니다.
PDCP 예배 프리미티브
다음 목록은 PDCP 서비스에서 제공하는 서비스 프리미티브를 지정합니다.
인터페이스 :
· PdcpSapProvider::TransmitPdcpSdu
· RRC 엔터티는 이 프리미티브를 이용하여 하위 PDCP 엔터티에게 RRC PDU를 보낸다.
송신기 피어에서
· PdcpSapUser::수신PdcpSdu
· PDCP 엔터티는 이 프리미티브를 이용하여 상위 RRC 엔터티에게 RRC PDU를 보낸다.
수신자 피어에서
RRC
기능
시뮬레이터에 구현된 RRC 모델은 다음 기능을 제공합니다.
· 시스템 정보의 생성(eNB에서) 및 해석(UE에서)
특히 마스터 정보 블록과 이 글을 쓰는 시점에는 시스템만 해당됩니다.
정보 블록 유형 1 및 2)
· 초기 셀 선택
· RRC 연결 수립 절차
· 다음 사용 사례를 지원하는 RRC 재구성 절차: + 재구성
SRS 구성 인덱스 + PHY TX 모드(MIMO) 재구성 +
UE 측정 재구성 + 데이터 무선 베어러 설정 + 핸드오버
· RRC 연결 재설정, 다음 사용 사례 지원: + 핸드오버
아키텍처
RRC 모델은 다음 구성 요소로 구분됩니다.
· RRC 엔터티 LTERrc and LTEEnbRrc, 이는 상태 머신을 구현합니다.
UE 및 eNB 각각의 RRC 엔티티;
· RRC SAP LTEUeRrcSap 제공자, LTERrcSap사용자, LteEnbRrcSap공급자,
LteEnbRrcSap사용자이는 RRC 엔터티가 RRC 메시지를 보내고 받을 수 있도록 하며
정보 요소;
· RRC 프로토콜 클래스 LteUeRrc프로토콜이상적, LteEnbRrc프로토콜이상적,
LTERrc프로토콜실제, LteEnbRrc프로토콜실제, 이는 두 가지 서로 다른 모델을 구현합니다.
RRC 메시지 전송.
또한 RRC 구성 요소는 나머지 구성 요소와 상호 작용하기 위해 다양한 다른 SAP를 사용합니다.
프로토콜 스택의. 사용되는 모든 SAP의 표현은 다음에서 제공됩니다.
인물 LTE 라디오 프로토콜 스택 아키텍처 for 전에, UE on 전에, 데이터 평면, LTE 라디오
프로토콜 스택 아키텍처 for 전에, UE on 전에, 제어 평면, LTE 라디오 프로토콜 스택
아키텍처 for 전에, eNB on 전에, 데이터 평면 and LTE 라디오 프로토콜 스택 아키텍처 for
전에, eNB on 전에, 제어 평면.
UE RRC 주 정부 머신
그림에서 UE RRC 주 정부 머신 RRC UE에 구현된 상태 머신을 나타냅니다.
실재.
[이미지] UE RRC 상태 머신.UNINDENT
대부분의 상태는 일시적입니다. 즉, UE가 한 상태로 들어가면
CONNECTED 상태에서는 IDLE 상태로 다시 전환되지 않습니다. 이 선택
다음과 같은 이유로 수행됩니다.
· 섹션에서 설명한 대로 디자인 기준, LTE-EPC 시뮬레이션의 초점
모델이 연결 모드에 있습니다.
· 무선 링크 실패는 섹션에서 설명한 대로 현재 모델링되지 않습니다. 라디오 (링크)
고장, 따라서 UE는 무선 링크 실패로 인해 IDLE 상태가 될 수 없습니다.
· RRC 연결 해제는 현재 EPC나 NAS에 의해 트리거되지 않습니다.
그럼에도 불구하고 우리는 다음과 같은 이유로 IDLE 상태를 명시적으로 모델링하기로 결정했습니다.
· 필수 기능인 핸드오버를 위해서는 현실적인 UE RRC 구성이 필요하며,
보다 깔끔한 구현을 위해서는 동일한 UE RRC를 사용하는 것이 합리적입니다.
초기 연결 설정을 위한 구성도 포함됩니다.
· 향후 유휴 모드 셀 선택을 더 쉽게 구현할 수 있습니다.
매우 바람직한 기능
ENB RRC 주 정부 머신
eNB RRC는 셀에 연결된 각 UE에 대한 상태를 유지합니다. 에서
구현 관점에서 각 UE의 상태는 인스턴스에 포함됩니다.
UeManager 클래스. 상태 머신은 그림에 표시됩니다. ENB RRC 주 정부 머신 for 마다
UE.
[이미지] 각 UE.UNINDENT에 대한 ENB RRC 상태 머신
처음의 세포 선택
초기 셀 선택은 UE가 아직 셀 선택을 하지 않았을 때 수행되는 IDLE 모드 절차입니다.
eNodeB에 캠핑되거나 연결됩니다. 절차의 목적은 적합한 셀을 찾는 것입니다.
셀룰러 네트워크에 액세스하려면 여기에 연결하세요.
그림에 표시된 대로 일반적으로 시뮬레이션 시작 시 수행됩니다. 견본 실행 of
처음에는 세포 선택 in UE and 타이밍 of 관련 이벤트 아래에. 시간 다이어그램
왼쪽은 첫 번째 시도에서 초기 셀 선택이 성공한 경우를 보여줍니다.
오른쪽의 다이어그램은 첫 번째 시도에서 실패하고
두 번째 시도에 성공합니다. 타이밍은 실제 RRC 프로토콜 모델의 사용을 가정합니다(참조 RRC
프로토콜 모델) 전송 오류가 없습니다.
[이미지] UE의 초기 셀 선택 샘플 실행 및 관련 타이밍
이벤트.UNINDENT
해당 기능은 [TS3]과 같은 36300GPP IDLE 모드 사양을 기반으로 하며,
[TS36304], [TS36331]. 그러나 IDLE 모드의 적절한 구현이 아직 누락되었습니다.
시뮬레이터에서는 다음과 같은 몇 가지 단순화된 가정을 유지합니다.
· 다중 반송파 주파수는 지원되지 않습니다.
· 다중 PLMN(Public Land Mobile Network) ID(예: 다중 네트워크
연산자)는 지원되지 않습니다.
· RSRQ 측정은 활용되지 않습니다.
· 저장된 정보 셀 선택은 지원되지 않습니다.
· "모든 셀 선택" 상태 및 허용 가능한 셀로의 캠핑은 지원되지 않습니다.
· 셀을 금지 또는 예약으로 표시하는 것은 지원되지 않습니다.
· 셀 재선택은 지원되지 않으므로 UE가 특정 셀에 캠프를 두는 것은 불가능합니다.
초기 캠프가 배치된 후 다른 셀; 그리고
· UE의 CSG(Closed Subscriber Group) 화이트 리스트에는 CSG ID가 하나만 포함됩니다.
또한 초기 셀 선택은 EPC 지원 시뮬레이션에만 사용할 수 있습니다.
LTE 전용 시뮬레이션은 수동 연결 방식을 사용해야 합니다. 섹션을 참조하세요
차이점에 대한 자세한 내용은 사용자 문서의 sec-network-첨부 항목을 참조하세요.
사용 중.
다음 하위 섹션에서는 초기 셀 선택의 다양한 부분을 다룹니다. 세포 수색,
방송 of 체계 정보및 세포 선택 평가.
세포 검색
셀 검색은 주변 셀을 감지하고 수신 신호의 세기를 측정하는 것을 목표로 합니다.
이 각 세포에서. 이들 셀 중 하나가 UE의 진입점이 됩니다.
셀룰러 네트워크.
측정값은 레이어 1 필터링을 통해 평균을 낸 수신된 PSS의 RSRP를 기반으로 합니다.
섹션에서 더 자세히 설명한 것처럼 PHY 계층에 의해 수행됩니다. UE PHY
측정 모델. PSS는 eNodeB에 의해 PSS의 중앙 72개 하위 캐리어를 통해 전송됩니다.
DL 채널(섹션 5.1.7.3 [TS36300]), 따라서 DL을 사용하여 작동하도록 셀 검색을 모델링합니다.
6RB의 대역폭. 이 시점에서는 RSRQ 측정을 사용할 수 없습니다.
시뮬레이션에서. 그 결과, LteUePhy::RsrqUeMeasThreshold 속성은 그렇지 않습니다
셀 검색 중에 적용됩니다.
측정된 RSRP를 이용하여 PHY 엔터티는 감지된 셀 목록을 생성할 수 있으며,
각각은 해당 셀 ID와 평균 RSRP를 가지고 있습니다. 이 목록은 주기적으로 푸시됩니다.
CPHY SAP를 통해 RRC 엔터티에 측정 보고서로 제공됩니다.
RRC 엔터티는 보고서를 검사하고 RSRP가 가장 강한 셀을 선택합니다.
[TS5.2.3.1]의 섹션 36304에도 표시되어 있습니다. 그런 다음 PHY 엔터티에게 다시 지시합니다.
이 특정 셀에 동기화합니다. 셀의 실제 작동 대역폭은 여전히
현재로서는 알 수 없으므로 PHY 엔터티는 6RB의 최소 대역폭만 수신합니다.
그럼에도 불구하고 PHY 엔터티는 이로부터 시스템 브로드캐스트 메시지를 수신할 수 있습니다.
특정 eNodeB는 다음 하위 섹션의 주제입니다.
방송 of 정보
시스템 정보 블록은 eNodeB에 의해 미리 정의된 시간 간격으로 UE에 브로드캐스팅됩니다.
[TS5.2.1.2]의 섹션 36331에서 수정되었습니다. 지원되는 시스템 정보 블록은 다음과 같습니다.
·
마스터 정보 블록 (MIB)
셀 중에 생성된 PHY 계층과 관련된 매개변수를 포함합니다.
구성하고 무선 프레임 시작 시 10ms마다 방송합니다.
제어 메시지.
·
정보 블록 타입 1 (SIB1)
네트워크 액세스에 관한 정보가 포함되어 있으며, 20ms마다 브로드캐스팅됩니다.
무선 프레임 중간에 제어 메시지가 표시됩니다. 수동 부착에는 사용되지 않음
방법. UE는 SIB1을 수신하기 전에 MIB를 디코딩해야 합니다.
·
정보 블록 타입 2 (SIB2)
RRC 프로토콜을 통해 전송되도록 예약된 UL 및 RACH 관련 설정이 포함되어 있습니다.
셀 구성 후 16ms에, 그 후 80ms마다 반복됩니다(구성 가능).
을 통하여 LteEnbRrc::시스템정보주기 기인하다. UE는 캠프에 있어야 합니다
SIB2를 수신할 수 있도록 셀에 전달합니다.
시스템 정보 수신은 UE가 수명주기를 발전시키는 데 필수적입니다. MIB
UE가 6RB의 초기 DL 대역폭을 실제 동작 수준으로 늘릴 수 있도록 합니다.
네트워크의 대역폭. SIB1은 셀 선택에 필요한 정보를 제공합니다.
평가(다음 섹션에서 설명) 그리고 마지막으로 UE가 활성화되기 전에 SIB2가 필요합니다.
CONNECTED 상태로 전환할 수 있습니다.
세포 선택 평가
UE RRC는 생성된 측정 보고서를 검토합니다. 세포 검색 그리고 셀 액세스
SIB1에서 제공하는 정보입니다. 특정 셀에 대해 두 정보를 모두 사용할 수 있으면
UE는 평가 프로세스를 트리거합니다. 이 프로세스의 목적은 다음과 같은 여부를 결정하는 것입니다.
그 감방은 야영하기에 적합한 감방입니다.
평가 프로세스는 [TS5.2.3.2]의 섹션 36304를 약간 단순화한 버전입니다.
이는 다음 기준으로 구성됩니다.
· Rx 수준 기준; 그리고
· 폐쇄형 가입자 그룹(CSG) 기준.
첫 번째 기준인 Rx 수준은 셀에서 측정된 RSRP Q_{rxlevmeas}를 기반으로 합니다.
기준을 통과하려면 필수 최소 Q_{rxlevmin}보다 높아야 합니다.
여기서 Q_{rxlevmin}은 각 eNodeB에 의해 결정되며 UE가 SIB1에서 얻을 수 있습니다.
마지막 기준인 CSG는 참 또는 거짓 매개변수의 조합입니다. CSG
표시 그리고 간단한 숫자 CSG 정체. 기본 규칙은 UE가 다음 위치에 캠프를 치지 않아야 한다는 것입니다.
다른 CSG ID를 가진 eNodeB. 단, 이 규칙은 CSG 표시가 있는 경우에만 적용됩니다.
사실로 평가됩니다. 자세한 내용은 사용자의 sec-network-attachment 섹션을 참조하세요.
선적 서류 비치.
셀이 위의 기준을 모두 통과하면 해당 셀은 다음으로 간주됩니다. 적당한. 그럼 UE
그것에 캠프 (IDLE_CAMPED_NORMALLY 상태).
이후 상위 계층은 UE에게 CONNECTED 모드로 진입하도록 요청할 수 있다. 섹션을 참조하세요.
RRC 연결 설립 이에 대한 자세한 내용은.
반면에 셀이 CSG 기준을 통과하지 못하면 셀에 레이블이 지정됩니다.
as 허용 (10.1.1.1절 [TS36300]). 이 경우 RRC 엔터티는 PHY에게 알립니다.
두 번째로 강한 셀과 동기화하고 초기 셀 선택을 반복하는 엔터티
해당 셀을 사용하는 절차. 적합한 셀이 발견되지 않는 한 UE는 이를 반복합니다.
허용 가능한 것으로 식별된 세포를 피하면서 단계를 수행합니다.
라디오 입학 Control
무선 승인 제어는 eNB RRC가 RRC CONNECTION에 응답하도록 함으로써 지원됩니다.
UE가 RRC CONNECTION SETUP 메시지 또는 RRC와 함께 전송한 REQUEST 메시지
CONNECTION REJECT 메시지는 새로운 UE의 승인 여부에 따라 달라집니다. ~ 안에
현재 구현에서는 동작이 부울 속성에 의해 결정됩니다.
ns3::LteEnbRrc::AdmitRrcConnectionRequest. 현재 무선 승인 제어가 없습니다.
새로운 연결을 허용할지 여부를 동적으로 결정하는 알고리즘입니다.
라디오 열매 맺는 초목 구성
라디오 설정과 관련하여 RRC에서 일부 구현 선택이 이루어졌습니다.
전달자:
· 업링크 버퍼를 위해 3개의 논리 채널 그룹(사용 가능한 4개 중)이 구성됩니다.
다음 정책에 따라 상태 보고 목적:
· LCG 0은 무선 베어러 신호용입니다.
· LCG 1은 GBR 데이터 무선 베어러용입니다.
· LCG 2는 Non-GBR 데이터 무선 베어러용입니다.
라디오 (링크) 고장
이 단계에서 RRC는 CONNECTED 모드만 지원하므로 RLF(Radio Link Failure)는 다음과 같습니다.
처리되지 않았습니다. 그 이유는 RLF의 가능한 결과 중 하나(RRC가
재설정이 실패함) RRC CONNECTED를 유지하여 NAS에 RRC를 알리는 것입니다.
연결 실패. RLF를 제대로 모델링하기 위해서는 RRC IDLE 모드를 지원해야 하며,
특히 유휴 모드 셀 (재)선택을 포함합니다.
현재 모델에서는 링크 품질이 좋지 않고 성능이 좋지 않은 UE
핸드오버(예: 이웃 셀이 없음, 핸드오버 비활성화, 핸드오버 임계값으로 인해)
잘못 구성됨)은 동일한 eNB와 연결된 상태를 유지하며 스케줄러는 중지됩니다.
통신을 위해 리소스를 할당합니다.
UE RRC 측정 모델
UE RRC 측정 시간 상관관계 SUPPORT
UE RRC 엔터티는 UE 측정에 대한 지원을 제공합니다. 특히, 이는 다음을 구현합니다.
[TS5.5]의 섹션 36331에 설명된 절차를 다음과 같이 단순화합니다.
가정 :
· E-UTRA 주파수 내 측정만 지원되며 이는 다음을 의미합니다.
· 시뮬레이션 중에는 하나의 측정 개체만 사용됩니다.
· 측정을 수행하는 데 측정 간격이 필요하지 않습니다.
· 이벤트 B1과 B2는 구현되지 않습니다.
· 오직 보고가장 강한 세포 목적이 지원되는 반면 보고서CGI and
보고가장 강한 세포ForSON 목적은 지원되지 않습니다.
· s-측정 지원되지 않습니다.
· LTE 모듈에서는 Carrier Aggregation을 지원하지 않으므로 다음과 같습니다.
UE 측정의 가정은 참입니다.
· 2차 전지 개념 없음(SCell);
· 일차전지(PCell)는 단순히 서빙 셀을 의미합니다.
· 이벤트 A6은 구현되지 않습니다.
· 트리거 시간의 속도 의존적 스케일링([TS5.5.6.2]의 섹션 36331)이 아닙니다.
지원.
사무용 겉옷 디자인
모델은 다음과 같은 개념을 기반으로 합니다. UE 측정 시간 상관관계 소비자, 이는 다음을 수행할 수 있는 엔터티입니다.
eNodeB RRC 엔터티에 UE 측정 보고를 제공하도록 요청합니다. 소비자는
예, 이양 연산UE 측정을 기반으로 핸드오버 결정을 계산합니다.
보고서. 테스트 케이스와 사용자 프로그램도 소비자가 될 수 있습니다. 수치 관계
사이에 UE 측정 시간 상관관계 and 그것의 소비자가 이러한 엔터티 간의 관계를 설명합니다.
[이미지] UE 측정과 소비자 간의 관계.UNINDENT
RRC 수준의 전체 UE 측정 기능은 4가지 주요 부분으로 나뉩니다.
1. 측정 구성(관리자: LteUeRrc::ApplyMeasConfig)
2. 측정 수행(처리: LteUeRrc::DoReportUeMeasurements)
3. 측정 보고서 트리거링(처리: LteUeRrc::MeasurementReport트리거링)
4. 측정 보고(관리자: LteUeRrc::SendMeasurementReport)
다음 섹션에서는 위의 각 부분에 대해 설명합니다.
측량 구성
eNodeB RRC 엔터티는 구성 매개변수를 전송하여 UE 측정을 구성합니다.
UE RRC 엔터티. 이 매개변수 세트는 측정 구성 정보
RRC 연결 재구성 메시지의 요소(IE)(RRC 연결
재구성).
eNodeB RRC 엔터티는 다음에 설명된 구성 매개변수와 절차를 구현합니다.
다음과 같이 단순화된 가정을 사용하는 [TS5.5.2]의 섹션 36331:
· 구성(예: 추가, 수정 및 제거)은
시뮬레이션이 시작됩니다.
· eNodeB에 연결된 모든 UE는 동일한 방식으로 구성됩니다.
특정 UE에 대한 특정 측정 구성 지원; 그리고
· PCI와 E-UTRAN 사이에 일대일 매핑이 있다고 가정합니다.
전역 셀 식별자(EGCI). 이는 PCI 모델링 가정과 일치합니다.
에 설명 UE PHY 측정 모델.
여기서 eNodeB RRC 인스턴스는 소비자와 사용자 사이의 중개자 역할을 합니다.
UE가 부착되었습니다. 시뮬레이션 시작 시 각 소비자는 eNodeB RRC를 제공합니다.
필요한 UE 측정 구성이 있는 인스턴스입니다. 그 후 eNodeB는
RRC는 연결된 UE에 구성을 배포합니다.
사용자는 여러 가지 방법을 사용하여 측정 구성을 사용자 정의할 수 있습니다. 참고하세요
설명을 위한 사용자 문서의 sec-configure-ue-measurements 섹션
이러한 방법.
공연 측정 시간 상관관계
UE RRC는 UE PHY로부터 주기적으로 RSRP와 RSRQ 측정값을 모두 수신합니다.
에 설명 UE PHY 측정 모델. 층 3 필터링 이것들에 적용될 것이다
측정값을 받았습니다. 필터링 구현은 5.5.3.2절을 따릅니다.
[TS36331]:
여기서
· M_n은 물리 계층에서 가장 최근에 수신한 측정 결과입니다.
· F_n은 업데이트된 필터링된 측정 결과입니다.
· F_{n-1}은 이전에 필터링된 측정 결과입니다. 여기서 F_0 = M_1(즉, 첫 번째
측정값은 필터링되지 않습니다); 그리고
· a = (ac{1}{2})^{ac{k}{4}}, 여기서 k는 구성 가능한 값입니다. 필터계수 에 의해 제공
전에, 수량 구성;
k = 4가 기본값이지만 다음을 설정하여 구성할 수 있습니다. RsrpFilter계수 and
RsrqFilter계수 속성 LTEEnbRrc.
따라서 k = 0이면 레이어 3 필터링이 비활성화됩니다. 반면에 과거 측정값은 다음과 같습니다.
더 큰 k 값을 사용할수록 필터링 결과에 더 많은 영향을 미칠 수 있습니다.
측량 신고 트리거링
이 부분에서 UE RRC는 활성 측정 구성 목록을 살펴보고
5.5.4절에 따라 트리거 조건이 충족되는지 확인합니다.
[TS36331]. 모든 활성 측정에서 하나 이상의 트리거 조건이 발생하는 경우
구성이 충족되면 측정 보고 절차(다음 항목에 설명됨)
하위 섹션)이 시작됩니다.
3GPP는 두 가지 종류의 트리거 유형: 주기적 and 이벤트 기반. 현재로서는 오직
이벤트 기반 기준이 지원됩니다. 선택할 수 있는 다양한 이벤트가 있으며,
아래 표에 간략하게 설명되어 있습니다.
명부 of 되지 않습니다. 이벤트 기반 트리거링 기준
┌─────────┬────────────────────────────────┐
│이름 │ 설명 │
├─────────┼────────────────────────────────┤
│이벤트 A1 │ 서빙 셀이 │보다 좋아짐
│ │ 임계값 │
├─────────┼────────────────────────────────┤
│이벤트 A2 │ 서빙 셀이 │보다 나빠졌습니다.
│ │ 임계값 │
├─────────┼────────────────────────────────┤
│이벤트 A3 │ 이웃이 되다 오프셋 데시벨 │
│ │ 서빙 셀보다 낫음 │
├─────────┼────────────────────────────────┤
│이벤트 A4 │ 이웃이 │보다 좋아진다
│ │ 임계값 │
└─────────┴────────────────────────────────┘
│이벤트 A5 │ 서빙이 │보다 나빠집니다.
│ │ 임계값1 및 이웃은 │가 된다
│ │ 보다 낫다 임계값2 │
└─────────┴────────────────────────────────┘
이벤트 기반 트리거에서 확인해야 할 두 가지 주요 조건은 다음과 같습니다. 입력 조건 and
전에, 출발 조건. 이 두 가지에 대한 자세한 내용은 섹션 5.5.4에서 확인할 수 있습니다.
[TS36331].
히스테리시스를 도입하여 이벤트 기반 트리거를 추가로 구성할 수 있습니다.
트리거 시간. 히스테리시스 (Hys)는 진입과 진출 사이의 거리를 정의합니다.
조건(dB) 비슷하게, 트리거 시간 들어오고 나가는 데 지연이 발생합니다.
조건이 있지만 시간 단위로 표시됩니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 주기적 보고 트리거 유형은 지원되지 않지만 해당 동작은 쉽게 수행될 수 있습니다.
이벤트 기반 트리거를 사용하여 얻습니다. 이는 측정을 구성하여 수행할 수 있습니다.
예를 들어 다음과 같이 입력 조건이 항상 충족되는 방식으로
이벤트 A1의 임계값을 XNUMX(최소 수준)으로 설정합니다. 결과적으로 측정 보고서
에 의해 결정된 대로 항상 특정 간격마다 트리거됩니다. 보고 간격
내의 필드 LteRrcSap::ReportConfigEutra따라서 다음과 동일한 동작을 생성합니다.
정기보고.
3GPP 사양과 관련한 제한 사항으로 현재 모델에서는 XNUMXGPP를 지원하지 않습니다.
모든 셀별 구성. 이러한 구성 매개변수는 측정에서 정의됩니다.
물체. 결과적으로 검은색 셀 목록을 트리거 프로세스에 통합합니다.
지원되지 않습니다. 또한, 이벤트 A3, A4의 셀별 오프셋(즉, O_{cn} 및 O_{cp},
및 A5)도 지원되지 않습니다. 대신에 항상 XNUMX과 같은 값이 가정됩니다.
그들.
측량 신고
이 부분은 UE RRC 엔터티에서 UE로 측정 보고서 제출을 처리합니다.
RRC 프로토콜을 통해 eNodeB 엔터티를 제공합니다. 몇 가지 단순화된 가정이 채택되었습니다.
· 보고금액 is 지원 적용 가능(즉, 항상 무한하다고 가정)
· 측정 보고서에서 보고서 수량 항상 가정된다 양자 모두, 즉 둘 다
RSRP 및 RSRQ는 항목에 관계없이 항상 보고됩니다. 트리거 수량.
이양
RRC 모델은 X2 기반 핸드오버를 호출하여 CONNECTED 모드에서 UE 이동성을 지원합니다.
절차. 모델은 섹션 10.1.2.1에 기초한 EUTRAN 내 및 주파수 내입니다.
[TS36300].
이 섹션에서는 핸드오버를 트리거하는 프로세스에 중점을 둡니다. 핸드오버 실행
절차 자체는 섹션에서 다룹니다. X2.
핸드오버 절차를 시작하는 방법에는 두 가지가 있습니다.
· 명시 적으로 (또는 수동으로) 예약을 통해 시뮬레이션 프로그램에 의해 트리거됩니다.
메소드 실행 LteEnbRrc::SendHandoverRequest, 또는
· 자동적으로 UE 측정을 기반으로 eNodeB RRC 엔터티에 의해 트리거되고
선택된 핸드오버 알고리즘에 따라.
사용자 문서의 sec-x2-based-handover 섹션에서는 사용에 대한 몇 가지 예를 제공합니다.
시뮬레이션에서는 명시적 핸드오버와 자동 핸드오버가 모두 트리거됩니다. 다음 하위 섹션에서는
설계 측면을 설명하여 자동 방법을 자세히 살펴봅니다.
핸드오버 알고리즘 인터페이스 및 사용 가능한 핸드오버 알고리즘.
이양 연산
3GPP LTE의 핸드오버에는 다음과 같은 속성이 있습니다.
·
UE 지원
UE는 측정 보고의 형태로 네트워크에 입력을 제공합니다. 이것
에 의해 처리된다 UE RRC 측정 모델.
·
네트워크 제어
네트워크(즉, 소스 eNodeB 및 대상 eNodeB)는 언제
핸드오버를 시작하고 실행을 감독합니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 이양 연산 소스 eNodeB에서 작동하며 핸드오버를 담당합니다.
"자동" 방식으로 결정합니다. 이는 다음을 통해 eNodeB RRC 인스턴스와 상호 작용합니다.
이양 SAP 상호 작용. 이러한 관계는 그림에 설명되어 있습니다.
관계 사이에 UE 측정 시간 상관관계 and 그것의 소비자가 이전 섹션에서.
핸드오버 알고리즘 인터페이스는 다음과 같은 방법으로 구성됩니다.
·
AddUeMeasReportConfigForHandover
(Handover Algorithm -> eNodeB RRC) 요청을 위해 핸드오버 알고리즘에서 사용됩니다.
원하는 정보를 전달하여 eNodeB RRC 엔터티의 측정 보고서
보고 구성. 구성은 향후 모든 항목에 적용됩니다.
UE가 부착되었습니다.
·
보고UeMeas
(eNodeB RRC -> Handover Algorithm) 구성된 UE 측정을 기반으로
더 일찍 AddUeMeasReportConfigForHandover, UE는 측정 보고서를 제출할 수 있다
eNodeB로. eNodeB RRC 엔터티는 보고UeMeas 인터페이스
이러한 측정 보고서를 핸드오버 알고리즘으로 전달합니다.
·
트리거핸드오버
(Handover Algorithm -> eNodeB RRC) 측정 보고서 검토 후
(반드시 그런 것은 아니지만) 핸드오버 알고리즘은 핸드오버를 선언할 수 있습니다. 이것
방법은 이 결정에 대해 eNodeB RRC 엔터티에 알리는 데 사용됩니다.
그런 다음 핸드오버 절차를 시작합니다.
참고 사항 AddUeMeasReportConfigForHandover. 메서드는 다음을 반환합니다. 측정ID
(측정 ID) 새로 생성된 측정 구성입니다. 일반적으로
핸드오버 알고리즘은 이 고유 번호를 저장합니다. 다음과 같은 경우에 유용할 수 있습니다. 보고UeMeas
예를 들어 둘 이상의 구성이 요청되고 핸드오버가 수행되는 경우
알고리즘은 구성에 따라 수신 보고서를 구별해야 합니다.
그들을 촉발시켰습니다.
핸드오버 알고리즘은 Lte핸드오버 알고리즘
추상 슈퍼클래스 및 위에서 언급한 SAP 인터페이스 메소드 각각을 구현합니다.
사용자는 이러한 방식으로 자신만의 핸드오버 알고리즘을 개발한 다음 모든 시뮬레이션에서 사용할 수 있습니다.
사용자의 sec-x2 기반 핸드오버 섹션에 설명된 단계를 따릅니다.
선적 서류 비치.
또는 사용자는 제공된 3가지 내장 핸드오버 알고리즘 중 하나를 사용하도록 선택할 수 있습니다.
LTE 모듈별: 무작동, A2-A4-RSRQ 및 가장 강력한 셀 핸드오버 알고리즘. 그들은
시뮬레이션에 사용할 준비가 되었거나 핸드오버 구현의 예로 사용할 수 있습니다.
연산. 이러한 각 내장 알고리즘은 다음 각 항목에서 다룹니다.
하위 섹션
무작동 이양 연산
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 노옵 이양 연산 (NoOp인계 알고리즘 클래스)는 가능한 가장 간단합니다.
핸드오버 알고리즘 구현. 기본적으로 아무것도 하지 않습니다. 즉, 아무것도 호출하지 않습니다.
Handover Management SAP 인터페이스 방법 중 하나입니다. 사용자는 이 핸드오버 알고리즘을 선택할 수 있습니다.
시뮬레이션에서 자동 핸드오버 트리거를 비활성화하려는 경우.
A2-A4-RSRQ 이양 연산
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 A2-A4-RSRQ 이양 연산 기본 핸드오버 기능을 제공합니다.
원래 LENA M6(ns-3.18)에 포함되어 있던 알고리즘을 Handover Management SAP로 이식했습니다.
인터페이스 A2A4Rsrq핸드오버알고리즘 클래스입니다.
이름에서 알 수 있듯이 알고리즘은 RSRQ(참조 신호 수신 품질)를 활용합니다.
이벤트 A2 및 이벤트 A4에서 얻은 측정값입니다. 따라서 알고리즘은 2를 추가합니다.
해당 eNodeB RRC 인스턴스에 대한 측정 구성입니다. 이들의 사용 목적은 다음과 같습니다.
다음과 같이 설명됩니다:
· 이벤트 A2 (서빙 셀의 RSRQ가 임계값)을 활용하여 나타냅니다.
UE가 열악한 신호 품질을 경험하고 있으며 핸드오버의 이점을 누릴 수 있음을 나타냅니다.
· 이벤트 A4 (이웃 셀의 RSRQ는 다음보다 좋아집니다. 임계값)를 감지하는 데 사용됩니다.
인접 셀은 연결된 모든 UE로부터 해당 RSRQ를 획득합니다.
그런 다음 알고리즘에 의해 내부적으로 저장됩니다. 기본적으로 알고리즘은 다음을 구성합니다.
임계값이 매우 낮은 이벤트 A4이므로 트리거 기준이 항상 참입니다.
그림 A2-A4-RSRQ 이양 연산 아래에는 이 절차가 요약되어 있습니다.
[이미지] A2-A4-RSRQ 핸드오버 알고리즘.UNINDENT
알고리즘 동작을 조정하기 위해 두 가지 속성을 설정할 수 있습니다.
·
제공셀임계값
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 임계값 Event A2의 경우, 즉 UE는 이보다 낮은 RSRQ를 가져야 합니다.
핸드오버를 위해 고려해야 할 임계값.
·
이웃 셀 오프셋
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 오프셋 UE가 더 나은 신호 품질을 수신하도록 보장하는 것을 목표로 합니다.
인수 후. 인접 셀은 대상 셀로 간주됩니다.
RSRQ가 서빙 셀의 RSRQ보다 더 높은 경우에만 핸드오버
이 오프셋.
두 속성의 값은 RSRQ 범위([TS9.1.7]의 섹션 36133)로 표현되며,
이는 0에서 34 사이의 정수이며 0이 가장 낮은 RSRQ입니다.
최강의 세포 이양 연산
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 가장 강한 세포 이양 연산, 또는 때로는 전통적인 힘
예산 (PBGT) 연산는 [Dimou2009]를 참고로 하여 개발되었습니다. 아이디어는
각 UE에게 가능한 최고의 RSRP(Reference Signal Receiver Power)를 제공합니다. 이것은
더 나은 셀(즉, 더 강한 RSRP를 가진)이 나오자마자 핸드오버를 수행하여 수행됩니다.
감지되었습니다.
이벤트 A3 (이웃 셀의 RSRP가 서빙 셀의 RSRP보다 좋아짐)이 선택됩니다.
이 개념을 실현하세요. 그만큼 A3Rsrp핸드오버알고리즘 수업은 결과이다
구현. UE가 측정에서 가장 좋은 셀로 핸드오버가 트리거됩니다.
보고합니다.
이 알고리즘을 사용하는 시뮬레이션은 일반적으로 핑퐁 핸드오버에 더 취약합니다.
(단시간 내에 이전 소스 eNodeB로 연속적인 핸드오버),
특히 페이딩 모델 사용 가능. 이 문제는 일반적으로 다음을 통해 해결됩니다.
핸드오버에 특정 지연이 발생합니다. 알고리즘은 다음을 포함하여 이를 수행합니다.
UE에 대한 히스테리시스 및 트리거 시간 매개변수([TS6.3.5]의 섹션 36331)
측정 구성.
히스테리시스 (a.k.a. handover margin)은 RSRP와 관련하여 핸드오버를 지연시킵니다. 값은
dB로 표현되며 범위는 0~15dB이고 정확도는 0.5dB입니다(예: 입력).
2.7dB 값은 2.5dB로 반올림됩니다.
반면에, 미국에서 체류를 연장하고자 이전의 승인을 갱신하려던 트리거 시간 시간관계로 인계를 지연시킵니다. 3GPP는 16을 정의합니다.
트리거 시간에 유효한 값(모두 밀리초): 0, 40, 64, 80, 100, 128, 160, 256,
320, 480, 512, 640, 1024, 1280, 2560, 5120
히스테리시스와 트리거 시간의 차이는 그림에 설명되어 있습니다. 효과 of
히스테리시스 and 트리거 시간 in 가장 강한 세포 이양 연산 아래는 찍은 것
인사말 lena-x2-handover-measures 예. 서빙 셀의 인식된 RSRP를 나타냅니다.
및 셀의 경계를 통과하여 이동하는 UE에 의한 이웃 셀.
[이미지] 가장 강한 셀 핸드오버에서 히스테리시스 및 트리거 시간의 영향
알고리즘.UNINDENT
기본적으로 이 알고리즘은 3.0dB의 히스테리시스와 256ms의 트리거 시간을 사용합니다.
이 값은 다음을 통해 조정할 수 있습니다. 히스테리시스 and TimeToTrigger 의 속성
A3Rsrp핸드오버알고리즘 클래스입니다.
이웃 사람 관계
LTE 모듈은 단순화된 Automatic 이웃 사람 관계 (ANR) 기능. 이것은
에 의해 처리 LteAnr ANR을 통해 eNodeB RRC 인스턴스와 상호작용하는 클래스
SAP 인터페이스.
이웃 사람 관계 작업대
ANR은 이웃 사람 관계 작업대 (NRT), 섹션의 설명과 유사
[TS22.3.2]의 36300a. 테이블의 각 항목을 이웃 사람 관계 (NR) 및
다음 부울 필드를 포함하는 감지된 인접 셀을 나타냅니다.
·
아니 제거
NR이 다음을 수행해야 함을 나타냅니다. 지원 NRT에서 삭제됩니다. 이것은 참된 by
사용자 제공 NR의 기본값 및 그릇된 그렇지 않으면.
·
아니 X2 NR이 다음을 수행해야 함을 나타냅니다. 지원 시작하려면 X2 인터페이스를 사용하십시오.
대상 셀을 부모화하는 eNodeB에 대한 절차입니다. 이것은 그릇된 by
사용자 제공 NR의 기본값 참된 그렇지 않으면.
·
아니 HO NR이 다음을 수행해야 함을 나타냅니다. 지원 핸드오버 이유로 eNodeB에서 사용됩니다.
이것은 참된 대부분의 경우 NR이 사용자가 제공하고 NR이 제공되는 경우를 제외하고
네트워크에서 감지되었습니다.
각 NR 항목에는 다음 속성 중 하나 이상이 있을 수 있습니다.
·
사용자 제공
이 유형의 NR은 시뮬레이션 사용자의 지시에 따라 생성됩니다. 예를 들어,
NR은 사용자가 X2를 설정하면 자동으로 생성됩니다.
2개의 eNodeB 간 연결, 예: 섹션에 설명된 대로
sec-x2 기반 핸드오버. 사용자 제공 NR을 생성하는 또 다른 방법은
이웃 관계 추가 명시적으로 기능합니다.
·
네트워크 감지
이러한 유형의 NR은 다음의 결과로 시뮬레이션 중에 자동으로 생성됩니다.
근처 세포 발견.
네트워크 감지 NR을 자동으로 생성하기 위해 ANR은 UE 측정을 활용합니다. ~ 안에
즉, 그림에 표시된 대로 ANR은 UE 측정의 소비자입니다. 관계
사이에 UE 측정 시간 상관관계 and 그것의 소비자가. RSRQ 및 이벤트 A4(이웃이 더 좋아짐)
보다 임계값)은 보고 구성에 사용됩니다. 기본 이벤트 A4 임계값
가능한 가장 낮은 수준, 즉 최대 탐지 능력으로 설정되지만 다음에 의해 변경될 수 있습니다.
설정 임계값 속성 LteAnr 수업. A2-A4-RSRQ 핸드오버에 유의하세요.
알고리즘도 유사한 보고 구성을 활용합니다. 유사성에도 불구하고, 언제
ANR과 이 핸드오버 알고리즘은 모두 eNodeB에서 활성화되어 있으며 별도의 보고를 사용합니다.
구성.
또한 X2 인터페이스의 자동 설정은 지원되지 않습니다. 이것이 바로 이유이다
전에, 아니 X2 and 아니 HO 필드는 네트워크에서 감지되었지만 사용자가 감지한 NR에서는 true입니다.
직위별 of ANR in 시뮬레이션
ANR SAP 인터페이스는 ANR과 eNodeB RRC 간의 통신 수단을 제공합니다. 일부
인터페이스 기능은 아래와 같이 eNodeB RRC에서 NRT와 상호 작용하는 데 사용됩니다.
·
이웃 관계 추가
(eNodeB RRC -> ANR) 새로운 사용자 제공 NR 항목을 NRT에 추가합니다.
·
GetNoRemove
(eNodeB RRC -> ANR) 값을 가져옵니다. 아니 제거 NR 항목의 필드
주어진 셀 ID.
·
겟노호
(eNodeB RRC -> ANR) 값을 가져옵니다. 아니 HO 주어진 NR 항목의 필드
셀 아이디.
·
GetNoX2
(eNodeB RRC -> ANR) 값을 가져옵니다. 아니 X2 주어진 NR 항목의 필드
셀 아이디.
UE 측정 소비자로서 ANR의 역할을 지원하기 위한 다른 인터페이스 기능이 존재합니다.
아래와 같이 :
·
AddUeMeasReportConfigForAnr
(ANR -> eNodeB RRC) ANR이 측정 보고서를 요청하는 데 사용됩니다.
원하는 보고 구성을 전달하여 eNodeB RRC 엔터티. 그만큼
구성은 향후 연결된 모든 UE에 적용됩니다.
·
보고UeMeas
(eNodeB RRC -> ANR) 앞서 구성된 UE 측정을 기반으로
AddUeMeasReportConfigForAnr, UE는 eNodeB에 측정 보고를 제출할 수 있습니다.
eNodeB RRC 엔터티는 보고UeMeas 이를 전달하기 위한 인터페이스
ANR에 측정 보고서를 보냅니다.
이에 대한 해당 API 문서를 참조하세요. LteAnrSap 자세한 내용은 수업
사용법과 필수 매개변수에 대해 알아보세요.
ANR은 eNodeB RRC 인스턴스에서 데이터 구조로 활용되어
근처의 이웃 셀의 상황. ANR은 또한 eNodeB RRC 인스턴스가 다음을 수행하는 데 도움이 됩니다.
이웃 셀로의 핸드오버 절차가 가능한지 여부를 판단한다.
이는 eNodeB RRC가 핸드오버 절차만 허용한다는 사실에 의해 실현됩니다.
대상 셀의 NR 항목에 두 가지가 모두 있는 경우 발생합니다. 아니 HO and 아니 X2 다음으로 설정된 필드 그릇된.
ANR은 시뮬레이션의 모든 eNodeB 인스턴스에서 기본적으로 활성화됩니다. 비활성화될 수 있습니다.
~을 설정하여 Anr활성화됨 속성 LteHelper 수업 그릇된.
RRC 순서 다이어그램
이 섹션에서는 가장 중요한 RRC를 설명하는 몇 가지 시퀀스 다이어그램을 제공합니다.
절차가 모델링되고 있습니다.
RRC 연결 설립
그림 순서 도표 of 전에, RRC 연결 설립 순서 RRC가 어떻게 작동하는지 보여줍니다.
연결 설정 절차가 모델링되어 RRC 계층의 역할을 강조합니다.
UE와 eNB 모두, 다른 계층과의 상호 작용도 마찬가지입니다.
[이미지] RRC 연결 설정 절차의 순서도.UNINDENT
이 절차와 관련된 몇 가지 시간 초과가 있으며 다음 목록에 나와 있습니다.
작업대 타이머 in RRC 연결 설립 순서. 이 타이머 중 하나라도 만료된 경우
RRC 연결 확립 절차가 실패하면 종료된다. 이 경우,
상위 계층(UE NAS)은 절차가 완료될 때까지 즉시 재시도를 시도합니다.
성공적으로.
타이머 in RRC 연결 설립 순서
┌───────────────┬────────────┬───────────────┬─── ─────────────┬──────────┬────────────────┐
│이름 │ 위치 │ 타이머 시작 │ 타이머 중지 │ 기본값 │ 타이머 사용 시 │
│ │ │ │ │ 기간 │ 만료 │
├───────────────┼────────────┼───────────────┼─── ─────────────┼──────────┼────────────────┤
│연결 │ eNodeB RRC │ 새로운 UE 컨텍스트 │ RRC 수신 │ 15ms │ UE 제거 │
│요청 │ │ 추가됨 │ 연결 │ │ 컨텍스트 │
│시간 초과 │ │ │ 요청 │ │ │
├───────────────┼────────────┼───────────────┼─── ─────────────┼──────────┼────────────────┤
│연결 │ UE RRC │ RRC 보내기 │ RRC 수신 │ 100ms │ UE MAC 재설정 │
│시간 초과(T300 │ │ 연결 │ 연결 │ │ │
│타이머) │ │ 요청 │ 설정 또는 │ │ │
│ │ │ │ 거부 │ │ │
├───────────────┼────────────┼───────────────┼─── ─────────────┼──────────┼────────────────┤
│연결 │ eNodeB RRC │ RRC 보내기 │ RRC 수신 │ 100ms │ UE 제거 │
│설정 시간 초과 │ │ 연결 │ 연결 │ │ 컨텍스트 │
│ │ │ 설정 │ 설정 완료 │ │ │
├───────────────┼────────────┼───────────────┼─── ─────────────┼──────────┼────────────────┤
│연결 │ eNodeB RRC │ RRC 보내기 │ 안 함 │ 30ms │ UE 제거 │
│거부됨 │ │ 연결 │ │ │ 컨텍스트 │
│시간 초과 │ │ 거부 │ │ │ │
└───────────────┴────────────┴───────────────┴─── ─────────────┴──────────┴────────────────┘
RRC 연결 재구성
그림 순서 도표 of 전에, RRC 연결 재구성 순서 RRC가 어떻게 작동하는지 보여줍니다.
MobilityControlInfo가 다음과 같은 경우를 위해 연결 재구성 절차가 모델링되었습니다.
제공되지 않음, 즉 핸드오버가 수행되지 않음.
[이미지] RRC 연결 재구성 절차의 순서도.UNINDENT
그림 순서 도표 of 전에, RRC 연결 재구성 순서 for 전에, 이양
케이스 RRC 연결 재구성 절차가 해당 사례에 대해 어떻게 모델링되는지 보여줍니다.
여기서 MobilityControlInfo가 제공됩니다. 즉, 핸드오버가 수행됩니다. 지정된대로
[TS36331]에서, 후 전수 전에, 이양 메시지, 전에, UE 시도 에 ACCESS 전에, 목표
세포 at 전에, 먼저 가능 RACH 기회 따라 에 랜덤 무작위 접속하다 의지 선택
한정된 in [TS36321]_, 즉 전에, 이양 is 비동기식. 따라서, 언제 할당
a 전용 전문 for 전에, 닥치는대로의 ACCESS in 전에, 목표 세포, E-UTRA 하여야 한다 확인 it is
가능 에 전에, 먼저 RACH 기회 전에, UE 5월 사용합니다. 에 성공한 완성 of 전에,
이양, 전에, UE 전송 a 메시지 익숙한 에 확인하다 전에, 이양. 참고로 랜덤
이 경우 액세스 절차는 비경쟁 기반이므로 실제 LTE 시스템에서는
RRC 연결 설정에 사용되는 것과 약간 다릅니다. RA도 참고하세요.
프리앰블 ID는 X2 Handover Request에 포함된 Handover Command를 통해 신호됩니다.
타겟 eNB에서 소스 eNB로 전송되는 ACK 메시지; 특히 서문은
MobilityControlInfo의 일부인 RACH-ConfigDedicated IE에 포함되어 있습니다.
[그림] RRC Connection Reconfiguration 절차의 순서도
핸드오버 케이스.UNINDENT
RRC 프로토콜 모델
이전에 예상한 대로 우리는 변속기와 변속기에 대해 서로 다른 두 가지 모델을 제공합니다.
RRC 메시지 수신: 이상 and 부동산 . 각각은 다음 중 하나에 설명되어 있습니다.
다음 하위 섹션.
이상 RRC 프로토콜 모델
이 모델에 따르면 클래스와 LteUeRrc프로토콜이상적 and
LteEnbRrc프로토콜이상적, 모든 RRC 메시지와 정보 요소는 서로 간에 전송됩니다.
무선 자원을 소모하지 않고, eNB와 UE를 이상적인 방식으로
오류. 구현 관점에서 이는 RRC 데이터를 전달하여 달성됩니다.
하위 계층을 개입시키지 않고 UE와 eNB RRC 엔터티 사이의 직접 구조
(PDCP, RLC, MAC, 스케줄러).
부동산 RRC 프로토콜 모델
이 모델은 클래스에서 구현됩니다. LTERrc프로토콜실제 and LteEnbRrc프로토콜실제
실제 LTE에서 일반적으로 수행되는 RRC PDU 전송을 모델링하는 것을 목표로 합니다.
시스템. 특히:
· 전송되는 모든 RRC 메시지에 대해 실제 RRC PDU는 ASN.1 다음에 생성됩니다.
[TS36331]에 명시된 RRC PDU 및 정보 요소(IE)의 인코딩. 일부
PDU에 포함된 IE와 관련하여 단순화가 이루어집니다.
시뮬레이션 목적에 유용한 IE가 포함되어 있습니다. 자세한 목록을 원하시면
다음에 정의된 IE를 참조하세요. lte-rrc-sap.h [TS36331]과 비교해 보세요.
· 인코딩된 RRC PDU는 신호 무선 베어러를 통해 전송되며 동일한 규정이 적용됩니다.
데이터 통신에 사용되는 전송 모델링(스케줄링, 무선 포함)
리소스 소비, 채널 오류, 지연, 재전송 등
신호 법 라디오 열매 맺는 초목 모델
이제 우리는 다음과 같은 용도로 사용되는 Signaling Radio Bearer 모델을 설명합니다. 부동산 RRC 프로토콜
모델입니다.
· SRB0 메시지(CCCH를 통해):
· RrcConnection요청: 실제 LTE 시스템에서는 전송되는 RLC TM SDU입니다.
RAR의 UL 승인에 지정된 리소스(UL DCI가 아님) 그 이유는
C-RNTI는 아직 현 단계에서는 알려져 있지 않습니다. 시뮬레이터에서는 실제와 같이 모델링됩니다.
RLC TM 호출 시 sched에 의해 UL 자원이 할당된 RLC PDU
SCHED_DL_RACH_INFO_REQ.
· RrcConnection설정: 시뮬레이터에서는 실제 LTE 시스템처럼 구현됩니다.
즉, 정규 UL DCI에 의해 표시된 자원을 통해 전송된 RLC TM SDU를 사용하여,
RLC TM 인스턴스에 의해 트리거된 SCHED_DL_RLC_BUFFER_REQ로 할당됩니다.
LCID 0(CCCH)에 매핑됩니다.
· SRB1 메시지(DCCH를 통해):
· 시뮬레이터에서 모델링된 모든 SRB1 메시지(예: RrcConnection완료됨)
실제 LTE 시스템에서처럼 구현됩니다. 즉, RLC AM을 통해 전송되는 실제 RLC SDU를 사용합니다.
버퍼 상태 보고서를 통해 할당된 DL 리소스를 사용합니다. RLC 모델 보기
자세한 내용은 문서를 참조하십시오.
· SRB2 메시지(DCCH를 통해):
· [TS36331]에 따르면, "SRB1 is for RRC 메시지 (어느 5월 들 a
피기백된 NAS 메세지) as 잘 as for NAS 메시지 이전에 에 전에, 설립
of SRB2, 모든 사용 DCCH 논리 채널", 반면 "SRB2 is for NAS 메시지
사용 DCCH 논리 채널"와"SRB2 이 a 우선순위가 낮은 보다 SRB1 and is
항상 구성 by 이유트란 시간 내에 보안 활성화". 모델링
보안 관련 측면은 LTE 시뮬레이션 모델의 요구 사항이 아니며,
따라서 우리는 항상 SRB1을 사용하고 SRB2를 활성화하지 않습니다.
ASN.1 부호화 of RRC IE의
모든 Ue/Enb SAP 사용자/공급자에게 공통적으로 RRC SAP에 정의된 메시지가 전송됩니다.
Ue/Enb를 오가는 투명한 용기에 담겨 있습니다. 다양한 인코딩 형식
정보 요소는 정렬되지 않은 ASN.36331 규칙을 사용하여 [TS1]에 지정됩니다.
변종. Ns3/Lte의 구현은 다음 클래스로 구분됩니다.
· Asn1Header : 기본 ASN 유형의 인코딩/디코딩을 포함합니다.
· RrcAsn1Header : Asn1Header를 상속하고 공통 인코딩/디코딩을 포함합니다.
IE는 [TS36331]에 정의되어 있습니다.
· Rrc 특정 메시지/IE 클래스 : RRC에 정의된 각 메시지에 대한 클래스
SAP 헤더
Asn1헤더 수업 - 실시 of 기지 ASN.1 유형
이 클래스는 사용되는 ASN.1 유형을 직렬화/역직렬화하는 메소드를 구현합니다.
[TS36331], ITU-T X.691의 압축된 인코딩 규칙에 따름. 고려되는 유형
위치 :
· 부울(Boolean): 부울 값은 단일 비트(1=true, 0=false)를 사용합니다.
· 정수: 제한된 정수(최소값과 최대값이 정의됨)는 최소값을 사용합니다.
해당 범위(최대-최소+1)를 인코딩할 비트 양입니다.
· 비트스트링(Bitstring): 바이스트링은 직렬화 버퍼에 비트 단위로 복사됩니다.
· Octetstring : 현재 사용되지 않습니다.
· 시퀀스(Sequence): 시퀀스는 선택 항목과 항목의 존재를 나타내는 프리앰블을 생성합니다.
기본 필드. 또한 확장 마커가 있음을 나타내는 비트도 추가합니다.
· Sequence...Of : 시퀀스...of 유형은 시퀀스의 요소 수를 인코딩합니다.
정수로(나중에 후속 요소를 인코딩해야 함)
· Choice : 선택 세트에 있는 요소 중 어떤 요소가 인코딩되는지 나타냅니다.
· Enumeration : 열거형 중 어떤 값이 사용되는지 나타내는 정수로 직렬화됩니다.
열거형의 요소 수는 상위 요소입니다.
경계.
· Null : 직렬화 기능이 정의되어 있어도 null 값은 인코딩되지 않습니다.
사양과 구현 간의 보다 명확한 지도를 제공합니다.
클래스는 ns-3 Header를 상속하지만 Deserialize() 함수는 순수 가상으로 선언됩니다.
따라서 이를 구현해야 하는 상속된 클래스입니다. 그 이유는 역직렬화가
RRC 메시지의 요소를 검색합니다. 각 요소에는 서로 다른 정보가 포함되어 있습니다.
집단.
또한 특정 유형/메시지의 결과 바이트 길이는
선택적 필드의 존재 여부와 최적화된 인코딩으로 인해 달라질 수 있습니다.
따라서 직렬화된 비트는 PreSerialize() 함수를 사용하여 처리되어
결과는 m_serializationResult 버퍼입니다. ns3 버퍼에서 읽고 쓰는 방법은 다음과 같습니다.
바이트 단위로 정의되면 직렬화 비트는 m_serializationPendingBits에 저장됩니다.
8비트가 설정되어 버퍼 반복기에 쓸 수 있을 때까지 속성입니다. 마지막으로 언제
Serialize()를 호출하면 m_serializationResult 속성의 내용이 복사됩니다.
Buffer::Iterator 매개변수
RrcAsn1헤더 : 공통의 IE
일부 정보 요소는 여러 RRC 메시지에 사용되므로 이 클래스는
다음과 같은 일반적인 IE를 구현합니다.
· SrbToAddModList
· DrbToAddModList
· 논리적 채널 구성
· RadioResourceConfigDedicated
· PhysicalConfigDedicated
· SystemInformationBlockType1
· SystemInformationBlockType2
· RadioResourceConfigCommonSIB
RRC 구체적인 메시지/IE 수업
다음 RRC SAP가 구현되었습니다.
· RrcConnection요청
· RrcConnection설정
· RrcConnectionSetup완료됨
· RrcConnection재구성
· RrcConnectionReconfigurationCompleted
· 인계준비정보
· RrcConnection재확립요청
· RrcConnection재확립
· RrcConnection재확립완료
· RrcConnection재확립거부
· RrcConnectionRelease
NAS
LTE-EPC 모델의 초점은 EMM에 해당하는 NAS Active 상태에 있습니다.
등록됨, ECM 연결됨, RRC 연결됨. 이로 인해 다음과 같은
단순화가 이루어졌습니다.
· EMM과 ECM은 명시적으로 모델링되지 않습니다. 대신 UE의 NAS 엔터티는
동등한 작업을 수행하기 위해 MME와 직접 상호 작용합니다.
단순화) UE를 EMM 연결 및 ECM 연결 상태로 전환하는 것;
· NAS는 또한 상위에서 오는 멀티플렉싱 업링크 데이터 패킷을 처리합니다.
트래픽 흐름 템플릿 분류자를 사용하여 적절한 EPS 베어러에 레이어 추가
(Tft분류자).
· NAS는 PLMN 및 CSG 선택을 지원하지 않습니다.
· NAS는 유휴 모드에서 위치 업데이트/페이징 절차를 지원하지 않습니다.
그림 순서 도표 of 전에, 붙이다 순서 단순화된 NAS 모델이 어떻게
연결 프로시저를 구현합니다. 기본 및 최종 전용 EPS는 모두
Bearer는 이 절차의 일부로 활성화됩니다.
[이미지] 연결 절차의 시퀀스 다이어그램.UNINDENT
S1
S1-U
S1-U 인터페이스는 데이터 패킷을 캡슐화하여 현실적인 방식으로 모델링됩니다.
실제 LTE-EPC 시스템에서 수행되는 GTP/UDP/IP. 해당 프로토콜 스택은 다음과 같습니다.
그림 LTE-EPC 데이터 평면 프로토콜 스택. 그림에 보이는 것처럼 2가지 종류가 있습니다
IP 네트워킹 계층. 첫 번째는 End-to-End 레이어로, End-to-End 레이어를 제공합니다.
사용자와의 연결성; 이 계층에는 UE, PGW 및 원격 호스트가 포함됩니다.
(최종 인터넷 라우터와 그 사이의 호스트 포함) eNB는 포함되지 않습니다.
기본적으로 UE에는 4/7.0.0.0 네트워크의 공용 IPv8 주소가 할당되며 PGW는
모든 UE가 인터넷에 연결하기 위한 게이트웨이로 사용하는 주소 7.0.0.1을 얻습니다.
IP 네트워킹의 두 번째 계층은 EPC 근거리 통신망입니다. 여기에는 모든 eNB가 포함됩니다.
노드와 SGW/PGW 노드. 이 네트워크는 지점 간 링크 집합으로 구현됩니다.
각 eNB를 SGW/PGW 노드와 연결합니다. 따라서 SGW/PGW에는 다음과 같은 세트가 있습니다.
각각 다른 eNB에 대한 연결을 제공하는 지점 간 장치입니다. 기본적으로
10.x.y.z/30 서브넷이 각 지점 간 링크에 할당됩니다(/30 서브넷이 가장 작습니다).
두 개의 서로 다른 호스트 주소를 허용하는 서브넷).
3GPP에서 지정한 대로 종단 간 IP 통신은 로컬 EPC IP를 통해 터널링됩니다.
GTP/UDP/IP를 사용하는 네트워크. 다음에서는 이 터널링이 어떻게 구현되는지 설명합니다.
EPC 모델에서. 설명은 데이터의 엔드 투 엔드 흐름을 논의하여 이루어집니다.
패킷.
[이미지] 인터넷과 UE.UNINDENT 간 다운링크의 데이터 흐름
우선, 그림에 표시된 다운링크의 경우를 고려합니다. Data
흐름 in 전에, 다운 링크 사이에 전에, 인터넷 and 전에, UE. 다운링크 IPv4 패킷은
일반 원격 호스트에서 생성되고 UE 장치 중 하나로 주소가 지정됩니다. 인터넷
라우팅은 패킷을 SGW/PGW의 일반 NetDevice로 전달하는 작업을 담당합니다.
인터넷에 연결된 노드(3GPP에 따른 Gi 인터페이스)
술어). SGW/PGW에는 게이트웨이 IP가 할당된 VirtualNetDevice가 있습니다.
UE 서브넷의 주소; 따라서 정적 라우팅 규칙은 들어오는 패킷을 발생시킵니다.
인터넷에서 이 VirtualNetDevice를 통해 라우팅됩니다. 이러한 장치는
GTP/UDP/IP 터널링 절차는 패킷을 전용 애플리케이션으로 전달하여
EpcSgwPgwApplication이라고 불리는 SGW/PGW 노드. 이 응용 프로그램은
다음 작업:
1. IP를 보고 UE가 연결된 eNB 노드를 결정합니다.
목적지 주소(UE의 주소);
2. 트래픽 흐름 템플릿(TFT)을 사용하여 패킷을 분류하여 어느 패킷으로 전송되는지 식별합니다.
EPS Bearer에 속합니다. EPS 베어러는 S1-U 베어러에 일대일 매핑을 가지므로
이 작업은 GTP-U TEID(Tunnel Endpoint Identifier)를 반환합니다.
패킷이 속해 있습니다.
3. 해당 GTP-U 프로토콜 헤더를 패킷에 추가합니다.
4. 마지막으로 UDP 소켓을 통해 S1-U 지점 간 패킷을 보냅니다.
UE가 연결된 eNB로 주소가 지정되는 NetDevice입니다.
결과적으로 IP, UDP, GTP 헤더가 새로 추가된 엔드투엔드 IP 패킷은 다음과 같습니다.
S1 링크 중 하나를 통해 eNB로 전송되며, eNB에서 로컬로 수신 및 전달됩니다.
(가장 바깥쪽 IP 헤더의 목적지 주소가 eNB IP 주소와 일치하기 때문입니다.) 그만큼
로컬 전달 프로세스는 UDP 소켓을 통해 패킷을 전용으로 전달합니다.
EpcEnbApplication이라는 애플리케이션입니다. 그런 다음 이 애플리케이션은 다음을 수행합니다.
작업 :
1. GTP 헤더를 제거하고 여기에 포함된 TEID를 검색합니다.
2. S1-U 베어러와 무선 베어러 간의 일대일 매핑을 활용합니다(이는
3GPP 요구 사항) 패킷이 전송될 베어러 ID(BID)를 결정합니다.
속한다;
3. EpsBearerTag라는 전용 태그에 BID를 기록합니다.
패킷;
4. 원시 패킷을 통해 eNB 노드의 LteEnbNetDevice로 패킷을 전달합니다.
소켓
이 시점에서 패킷의 가장 바깥쪽 헤더는 종단 간 IP 헤더입니다.
S1 프로토콜 스택의 IP/UDP/GTP 헤더가 이미 제거되었기 때문입니다. 에
EpcEnbApplication에서 패킷을 수신하면 LteEnbNetDevice는
EpsBearerTag의 BID는 BID를 기반으로 Radio Bearer 인스턴스를 결정합니다.
(및 해당 PDCP 및 RLC 프로토콜 인스턴스)는 다음을 전달하는 데 사용됩니다.
LTE 무선 인터페이스를 통해 UE에 패킷을 보냅니다. 마지막으로 UE의 LteUeNetDevice는
패킷을 수신하고 이를 IP 프로토콜 스택에 로컬로 전달합니다.
하향링크의 종점인 UE의 애플리케이션으로 전달
통신.
[이미지] UE와 인터넷 간 업링크의 데이터 흐름.UNINDENT
업링크의 경우는 그림에 나와 있습니다. Data 흐름 in 전에, 업 링크 사이에 전에, UE and
전에, 인터넷. 업링크 IP 패킷은 UE 내부의 일반 애플리케이션에 의해 생성되며,
로컬 TCP/IP 스택에 의해 UE의 LteUeNetDevice로 전달됩니다. 그만큼
그런 다음 LteUeNetDevice는 다음 작업을 수행합니다.
1. TFT를 사용하여 패킷을 분류하고 패킷이 전송될 Radio Bearer를 결정합니다.
패킷이 속합니다(및 해당 RBID).
2. 해당 PDCP 프로토콜 인스턴스를 식별합니다. 이는 진입점입니다.
이 패킷에 대한 LTE 무선 프로토콜 스택
3. LTE 무선 프로토콜 스택을 통해 eNB로 패킷을 보냅니다.
eNB는 LteEnbNetDevice를 통해 패킷을 수신합니다. 하나의 PDCP와 RLC가 있기 때문에
각 무선 베어러에 대한 프로토콜 인스턴스인 LteEnbNetDevice는 BID를 결정할 수 있습니다.
패킷의. 이 BID는 EpsBearerTag에 기록되며, 이는
패킷. 그런 다음 LteEnbNetDevice는 원시 패킷을 통해 패킷을 EpcEnbApplication으로 전달합니다.
패킷 소켓.
패킷을 수신하면 EpcEnbApplication은 다음 작업을 수행합니다.
1. 패킷의 EpsBearerTag에서 BID를 검색합니다.
2. 다음을 활용하여 해당 EPS Bearer 인스턴스와 GTP-U TEID를 결정합니다.
S1-U 베어러와 무선 베어러 간의 일대일 매핑;
3. 이전에 결정된 TEID를 포함하여 패킷에 GTP-U 헤더를 추가합니다.
4. S1-U에 연결된 UDP 소켓을 통해 SGW/PGW 노드로 패킷을 보냅니다.
지점간 네트워크 장치.
이 시점에서 패킷에는 S1-U IP, UDP 및 GTP 헤더가 포함되어 있습니다.
원래 종단 간 IP 헤더. 해당 S1-U에서 패킷을 수신한 경우
SGW/PGW 노드의 point-to-point NetDevice는 로컬로 전달됩니다(대상으로).
가장 바깥쪽 IP 헤더의 주소는 지점간 네트워크 장치의 주소와 일치합니다.
로컬 전달 프로세스는 다음을 통해 패킷을 EpcSgwPgwApplication으로 전달합니다.
해당 UDP 소켓. 그런 다음 EpcSgwPgwApplication은 GTP 헤더를 제거하고 전달합니다.
VirtualNetDevice에 대한 패킷입니다. 이 시점에서 패킷의 가장 바깥쪽 헤더는
종단 간 IP 헤더. 따라서 이 헤더 내의 대상 주소가 원격 주소인 경우
인터넷상의 호스트에서 패킷은 해당 NetDevice를 통해 인터넷으로 전송됩니다.
SGW/PGW의. 패킷이 다른 UE로 향하는 경우, IP 스택은
SGW/PGW는 패킷을 다시 VirtualNetDevice로 리디렉션하고 패킷은
목적지 UE에 도달하기 위해 하향링크 전달 과정을 거친다.
EPS Bearer QoS는 S1-U 링크에 적용되지 않습니다.
링크 대역폭의 오버프로비저닝은 모든 서비스의 QoS 요구 사항을 충족하기에 충분합니다.
소지자.
S1AP
S1-AP 인터페이스는 eNB와 MME 간의 제어 평면 상호 작용을 제공합니다. 에서
시뮬레이터에서 이 인터페이스는 이상적인 방식으로 모델링되었으며,
S1AP 메시지의 인코딩을 실제로 구현하지 않고 eNB 및 MME 개체
[TS36413]에 명시된 정보 요소와 실제로 PDU를 전송하지 않고
어떤 링크에서든.
모델링된 S1-AP 프리미티브는 다음과 같습니다.
· 초기 UE 메시지
· 초기 컨텍스트 설정 요청
· 초기 컨텍스트 설정 응답
· 경로 전환 요청
· 경로 전환 요청 확인
X2
X2 인터페이스는 두 개의 eNB를 상호 연결한다[TS36420]. 논리적인 관점에서 X2는
인터페이스는 두 eNB 간의 지점 간 인터페이스입니다. 실제 E-UTRAN에서는
논리적인 지점 간 인터페이스는 물리적인 연결이 없더라도 실행 가능해야 합니다.
두 eNB 간의 직접 연결. 시뮬레이터에 구현된 X2 모델에서는
X2 인터페이스는 두 eNB 간의 지점 간 링크입니다. 지점간 장치는
두 eNB 모두에서 생성되고 두 개의 지점 간 장치가 지점 간 장치에 연결됩니다.
링크를 클릭하십시오.
X2 인터페이스가 LENA의 전체 아키텍처에 어떻게 적합한지 보여줍니다.
시뮬레이션 모델, 독자는 그림을 참조합니다 살펴보기 of 전에, LTE-EPC 시뮬레이션
모델.
시뮬레이터에 구현된 X2 인터페이스는
이동성 관리 기능 [TS36423]의 기본 절차는 다음과 같습니다.
· 핸드오버 요청 절차
· Handover Request 승인 절차
· SN 상태 이전 절차
· UE Context Release 절차
이러한 절차는 X2 기반 핸드오버와 관련됩니다. 상세한 내용을 확인하실 수 있습니다
[TS10.1.2.1]의 섹션 36300의 핸드오버에 대한 설명. 우리는 시뮬레이터에 주목합니다.
모델은 현재 다음만 지원합니다. 원활한 이양 섹션 2.6.3.1에 정의된 대로
[세시아2009]; 특히, 무손실 이양 섹션 2.6.3.2에 설명된 대로
[Sesia2009]는 이 글을 쓰는 시점에서는 지원되지 않습니다.
그림 순서 도표 of 전에, X2 기반 이양 아래는 의 상호작용을 보여줍니다.
시뮬레이터에서 X2 모델의 엔터티. 음영 처리된 라벨은 다음 순간을 나타냅니다.
UE 또는 eNodeB가 다른 RRC 상태로 전환됩니다.
[이미지] X2 기반 핸드오버의 순서도.UNINDENT
그림은 또한 핸드오버 절차 내의 두 개의 타이머를 보여줍니다. 이양 출발
타이머 소스 eNodeB에 의해 유지되는 반면, 이양 가입 타이머 목표에 의해
eNodeB. 타이머 지속 시간은 다음에서 구성할 수 있습니다.
Handover나가는 시간 초과지속 시간 and HandoverJoiningTimeoutDuration 의 속성
그 LTEEnbRrc 인스턴스. 이 타이머 중 하나가 만료되면 핸드오버 절차가 완료됩니다.
실패한 것으로 간주됩니다.
하지만 현재 버전의 LTE에서는 핸드오버 실패에 대한 적절한 처리가 없습니다.
기준 치수. 사용자는 핸드오버 실패를 방지하기 위해 시뮬레이션을 적절하게 조정해야 합니다.
그렇지 않으면 예상치 못한 동작이 발생할 수 있습니다. 섹션을 참조하세요.
이에 관한 몇 가지 팁에 대한 사용자 문서의 sec-tuning-handover-simulation
문제.
X2 모델은 다음의 서비스를 사용하는 엔터티입니다.
· X2 인터페이스,
· 지점 간 장치 위에 소켓으로 구현됩니다.
· X2-C 및 X2-U 인터페이스를 통해 X2 메시지를 보내고 받는 데 사용됩니다.
(즉, 지점 간 링크에 연결된 지점 간 장치)
피어 eNB.
· S1 애플리케이션.
· 현재 EpcEnbApplication 입니다.
· X2의 기본 절차에 필요한 일부 정보를 얻는 데 사용됩니다.
메시지.
다음과 같은 서비스를 제공합니다.
· RRC 엔터티(X2 SAP)
· RRC 메시지를 보내고 받습니다. X2 엔터티는 투명하게 RRC 메시지를 보냅니다.
X2 메시지의 컨테이너입니다. 이 RRC 메시지는 UE에게 전송됩니다.
그림 실시 모델 of X2 실재 and SAP X2의 구현 모델을 보여줍니다
엔터티 및 프로토콜의 다른 모든 엔터티 및 서비스와의 관계
스택.
[이미지] X2 엔터티 및 SAPs.UNINDENT 구현 모델
RRC 엔터티는 핸드오버 절차의 시작을 관리합니다. 이 작업은 다음에서 수행됩니다.
eNB RRC 엔터티의 핸드오버 관리 서브모듈입니다. 타겟 eNB는 일부 수행을 수행할 수 있습니다.
입학 통제 절차. 이는 승인 제어 하위 모듈에서 수행됩니다.
처음에 이 서브모듈은 모든 핸드오버 요청을 수락합니다.
X2 인터페이스
X2 모델에는 두 가지 인터페이스가 포함되어 있습니다.
· X2-C 인터페이스. 제어 인터페이스이며 X2-AP PDU를 전송하는 데 사용됩니다.
(즉, 기본 절차).
· X2-U 인터페이스. 베어러 데이터가 있을 때 이를 전송하는 데 사용됩니다. DL 전송.
그림 X2 인터페이스 프로토콜 스택 X2-U 인터페이스의 프로토콜 스택을 보여줍니다.
시뮬레이터에서 모델링된 X2-C 인터페이스.
[이미지] X2 인터페이스 프로토콜 스택.UNINDENT
X2-C
X2-C 인터페이스는 X2 인터페이스의 제어 부분이며 다음을 보내는 데 사용됩니다.
X2-AP PDU(즉, 기본 절차).
원래 X2 인터페이스 제어 평면 프로토콜 스택에서는 SCTP가 전송으로 사용됩니다.
프로토콜이지만 현재 SCTP 프로토콜은 ns-3 시뮬레이터에서 모델링되지 않으며 그 프로토콜은
구현이 프로젝트 범위를 벗어났습니다. UDP 프로토콜이 데이터그램으로 사용됩니다.
SCTP 프로토콜 대신 지향적인 프로토콜.
X2-U
X2-U 인터페이스는 베어러 데이터가 있을 때 전송하는 데 사용됩니다. DL 전송 중
X2 기반 핸드오버 절차를 실행합니다. S1-U에서 수행된 작업과 유사
인터페이스를 통해 데이터 패킷이 전송될 때 GTP/UDP/IP를 통해 캡슐화됩니다.
상호 작용. EPS Bearer QoS는 X2-U 링크에 적용되지 않습니다.
링크 대역폭의 오버프로비저닝이 QoS 요구 사항을 충족하기에 충분하다는 점
모든 소지자의.
X2 예배 인터페이스
X2 서비스 인터페이스는 RRC 엔터티가 X2의 메시지를 보내고 받는 데 사용됩니다.
절차. 이는 두 부분으로 나누어져 있습니다:
· NS EpcX2Sap공급자 부분은 X2 엔터티에 의해 제공되고 RRC 엔터티에 의해 사용되며
· NS EpcX2Sap사용자 부분은 RRC 엔터티에 의해 제공되고 RRC 엔터티에 의해 사용됩니다.
X2-C 모델에서 지원되는 기본 요소는 다음과 같습니다.
하위 섹션
X2-C 기초 요소 for 이양 실행
X2 기반 핸드오버에는 다음과 같은 프리미티브가 사용됩니다.
· 인도 요청
· 핸드오버 요청 ACK
· 인계 준비 실패
· SN 상태 전송
· UE 컨텍스트 릴리스
위의 모든 프리미티브는 현재 구현된 RRC 모델에서 사용됩니다.
핸드오버 절차의 준비 및 실행. 그들의 사용법은 RRC와 상호 작용합니다
상태 머신; 따라서 최소한 코드 사용자 정의에 사용되지는 않습니다.
RRC 상태 머신을 수정하는 것이 원하지 않는 한.
X2-C ITS 기초 요소
SON(Self-Organized Network)을 구현하는 데 다음 기본 요소를 사용할 수 있습니다.
기능:
· 로드 정보
· 자원 상태 업데이트
현재 RRC 모델은 실제로 이러한 기본 요소를 사용하지 않으며 포함되어 있습니다.
RRC 로직에 포함된 SON 알고리즘을 개발할 수 있도록 모델에서
그것들을 활용하는 것입니다.
첫 번째 예로서 여기서는 로드 정보 기본 요소를 사용할 수 있는 방법을 보여줍니다. 우리는 추정하다
다음과 같은 새 멤버 변수를 포함하도록 LteEnbRrc가 수정되었습니다.
std::벡터
m_currentUlInterferenceOverloadIndicationList;
std::벡터
m_currentUlHighInterferenceInformationList;
EpcX2Sap::RelativeNarrowbandTxBand m_currentRelativeNarrowbandTxBand;
이러한 변수 유형에 대한 자세한 설명은 파일을 참조하는 것이 좋습니다.
epc-x2-sap.h, 해당 doxygen 문서 및 해당 문서에 대한 참조
3GPP TS 36.423의 관련 섹션. 이제 런타임에 이러한 변수가 다음과 같다고 가정합니다.
방금 언급한 사양에 따라 의미 있는 값으로 설정되었습니다. 그러면 다음을 수행할 수 있습니다.
로드를 전송하려면 LteEnbRrc 클래스 구현에 다음 코드를 추가하세요.
정보 기본 요소:
EpcX2Sap::CellInformationItem cii;
cii.sourceCellId = m_cellId;
cii.ulInterferenceOverloadIndicationList = m_currentUlInterferenceOverloadIndicationList;
cii.ulHighInterferenceInformationList = m_currentUlHighInterferenceInformationList;
cii.relativeNarrowbandTxBand = m_currentRelativeNarrowbandTxBand;
EpcX2Sap::LoadInformationParams 매개변수;
params.targetCellId = cellId;
params.cellInformationList.push_back(cii);
m_x2SapProvider->SendLoadInformation(params);
위 코드를 사용하면 Source eNB가 메시지를 보낼 수 있습니다. 방법
LteEnbRrc::DoRecvLoadInformation target eNB가 메시지를 수신하면 호출됩니다.
따라서 부하 정보의 원하는 처리는 해당 범위 내에서 구현되어야 합니다.
방법.
다음 두 번째 예에서는 자원 상태 업데이트 프리미티브가 사용되는 방법을 보여줍니다.
다음과 같은 새 멤버를 포함하도록 LteEnbRrc가 수정되었다고 가정합니다.
변하기 쉬운:
EpcX2Sap::CellMeasurementResultItem m_cmri;
이전과 마찬가지로 우리는 다음을 참조합니다. epc-x2-sap.h 그리고 자세한 내용은 그 안의 참고자료를 참조하세요.
이 변수 유형에 대한 정보입니다. 다시 한 번, 변수가 이미 지정되었다고 가정합니다.
의미 있는 값으로 설정합니다. 그런 다음 다음 코드를 추가하여 메시지를 보낼 수 있습니다.
리소스 상태 업데이트:
EpcX2Sap::ResourceStatusUpdateParams 매개변수;
params.targetCellId = cellId;
params.cellMeasurementResultList.push_back(m_cmri);
m_x2SapProvider->SendResourceStatusUpdate(params);
방법 eEnbRrc::DoRecvResourceStatusUpdate Target eNB가 수신하면 호출됩니다.
리소스 상태 업데이트 메시지. 이 메시지의 원하는 처리는 다음과 같습니다.
따라서 해당 메서드 내에서 구현되어야 합니다.
마지막으로, 우리는
위에서 설명한 기본 요소에 전달된 변수는 SON에 특정한 것으로 간주됩니다.
알고리즘이 구현 중이므로 이 문서에서는 다루지 않습니다.
지원되지 않음 기초 요소
무선 링크 실패 표시와 같은 이동성 견고성 최적화 기본 요소
이 단계에서는 핸드오버 보고서가 지원되지 않습니다.
S11
S11 인터페이스는 다음을 사용하여 SGW와 MME 간의 제어 평면 상호 작용을 제공합니다.
[TS2]에 지정된 GTPv29274-C 프로토콜. 시뮬레이터에서 이 인터페이스는 다음과 같이 모델링됩니다.
SGW와 MME 개체 간의 직접적인 상호 작용을 통해 이상적인 패션
실제로 메시지 인코딩을 구현하고 실제로 전송하지 않고
모든 링크의 PDU.
모델링된 S11 기본 요소는 다음과 같습니다.
· 세션 요청 생성
· 세션 응답 생성
· 무기명 요청 수정
· 전달자 응답 수정
이러한 프리미티브 중 처음 두 개는 초기 UE 연결 시 사용됩니다.
S1-U 보유자 설립; 나머지 두 개는 핸드오버 중에 스위치를 전환하는 데 사용됩니다.
S1-U Bearer를 수신한 결과 Source eNB에서 Target eNB로의 SXNUMX-U 베어러
PATH SWITCH REQUEST S1-AP 메시지의 MME.
출력 Control
이 섹션에서는 다운링크 및 업링크 전원 제어의 ns-3 구현에 대해 설명합니다.
다운 링크 출력 Control
일부 주파수 재사용 알고리즘에는 Downlink Power Control이 필요하므로 이 기능은
ns-3에서도 구현되었습니다.
[그림] Downlink Power Control의 시퀀스 다이어그램.UNINDENT
그림 순서 도표 of 다운 링크 출력 Control 설정 순서도를 보여줍니다.
UE에 대한 다운링크 P_A 값, RRC와 다른 RRC 간의 상호 작용 강조
엔터티. FR 알고리즘은 RRC를 트리거하여 UE에 대한 P_A 값을 변경합니다. 그런 다음 RRC가 시작됩니다.
UE에게 새로운 구성에 대해 알리는 RrcConnectionReconfiguration 함수. 후에
성공적인 RrcConnectionReconfiguration, RRC는 호출을 통해 UE에 대한 P_A 값을 설정할 수 있습니다.
CphySap의 SetPa 함수, 값은 P_A 값을 포함하는 새 맵 m_paMap에 저장됩니다.
eNb가 서비스를 제공하는 각 UE에 대해.
LteEnbPhy가 새 서브프레임을 시작하면 DCI 제어 메시지가 처리되어 벡터를 얻습니다.
RB를 사용했습니다. 이제 generatePowerAllocationMap(uint16_t rnti, int rbId) 함수도
라고 불리는. UE에 대한 P_A 값을 확인하고 각 RB에 대해 전력을 생성하여 저장하는 기능입니다.
m_dlPowerAllocationMap. 그러면 이 지도는 다음에서 사용됩니다.
Ptr를 생성하는 CreateTxPowerSpectralDensityWithPowerAllocation 함수
txPsd.
PdschConfigDedicated(TS 36.331, 6.3.2 PDSCH-Config)가 추가되었습니다.
RrcConnectionReconfiguration에 사용되는 LteRrcSap::PhysicalConfigDedicated 구조체
프로세스.
업 링크 출력 Control
업링크 전력 제어는 다양한 업링크 물리적 전송 전력을 제어합니다.
채널. 이 기능은 3GPP TS 36.213 섹션 5에 설명되어 있습니다.
업링크 전원 제어는 기본적으로 활성화되어 있으며 속성 시스템에 의해 비활성화될 수 있습니다.
Config::SetDefault("ns3::LteUePhy::EnableUplinkPowerControl", BooleanValue(false));
두 가지 업링크 전원 제어 메커니즘이 구현됩니다.
· 개방 루프 업링크 전력 제어: UE 전송 전력은 다음의 추정에 따라 달라집니다.
다운링크 경로 손실 및 채널 구성
· Closed Loop Uplink Power Control: Open Loop와 마찬가지로 eNB가 UE를 제어할 수 있음
명시적인 전송 전력 제어 TPC 명령을 통한 전송 전력
다운링크로 전송됩니다.
이 두 메커니즘 유형 사이를 전환하려면 매개변수를 변경해야 합니다.
Config::SetDefault ("ns3::LteUePowerControl::ClosedLoop", BooleanValue (true));
기본적으로 폐쇄 루프 전원 제어는 활성화되어 있습니다.
두 모드 of 휴무 고리 업 링크 출력 Control are 사용할 수 :
· 절대 모드: TxPower는 절대 TPC 값으로 계산됩니다.
· 누적 모드: TxPower는 누적된 TPC 값으로 계산됩니다.
이 두 모드 사이를 전환하려면 매개변수를 변경해야 합니다.
Config::SetDefault ("ns3::LteUePowerControl::AccumulationEnabled", BooleanValue (true));
기본적으로 누적 모드는 활성화되어 있으며 DL-DCI의 TPC 명령은 모두에 의해 설정됩니다.
스케줄러를 1로 설정하면 누적 모드에서 값 0에 매핑됩니다.
업 링크 출력 Control for 푸쉬
PUSCH(물리적 업링크 공유 채널)에 대한 UE 전송 전력 설정
전송은 다음과 같이 정의됩니다.
· UE가 서빙 셀 c에 대해 동시 PUCCH 없이 PUSCH를 전송하는 경우,
에 대한 서브프레임 i에서 PUSCH 전송을 위한 UE 전송 전력 P_{PUSCH,c}(i)
서빙 셀 c는 다음과 같이 주어진다.
· UE가 서빙 셀 c에 대해 PUCCH와 동시에 PUSCH를 전송하는 경우, UE는
서브프레임 i에서 PUSCH 전송을 위한 전송 전력 P_{PUSCH,c}(i)
서빙 셀 c는 다음과 같이 주어진다.
PUCCH에 대한 Uplink Power Control이 구현되지 않았기 때문에 이 경우는 구현되지 않습니다.
뿐만 아니라.
· UE가 서빙 셀 c에 대해 PUSCH를 전송하지 않는 경우,
PUSCH에 대한 DCI 형식 3/3A로 수신된 TPC 명령, UE는 UE가
서브프레임 i에서 PUSCH 전송을 위한 전송 전력 P_{PUSCH,c}(i)
서빙 셀 c는 다음과 같이 계산됩니다.
여기서
· P_{CMAX,c}(i)는 3GPP 36.101에 정의된 구성된 UE 전송 전력입니다. 테이블
6.2.2-1 서빙 셀 c에 대한 서브프레임 i에서 {P}_{CMAX,c}(i)는 선형 값
P_{CMAX,c}(i)입니다. P_{CMAX,c}(i)의 기본값은 23dBm입니다.
· M_{PUSCH,c}(i)는 다음과 같이 표현되는 PUSCH 자원 할당의 대역폭이다.
서브프레임 i와 서빙 셀 c에 유효한 자원 블록의 수.
· P_{O_PUSCH,c}(j)는 성분의 합으로 구성된 매개변수이다.
P_{O_NOMINAL_PUSCH,c}(j) j={0,1} 및 구성 요소에 대해 상위 계층에서 제공됨
서빙 셀 c에 대해 j={0,1}에 대해 상위 계층에 의해 제공되는 P_{O_UE_PUSCH,c}(j).
이 두 구성 요소를 전달하려면 SIB2 메시지를 확장해야 하지만 현재는
속성 시스템을 통해 설정할 수 있습니다.
Config::SetDefault("ns3::LteUePowerControl::PoNominalPusch", IntegerValue (-90));
Config::SetDefault ("ns3::LteUePowerControl::PoUePusch", IntegerValue (7));
· lpha_{c} (j)는 ightinForelj=3에 대해 상위 계층에서 제공하는 2비트 매개변수입니다.
j=0,1의 경우 t 0, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1의 lpha_c
lpha_{c} (j) = 1. 이 매개변수는 속성 시스템으로 구성 가능합니다.
Config::SetDefault("ns3::LteUePowerControl::Alpha", DoubleValue (0.8));
· PL_{c}는 서빙 셀 c에 대해 UE에서 계산된 하향링크 경로 손실 추정치이다.
dB 단위 및 PL_{c} = referenceSignalPower – 상위 계층 필터링된 RSRP, 여기서
referenceSignalPower는 상위 계층과 RSRP에서 제공됩니다. 참조신호전력
SIB2 메시지로 제공됩니다.
· 조건이 있는 경우가 구현됩니다.
· f_{c}(i)는 폐쇄 루프 전력 제어의 구성 요소입니다. 현재 PUSCH 전력입니다
서빙 셀에 대한 제어 조정 상태 c.
누적 모드가 활성화된 경우 f_{c}(i)는 다음과 같이 제공됩니다.
여기서: elta_{PUSCH,c}는 수정 값이며 TPC 명령이라고도 합니다.
DCI와 함께 PDCCH에 포함되며; elta_{PUSCH,c}(i - K_{PUSCH})가 신호를 받았습니다.
서브프레임(i - K_{PUSCH})에서 셀 c를 서빙하기 위한 DCI를 포함하는 PDCCH/EPDCCH; K_{PUSCH} =
FDD의 경우 4입니다.
UE가 서빙 셀 c에 대해 P_{CMAX,c}(i)에 도달한 경우,
서빙 셀 c는 누적되지 않습니다. UE가 최소 전력에 도달한 경우 음수
TPC 명령은 누적되지 않습니다. 최소 UE 전력은 TS36.101에 정의되어 있습니다.
섹션 6.2.3. 기본값은 -40dBm입니다.
누적 모드가 활성화되지 않은 경우 f_{c}(i)는 다음과 같이 제공됩니다.
여기서: elta_{PUSCH,c}는 수정 값이며 TPC 명령이라고도 합니다.
DCI와 함께 PDCCH에 포함되며; elta_{PUSCH,c}(i - K_{PUSCH})가 신호를 받았습니다.
서브프레임(i - K_{PUSCH})에서 셀 c를 서빙하기 위한 DCI를 포함하는 PDCCH/EPDCCH; K_{PUSCH} =
FDD의 경우 4입니다.
DCI 형식 0/3/4의 TPC 명령 필드를 절대 및 누적으로 매핑
elta_{PUSCH,c} 값은 TS36.231 섹션 5.1.1.1 표 5.1.1.1-2에 정의되어 있습니다.
업 링크 출력 Control for 뿌찌
모든 업링크 제어 메시지는 이상적인 메시지이며 무선을 소비하지 않기 때문에
PUCCH에 대한 업링크 전력 제어는 필요하지 않으며 구현되지 않습니다.
업 링크 출력 Control for SRS
에 대한 서브프레임 i에서 전송되는 SRS에 대한 UE 전송 전력 P_{SRS}의 설정
서빙 셀 c는 다음과 같이 정의됩니다.
여기서
· P_{CMAX,c}(i)는 3GPP 36.101에 정의된 구성된 UE 전송 전력입니다. 테이블
6.2.2-1. P_{CMAX,c}(i)의 기본값은 23dBm입니다.
· P_{SRS_OFFSET,c}(m)은 m=0,1에 대해 상위 계층에 의해 반정적으로 구성됩니다.
서빙 셀 c. 트리거 유형이 0인 SRS 전송의 경우 m=0,1이고 SRS의 경우
트리거 유형이 1인 경우 전송은 m=1입니다. K_{s} = 0인 경우 P_Srs_Offset_Value는
방정식으로 계산:
이 매개변수는 속성 시스템으로 구성할 수 있습니다.
Config::SetDefault("ns3::LteUePowerControl::PsrsOffset", IntegerValue (7));
· M_{SRS,c}는 서빙 셀에 대한 서브프레임 i에서 SRS 전송의 대역폭
c는 자원 블록의 수로 표현됩니다. 현재 구현에서는 SRS가 전송됩니다.
전체 UL 대역폭에 걸쳐.
· f_{c}(i)는 서빙 셀 c에 대한 현재 PUSCH 전력 제어 조정 상태이고,
에 정의 된대로 업 링크 출력 Control for 푸쉬
· P_{O_PUSCH,c}(j) 및 lpha_{c}(j)는 다음에 정의된 매개변수입니다. 업 링크 출력
Control for 푸쉬, 여기서 j = 1 입니다.
분수의 진동수 재사용
살펴보기
이 섹션에서는 부분 주파수 재사용 알고리즘에 대한 ns-3 지원에 대해 설명합니다. 모두
구현된 알고리즘은 [ASHamza2013]에 설명되어 있습니다. 현재 7개의 FR 알고리즘이 있습니다.
구현:
· ns3::LteFrNoOp 알고리즘
· ns3::LteFrHard알고리즘
· ns3::LteFrStrict알고리즘
· ns3::LteFrSoft알고리즘
· ns3::LteFfrSoft알고리즘
· ns3::LteFfr향상된 알고리즘
· ns3::LteFfrDistributed알고리즘
새로운 LteFfrAlgorithm 클래스가 생성되었으며 이는 주파수 재사용을 위한 추상 클래스입니다.
알고리즘 구현. 또한 FR-Scheduler와 FR-RRC 사이에 두 개의 새로운 SAP가 추가되었습니다.
[이미지] FR 알고리즘을 사용한 Scheduling의 시퀀스 다이어그램.UNINDENT
그림 순서 도표 of 예약 과 FR 연산 의 시퀀스 다이어그램을 보여줍니다.
FR 알고리즘을 이용한 스케줄링 프로세스. 스케줄링 프로세스 초기에는 스케줄러
FR 기관에 사용 가능한 RBG를 요청합니다. 구현에 따르면 FR은 모든 RBG를 반환합니다.
셀에서 사용 가능하거나 정책에 따라 필터링됩니다. 그런 다음 일부를 할당하려고 할 때
RBG to UE, 스케줄러는 이 RBG가 이 UE에 허용되는지 FR 엔터티에 묻습니다. FR이 돌아올 때
true, 스케줄러는 이 RBG를 이 UE에 할당할 수 있습니다. 그렇지 않은 경우 스케줄러는 다른 RBG를 확인하고 있습니다.
이 UE의 경우. 다시 말하지만, FR 응답은 UE에 적용되는 구현 및 정책에 따라 달라집니다.
지원 FR 알고리즘
아니 진동수 재사용
NoOp FR 알고리즘(LteFrNoOpAlgorithm 클래스)은 전체 주파수 재사용을 구현합니다.
이는 동일한 네트워크의 eNB 간에 주파수 분할이 수행되지 않음을 의미합니다.
(주파수 재사용 계수, FRF는 1입니다). eNB는 전체 시스템 대역폭을 사용하여 전송합니다.
모든 RBG에 걸쳐 균일한 전력을 제공합니다. 가장 간단한 방식이자 가장 기본적인 방식이다.
LTE망을 운영하고 있습니다. 이 방식을 사용하면 높은 피크 데이터 속도를 달성할 수 있습니다. 하지만
반면에, 이웃 셀로부터의 심한 간섭 수준으로 인해 셀 경계
사용자 성능이 크게 제한됩니다.
그림 가득 찬 진동수 재사용 계획 아래는 Full에 대한 주파수 및 전원 계획을 나타냅니다.
주파수 재사용 방식.
[이미지] 전체 주파수 재사용 방식.UNINDENT
ns-3에서 NoOp FR 알고리즘은 스케줄러가 항상 전체 대역폭을 사용하도록 허용하고
모든 UE는 임의의 RBG를 사용합니다. 단순히 새로운 기능은 없습니다. 즉, eNB를 제한하지 않습니다.
대역폭, FR 알고리즘이 비활성화됨) FrAlgorithm의 가장 간단한 구현입니다.
클래스이며 기본적으로 eNb에 설치됩니다.
하드 진동수 재사용
Hard Frequency Reuse 알고리즘은 다음을 줄일 수 있는 가장 간단한 방식을 제공합니다.
셀 간 간섭 수준. 이 방식에서 전체 주파수 대역폭은 다음과 같이 나뉩니다.
연결되지 않은 하위 대역은 거의 없습니다(일반적으로 3, 4 또는 7개). 인접한 eNB는 서로 다른 값으로 할당됩니다.
서브밴드. 주파수 재사용 계수는 하위 대역의 수와 같습니다. 이 계획은 다음을 허용합니다.
셀 가장자리에서 ICI를 크게 줄여 셀 사용자의 성능이 향상됩니다.
그러나 각 eNB는 전체 대역폭의 일부만 사용한다는 사실로 인해 최대 데이터 속도
레벨도 재사용 계수와 동일한 계수만큼 감소합니다.
그림 하드 진동수 재사용 계획 아래는 하드에 대한 주파수 및 전원 계획을 나타냅니다.
주파수 재사용 방식.
[이미지] 하드 주파수 재사용 방식.UNINDENT
우리 구현에서 Hard FR 알고리즘에는 eNB에 사용할 수 있는 RBG 벡터만 있습니다.
스케줄링 기능 중에 이를 MAC 스케줄러에 전달합니다. 스케줄러가 물을 때 RBG가
특정 UE에 허용되면 항상 true를 반환합니다.
엄격한 진동수 재사용
엄격한 주파수 재사용 방식은 전체 주파수 재사용 방식과 하드 주파수 재사용 방식을 결합한 것입니다. 그것
시스템 대역폭을 서로 다른 두 부분으로 나누는 것으로 구성됩니다.
주파수 재사용. 시스템 대역폭의 하나의 공통 하위 대역이 각 셀 내부에서 사용됩니다.
(주파수 재사용-1), 대역폭의 다른 부분은
하드 주파수 재사용(주파수 재사용-N, N>1)과 마찬가지로 이웃 eNB들에게
각 섹터에서 낮은 셀 간 간섭 수준을 갖는 하나의 하위 대역. 중앙 UE는
완전히 재사용된 주파수 청크가 부여되고 셀 에지 UE에는 직교 청크가 부여됩니다.
이는 한 셀의 내부 UE가 다른 셀의 가장자리 UE와 스펙트럼을 공유하지 않음을 의미합니다.
두 번째 셀은 두 셀 모두에 대한 간섭을 줄입니다. 알 수 있듯이 Strict FR에는
총 N+1개의 sub-band로 이루어져 있으며, 1과 3 사이의 중간에서 RFR을 달성할 수 있게 해줍니다.
그림 엄격한 진동수 재사용 계획 아래는 Strict에 대한 주파수 및 전원 계획을 나타냅니다.
셀 에지 재사용 계수 N = 3을 사용하는 주파수 재사용 방식.
[이미지] 엄격한 주파수 재사용 방식.UNINDENT
우리의 구현에서 Strict FR 알고리즘에는 각 하위 대역에 대해 하나씩 두 개의 맵이 있습니다. UE의 경우
개인 하위 대역 내에서 서비스될 수 있는 경우 해당 RNTI가 m_privateSubBandUe 맵에 추가됩니다. 만약에
UE는 공통 하위 대역 내에서 서비스를 받을 수 있으며, UE의 RNTI는 m_commonSubBandUe 맵에 추가됩니다.
엄격한 FR 알고리즘은 UE가 어떤 부대역 내에서 서비스를 받아야 하는지 결정해야 합니다. 그것은 사용한다
RRB에서 제공하는 UE 측정값을 신호 품질 임계값과 비교합니다(이것은
매개변수는 속성 메커니즘을 통해 쉽게 조정할 수 있습니다. 임계값은 다음에 영향을 미칩니다.
내부 대 셀 반경 비율.
부드러움 진동수 재사용
SFR(Soft Frequency Reuse) 방식에서 각 eNb는 전체 시스템 대역폭을 통해 전송하며,
그러나 UE 내에는 두 개의 하위 대역이 있으며 서로 다른 전력 레벨로 서비스를 제공합니다. 부터
셀 중심 UE는 인접 셀과 대역폭을 공유하며 일반적으로 더 낮은 속도로 전송합니다.
셀 에지 UE보다 전력 수준이 높습니다. SFR은 Strict FR보다 대역폭 효율성이 더 높습니다.
전체 시스템 대역폭을 사용하지만 두 시스템 모두에 더 많은 간섭을 초래하기 때문입니다.
셀 내부 및 엣지 사용자.
SFR 체계에는 두 가지 가능한 버전이 있습니다.
· 첫 번째 버전에서는 cell-edge UE 전용 부대역을 다음과 같이 사용할 수도 있습니다.
셀 중심 UE이지만 전력 레벨이 감소하고 UE가 점유하지 않는 경우에만
셀 에지 UE. 셀-중심 부분대역은 중앙 UE들에게만 제공된다. 수치
부드러움 진동수 재사용 계획 버전 1 아래에는 주파수 및 전력 계획이 나와 있습니다.
이 버전의 Soft Frequency Reuse 방식입니다.
[이미지] 소프트 주파수 재사용 방식 버전 1.UNINDENT
· 두 번째 버전에서는 셀 중심 UE가 셀 가장자리 하위 대역에 액세스할 수 없습니다. ~ 안에
이러한 방식으로 각 셀은 전체 시스템 대역폭을 사용하면서 대역폭을 줄일 수 있습니다.
이웃 셀에 대한 간섭. 반면에 ICI 수준은 더 낮습니다.
셀 에지는 더 낮은 스펙트럼 활용도를 희생하여 달성됩니다. 수치 부드러움
진동수 재사용 계획 버전 2 아래에는 이에 대한 주파수 및 전력 계획이 나와 있습니다.
Soft Frequency Reuse 방식의 버전입니다.
[이미지] 소프트 주파수 재사용 방식 버전 2.UNINDENT
SFR 알고리즘은 두 개의 맵을 유지합니다. UE가 더 낮은 전력 레벨로 서비스를 받아야 하는 경우,
RNTI가 m_lowPowerSubBandUe 맵에 추가되었습니다. UE에 더 높은 전력이 제공되어야 하는 경우
레벨이면 해당 RNTI가 m_highPowerSubBandUe 맵에 추가됩니다. 어떤 전력 수준으로 결정하려면
UE는 UE 측정을 활용하여 SFR 알고리즘을 제공받아야 하며 이를 다음과 비교해야 합니다.
한계점. 내부에 대한 신호 품질 임계값 및 PdschConfigDedicated(즉, P_A 값)
외곽 지역은 속성 시스템으로 구성할 수 있습니다. SFR은 다운링크 전력을 활용합니다.
제어는 여기에 설명되어 있습니다.
부드러움 분수의 진동수 재사용
SFFR(Soft Fractional Frequency Reuse)은 Strict 주파수와 Soft 주파수를 결합한 것입니다.
계획을 재사용하십시오. Strict FR은 외부 지역에 할당된 부대역을 사용하지 않습니다.
인접 셀의 경우, 소프트 FFR은 전송 전력이 낮은 내부 UE를 위해 이러한 서브밴드를 사용합니다. 처럼
결과적으로 SFFR은 SFR과 마찬가지로 전송 전력 레벨이 높고 전송 전력 레벨이 낮은 서브밴드를 사용합니다.
전송 전력 레벨. Soft FR 및 Strict FR과 달리 Soft FFR은 공통을 사용합니다.
내부 사용자의 처리량을 향상시킬 수 있는 하위 대역.
그림 부드러움 분수의 분수의 진동수 재사용 계획 아래는 빈도와
소프트 분수 주파수 재사용을 위한 전원 계획입니다.
[이미지] 소프트 분수 분수 주파수 재사용 방식.UNINDENT
강화 분수의 진동수 재사용
[ZXie2009]에 설명된 EFFR(Enhanced Fractional Frequency Reuse)은 3가지 셀 유형을 정의합니다.
셀룰러 시스템에서 직접적으로 인접한 셀에 대해 각 셀 유형에 대해 예약되어 있습니다.
명명된 전체 주파수 대역의 일부 기본 구획, 다른 유형의 셀 중에서
직교해야 합니다. 나머지 하위 채널은 중-고등부 구획. 그만큼
기본 구획 세포 유형의 일부는 동시에 중-고등부 세그먼트
다른 두 가지 세포 유형에 속합니다. 각 셀은 해당 셀의 모든 하위 채널을 차지할 수 있습니다. 기본
구획 마음대로 할 수 있지만 하위 채널의 일부만 중-고등부 구획 사용할 수 있습니다
간섭 인식 방식으로 이 셀에 의해 수행됩니다. 기본 구획 각 셀이 나누어져 있습니다.
재사용-3 부분과 재사용-1 부분으로 나뉩니다. Reuse-1 부분은 모든 유형의 셀에서 재사용될 수 있습니다.
시스템에서는 재사용-3 부분은 다른 동일한 유형에서만 독점적으로 재사용할 수 있습니다.
셀(즉, 재사용-3 서브채널은 직접 이웃 셀에서 재사용될 수 없습니다). ~에
전에, 중-고등부 구획 셀은 게스트 역할을 하며 보조 하위 채널을 점유하는 것은
실제로 바로 이웃하는 셀에 속하는 기본 하위 채널을 재사용하므로
재사용 중-고등부 구획 각 셀은 다음 두 가지 규칙을 따라야 합니다.
· 사용 전 모니터링
· SINR 추정 기반 자원 재사용
각 셀은 항상 모든 보조 하위 채널을 수신합니다. 그리고 점령하기 전에는
수집된 채널 품질 정보(CQI)에 따라 SINR 평가를 수행하고
재사용을 위해 가장 좋은 추정값을 가진 자원을 선택합니다. RBG에 대한 CQI 값이 위인 경우
일부 사용자에 대해 구성된 임계값, 이 사용자에 대한 전송은 이를 사용하여 수행될 수 있습니다.
RBG.
[ZXie2009]에서는 스케줄링 프로세스를 설명하는데, 이는 세 단계와 두 단계로 구성됩니다.
일정 정책. 현재 구현된 스케줄러 중 어느 것도 이를 허용하지 않기 때문에
동작, 일부 단순화가 적용되었습니다. 구현 시 재사용-1 하위 채널은 다음과 같습니다.
셀 센터 사용자만 사용할 수 있습니다. Reuse-3 하위 채널은 엣지 사용자만 사용할 수 있으며
Edge 사용자가 없는 경우 Cell Center 사용자를 위한 전송은 Reuse-3에서 서비스될 수 있음
하위 채널.
그림 강화 분수의 분수의 진동수 재사용 계획 아래는 빈도와
향상된 분수 주파수 재사용을 위한 전원 계획.
[이미지] 향상된 분수 분수 주파수 재사용 체계.UNINDENT
분산 분수의 진동수 재사용
이 분산 분수 주파수 재사용 알고리즘은 [DKimura2012]에 제시되었습니다. 그것
사용자 분포에 초점을 맞춰 셀 경계 하위 대역을 자동으로 최적화합니다.
특히, 수신 전력 분배). 이 알고리즘은 다음에 대한 RB를 적응적으로 선택합니다.
인접 셀로부터의 조정 정보를 기반으로 셀-에지 서브밴드를 구성하고 이를 통보
에지 하위 대역에서 사용하기 위해 선택한 RB인 인접 셀의 기지국.
각 셀의 기지국은 수신한 정보와 다음의 수식을 이용하여
각 RB에 대해 셀-에지-대역 메트릭 A_{k}를 계산합니다.
여기서 J는 이웃 셀의 집합이고, X_{j,k}=0,1은 j번째 이웃 셀의 RNTP입니다.
j번째 이웃 셀의 k번째 RB가 셀-에지(cell-edge)로 사용될 때 1의 값을 취한다.
부분대역은 0이고 그렇지 않으면 XNUMX입니다. w_{j}는 인접한 셀 j에 대한 가중치를 나타내고,
즉, 신호의 힘 사이의 차이가 발생하는 사용자 수입니다.
서빙 셀 i로부터 수신한 신호와 인접 셀 i로부터 수신한 신호의 전력
셀 j가 임계값(즉, 셀 가장자리 근처의 사용자 수)보다 작습니다.
서비스 셀). 큰 수신 전력 차이는 i번째 셀 에지 사용자가
셀은 j번째 셀로부터 강한 간섭을 받습니다.
메트릭 A_{k}가 가장 작은 RB는 다음의 영향을 가장 적게 받는 것으로 간주됩니다.
다른 셀의 간섭. 서빙 셀은 구성된 수의 RB를 다음과 같이 선택합니다.
A_{k}의 오름차순으로 된 셀-에지 서브밴드. 결과적으로 작은 RB
셀 경계 사용자의 수는 인접한 기지국으로부터 높은 간섭을 받습니다.
선택된.
그러면 업데이트된 RNTP가 모든 이웃 셀로 전송됩니다. 무의미한 일을 피하기 위해
셀 경계 대역 선택의 진동, 기지국은 다른 기지국의 RNTP를 무시합니다.
기지국보다 더 큰 셀 ID를 갖는 기지국.
모든 셀에 걸쳐 이 프로세스를 반복하면 셀 가장자리 영역에 RB를 할당할 수 있습니다.
시스템 전반에 걸쳐 최적화되고 사용자 분포 변화에 따라 조정됩니다.
그림 순서 도표 of 분산 진동수 재사용 계획 아래는 순서를 제시합니다
분산 분수 주파수 재사용 방식의 다이어그램.
[이미지] 분산 주파수 재사용 방식의 시퀀스 다이어그램.UNINDENT
도우미
시뮬레이션을 설정하고 다양한 구성 요소를 구성하는 데 두 개의 도우미 개체가 사용됩니다.
이러한 개체는 다음과 같습니다.
· LteHelper는 LTE 무선 액세스 네트워크의 구성을 다음과 같이 처리합니다.
EPS Bearer의 설정 및 릴리스를 조정하는 것입니다. 그만큼 LteHelper 수업
API 정의와 구현을 모두 제공합니다.
· EpcHelper, Evolved Packet Core의 구성을 관리합니다. 그만큼
EpcHelper 클래스는 API 정의만 제공하는 추상 기본 클래스입니다. 그만큼
구현은 다른 EPC를 허용하기 위해 하위 클래스에 위임됩니다.
네트워크 모델.
다음을 사용하여 간단한 LTE 전용 시뮬레이션을 생성할 수 있습니다. LteHelper 혼자 또는
두 가지를 모두 사용하여 완전한 LTE-EPC 시뮬레이션 생성 LteHelper and EpcHelper. 둘 다일 때
도우미가 사용되면 마스터-슬레이브 방식으로 상호 작용합니다. LteHelper 마스터가 되는 것
사용자 프로그램과 직접 상호작용하는 EpcHelper "내부적으로" 작업하기
호출된 명시적 메서드에 따라 EPC를 구성합니다. LteHelper. 정확한 상호작용은
그림에 표시된 순서 도표 of 전에, 상호 작용 사이에 LteHelper and
EpcHelper.
[이미지] LteHelper와 EpcHelper.UNINDENT 간의 상호 작용 시퀀스 다이어그램
사용자 문서
배경
우리는 독자가 ns-3 시뮬레이터를 사용하여 일반 명령을 실행하는 방법에 이미 익숙하다고 가정합니다.
시뮬레이션 프로그램. 그렇지 않은 경우 독자가 상담해 볼 것을 강력히 권장합니다.
[ns3튜토리얼].
용법 살펴보기
ns-3 LTE 모델은 LTE 네트워크를 시뮬레이션할 수 있는 소프트웨어 라이브러리로,
선택적으로 EPC(Evolved Packet Core)를 포함합니다. 그러한 수행 과정은
시뮬레이션에는 일반적으로 다음 단계가 포함됩니다.
1. 밝히다 전에, 대본 시뮬레이션할
2. 쓰다 a 시뮬레이션 프로그램 원하는 시나리오를 재현하는 것
토폴로지/아키텍처. 이는 다음을 사용하여 ns-3 LTE 모델 라이브러리에 액세스하여 수행됩니다.
ns3::LteHelper API 정의 src/lte/helper/lte-helper.h.
3. 지정 구성 매개 변수 작업에 사용되는 개체 중
시뮬레이션. 이는 입력 파일을 사용하여 수행할 수 있습니다( ns3::구성스토어) 또는
시뮬레이션 프로그램 내에서 직접.
4. 구성 전에, 원하는 출력 시뮬레이터로 제작
5. 달리기 시뮬레이션.
이러한 모든 측면은 다음 섹션에서 실제적인 방법으로 설명됩니다.
예.
Basic 시뮬레이션 프로그램
LTE 전용 시뮬레이션을 하기 위해 필요한 최소한의 시뮬레이션 프로그램은 다음과 같습니다.
(EPC 없이).
1. 초기 상용구:
#include
#include
#include
#include
네임스페이스 ns3 사용;
int main (int argc, char *argv[])
{
// 시뮬레이션 프로그램의 나머지 부분은 다음과 같습니다.
2. 만들기 LteHelper 목적:
Ptr lteHelper = CreateObject ();
이는 몇 가지 공통 객체(예: Channel 객체)를 인스턴스화하고 다음을 제공합니다.
eNB와 UE를 추가하고 구성하는 방법.
3. 몹시 떠들어 대다 노드 eNB(들) 및 UE에 대한 객체:
NodeContainer enbNodes;
enbNodes.Create(1);
NodeContainer ueNodes;
ueNodes.Create(2);
이 시점에서 위의 노드 인스턴스에는 아직 LTE 프로토콜이 없습니다.
스택 설치; 그들은 단지 빈 노드일 뿐입니다.
4. 모든 노드에 대한 이동성 모델을 구성합니다.
이동성도우미 이동성;
mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
이동성.설치(enbNodes);
mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
이동성.설치(ueNodes);
위의 명령은 모든 노드를 좌표 (0,0,0)에 배치합니다. 다음을 참조하세요.
자신의 위치를 설정하거나 구성하는 방법에 대한 ns-3 이동성 모델 문서
노드 이동.
5. eNB에 LTE 프로토콜 스택을 설치합니다.
NetDeviceContainer enbDevs;
enbDevs = lteHelper->InstallEnbDevice(enbNodes);
6. UE에 LTE 프로토콜 스택을 설치합니다.
NetDeviceContainer ueDevs;
ueDevs = lteHelper->InstallUeDevice(ueNodes);
7. UE를 eNB에 연결합니다. 이는 eNB에 따라 각 UE를 구성합니다.
구성하고 이들 사이에 RRC 연결을 생성합니다.
lteHelper->Attach(ueDevs, enbDevs.Get(0));
8. 각 UE와 UE가 연결된 eNB 사이에서 데이터 무선 베어러를 활성화합니다.
열거형 EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
EpsBearer 베어러(q);
lteHelper->ActivateDataRadioBearer(ueDevs, 전달자);
이 방법은 또한 해당 베어러에 대해 두 개의 포화 트래픽 생성기를 활성화합니다.
업링크에 하나, 다운링크에 하나.
9. 정지 시간을 설정합니다:
시뮬레이터::정지(초(0.005));
그렇지 않으면 시뮬레이션이 영원히 지속됩니다. 왜냐하면 (다른 것 중에서)
서브프레임 시작 이벤트는 반복적으로 예약되며 ns-3 시뮬레이터 스케줄러는
따라서 이벤트가 부족하지 않습니다.
10. 시뮬레이션을 실행합니다.
시뮬레이터::실행();
11. 정리 및 종료:
시뮬레이터::파괴();
0가 돌아;
}
시뮬레이션 프로그램을 컴파일하고 실행하는 방법은 [ns3tutorial]을 참고하세요.
구성 of LTE 모델 매개 변수
관련된 모든 LTE 모델 매개변수는 ns-3 속성 시스템을 통해 관리됩니다.
모든 기능에 대한 자세한 내용은 [ns3tutorial] 및 [ns3manual]을 참조하세요.
이를 수행할 수 있는 가능한 방법(환경 변수, C++ API, GtkConfigStore...).
다음에서는 입력 파일을 함께 사용하여 수행하는 방법을 간략하게 요약합니다.
ns-3 구성 저장소. 우선, 시뮬레이션에 다음을 입력해야 합니다.
프로그램, 직후 본관 () 시작:
커맨드라인 cmd;
cmd.Parse(argc, argv);
ConfigStore inputConfig;
inputConfig.ConfigureDefaults();
// 명령줄에서 기본값을 무시할 수 있도록 다시 구문 분석합니다.
cmd.Parse(argc, argv);
위의 작업이 작동하려면 다음 사항도 확인하세요. #포함 "ns3/config-store.h". 이제
(예를 들어) 이름의 텍스트 파일 입력-기본값.txt 새 기본값을 지정하면
일부 속성에 사용하고 싶습니다.
기본 ns3::LteHelper::Scheduler "ns3::PfFfMacScheduler"
기본 ns3::LteHelper::PathlossModel "ns3::FriisSpectrumPropagationLossModel"
기본 ns3::LteEnbNetDevice::UlBandwidth "25"
기본 ns3::LteEnbNetDevice::DlBandwidth "25"
기본 ns3::LteEnbNetDevice::DlEarfcn "100"
기본 ns3::LteEnbNetDevice::UlEarfcn "18100"
기본 ns3::LteUePhy::TxPower "10"
기본 ns3::LteUePhy::NoiseFigure "9"
기본 ns3::LteEnbPhy::TxPower "30"
기본 ns3::LteEnbPhy::NoiseFigure "5"
시뮬레이션 프로그램이 호출되었다고 가정합니다. src/lte/examples/lte-sim-with-input당신은 할 수 있습니다
이제 다음과 같은 방법으로 이러한 설정을 시뮬레이션 프로그램에 전달합니다.
./waf --command-template="%s --ns3::ConfigStore::Filename=input-defaults.txt --ns3::ConfigStore::Mode=Load --ns3::ConfigStore::FileFormat=RawText" --src/lte/examples/lte-sim-with-input 실행
또한 다음 명령을 사용하여 템플릿 입력 파일을 생성할 수 있습니다.
./waf --command-template="%s --ns3::ConfigStore::Filename=input-defaults.txt --ns3::ConfigStore::Mode=저장 --ns3::ConfigStore::FileFormat=RawText" --src/lte/examples/lte-sim-with-input 실행
위의 내용이 파일에 저장됩니다. 입력-기본값.txt 모든 기본값은
많은 비 LTE를 포함하여 시뮬레이터의 특정 빌드에 등록되어 있습니다.
속성.
구성 LTE 맥 스케줄러
여기에서 사용자가 선택할 수 있는 LTE MAC 스케줄러 유형은 여러 가지가 있습니다. 사용자는 다음을 사용할 수 있습니다
스케줄러 유형을 정의하는 코드:
Ptr lteHelper = CreateObject ();
lteHelper->SetSchedulerType("ns3::FdMtFfMacScheduler"); // FD-MT 스케줄러
lteHelper->SetSchedulerType("ns3::TdMtFfMacScheduler"); // TD-MT 스케줄러
lteHelper->SetSchedulerType("ns3::TtaFfMacScheduler"); // TTA 스케줄러
lteHelper->SetSchedulerType("ns3::FdBetFfMacScheduler"); // FD-BET 스케줄러
lteHelper->SetSchedulerType("ns3::TdBetFfMacScheduler"); // TD-BET 스케줄러
lteHelper->SetSchedulerType("ns3::FdTbfqFfMacScheduler"); // FD-TBFQ 스케줄러
lteHelper->SetSchedulerType("ns3::TdTbfqFfMacScheduler"); // TD-TBFQ 스케줄러
lteHelper->SetSchedulerType("ns3::PssFfMacScheduler"); //PSS 스케줄러
TBFQ와 PSS는 다른 스케줄러보다 더 많은 매개변수를 가지고 있습니다. 사용자는 해당 매개변수를 정의할 수 있습니다.
다음과 같은 방법으로:
* TBFQ 스케줄러::
Ptr lteHelper = CreateObject ();
lteHelper->SetSchedulerAttribute("DebtLimit", IntegerValue(yourvalue)); // 기본값 -625000바이트(-5Mb)
lteHelper->SetSchedulerAttribute("CreditLimit", UintegerValue(yourvalue)); // 기본값 625000바이트(5Mb)
lteHelper->SetSchedulerAttribute("TokenPoolSize", UintegerValue(yourvalue)); // 기본값 1바이트
lteHelper->SetSchedulerAttribute("CreditableThreshold", UintegerValue(yourvalue)); // 기본값 0
* PSS 스케줄러::
Ptr lteHelper = CreateObject ();
lteHelper->SetSchedulerAttribute("nMux", UIntegerValue(yourvalue)); // TD 스케줄러가 선택한 최대 UE 수
lteHelper->SetSchedulerAttribute("PssFdSchedulerType", StringValue("CoItA")); // PSS의 PF 스케줄러 유형
TBFQ에서는 부채 한도 및 신용 한도의 기본값이 -5Mb 및 5Mb로 설정됩니다.
각각 종이[FABokhari2009]를 기반으로 합니다. 현재 구현에서는 고려하지 않습니다.
신용 임계값(C = 0). PSS에서 사용자가 nMux를 정의하지 않으면 PSS는 이 값을 다음으로 설정합니다.
전체 UE의 절반. 기본 FD 스케줄러는 PFsch입니다.
또한 TBFQ의 토큰 생성 속도와 PSS의 목표 비트 전송률은 다음과 같아야 합니다.
EPC 베어러 QoS에서 GBR(보증 비트 전송률) 또는 MBR(최대 비트 전송률)로 구성됨
매개변수. 사용자는 다음 코드를 사용하여 다운링크 및 다운링크 모두에서 GBR 및 MBR을 정의할 수 있습니다.
업링크:
Ptr lteHelper = CreateObject ();
enum EpsBearer::Qci q = EpsBearer::yourvalue; // Qci 유형 정의
GbrQos정보 qos;
qos.gbrDl = 귀하의 가치; // 다운링크 GBR
qos.gbrUl = 귀하의 가치; // 업링크 GBR
qos.mbrDl = 귀하의 가치; // 다운링크 MBR
qos.mbrUl = 귀하의 가치; // 업링크 MBR
EpsBearer 베어러(q, qos);
lteHelper->ActivateDedicatedEpsBearer(ueDevs, bearer, EpcTft::Default());
PSS에서 TBR은 베어러 수준 QoS 매개변수의 GBR에서 얻습니다. TBFQ에서는 토큰 생성
속도는 베어러 수준 QoS 매개변수의 MBR 설정에서 얻어집니다.
일관되게 구성해야 합니다. CBR(Constant Bit Rate) 트래픽의 경우 권장됩니다.
MBR을 GBR로 설정합니다. VBR(변동 비트 전송률) 트래픽의 경우 MBR을 k번 설정하는 것이 좋습니다.
피크 트래픽 속도를 커버하기 위해 GBR보다 큽니다. 현재 구현에서 k는
종이[FABokhari2009]를 기준으로 XNUMX개로 설정. 또한 현재 버전의 TBFQ는
MBR 및 GBR의 RLC 헤더와 PDCP 헤더 길이를 고려하십시오. TBFQ의 또 다른 매개변수는 다음과 같습니다.
패킷 도착 속도. 이 매개변수는 스케줄러 내에서 계산되며 과거와 동일합니다.
PF 스케줄러에서 사용되는 평균 처리량입니다.
LTE-EPC 모델의 많은 유용한 속성은 다음에서 설명됩니다.
하위 섹션. 그럼에도 불구하고, 본문에는 명시적으로 언급되지 않은 많은 속성이 있습니다.
디자인 또는 사용자 문서(ns-3 속성을 사용하여 명확하게 문서화됨)
체계. 주어진 객체의 속성 목록을 다음과 함께 쉽게 인쇄할 수 있습니다.
설명 및 기본값 전달 --인쇄속성= 시뮬레이션 프로그램으로,
이렇게 :
./waf --run lena-simple --command-template="%s --PrintAttributes=ns3::LteHelper"
다음과 같이 다른 LTE 및 EPC 개체를 사용해 볼 수도 있습니다.
./waf --run lena-simple --command-template="%s --PrintAttributes=ns3::LteEnbNetDevice"
./waf --run lena-simple --command-template="%s --PrintAttributes=ns3::LteEnbMac"
./waf --run lena-simple --command-template="%s --PrintAttributes=ns3::LteEnbPhy"
./waf --run lena-simple --command-template="%s --PrintAttributes=ns3::LteUePhy"
./waf --run lena-simple --command-template="%s --PrintAttributes=ns3::PointToPointEpcHelper"
시뮬레이션 산출
ns-3 LTE 모델은 현재 PHY, MAC, RLC 및 PDCP 수준의 파일로 출력을 지원합니다.
핵심성과지표(KPI). 다음과 같은 방법으로 활성화할 수 있습니다.
Ptr lteHelper = CreateObject ();
// 여기에서 모든 시뮬레이션 시나리오를 구성합니다...
lteHelper->EnablePhyTraces();
lteHelper->EnableMacTraces();
lteHelper->EnableRlcTraces();
lteHelper->EnablePdcpTraces();
시뮬레이터::실행();
RLC 및 PDCP KPI는 시간 간격에 따라 계산되어 ASCII 파일에 저장됩니다.
RLC KPI와 PDCP KPI용 2개(각 경우 업링크용 1개, 다운링크용 1개) 시간
간격 기간은 속성을 사용하여 제어할 수 있습니다.
ns3::RadioBearerStatsCalculator::EpochDuration.
RLC KPI 파일의 열은 다음과 같습니다(업링크 및 다운링크에 대해 동일).
1. 시뮬레이션 시작 이후 측정 간격의 시작 시간(초)
2. 시뮬레이션 시작 이후 측정 간격의 종료 시간(초)
3. 셀 ID
4. 고유 UE ID(IMSI)
5. 셀 특정 UE ID(RNTI)
6. 논리 채널 ID
7. 전송된 RLC PDU의 수
8. 전송된 총 바이트 수.
9. 수신된 RLC PDU의 수
10. 수신된 총 바이트 수
11. 평균 RLC PDU 지연(초)
12. RLC PDU 지연의 표준편차
13. RLC PDU 지연의 최소값
14. RLC PDU 지연의 최대값
15. 평균 RLC PDU 크기(바이트)
16. RLC PDU 크기의 표준편차
17. 최소 RLC PDU 크기
18. 최대 RLC PDU 크기
마찬가지로 PDCP KPI 파일의 열은 다음과 같습니다(업링크의 경우에도 동일함).
및 다운링크):
1. 시뮬레이션 시작 이후 측정 간격의 시작 시간(초)
2. 시뮬레이션 시작 이후 측정 간격의 종료 시간(초)
3. 셀 ID
4. 고유 UE ID(IMSI)
5. 셀 특정 UE ID(RNTI)
6. 논리 채널 ID
7. 전송된 PDCP PDU의 수
8. 전송된 총 바이트 수.
9. 수신된 PDCP PDU 수
10. 수신된 총 바이트 수
11. 평균 PDCP PDU 지연(초)
12. PDCP PDU 지연의 표준편차
13. PDCP PDU 지연의 최소값
14. PDCP PDU 지연의 최대값
15. 평균 PDCP PDU 크기(바이트)
16. PDCP PDU 크기의 표준편차
17. 최소 PDCP PDU 크기
18. 최대 PDCP PDU 크기
MAC KPI는 기본적으로 스케줄러가 보고한 리소스 할당의 추적입니다.
모든 서브프레임의 시작. ASCII 파일에 저장됩니다. 다운링크 MAC KPI의 경우
형식은 다음과 같습니다.
1. 스케줄러가 할당을 표시하는 시뮬레이션 시간(초)
2. 셀 ID
3. 고유 UE ID(IMSI)
4. 프레임 번호
5. 서브프레임 번호
6. 셀 특정 UE ID(RNTI)
7. 결핵 1의 MCS
8. TB 1의 크기
9. TB 2의 MCS(존재하지 않는 경우 0)
10. TB 2의 크기(존재하지 않는 경우 0)
업링크 MAC KPI의 경우 형식은 다음과 같습니다.
1. 스케줄러가 할당을 표시하는 시뮬레이션 시간(초)
2. 셀 ID
3. 고유 UE ID(IMSI)
4. 프레임 번호
5. 서브프레임 번호
6. 셀 특정 UE ID(RNTI)
7. 결핵의 MCS
8. 결핵의 크기
MAC KPI 출력에 사용되는 파일 이름은 ns-3 속성을 통해 사용자 정의할 수 있습니다.
ns3::MacStatsCalculator::DlOutputFilename and ns3::MacStatsCalculator::UlOutputFilename.
PHY KPI는 속성을 통해 구성할 수 있는 7개의 파일로 배포됩니다.
1. ns3::PhyStatsCalculator::DlRsrpSinr파일 이름
2. ns3::PhyStatsCalculator::UeSinr파일 이름
3. ns3::PhyStatsCalculator::간섭파일 이름
4. ns3::PhyStatsCalculator::DlTxOutputFilename
5. ns3::PhyStatsCalculator::UlTxOutputFilename
6. ns3::PhyStatsCalculator::DlRxOutputFilename
7. ns3::PhyStatsCalculator::UlRxOutputFilename
RSRP/SINR 파일에서 다음 내용을 사용할 수 있습니다.
1. 스케줄러가 할당을 표시하는 시뮬레이션 시간(초)
2. 셀 ID
3. 고유 UE ID(IMSI)
4. RSRP
5. 선형 단위의 다운링크 SINR의 모든 RB에 대한 선형 평균
UE SINR 파일의 내용은 다음과 같습니다.
1. 스케줄러가 할당을 표시하는 시뮬레이션 시간(초)
2. 셀 ID
3. 고유 UE ID(IMSI)
4. UE에 대한 선형 단위의 업링크 SINR
간섭 파일 이름의 내용은 다음과 같습니다.
1. 스케줄러가 할당을 표시하는 시뮬레이션 시간(초)
2. 셀 ID
3. RB별 간섭 값 목록
UL 및 DL 전송 파일에 포함된 매개변수는 다음과 같습니다.
1. 시뮬레이션 시간(밀리초)
2. 셀 ID
3. 고유 UE ID(IMSI)
4. RNTI
5. 전송 계층
6. MCS
7. 결핵의 크기
8. 중복 버전
9. 새로운 데이터 표시기 플래그
마지막으로 UL 및 DL 수신 파일에 포함된 매개변수는 다음과 같습니다.
1. 시뮬레이션 시간(밀리초)
2. 셀 ID
3. 고유 UE ID(IMSI)
4. RNTI
5. 전송 모드
6. 전송 계층
7. MCS
8. 결핵의 크기
9. 중복 버전
10. 새로운 데이터 표시기 플래그
11. 결핵 접수의 정확성
페이딩 더듬다 용법
이 섹션에서는 LTE 시뮬레이션 내에서 페이딩 트레이스를 사용하는 방법을 설명합니다.
페이딩 추적 세대
와 함께 제공되는 전용 matlab 스크립트를 사용하여 페이딩 추적을 생성할 수 있습니다.
코드 (/lte/model/fading-traces/fading-trace-generator.m). 이 스크립트에는 이미 포함되어 있습니다.
세 가지 3GPP 시나리오(예: 보행자, 차량 및
[TS2]의 부록 B.36104에 정의된 도시); 그러나 사용자는 자신의
특정 구성. 구성 가능한 매개변수 목록은
다음 :
· fc : 사용 중인 주파수(도플러 속도 계산에 영향을 줍니다).
· v_km_h : 사용자의 속도
· 추적기간 : 트레이스의 총 길이(초)입니다.
· numRB : 평가할 리소스 블록의 번호입니다.
· 태그 : 생성된 파일에 적용할 태그입니다.
생성된 파일에는 행렬 방식으로 구성된 ASCII 형식의 실제 값이 포함되어 있습니다.
모든 행은 다른 RB에 해당하고 모든 열은 다른 RB에 해당합니다.
시간적 페이딩 추적 샘플.
ns-3 LTE 모듈은 페이딩 추적 파일과 함께 작동할 수 있다는 점에 유의해야 합니다.
위에서 설명한 ASCII 형식을 준수합니다. 따라서 다른 외부 도구를 사용할 수 있습니다.
예를 들어 다른 시뮬레이터와 같은 맞춤형 페이딩 추적을 생성하는 데 사용됩니다.
실험 장치.
페이딩 추적 용법
페이딩 트레이스를 사용할 때 트레이스를 올바르게 지정하는 것이 가장 중요합니다.
페이딩 모델이 이를 올바르게 로드하고 사용할 수 있도록 시뮬레이션에 매개변수를 추가합니다. 그만큼
구성할 매개변수는 다음과 같습니다.
· 추적파일 이름 : 로드할 트레이스의 이름(절대 경로 또는 상대 경로)
시뮬레이션 프로그램이 실행되는 경로를 입력하세요.)
· 추적 길이 : 추적 기간(초);
· 샘플 수 : 샘플 수;
· 창 크기 : 페이딩 샘플링 창의 크기(초)입니다.
페이딩 트레이스의 샘플링 간격이 1ms여야 한다는 점을 강조하는 것이 중요합니다.
이상이어야 하며, 후자의 경우에는 1ms의 정수배가 되어야 합니다.
페이딩 모듈에 의해 올바르게 처리됩니다.
matlab 스크립트의 기본 구성은 다음으로 구성된 10초 길이의 추적을 제공합니다.
10,000개의 샘플(즉, TTI=1ms당 1개의 샘플) 및 0.5초의 창 크기로 사용됨
진폭. 이는 위의 매개변수의 기본값이기도 합니다.
모의 실험 장치; 따라서 페이딩 추적이 이를 준수하는 경우 해당 설정을 피할 수 있습니다.
페이딩 모듈(기본적으로 활성화되지 않음)을 활성화하려면 다음 코드를 사용하세요.
시뮬레이션 프로그램에 포함되어야 합니다.
Ptr lteHelper = CreateObject ();
lteHelper->SetFadingModel("ns3::TraceFadingLossModel");
매개변수를 설정하려면 다음을 수행하세요.
lteHelper->SetFadingModelAttribute("TraceFilename", StringValue("src/lte/model/fading-traces/fading_trace_EPA_3kmph.fad"));
lteHelper->SetFadingModelAttribute("TraceLength", TimeValue(초(10.0)));
lteHelper->SetFadingModelAttribute("SamplesNum", UintegerValue (10000));
lteHelper->SetFadingModelAttribute("WindowSize", TimeValue(초(0.5)));
lteHelper->SetFadingModelAttribute("RbNum", UintegerValue (100));
주목해야 할 점은, 추적파일 이름 기본값이 없으므로 다음을 수행해야 합니다.
항상 명시적으로 설정되어야 합니다.
시뮬레이터는 기본적으로 다음과 같이 생성된 세 가지 페이딩 추적을 제공합니다.
[TS2]의 Annex B.36104에 정의된 구성입니다. 이러한 추적은 다음에서 사용할 수 있습니다.
폴더 src/lte/모델/페이딩-추적/). 이러한 추적에서 발췌한 내용은 다음과 같습니다.
다음 수치.
[이미지 : 페이딩 궤적 3kmph] [이미지] 에 포함된 페이딩 궤적 발췌
보행자 시나리오용 시뮬레이터(시속 3km)..UNINDENT
[이미지 : 페이딩 궤적 60kmph] [이미지] 에 포함된 페이딩 궤적 발췌
차량 시나리오용 시뮬레이터(시속 60km)..UNINDENT
[이미지 : 페이딩 궤적 3kmph] [이미지] 에 포함된 페이딩 궤적 발췌
도시 시나리오용 시뮬레이터(시속 3km)..UNINDENT
유동성 모델 과 건물
이제 건물 모델을 사용하는 방법(특히,
모빌리티빌딩정보 그리고 건물전파모델 클래스) ns-3 시뮬레이션에서
건물과 실내 노드를 포함하는 LTE 시뮬레이션 시나리오를 설정하는 프로그램입니다.
1. 포함할 헤더 파일:
#포함하다
#포함하다
#포함하다
2. 경로손실 모델 선택:
Ptr lteHelper = CreateObject ();
lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::BuildingsPropagationLossModel"));
3. EUTRA 대역 선택
전파 모델의 작동 주파수 선택은 다음과 같이 수행되어야 합니다.
해당 섹션("구성"에 설명된 대로 표준 ns-3 속성 시스템)
LTE 모델 매개변수')를 통해 DlEarfcn 및 UlEarfcn 매개변수를 사용합니다. 예:
lteHelper->SetEnbDeviceAttribute("DlEarfcn", UintegerValue (100));
lteHelper->SetEnbDeviceAttribute("UlEarfcn", UintegerValue (18100));
다른 수단을 사용하여 사용되는 주파수를 구성한다는 점에 유의해야 합니다.
전파 모델(즉, 해당 BuildingsPropagationLossModel 구성)
속성을 직접적으로 사용하면 빈도 정의에 충돌이 발생할 수 있습니다.
시뮬레이션 중에는 모듈을 사용하지 않는 것이 좋습니다.
1. 모빌리티 모델 선택:
이동성도우미 이동성;
mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
어떠한 이동성 모델이라도 사용될 수 있다는 점에 유의해야 한다.
2. 건물 생성:
더블 x_min = 0.0;
더블 x_max = 10.0;
이중 y_min = 0.0;
이중 y_max = 20.0;
이중 z_min = 0.0;
이중 z_max = 10.0;
Ptr b = 객체 생성 ();
b->SetBoundaries(박스(x_min, x_max, y_min, y_max, z_min, z_max));
b->SetBuildingType (건물::주거);
b->SetExtWallsType (Building::ConcreteWithWindows);
b->SetNFloors (3);
b->SetNRoomsX (3);
b->SetNRoomsY (2);
그러면 바닥이 10 x 20미터이고 높이가 XNUMXm인 주거용 건물이 인스턴스화됩니다.
외벽이 콘크리트로 되어 있고 창문이 있는 10미터; 그 건물은 XNUMX개가 있어요
바닥이 있으며 동일한 크기의 내부 3 x 2 격자형 방이 있습니다.
3. 노드 생성 및 위치 지정:
ueNodes.Create(2);
이동성.설치(ueNodes);
BuildingsHelper::설치(ueNodes);
NetDeviceContainer ueDevs;
ueDevs = lteHelper->InstallUeDevice(ueNodes);
Ptr mm0 = enbNodes.Get(0)->GetObject ();
Ptr mm1 = enbNodes.Get(1)->GetObject ();
mm0->SetPosition(벡터(5.0, 5.0, 1.5));
mm1->SetPosition(벡터(30.0, 40.0, 1.5));
4. 건물 및 이동성 모델 구성을 마무리합니다.
BuildingsHelper::MakeMobilityModel일관성();
의 문서를 참조하세요. 건물 자세한 내용은 모듈을 참조하세요.
PHY 오류 모델
물리적 오류 모델은 데이터 오류 모델과 하향링크 제어 오류로 구성됩니다.
모델이며 둘 다 기본적으로 활성화되어 있습니다. ns3를 사용하여 비활성화할 수 있습니다.
속성 시스템에 대한 자세한 내용은 다음과 같습니다.
Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(false));
Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
MIMO 모델
이 하위 섹션에서는 MIMO 매개변수를 구성하는 방법을 설명합니다. LTE는 7가지 유형을 정의합니다.
전송 모드:
· 전송 모드 1: SISO.
· 전송 모드 2: MIMO Tx 다양성.
· 전송 모드 3: MIMO 공간 다중화 개방 루프.
· 전송 모드 4: MIMO 공간 다중성 폐쇄 루프.
· 전송 모드 5: MIMO 다중 사용자.
· 전송 모드 6: 더 가까운 루프 단일 레이어 프리코딩.
· 전송 모드 7: 단일 안테나 포트 5.
구현된 모델에 따르면 시뮬레이터에는 처음 세 가지 전송 모드가 포함됩니다.
유형. 기본값은 전송 모드 1(SISO)입니다. 기본값을 변경하려면
사용할 전송 모드, 속성 기본전송모드 의 LTEEnbRrc
다음과 같이 사용됩니다.
Config::SetDefault("ns3::LteEnbRrc::DefaultTransmissionMode", UintegerValue (0)); // SISO
Config::SetDefault("ns3::LteEnbRrc::DefaultTransmissionMode", UintegerValue (1)); // MIMO Tx 다양성(1레이어)
Config::SetDefault("ns3::LteEnbRrc::DefaultTransmissionMode", UintegerValue (2)); // MIMO 공간 다중화(2레이어)
시뮬레이션 중에 특정 사용자의 전송 모드를 변경하려면 특정
인터페이스는 두 표준 스케줄러 모두에서 구현되었습니다.
void TransmissionModeConfigurationUpdate(uint16_t rnti, uint8_t txMode);
이 방법은 전송 모드 결정 엔진을 개발하는 데 모두 사용할 수 있습니다.
채널 상태 및/또는 사용자의 상황에 따라 전송 모드를 최적화합니다.
요구 사항) 및 시뮬레이션 스크립트에서 수동으로 전환하는 데 사용됩니다. 후자의 경우,
다음과 같이 전환할 수 있습니다.
포인트 lteEnbDev = enbDevs.Get(0)->GetObject ();
포인터값 ptrval;
enbNetDev->GetAttribute("FfMacScheduler", ptrval);
포인트 rrsched = ptrval.Get ();
시뮬레이터::Schedule(초(0.2), &RrFfMacScheduler::TransmissionModeConfigurationUpdate, rrsched, rnti, 1);
마지막으로 구현된 모델은 다음과 같이 다양한 MIMO 모델에 따라 재구성될 수 있습니다.
게인 값 업데이트(유일한 제약은 게인이 동안 일정해야 한다는 것입니다.
시뮬레이션 런타임 및 레이어에 공통). 각 전송 모드의 이득은 다음과 같습니다.
표준 ns3 속성 시스템에 따라 변경되었습니다. 여기서 속성은 다음과 같습니다.
TxMode1이득, TxMode2이득, TxMode3이득, TxMode4이득, TxMode5이득, TxMode6이득 and
TxMode7이득. 기본적으로만 TxMode1이득, TxMode2이득 and TxMode3이득 의미있는
값은 _[CatreuxMIMO]에 의해 파생된 값입니다(즉, 각각 0.0, 4.2 및 -2.8).
dB).
of 안테나 모델
이제 특정 AntennaModel을 eNB 장치와 연결하여 모델링하는 방법을 보여줍니다.
매크로 eNB의 섹터. 이를 위해서는 다음을 사용하는 것이 편리합니다. 코사인안테나모델
ns-3 안테나 모듈에서 제공됩니다. eNB의 구성은 다음을 통해 수행됩니다.
LteHelper 인스턴스가 생성되기 직전 EnbNet장치, 에 표시된 대로
다음 :
lteHelper->SetEnbAntennaModelType("ns3::CosineAntennaModel");
lteHelper->SetEnbAntennaModelAttribute("방향", DoubleValue (0));
lteHelper->SetEnbAntennaModelAttribute("Beamwidth", DoubleValue (60);
lteHelper->SetEnbAntennaModelAttribute("MaxGain", DoubleValue (0.0));
위의 코드는 60도 빔폭이 가리키는 안테나 모델을 생성합니다.
X축. 방향은 X축으로부터 각도 단위로 측정됩니다(예: 방향).
90은 Y축을 가리키고 -90의 방향은 음수를 가리킵니다.
Y축 방향. 빔폭은 -3dB 빔폭입니다(예: 60도의 경우).
빔폭 m 각도에서의 안테나 이득
방향 방향에서 30도는 -3dB입니다.
다중 섹터 사이트를 생성하려면 동일한 위치에 배치된 서로 다른 ns-3 노드를 생성해야 합니다.
위치를 지정하고 별도로 구성합니다. EnbNet장치 다양한 안테나 방향으로
각 노드에 설치됩니다.
라디오 환경 지도
수업을 이용하여 라디오환경지도도우미 라디오를 파일로 출력하는 것이 가능합니다
환경 맵(REM), 즉 환경을 나타내는 값의 균일한 2D 그리드
가장 강한 eNB에 대한 하향링크의 신호 대 잡음비
각 지점에서 신호를 보냅니다. 데이터에 대해 REM을 생성해야 하는지 또는
제어 채널. 또한 사용자는 REM이 생성될 RbId를 설정할 수 있습니다. 기본 RbId
이는 -1입니다. 이는 REM이 모든 신호 대 잡음비의 평균으로 생성됨을 의미합니다.
RB.
이렇게 하려면 시뮬레이션 프로그램에 다음 코드를 추가하면 됩니다.
끝, Simulator::Run() 호출 직전:
포인트 remHelper = CreateObject ();
remHelper->SetAttribute ("ChannelPath", StringValue ("/ChannelList/0"));
remHelper->SetAttribute("OutputFile", StringValue("rem.out"));
remHelper->SetAttribute ("XMin", DoubleValue (-400.0));
remHelper->SetAttribute("XMax", DoubleValue(400.0));
remHelper->SetAttribute("XRes", UintegerValue (100));
remHelper->SetAttribute ("YMin", DoubleValue (-300.0));
remHelper->SetAttribute ("YMax", DoubleValue (300.0));
remHelper->SetAttribute ("YRes", UintegerValue (75));
remHelper->SetAttribute ("Z", DoubleValue (0.0));
remHelper->SetAttribute ("UseDataChannel", BooleanValue (true));
remHelper->SetAttribute("RbId", IntegerValue (10));
remHelper->설치();
속성을 구성하여 라디오환경지도도우미 위에 표시된 대로 객체를 사용하면
생성될 REM의 매개변수를 조정할 수 있습니다. 각
라디오환경지도도우미 인스턴스는 하나의 REM만 생성할 수 있습니다. 더 많이 생성하고 싶다면
REM의 경우 각 REM에 대해 별도의 인스턴스를 하나씩 생성해야 합니다.
REM 생성은 특히 다음과 같이 매우 까다롭습니다.
· 런타임 메모리 소비는 픽셀당 약 5KB입니다. 예를 들어, REM
500x500 해상도의 경우 약 1.25GB의 메모리가 필요하며 해상도는
1000x1000에는 약 5GB가 필요합니다(당시 일반 PC에는 너무 많은 용량).
글쓰기). 이 문제를 극복하기 위해 REM은 각 단계에서 연속적인 단계로 생성됩니다.
의 값에 의해 결정되는 최대 픽셀 수를 평가하는 단계
속성 RadioEnvironmentMapHelper::MaxPointsPerIteration.
· 시뮬레이션 시작 시 REM을 생성하면 속도가 느려집니다.
나머지 시뮬레이션을 실행합니다. 프로그램에 대한 REM을 생성하려는 경우
또한 동일한 프로그램을 사용하여 시뮬레이션 결과를 얻으려면
REM을 생성하거나 전체를 실행할 수 있는 명령줄 스위치
시뮬레이션. 이를 위해 속성이 있다는 점에 유의하세요.
RadioEnvironmentMapHelper::StopWhenDone (기본값: true) 그러면 강제로
REM이 생성된 직후 시뮬레이션을 중지합니다.
REM은 다음 형식의 ASCII 파일에 저장됩니다.
· 열 1은 x 좌표입니다.
· 열 2는 y 좌표입니다
· 열 3은 z 좌표입니다.
· 4열은 선형 단위의 SINR입니다.
REM을 플롯할 수 있는 최소 gnuplot 스크립트는 다음과 같습니다.
뷰 맵 설정;
xlabel "X" 설정
y레이블을 "Y"로 설정
cblabel "SINR(dB)" 설정
설정 해제된 키
이미지와 함께 ($1):($2):(10*log10($4)) 을 사용하여 "rem.out" 플롯
예를 들어, 예제 프로그램으로 얻을 수 있는 REM은 다음과 같습니다.
lena-dual-stripe는 공동 채널 배포에서 3섹터 LTE 매크로셀을 보여줍니다.
일부 주거용 펨토셀은 아파트 두 블록에 무작위로 배치되었습니다.
[이미지] lena-dual-stripe 예제에서 얻은 REM.UNINDENT
lena-dual-stripe 예제 프로그램은 gnuplot 호환 출력도 생성합니다.
UE 및 eNB 노드의 위치와 위치에 대한 정보가 포함된 파일
파일에 있는 각각의 건물 ues.txt, enbs.txt and 건물.txt. 이것들은
gnuplot을 사용할 때 쉽게 포함됩니다. 예를 들어, gnuplot 스크립트가
(예: 위에서 설명한 최소 gnuplot 스크립트)는 다음과 같은 파일에 저장됩니다.
내_플롯_스크립트, 다음 명령을 실행하면 UE, eNB 및
REM 위에 있는 건물들:
gnuplot -p enbs.txt ues.txt 건물.txt my_plot_script
AMC 모델 and CQI 계산
시뮬레이터는 MCS 선택과 관련된 두 가지 가능한 방식을 제공합니다.
이에 따라 CQI가 생성됩니다. 첫 번째는 GSoC 모듈을 기반으로 합니다.
[Piro2011] RB 기반으로 작동합니다. 이 모델은 ns3 속성으로 활성화될 수 있습니다.
시스템은 다음과 같습니다.
Config::SetDefault("ns3::LteAmc::AmcModel", EnumValue(LteAmc::PiroEW2010));
반면 물리적 오류 모델을 기반으로 하는 솔루션은 다음을 통해 제어할 수 있습니다.
Config::SetDefault("ns3::LteAmc::AmcModel", EnumValue(LteAmc::MiErrorModel));
마지막으로 요구되는 효율성은 피로EW2010 AMC 모듈은 다음을 통해 조정될 수 있습니다.
베 속성(), 예를 들어:
Config::SetDefault ("ns3::LteAmc::Ber", DoubleValue (0.00005));
진화 된 패킷 핵심 (EPC)
이제 EPC를 시뮬레이션할 수 있는 시뮬레이션 프로그램을 작성하는 방법을 설명합니다.
LTE 무선 액세스 네트워크에 추가됩니다. EPC를 사용하면 IPv4 네트워킹을 사용할 수 있습니다.
LTE 기기로. 즉, 일반 ns-3 애플리케이션을 사용할 수 있습니다.
LTE를 통한 IPv4를 통한 소켓 및 LTE 네트워크를 다른 IPv4에 연결
시뮬레이션에 있을 수 있는 네트워크입니다.
우선 그 외에도 LteHelper 우리가 이미 소개한 Basic 시뮬레이션
프로그램, 추가로 사용해야 합니다. EpcHelper 생성을 담당하는 클래스
EPC 엔터티 및 네트워크 토폴로지. 사용할 수 없으니 참고하세요 EpcHelper 그대로, 직접
추상 기본 클래스입니다. 대신 하위 클래스 중 하나를 사용해야 합니다.
다양한 EPC 토폴로지 구현을 제공합니다. 이 예에서 우리는 고려할 것입니다
PointToPointEpcHelper, 이는 지점 간 링크를 기반으로 EPC를 구현합니다. 그것을 사용하려면,
먼저 시뮬레이션 프로그램에 다음 코드를 삽입해야 합니다.
Ptr lteHelper = CreateObject ();
포인트 epcHelper = CreateObject ();
그런 다음 LTE 도우미에게 EPC가 사용될 것임을 알려야 합니다.
lteHelper->SetEpcHelper(epcHelper);
LTE 도우미가 적절한 EPC를 트리거하려면 위 단계가 필요합니다.
새로운 eNB가 생성되는 경우와 같은 일부 중요한 구성에 따른 구성
또는 UE가 시뮬레이션에 추가되거나 EPS Bearer가 생성됩니다. EPC 도우미는
S1 링크 생성 및 S1 베어러와 같은 필요한 설정을 자동으로 처리합니다.
설정. 이 모든 작업은 사용자의 개입 없이 수행됩니다.
호출 lteHelper->SetEpcHelper (epc헬퍼) EPC 사용이 가능하며,
새로운 효과 LTEEnbRrc 생성된 것은 EpsBearerToRlc매핑
속성 설정 RLC_UM_ALWAYS 대신 RLC_SM_ALWAYS 후자가 기본값인 경우;
그렇지 않으면 속성이 변경되지 않습니다(예: 기본값을 다음으로 변경한 경우).
RLC_AM_ALWAYS, 건드리지 않습니다).
주의해야 할 점은 EpcHelper 또한 자동으로 PGW 노드를 생성하고
LTE 무선 액세스 네트워크에서 들어오고 나가는 트래픽을 적절하게 처리할 수 있도록 구성합니다.
하지만 PGW를 다른 IPv4 네트워크에 연결하려면 몇 가지 명시적인 코드를 추가해야 합니다(예:
인터넷). 다음은 단일 원격 호스트를 연결하는 방법에 대한 매우 간단한 예입니다.
지점 간 링크를 통한 PGW:
포인트 pgw = epcHelper->GetPgwNode();
// 단일 RemoteHost 생성
NodeContainer 원격HostContainer;
RemoteHostContainer.Create(1);
포인트 RemoteHost = 원격HostContainer.Get(0);
InternetStackHelper 인터넷;
internet.Install(remoteHostContainer);
// 인터넷을 생성합니다
PointToPointHelper p2ph;
p2ph.SetDeviceAttribute("DataRate", DataRateValue(DataRate ("100Gb/s")));
p2ph.SetDeviceAttribute("Mtu", UintegerValue (1500));
p2ph.SetChannelAttribute("지연", TimeValue(초(0.010)));
NetDeviceContainer internetDevices = p2ph.Install(pgw, RemoteHost);
Ipv4AddressHelper ipv4h;
ipv4h.SetBase("1.0.0.0", "255.0.0.0");
Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign(인터넷 장치);
// 인터페이스 0은 localhost이고 1은 p2p 장치입니다.
Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress (1);
원격 호스트가 LTE UE에 도달할 수 있도록 경로를 지정하는 것이 중요합니다. 한 가지 방법
이렇게 하는 것은 다음과 같은 사실을 이용하는 것입니다. PointToPointEpcHelper 기본적으로 할당됩니다
LTE UE에 7.0.0.0 네트워크의 IP 주소. 이를 염두에 두고 다음을 수행하면 충분합니다.
Ipv4StaticRoutingHelper ipv4RoutingHelper;
포인트 RemoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting(remoteHost->GetObject ());
RemoteHostStaticRouting->AddNetworkRouteTo(Ipv4Address("7.0.0.0"), Ipv4Mask("255.0.0.0"), 1);
이제 이전 섹션에서 설명한 대로 LTE eNB 및 UE를 생성해야 합니다.
물론 경로 손실 및 페이딩 모델과 같은 다른 LTE 측면도 구성할 수 있습니다. 오른쪽
UE를 생성한 후에는 IP 네트워킹용으로 구성해야 합니다. 이건 끝났어
다음과 같이. 다음과 같은 UE 및 eNodeB 노드용 컨테이너가 있다고 가정합니다.
NodeContainer ueNodes;
NodeContainer enbNodes;
LTE 전용 시뮬레이션을 구성하려면 일반적으로 다음과 같은 작업을 수행합니다.
NetDeviceContainer ueLteDevs = lteHelper->InstallUeDevice(ueNodes);
lteHelper->Attach (ueLteDevs, enbLteDevs.Get (0));
IP 네트워킹을 위해 UE를 구성하려면 추가로 다음 작업을 수행하면 됩니다.
이:
// UE에 IP 스택을 설치합니다.
InternetStackHelper 인터넷;
인터넷.설치(ueNodes);
// UE에 IP 주소 할당
for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
{
포인트 ue = ueNodes.Get(u);
포인트 ueLteDevice = ueLteDevs.Get(u);
Ipv4InterfaceContainer ueIpIface = epcHelper->AssignUeIpv4Address(NetDeviceContainer(ueLteDevice));
// UE의 기본 게이트웨이를 설정합니다.
포인트 ueStaticRouting = ipv4RoutingHelper.GetStaticRouting(ue->GetObject ());
ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
}
전달자의 활성화는 수행된 작업과 관련하여 약간 다른 방식으로 수행됩니다.
LTE 전용 시뮬레이션의 경우. 첫째, ActivateDataRadioBearer 메소드는 사용되지 않습니다.
EPC를 사용할 때. 둘째, EPC를 사용하면 기본 EPS 베어러가 활성화됩니다.
LteHelper::Attach()를 호출하면 자동으로 실행됩니다. 셋째, 전용으로 설정하려는 경우
EPS 베어러의 경우 LteHelper::ActivateDedicatedEpsBearer() 메소드를 사용하여 이를 수행할 수 있습니다. 이것
메소드는 TFT(Traffic Flow Template)를 매개변수로 사용합니다.
전용 EPS 베어러에 매핑될 트래픽 유형을 식별합니다. 여기는
통신하는 UE에서 애플리케이션에 대한 전용 베어러를 설정하는 방법에 대한 예
포트 1234:
포인트 tft = 생성 ();
EpcTft::PacketFilter pf;
pf.localPortStart = 1234;
pf.localPortEnd = 1234;
tft->추가(pf);
lteHelper->ActivateDedicatedEpsBearer(ueLteDevs, EpsBearer(EpsBearer::NGBR_VIDEO_TCP_DEFAULT), tft);
물론 사용자 정의 EpsBearer 및 EpcTft 구성을 사용할 수 있습니다.
이를 수행하는 방법에 대한 doxygen 문서입니다.
마지막으로 원격으로 통신하는 LTE UE 노드에 애플리케이션을 설치할 수 있습니다.
인터넷을 통한 응용 프로그램. 이는 일반적인 ns-3 절차에 따라 수행됩니다.
단일 RemoteHost를 사용한 간단한 예에 따라 다운링크를 설정하는 방법은 다음과 같습니다.
원격 호스트의 UdpClient 애플리케이션 및 호스트의 PacketSink와의 통신
LTE UE(이전 코드 조각과 동일한 변수 이름 사용)
uint16_t dlPort = 1234;
PacketSinkHelper packetSinkHelper("ns3::UdpSocketFactory",
InetSocketAddress(Ipv4Address::GetAny(), dlPort));
ApplicationContainer serverApps = packetSinkHelper.Install (ue);
serverApps.Start(초(0.01));
UdpClientHelper 클라이언트(ueIpIface.GetAddress (0), dlPort);
ApplicationContainer clientApps = client.Install(remoteHost);
clientApps.Start(초(0.01));
그게 다야! 이제 평소처럼 시뮬레이션을 시작할 수 있습니다.
시뮬레이터::정지(초(10.0));
시뮬레이터::실행();
사용 전에, EPC 과 에뮬레이션 모드
이전 섹션에서는 eNB와 eNB 간의 연결을 위해 PointToPoint 링크를 사용했습니다.
SGW(S1-U 인터페이스) 및 eNB 간(X2-U 및 X2-C 인터페이스) LTE 모듈
PointToPoint 링크 대신 에뮬레이트된 링크 사용을 지원합니다. 이는 단지
생성을 대체 LteHelper and EpcHelper 다음 코드로 :
Ptr lteHelper = CreateObject ();
포인트 epcHelper = CreateObject ();
lteHelper->SetEpcHelper(epcHelper);
epcHelper->초기화();
속성 ns3::EmuEpcHelper::sgwDeviceName and ns3::EmuEpcHelper::enbDeviceName are
S1-U, X2-U, X2-C를 운반하는 데 사용되는 장치의 이름을 설정하는 데 사용됩니다.
SGW와 eNB에서 각각 인터페이스합니다. 이제 이것이 어떻게 수행되는지 보여드리겠습니다.
예제 프로그램을 실행하는 예제 레나-단순-epc-emu 두 개의 가상을 사용하여
이더넷 인터페이스.
우선 ns-3을 적절하게 빌드합니다.
# 구성
./waf 구성 --enable-sudo --enable-modules=lte,fd-net-device --enable-examples
# 짓다
./와프
그런 다음 두 개의 가상 이더넷 인터페이스를 설정하고 Wireshark를 시작하여 트래픽을 살펴봅니다.
를 통과:
# 참고: 루트 사용자여야 합니다.
# 두 개의 페어링된 veth 장치를 생성합니다.
IP 링크 이름 추가 veth0 유형 veth 피어 이름 veth1
IP 링크 쇼
# 무차별 모드를 활성화합니다
IP 링크 설정 veth0 promisc on
IP 링크 설정 veth1 promisc on
# 인터페이스를 불러온다
IP 링크 설정 veth0 최대
IP 링크 설정 veth1 최대
# Wireshark를 시작하고 veth0에서 캡처합니다.
와이어샤크 &
이제 시뮬레이션된 시계를 사용하여 예제 프로그램을 실행할 수 있습니다.
./waf --run lena-simple-epc-emu --command="%s --ns3::EmuEpcHelper::sgwDeviceName=veth0 --ns3::EmuEpcHelper::enbDeviceName=veth1"
Wireshark를 사용하면 먼저 ARP 확인을 확인한 다음 일부 GTP 패킷이 둘 다 교환된 것을 확인해야 합니다.
업링크와 다운링크에서.
예제 프로그램의 기본 설정은 eNB 1개, UE 1개입니다. 이를 통해 변경할 수 있습니다.
명령줄 매개변수, 예:
./waf --run lena-simple-epc-emu --command="%s --ns3::EmuEpcHelper::sgwDeviceName=veth0 --ns3::EmuEpcHelper::enbDeviceName=veth1 --nEnbs=2 --nUesPerEnb =2"
사용 가능한 매개변수 목록을 얻으려면:
./waf --run lena-simple-epc-emu --command="%s --PrintHelp"
실시간 시계로 실행하려면 기본 디버그 빌드가 너무 느린 것으로 나타났습니다.
실시간. BestEffort 모드로 실시간 제약 조건을 완화하는 것은 좋은 생각이 아닙니다.
뭔가 잘못될 수 있으며(예: ARP가 실패할 수 있음), 그렇다면 데이터 패킷을 얻을 수 없습니다.
밖으로. 따라서 적절한 하드웨어와 정적으로 연결된 최적화된 빌드가 필요합니다.
모듈 :
./waf 구성 -d 최적화 --enable-static --enable-modules=lte --enable-examples --enable-sudo
그런 다음 다음과 같이 예제 프로그램을 실행하십시오.
./waf --run lena-simple-epc-emu --command="%s --ns3::EmuEpcHelper::sgwDeviceName=veth0 --ns3::EmuEpcHelper::enbDeviceName=veth1 --simulatorImplementationType=ns3::RealtimeSimulatorImpl --ns3::RealtimeSimulatorImpl::SynchronizationMode=HardLimit"
HardLimit 설정을 참고하세요. 이 설정을 유지하지 못하면 프로그램이 종료됩니다.
실시간으로.
이 섹션에 설명된 접근 방식은 모든 유형의 넷 장치에 사용할 수 있습니다. 을 위한
예를 들어, [Baldo2014]에서는 에뮬레이트된 LTE-EPC 네트워크를 실행하는 데 어떻게 사용되었는지 설명합니다.
실제 다층 패킷 광 전송 네트워크.
네트워크 부착
섹션의 기본 예에 표시된 대로 Basic 시뮬레이션 프로그램, UE를
eNodeB는 다음을 호출하여 수행됩니다. LteHelper::첨부 기능.
네트워크 연결에는 두 가지 방법이 있습니다. 첫 번째 방법은 "수동" 하나,
두 번째에는 더 많은 것이 있습니다. "자동적 인" 그것에 대한 감각. 그들 각각은 다음에서 다룰 것입니다.
이번 장.
Manual 첨부
이 방법은 LteHelper::첨부 위에서 언급한 기능. 그것은 유일한 것이었습니다
이전 버전의 LTE 모듈에서 사용할 수 있는 네트워크 연결 방법입니다. 일반적으로
시뮬레이션이 시작되기 전에 호출됩니다.
lteHelper->연결(ueDevs, enbDev); // 하나 이상의 UE를 단일 eNodeB에 연결합니다.
LteHelper::InstallEnbDevice and LteHelper::InstallUeDevice 함수가 호출되어야 합니다.
부착하기 전에. EPC 지원 시뮬레이션에서는 IPv4도 적절하게 보유해야 합니다.
UE에 사전 설치되어 있습니다.
이 방법은 매우 간단하지만 어떤 UE가 어디에 속해 있는지 정확히 알아야 합니다.
시뮬레이션이 시작되기 전의 eNodeB입니다. UE 초기 위치가 다음과 같으면 어려울 수 있습니다.
시뮬레이션 스크립트에 의해 무작위로 결정됩니다.
UE와 eNodeB 사이의 거리를 선택 기준으로 선택할 수 있습니다.
적절한 셀. 이는 매우 간단하며(적어도 시뮬레이터의 관점에서는)
때로는 실용적입니다. 그러나 거리가 있다고 해서 결과가 나오지 않을 때도 있다는 점을 기억하는 것이 중요합니다.
하나의 올바른 기준. 예를 들어, eNodeB 안테나 지향성은 다음과 같아야 합니다.
고려되기도 합니다. 그 외에도 채널 상태도 고려해야 합니다.
페이딩이나 그림자 효과가 있는 경우 변동될 수 있습니다. 이런 종류의
이러한 경우 네트워크 연결은 거리만을 기준으로 해서는 안 됩니다.
실제 생활에서 UE는 자동으로 특정 기준을 평가하고 가장 적합한 셀을 선택합니다.
사용자의 수동 개입 없이 연결됩니다. 분명히 이것은 사실이 아닙니다.
이 LteHelper::첨부 기능. 다른 네트워크 연결 방법은 더 많은 것을 사용합니다. "자동적 인"
다음에 설명할 네트워크 연결에 대한 접근 방식입니다.
Automatic 첨부 사용 유휴 모드 세포 선택 순서
수신된 신호의 강도는 최상의 신호를 선택하는 데 사용되는 표준 기준입니다.
연결할 셀입니다. 이 기준의 사용은 처음에는 세포 선택
프로세스의 다른 버전을 호출하여 호출할 수 있습니다. LteHelper::첨부
기능은 아래와 같습니다.
lteHelper->연결(ueDevs); // 하나 이상의 UE를 가장 강한 셀에 연결
수동 방법과의 차이점은 대상 eNodeB가 지정되지 않는다는 것입니다. 그만큼
절차는 다음을 포함한 여러 기준을 기반으로 UE에 가장 적합한 셀을 찾습니다.
수신된 신호의 강도(RSRP).
메서드가 호출된 후 UE는 주변 셀을 측정하는 데 약간의 시간을 소비합니다.
그런 다음 가장 좋은 것에 연결하려고 시도합니다. 자세한 내용은 섹션에서 확인할 수 있습니다.
디자인 문서의 초초기 셀 선택.
이 방법은 EPC 지원 시뮬레이션에서만 작동한다는 점에 유의하는 것이 중요합니다. LTE 전용
시뮬레이션은 수동 부착 방법에 의존해야 합니다.
휴무 구독자 그룹
초기 셀 선택 프로세스의 흥미로운 사용 사례는 시뮬레이션을 설정하는 것입니다.
CSG(Closed Subscriber Group)가 있는 환경.
예를 들어, 일반적으로 펨토셀과 같은 더 작은 버전인 특정 eNodeB는
개인 소유자(예: 가구 또는 기업)에게, 일부 UE에만 액세스를 허용합니다.
이전에 소유자가 등록한 적이 있습니다. eNodeB와 등록된 UE를 모두
CSG를 형성합니다.
액세스 제한은 동일한 CSG로 CSG 멤버에 "라벨을 지정"하여 시뮬레이션할 수 있습니다.
ID. 이는 eNodeB와 UE 모두의 속성을 통해 수행됩니다. 예를 들어
수행원 LteHelper 기능 :
// CSG ID가 1이고 CSG 표시가 활성화된 다음 eNodeB에 레이블을 지정합니다.
lteHelper->SetEnbDeviceAttribute("CsgId", UintegerValue (1));
lteHelper->SetEnbDeviceAttribute("CsgIndication", BooleanValue(true));
// CSG ID 1로 하나 이상의 UE에 레이블을 지정합니다.
lteHelper->SetUeDeviceAttribute("CsgId", UintegerValue (1));
// eNodeB 및 UE 설치
NetDeviceContainer csgEnbDevs = lteHelper->InstallEnbDevice(csgEnbNodes);
NetDeviceContainer csgUeDevs = lteHelper->InstallUeDevice(csgUeNodes);
그런 다음 UE에서 초기 셀 선택 절차를 활성화합니다.
lteHelper->연결(csgUeDevs);
CSG 제한은 자동 네트워크 방식에서만 작동하기 때문에 필요합니다.
부착은 가능하지만 수동 방식은 아닙니다.
eNodeB의 CSG 표시를 false(기본값)로 설정하면
제한을 비활성화합니다. 즉, 모든 UE가 이 eNodeB에 연결할 수 있습니다.
구성 UE 측정 시간 상관관계
시뮬레이션에서 활성 UE 측정 구성은 선택한 항목에 따라 결정됩니다.
핸드오버 알고리즘과 같은 "소비자"라고 합니다. 사용자는 자신의 구성을
조치를 취하며 이를 수행하는 방법에는 여러 가지가 있습니다.
1. eNodeB RRC 엔터티의 직접 구성
2. 기존 핸드오버 알고리즘을 구성합니다. 그리고
3. 새로운 핸드오버 알고리즘을 개발합니다.
이 섹션에서는 첫 번째 방법만 다룹니다. 두 번째 방법은 다음에서 다룹니다. Automatic
이양 트리거, 세 번째 방법은 섹션에서 자세히 설명합니다.
설계 문서의 초-인계 알고리즘.
eNodeB RRC의 직접 구성은 다음과 같이 작동합니다. 사용자는 새로운 것을 생성하여 시작합니다.
LteRrcSap::ReportConfigEutra 인스턴스를 생성하고 이를 LteEnbRrc::AddUeMeasReportConfig
기능. 이 함수는 측정ID (측정 아이덴티티) 이는 고유한 것입니다.
eNodeB 인스턴스의 구성 참조입니다. 이 함수는 이전에 호출되어야 합니다.
시뮬레이션이 시작됩니다. 측정 구성은 연결된 모든 UE에서 활성화됩니다.
시뮬레이션 기간 동안 eNodeB. 시뮬레이션 중에 사용자는 다음을 수행할 수 있습니다.
기존 정보를 청취하여 UE가 생성한 측정 보고서를 캡처합니다.
LteEnbRrc::RecvMeasurementReport 추적 소스.
구조 ReportConfigEutra 3GPP 사양과 일치합니다. 정의
구조체와 각 멤버 필드는 [TS6.3.5]의 섹션 36331에서 확인할 수 있습니다.
아래 코드 샘플은 이벤트 A1 RSRP 측정을 내부의 모든 eNodeB에 구성합니다.
컨테이너 DEVS:
LteRrcSap::ReportConfigEutra 구성;
config.eventId = LteRrcSap::ReportConfigEutra::EVENT_A1;
config.threshold1.choice = LteRrcSap::ThresholdEutra::THRESHOLD_RSRP;
config.threshold1.range = 41;
config.triggerQuantity = LteRrcSap::ReportConfigEutra::RSRP;
config.reportInterval = LteRrcSap::ReportConfigEutra::MS480;
표준::벡터 measIdList;
NetDeviceContainer::Iterator it;
for (it = devs.Begin (); it != devs.End (); it++)
{
포인트 개발자 = *it;
포인트 enbDev = 개발->GetObject ();
포인트 enbRrc = enbDev->GetRrc();
uint8_t measId = enbRrc->AddUeMeasReportConfig(config);
measIdList.push_back(measId); // 생성된 measId를 기억합니다.
enbRrc->TraceConnect("RecvMeasurementReport",
"문맥",
MakeCallback(&RecvMeasurementReportCallback));
}
임계값은 범위로 표현됩니다. 위의 예에서 RSRP의 범위는 41입니다.
-100dBm에 해당합니다. 범위 형식 간의 변환은 섹션으로 인해 발생합니다.
[TS9.1.4]의 9.1.7 및 36133. 그만큼 Eutran측정매핑 클래스에는 여러 개의 정적이 있습니다
이런 목적으로 사용할 수 있는 기능입니다.
해당 콜백 함수는 아래와 유사한 정의를 갖습니다.
무효화
RecvMeasurementReportCallback(std::string 컨텍스트,
uint64_t 임시,
uint16_t 셀 ID,
uint16_trnti,
LteRrcSap::MeasurementReport measReport);
이 메서드는 콜백 함수를 UE 측정의 소비자로 등록합니다. 에서
시뮬레이션에 둘 이상의 소비자가 있는 경우(예: 핸드오버 알고리즘)
다른 소비자를 위한 측정값도 이 콜백에 의해 캡처됩니다.
기능. 사용자는 측정ID 필드 내에 포함된
LteRrcSap::측정보고서 콜백 함수의 인수, 어떤 측정값인지 알려줍니다.
구성으로 인해 보고서가 트리거되었습니다.
일반적으로 이 메커니즘은 한 소비자가 자신도 모르게 다른 소비자에 개입하는 것을 방지합니다.
소비자 보고 구성.
보고 구성 부분(예: LteRrcSap::ReportConfigEutra) 의
UE 측정 매개변수는 소비자가 구성할 수 있도록 공개되어 있으며, 다른 부분은
숨겨져 있습니다. 주파수 내 제한은 이 API의 주요 동기입니다.
구현 결정:
· 모호하지 않고 확정적인 단 하나의 방법이 있습니다. 측량 대상, 따라서 없습니다
구성해야 합니다.
· 측량 정체성 일대일로 진행되기 때문에 숨겨져 있습니다.
보고 구성과 측정 ID 간의 매핑을 통해 새로운
새로운 보고 구성이 완료되면 측정 ID가 자동으로 설정됩니다.
만들어진;
· 양 구성 다른 곳에서 구성되었습니다. sec-performance-measurements를 참조하세요. 그리고
· 측량 틈새 주파수 간에만 적용 가능하므로 지원되지 않습니다.
설정;
X2 기반 이양
3GPP에서 정의한 바와 같이 핸드오버는 단말의 서빙 셀을 변경하는 절차이다.
연결 모드. 프로세스에 관련된 두 개의 eNodeB를 일반적으로 eNodeB라고 합니다.
eNodeB 그리고 목표 eNodeB.
시뮬레이션에서 X2 기반 핸드오버를 실행하기 위해서는 두 가지가 있다.
충족해야 하는 요구 사항. 먼저, 시뮬레이션에서 EPC가 활성화되어야 합니다(참조: 진화 된
패킷 핵심 (EPC)).
둘째, 두 eNodeB 사이에 X2 인터페이스를 구성해야 합니다.
시뮬레이션 프로그램 내에서 명시적으로 수행됩니다.
lteHelper->AddX2Interface(enbNodes);
어디에 enb노드 하는 노드컨테이너 X2 사이에 있는 두 개의 eNodeB를 포함합니다.
인터페이스를 구성해야 합니다. 컨테이너에 2개 이상의 eNodeB가 있는 경우 함수는
컨테이너의 모든 eNodeB 쌍 사이에 X2 인터페이스를 생성합니다.
마지막으로 대상 eNodeB는 X2 HANDOVER REQUEST에 대해 "open"으로 구성되어야 합니다. 모든
eNodeB는 기본적으로 열려 있으므로 대부분의 경우 추가 지침이 필요하지 않습니다. 그러나 사용자
부울 속성을 설정하여 eNodeB를 "닫힘"으로 설정할 수 있습니다.
LteEnbRrc::AdmitHandoverRequest 에 그릇된. 예를 들어 다음을 실행할 수 있습니다. lena-x2-핸드오버
프로그램을 작성하고 다음과 같이 속성을 설정합니다.
NS_LOG=EpcX2:LteEnbRrc ./waf --run lena-x2-handover --command="%s --ns3::LteEnbRrc::AdmitHandoverRequest=false"
위의 세 가지 요구 사항이 충족되면 핸드오버 절차가 시작될 수 있습니다.
수동으로 또는 자동으로. 각각은 다음 하위 섹션에 제시됩니다.
Manual 이양 트리거
핸드오버 이벤트는 시뮬레이션 프로그램 내에서 일정을 예약하여 "수동으로" 트리거될 수 있습니다.
명시적인 핸드오버 이벤트. 그만큼 LteHelper 객체는 편리한 방법을 제공합니다.
핸드오버 이벤트 예약. 예를 들어 다음과 같이 가정해보자. ueLteDev 하는
NetDevice컨테이너 이는 핸드오버될 UE를 포함하고, enbLteDevs is
다른 NetDevice컨테이너 소스 및 타겟 eNB를 포함합니다. 그런 다음 핸드오버
0.1초는 다음과 같이 예약할 수 있습니다.
lteHelper->HandoverRequest (초(0.100),
ueLteDevs.Get (0),
enbLteDevs.Get (0),
enbLteDevs.Get(1));
UE는 이미 소스 eNB에 연결되어 있어야 합니다. 그렇지 않으면 시뮬레이션이 진행됩니다.
오류 메시지와 함께 종료됩니다.
전체 소스 코드의 예를 보려면 다음을 참조하세요. lena-x2-핸드오버 예
프로그램)
Automatic 이양 트리거
핸드오버 절차는 UE의 서빙 eNodeB에 의해 "자동으로" 트리거될 수도 있습니다.
트리거 뒤에 있는 논리는 현재 활성화된 핸드오버 알고리즘에 따라 다릅니다.
eNodeB RRC 엔터티. 사용자는 사용될 핸드오버 알고리즘을 선택하고 구성할 수 있습니다.
이 섹션에서 간략히 설명할 시뮬레이션에서. 사용자는 다음을 선택할 수도 있습니다.
섹션에 설명된 대로 핸드오버 알고리즘의 자체 구현을 작성합니다.
설계 문서의 초-인계 알고리즘.
핸드오버 알고리즘 선택은 다음을 통해 수행됩니다. LteHelper 객체와 그
SetHandover알고리즘 유형 아래와 같은 방법:
Ptr lteHelper = CreateObject ();
lteHelper->SetHandoverAlgorithmType("ns3::A2A4RsrqHandoverAlgorithm");
선택된 핸드오버 알고리즘은 여러 구성 가능한 속성을 제공할 수도 있습니다.
다음과 같이 설정할 수 있습니다:
lteHelper->SetHandoverAlgorithmAttribute("ServingCellThreshold",
UintegerValue (30));
lteHelper->SetHandoverAlgorithmAttribute("NeighbourCellOffset",
UintegerValue (1));
LTE 모듈에는 핸드오버 알고리즘의 세 가지 옵션이 포함되어 있습니다. 그만큼 A2-A4-RSRQ
핸드오버 알고리즘(명칭: ns3::A2A4Rsrq핸드오버 알고리즘)은 기본 옵션이며
사용법은 이미 위에 나와 있습니다.
또 다른 옵션은 가장 강한 세포 핸드오버 알고리즘(명칭:
ns3::A3Rsrp핸드오버 알고리즘)는 다음 코드로 선택하고 구성할 수 있습니다.
lteHelper->SetHandoverAlgorithmType("ns3::A3RsrpHandoverAlgorithm");
lteHelper->SetHandoverAlgorithmAttribute("히스테리시스",
DoubleValue(3.0));
lteHelper->SetHandoverAlgorithmAttribute("TimeToTrigger",
TimeValue(밀리초(256)));
마지막 옵션은 특별한 옵션입니다. 노옵 핸드오버 알고리즘은 기본적으로
자동 핸드오버 트리거를 비활성화합니다. 이는 예를 들어 수동으로 작업하는 경우에 유용합니다.
핸드오버 트리거는 모든 핸드오버 결정을 독점적으로 제어해야 합니다. 그것은 아무것도
구성 가능한 속성. 사용법은 다음과 같습니다.
lteHelper->SetHandoverAlgorithmType("ns3::NoOpHandoverAlgorithm");
각 핸드오버 알고리즘의 결정 정책 및 속성에 대한 자세한 내용은
섹션 sec-handover-algorithm의 해당 하위 섹션을 참조하십시오.
디자인 문서.
마지막으로, EnbDevice 설치 의 기능 LteHelper 하나의 인스턴스를 인스턴스화합니다.
각 eNodeB 장치에 대해 선택된 핸드오버 알고리즘. 즉, 다음을 선택하세요.
다음 코드 줄에서 마무리하기 전에 올바른 핸드오버 알고리즘을 사용하세요.
NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice(enbNodes);
자동 핸드오버 트리거를 사용하는 전체 소스 코드의 예는 다음에서 찾을 수 있습니다.
lena-x2-handover-measures 예제 프로그램.
동조 시뮬레이션 과 이양
설계 문서에서 언급한 바와 같이 현재의 핸드오버 모델 구현은 다음과 같습니다.
핸드오버 실패가 발생하면 예상치 못한 동작이 발생합니다. 이 하위 섹션에서는 다음에 중점을 둘 것입니다.
사용자가 핸드오버를 사용하려는 경우 고려해야 할 단계
시뮬레이션.
우리가 다룰 핸드오버 실패의 주요 원인은 전송 오류입니다.
핸드오버 절차 실행 중 핸드오버 관련 시그널링 메시지. 처럼
설계 문서의 그림 fig-x2-based-handover-seq-diagram에서 알 수 있듯이,
그 중 다수가 있으며 서로 다른 인터페이스와 프로토콜을 사용합니다. 위해
단순성을 위해 우리는 X2 인터페이스(소스 eNodeB와 eNodeB 사이)를 안전하게 가정할 수 있습니다.
대상 eNodeB) 및 S1 인터페이스(대상 eNodeB와 SGW/PGW 사이)는 매우
안정적인. 따라서 우리는 UE와 UE 사이의 RRC 프로토콜에 주목하겠습니다.
eNodeBs) 및 Random Access 절차는 일반적으로 무선을 통해 전송됩니다.
채널 상태가 저하될 수 있습니다.
전송 오류를 줄이는 일반적인 팁은 다음과 같습니다. 확인 높은 충분히 SINR 레벨마다
UE. 이는 네트워크 토폴로지를 적절하게 계획하여 수행할 수 있습니다. 최소화하다 네트워크
적용 범위 구멍. 토폴로지에 알려진 커버리지 구멍이 있는 경우 UE를 구성해야 합니다.
그 지역에는 모험을 하지 말라고.
명심해야 할 또 다른 접근 방식은 다음과 같습니다. 피하기 너무 늦었다 인계. 즉, 핸드오버
UE의 SINR이 너무 낮아지기 전에 발생해야 합니다. 그렇지 않으면 UE가 수신에 실패할 수 있습니다.
소스 eNodeB로부터의 핸드오버 명령. 핸드오버 알고리즘에는 제어 수단이 있습니다.
인계 결정이 얼마나 이르거나 늦게 이루어지는가. 예를 들어 A2-A4-RSRQ 핸드오버 알고리즘
더 일찍 핸드오버를 결정하도록 더 높은 임계값으로 구성할 수 있습니다. 비슷하게,
가장 강력한 셀 핸드오버 알고리즘에서 더 작은 히스테리시스 및/또는 더 짧은 트리거 시간
일반적으로 더 이른 핸드오버가 발생합니다. 이에 대한 올바른 값을 찾기 위해서는
고려해야 할 요소 중 하나는 UE 이동 속도입니다.
일반적으로 빠르게 움직이는 UE는 핸드오버가 더 일찍 실행되도록 요구합니다. 일부 연구
[Lee2010]과 같은 연구에서는 권장 값을 제안했습니다.
위의 팁은 일반적인 시뮬레이션 사용에 충분하지만, 특별한 경우에는
필요가 생기면 극단적인 조치를 고려할 수 있습니다. 예를 들어, 사용자
고려할 수도 있다 무능력하게하는 전에, 채널 오류 모델. 이렇게 하면 모든
핸드오버 관련 시그널링 메시지는 핸드오버에 관계없이 성공적으로 전송됩니다.
거리 및 채널 상태. 그러나 이는 다른 모든 데이터나 제어에도 영향을 미칩니다.
핸드오버와 관련되지 않은 패킷으로 인해 원하지 않는 부작용이 발생할 수 있습니다. 그렇지 않으면, 그것은 할 수 있습니다
다음과 같이 수행됩니다:
Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(false));
Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
위의 코드를 사용하여 제어 및 데이터 채널 모두에서 오류 모델을 비활성화하고
양방향(다운링크 및 업링크)으로. 이는 핸드오버 관련으로 인해 필요합니다.
신호 메시지는 이러한 채널을 사용하여 전송됩니다. 예외는 다음과 같습니다.
시뮬레이션은 이상적인 RRC 프로토콜을 사용합니다. 이 경우 Random Access 절차만 수행됩니다.
고려하도록 남겨두었습니다. 절차는 제어 메시지로 구성되므로
제어 채널의 오류 모델을 비활성화합니다.
이양 흔적
RRC 모델, 특히 LTEEnbRrc and LTERrc 객체, 유용한 정보 제공
시작 시 호출되도록 일부 사용자 정의 함수에 연결될 수 있는 추적
UE와 eNB 측 모두에서 핸드오버 실행 단계가 종료됩니다. 예를 들어,
시뮬레이션 프로그램에서는 다음 메서드를 선언할 수 있습니다.
무효화
NotifyHandoverStartUe(std::string 컨텍스트,
uint64_t 임시,
uint16_t 셀 ID,
uint16_trnti,
uint16_t targetCellId)
{
std::cout << Simulator::Now ().GetSeconds () << " " << 컨텍스트
<< " UE IMSI " << imsi
<< ": 이전에 CellId에 연결되었습니다. " << cellId
<< " RNTI 사용 " << rti
<< ", CellId로 핸드오버 중 " << targetCellId
<< 표준::endl;
}
무효화
NotifyHandoverEndOkUe(std::string 컨텍스트,
uint64_t 임시,
uint16_t 셀 ID,
uint16_trnti)
{
std::cout << Simulator::Now ().GetSeconds () << " " << 컨텍스트
<< " UE IMSI " << imsi
<< ": CellId로 핸드오버 성공 " << cellId
<< " RNTI 사용 " << rti
<< 표준::endl;
}
무효화
NotifyHandoverStartEnb(std::string 컨텍스트,
uint64_t 임시,
uint16_t 셀 ID,
uint16_trnti,
uint16_t targetCellId)
{
std::cout << Simulator::Now ().GetSeconds () << " " << 컨텍스트
<< " eNB CellId " << cellId
<< ": IMSI로 UE 핸드오버 시작 " << imsi
<< " RNTI " << RNTI
<< "에서 CellId로 " << targetCellId
<< 표준::endl;
}
무효화
NotifyHandoverEndOkEnb(std::문자열 컨텍스트,
uint64_t 임시,
uint16_t 셀 ID,
uint16_trnti)
{
std::cout << Simulator::Now ().GetSeconds () << " " << 컨텍스트
<< " eNB CellId " << cellId
<< ": IMSI를 사용한 UE 핸드오버 완료 " << imsi
<< " RNTI " << RNTI
<< 표준::endl;
}
그런 다음 이러한 메서드를 다음과 같이 해당 추적 소스에 연결할 수 있습니다.
구성::연결("/NodeList/*/DeviceList/*/LteEnbRrc/HandoverStart",
MakeCallback(&NotifyHandoverStartEnb));
구성::연결("/NodeList/*/DeviceList/*/LteUeRrc/HandoverStart",
MakeCallback(&NotifyHandoverStartUe));
구성::연결("/NodeList/*/DeviceList/*/LteEnbRrc/HandoverEndOk",
MakeCallback(&NotifyHandoverEndOkEnb));
구성::연결("/NodeList/*/DeviceList/*/LteUeRrc/HandoverEndOk",
MakeCallback(&NotifyHandoverEndOkUe));
예제 프로그램 src/lte/examples/lena-x2-handover.cc 위의 모든 내용이 어떻게 표시되는지 보여줍니다.
지침은 시뮬레이션 프로그램에 통합될 수 있습니다. 다음과 같이 프로그램을 실행할 수 있습니다.
./waf --run lena-x2-handover
그리고 사용자 정의 핸드오버 추적 후크에 의해 인쇄된 메시지를 출력합니다. 순서대로
추가적으로 의미 있는 로깅 정보를 시각화하면 다음과 같은 프로그램을 실행할 수 있습니다.
이:
NS_LOG=LteEnbRrc:LteUeRrc:EpcX2 ./waf --run lena-x2-handover
진동수 재사용 알고리즘
이 섹션에서는 LTE 내 eNb에서 주파수 재사용 알고리즘을 사용하는 방법을 설명합니다.
시뮬레이션. 구성에는 두 가지 방법이 있습니다. 첫 번째 접근 방식은
"수동"인 경우 더 많은 매개변수를 구성해야 하지만 사용자가 FR을 구성할 수 있습니다.
필요에 따라 알고리즘을 사용합니다. 두 번째 접근 방식은 보다 "자동적"입니다. 매우 편리합니다.
이는 각 FR 알고리즘에 대해 동일하므로 사용자는 다음과 같이 FR 알고리즘을 매우 빠르게 전환할 수 있습니다.
FR 알고리즘의 유형만 변경합니다. 한 가지 단점은 "자동" 접근 방식이
각 알고리즘에 대한 제한된 구성 세트로 인해 유연성이 떨어지지만
대부분의 경우에 충분합니다.
이 두 가지 접근 방식은 다음 하위 섹션에서 자세히 설명됩니다.
사용자가 주파수 재사용 알고리즘을 구성하지 않은 경우 기본 알고리즘(예: LteFrNoOpAlgorithm)
eNb에 설치되어 있습니다. 이는 마치 FR 알고리즘이 비활성화된 것처럼 작동합니다.
언급해야 할 한 가지는 구현된 FR 알고리즘의 대부분이 다음과 같이 작동한다는 것입니다.
15RB보다 크거나 같은 셀 대역폭. 이 제한은 다음 요구 사항으로 인해 발생합니다.
전송을 위해서는 적어도 3개의 연속 RB가 UE에 할당되어야 합니다.
Manual 구성
주파수 재사용 알고리즘은 시뮬레이션 프로그램 내에서 "수동으로" 구성할 수 있습니다.
FR 알고리즘의 유형 및 모든 속성을 설정합니다. 현재 7개의 FR 알고리즘이 있습니다.
구현:
· ns3::LteFrNoOp 알고리즘
· ns3::LteFrHard알고리즘
· ns3::LteFrStrict알고리즘
· ns3::LteFrSoft알고리즘
· ns3::LteFfrSoft알고리즘
· ns3::LteFfr향상된 알고리즘
· ns3::LteFfrDistributed알고리즘
FR 알고리즘 선택은 다음을 통해 수행됩니다. LteHelper 객체와 그 SetFfr알고리즘 유형
아래와 같은 방법:
Ptr lteHelper = CreateObject ();
lteHelper->SetFfrAlgorithmType("ns3::LteFrHardAlgorithm");
구현된 각 FR 알고리즘은 여러 구성 가능한 속성을 제공합니다. 사용자는
UL 및 DL 대역폭 구성은 자동으로 수행되므로 주의해야 합니다.
셀 구성. FR 알고리즘의 대역폭을 변경하려면 에 필요한 값을 구성하십시오.
LteEnbNet장치:
uint8_t 대역폭 = 100;
lteHelper->SetEnbDeviceAttribute("DlBandwidth", UintegerValue(대역폭));
lteHelper->SetEnbDeviceAttribute("UlBandwidth", UintegerValue(대역폭));
이제 각 FR 알고리즘 구성에 대해 설명하겠습니다.
하드 진동수 재사용 암호알고리즘
설계 문서의 sec-fr-hard-알고리즘 섹션에 설명된 대로
ns3::LteFrHard알고리즘 하나의 하위 대역을 사용합니다. 이 하위 대역을 구성하려면 사용자가 지정해야 합니다.
RB 수에 따른 DL 및 UL의 오프셋 및 대역폭.
하드 주파수 재사용 알고리즘은 다음과 같은 속성을 제공합니다.
· DlSubBandOffset: 리소스 블록 그룹 수의 다운링크 오프셋
· DlSub 대역폭: 하향링크 전송 하위 대역폭 구성
리소스 블록 그룹
· UlSubBandOffset: 리소스 블록 그룹 수의 업링크 오프셋
· UlSub 대역폭: 자원 수에 따른 업링크 전송 하위 대역폭 구성
블록 그룹
LteFrHardAlgorithm의 구성 예시는 다음과 같은 방법으로 수행할 수 있습니다.
lteHelper->SetFfrAlgorithmType("ns3::LteFrHardAlgorithm");
lteHelper->SetFfrAlgorithmAttribute("DlSubBandOffset", UintegerValue (8));
lteHelper->SetFfrAlgorithmAttribute("DlSubBandwidth", UintegerValue (8));
lteHelper->SetFfrAlgorithmAttribute("UlSubBandOffset", UintegerValue (8));
lteHelper->SetFfrAlgorithmAttribute("UlSubBandwidth", UintegerValue (8));
NetDeviceContainer enbDevs = lteHelper->InstallEnbDevice(enbNodes.Get(삼));
위의 예에서는 eNB가 DL 및 UL에서 8부터 16까지의 RB만 사용하도록 허용하고 전체 셀은
대역폭은 25입니다.
엄격한 진동수 재사용 암호알고리즘
엄격한 주파수 재사용 알고리즘은 두 개의 하위 대역을 사용합니다. 하나는 각 셀에 공통이고 다른 하나는
사적인. 또한 어느 부대역 UE 내에서 결정하는 데 필요한 RSRQ 임계값도 있습니다.
제공되어야 합니다. 게다가 이들 부대역에서의 전력 전송은 다를 수 있습니다.
엄격한 주파수 재사용 알고리즘은 다음과 같은 속성을 제공합니다.
· UlCommonSub대역폭: 리소스 수에 따른 업링크 공통 하위 대역폭 구성
블록 그룹
· UlEdgeSubBandOffset: 리소스 블록 그룹 수의 업링크 에지 하위 대역 오프셋
· UlEdgeSub대역폭: 리소스 수에 따른 업링크 에지 하위 대역폭 구성
블록 그룹
· DlCommonSub대역폭: 다운링크 공통 하위 대역폭 구성
리소스 블록 그룹
· DlEdgeSubBandOffset: 자원 블록 그룹 수의 다운링크 Edge SubBand 오프셋
· DlEdgeSub대역폭: 리소스 수에 따른 다운링크 에지 하위 대역폭 구성
블록 그룹
· Rsrq임계값: RSRQ가 이 임계값보다 나쁜 경우 UE는
가장자리 하위 대역
· CenterPowerOffset: 중앙 하위 대역에 대한 PdschConfigDedicated::Pa 값, 기본값
dB0
· EdgePowerOffset: 에지 하위 대역에 대한 PdschConfigDedicated::Pa 값, 기본값 dB0
· CenterAreaTpc: 중앙 영역에 있는 UE들을 위해 DL-DCI에 설정될 TPC 값, Absolute
모드가 사용되면 기본값 1은 TS1 표 36.213-5.1.1.1에 따라 -2에 매핑됩니다.
· EdgeAreaTpc: Edge Area에 있는 UE들을 위해 DL-DCI에 설정될 TPC 값, Absolute
모드가 사용되면 기본값 1은 TS1 표 36.213-5.1.1.1에 따라 -2에 매핑됩니다.
아래 예에서는 eNB가 0부터 6까지의 RB를 공통 하위 대역으로 사용하고 12부터 18까지의 RB를 공통 하위 대역으로 사용하도록 허용합니다.
DL 및 UL의 개인 하위 대역, RSRQ 임계값은 20dB, 중앙 영역의 전력은
LteEnbPhy::TxPower - 3dB, 가장자리 영역의 전력은 다음과 같습니다. LteEnbPhy::TxPower + 3dB:
lteHelper->SetFfrAlgorithmType("ns3::LteFrStrictAlgorithm");
lteHelper->SetFfrAlgorithmAttribute("DlCommonSubBandwidth", UintegerValue (6));
lteHelper->SetFfrAlgorithmAttribute("UlCommonSubBandwidth", UintegerValue (6));
lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandOffset", UintegerValue (6));
lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandwidth", UintegerValue (6));
lteHelper->SetFfrAlgorithmAttribute("UlEdgeSubBandOffset", UintegerValue (6));
lteHelper->SetFfrAlgorithmAttribute("UlEdgeSubBandwidth", UintegerValue (6));
lteHelper->SetFfrAlgorithmAttribute("RsrqThreshold", UintegerValue (20));
lteHelper->SetFfrAlgorithmAttribute("CenterPowerOffset",
UintegerValue (LteRrcSap::PdschConfigDedicated::dB_3));
lteHelper->SetFfrAlgorithmAttribute("EdgePowerOffset",
UintegerValue (LteRrcSap::PdschConfigDedicated::dB3));
lteHelper->SetFfrAlgorithmAttribute("CenterAreaTpc", UintegerValue (1));
lteHelper->SetFfrAlgorithmAttribute("EdgeAreaTpc", UintegerValue (2));
NetDeviceContainer enbDevs = lteHelper->InstallEnbDevice(enbNodes.Get(삼));
부드러움 진동수 재사용 암호알고리즘
소프트 주파수 재사용 알고리즘을 통해 eNb는 전체 셀 대역폭을 사용하지만 두 가지가 있습니다.
UE 내의 하위 대역은 서로 다른 전력 레벨로 서비스됩니다.
소프트 주파수 재사용 알고리즘은 다음과 같은 속성을 제공합니다.
· UlEdgeSubBandOffset: 리소스 블록 그룹 수의 업링크 에지 하위 대역 오프셋
· UlEdgeSub대역폭: 리소스 수에 따른 업링크 에지 하위 대역폭 구성
블록 그룹
· DlEdgeSubBandOffset: 자원 블록 그룹 수의 다운링크 Edge SubBand 오프셋
· DlEdgeSub대역폭: 리소스 수에 따른 다운링크 에지 하위 대역폭 구성
블록 그룹
· AllowCenterUeUseEdgeSubBand: 진정한 중앙 UE가 Edge Sub-band RBG를 수신할 수 있는 경우,
그렇지 않으면 에지 하위 대역은 에지 UE에만 허용되며 기본값은 true입니다.
· Rsrq임계값: RSRQ가 이 임계값보다 나쁜 경우 UE는
가장자리 하위 대역
· CenterPowerOffset: 중앙 하위 대역에 대한 PdschConfigDedicated::Pa 값, 기본값
dB0
· EdgePowerOffset: 에지 하위 대역에 대한 PdschConfigDedicated::Pa 값, 기본값 dB0
· CenterAreaTpc: 중앙 영역에 있는 UE들을 위해 DL-DCI에 설정될 TPC 값, Absolute
모드가 사용되면 기본값 1은 TS1 표 36.213-5.1.1.1에 따라 -2에 매핑됩니다.
· EdgeAreaTpc: Edge Area에 있는 UE들을 위해 DL-DCI에 설정될 TPC 값, Absolute
모드가 사용되면 기본값 1은 TS1 표 36.213-5.1.1.1에 따라 -2에 매핑됩니다.
아래 예는 셀 경계 UE가 사용할 RB를 8에서 16까지 구성하며 이 하위 대역은
셀 센터 사용자는 사용할 수 없습니다. RSRQ 임계값은 20dB이고 중앙 영역의 전력은
LteEnbPhy::TxPower, 가장자리 영역의 전력은 다음과 같습니다. LteEnbPhy::TxPower + 3dB:
lteHelper->SetFfrAlgorithmType("ns3::LteFrSoftAlgorithm");
lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandOffset", UintegerValue (8));
lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandwidth", UintegerValue (8));
lteHelper->SetFfrAlgorithmAttribute("UlEdgeSubBandOffset", UintegerValue (8));
lteHelper->SetFfrAlgorithmAttribute("UlEdgeSubBandwidth", UintegerValue (8));
lteHelper->SetFfrAlgorithmAttribute("AllowCenterUeUseEdgeSubBand", BooleanValue(false));
lteHelper->SetFfrAlgorithmAttribute("RsrqThreshold", UintegerValue (20));
lteHelper->SetFfrAlgorithmAttribute("CenterPowerOffset",
UintegerValue (LteRrcSap::PdschConfigDedicated::dB0));
lteHelper->SetFfrAlgorithmAttribute("EdgePowerOffset",
UintegerValue (LteRrcSap::PdschConfigDedicated::dB3));
NetDeviceContainer enbDevs = lteHelper->InstallEnbDevice(enbNodes.Get(삼));
부드러움 분수의 진동수 재사용 암호알고리즘
SFFR(Soft Fractional Frequency Reuse)은 중앙, 중간(공통) 및 중간(공통)의 세 가지 하위 대역을 사용합니다.
가장자리. 사용자는 Common과 Edge 중 두 가지만 구성하면 됩니다. 중앙 하위 대역은
나머지 대역폭으로 구성됩니다. 각 하위 대역은 서로 다른 서비스를 제공받을 수 있습니다.
전송 전력. 3개의 하위 대역이 있으므로 2개의 RSRQ 임계값이 필요합니다.
구성되었습니다.
소프트 분수 주파수 재사용 알고리즘은 다음과 같은 속성을 제공합니다.
· UlCommonSub대역폭: 리소스 수에 따른 업링크 공통 하위 대역폭 구성
블록 그룹
· UlEdgeSubBandOffset: 리소스 블록 그룹 수의 업링크 에지 하위 대역 오프셋
· UlEdgeSub대역폭: 리소스 수에 따른 업링크 에지 하위 대역폭 구성
블록 그룹
· DlCommonSub대역폭: 다운링크 공통 하위 대역폭 구성
리소스 블록 그룹
· DlEdgeSubBandOffset: 자원 블록 그룹 수의 다운링크 Edge SubBand 오프셋
· DlEdgeSub대역폭: 리소스 수에 따른 다운링크 에지 하위 대역폭 구성
블록 그룹
· 센터Rsrq임계값: RSRQ가 이 임계값보다 나쁜 경우 UE가 서비스를 받아야 합니다.
중간 하위 대역에서
· EdgeRsrq임계값: RSRQ가 이 임계값보다 나쁜 경우 UE가 서비스를 받아야 합니다.
가장자리 하위 대역에서
· CenterAreaPowerOffset: 중앙 하위 대역에 대한 PdschConfigDedicated::Pa 값, 기본값
값 dB0
· MediumAreaPowerOffset: 중간 하위 대역에 대한 PdschConfigDedicated::Pa 값, 기본값
값 dB0
· EdgeAreaPowerOffset: 에지 하위 대역에 대한 PdschConfigDedicated::Pa 값, 기본값
dB0
· CenterAreaTpc: 중앙 영역에 있는 UE들을 위해 DL-DCI에 설정될 TPC 값, Absolute
모드가 사용되면 기본값 1은 TS1 표 36.213-5.1.1.1에 따라 -2에 매핑됩니다.
· 중간 영역Tpc: 중역의 UE들을 위해 DL-DCI에 설정될 TPC 값, Absolute
모드가 사용되면 기본값 1은 TS1 표 36.213-5.1.1.1에 따라 -2에 매핑됩니다.
· EdgeAreaTpc: Edge Area에 있는 UE들을 위해 DL-DCI에 설정될 TPC 값, Absolute
모드가 사용되면 기본값 1은 TS1 표 36.213-5.1.1.1에 따라 -2에 매핑됩니다.
아래 예에서는 0부터 6까지의 RB가 공통(중간) 하위 대역으로 사용되고, 6부터 XNUMX까지의 RB는 공통(중간) 하위 대역으로 사용됩니다.
12는 가장자리 하위 대역으로 사용되고 12부터 24까지의 RB는 중앙 하위 대역으로 사용됩니다.
남은 RB로 구성됩니다). 중앙과 중간 영역 사이의 RSRQ 임계값은 28dB입니다.
중간 영역과 가장자리 영역 사이의 RSRQ 임계값은 18dB입니다. 중앙 지역의 전력은 다음과 같습니다.
LteEnbPhy::TxPower - 3dB, 중간 영역의 전력은 다음과 같습니다. LteEnbPhy::TxPower + 3dB, 전원 투입
가장자리 면적은 다음과 같습니다. LteEnbPhy::TxPower + 3dB:
lteHelper->SetFfrAlgorithmType("ns3::LteFfrSoftAlgorithm");
lteHelper->SetFfrAlgorithmAttribute("UlCommonSubBandwidth", UintegerValue (6));
lteHelper->SetFfrAlgorithmAttribute("DlCommonSubBandwidth", UintegerValue (6));
lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandOffset", UintegerValue (0));
lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandwidth", UintegerValue (6));
lteHelper->SetFfrAlgorithmAttribute("UlEdgeSubBandOffset", UintegerValue (0));
lteHelper->SetFfrAlgorithmAttribute("UlEdgeSubBandwidth", UintegerValue (6));
lteHelper->SetFfrAlgorithmAttribute("CenterRsrqThreshold", UintegerValue (28));
lteHelper->SetFfrAlgorithmAttribute("EdgeRsrqThreshold", UintegerValue (18));
lteHelper->SetFfrAlgorithmAttribute("CenterAreaPowerOffset",
UintegerValue (LteRrcSap::PdschConfigDedicated::dB_3));
lteHelper->SetFfrAlgorithmAttribute("MediumAreaPowerOffset",
UintegerValue (LteRrcSap::PdschConfigDedicated::dB0));
lteHelper->SetFfrAlgorithmAttribute("EdgeAreaPowerOffset",
UintegerValue (LteRrcSap::PdschConfigDedicated::dB3));
NetDeviceContainer enbDevs = lteHelper->InstallEnbDevice(enbNodes.Get(삼));
강화 분수의 진동수 재사용 암호알고리즘
EFFR(Enhanced Fractional Frequency Reuse)은 각 셀에 대한 시스템 대역폭의 일부를 예약합니다.
(일반적으로 3가지 셀 유형이 있으며 각 셀 유형은 시스템 대역폭의 1/3을 차지합니다.) 그런 다음 일부
이 하위 대역폭은 다음과 같이 사용되었습니다. 기본 구획 재사용 요소 3 및 중-고등부 구획
재사용 계수 1을 사용합니다. 사용자는 셀 하위 대역폭의 오프셋을 구성해야 합니다(DL 및 UL에 대해).
in number of RB, 다음으로 사용될 RB의 수 기본 구획 및 RB의 수
다음과 같이 사용됩니다. 중-고등부 구획. 기본 구획 셀에서 마음대로 사용하지만 RB는
중-고등부 구획 UE에만 할당될 수 있는 것은 이 UE로부터의 CQI 피드백이 더 높을 경우입니다.
구성된 CQI 임계값보다 값이 높습니다. UE는 RSRQ가 낮을 때 Edge UE로 간주됩니다.
보다 Rsrq임계값.
각 eNb는 다른 셀 유형의 1차 및 2차 셀이 어디에 있는지 알아야 하기 때문에
구성이 각 셀에 대해 동일하고 하위 대역폭만 가정하여 계산합니다.
오프셋이 다릅니다. 따라서 사용 가능한 시스템 대역폭을 균등하게 나누는 것이 중요합니다.
각 셀에 동일한 기본 및 보조 세그먼트 구성을 적용합니다.
향상된 분수 주파수 재사용 알고리즘은 다음과 같은 속성을 제공합니다.
· UlSubBandOffset: 리소스 블록 수에서 이 셀에 대한 업링크 하위 대역 오프셋
그룹
· UlReuse3Sub대역폭: 업링크 재사용 3 하위 대역폭 구성(리소스 개수)
블록 그룹
· UlReuse1Sub대역폭: 업링크 재사용 1 하위 대역폭 구성(리소스 개수)
블록 그룹
· DlSubBandOffset: 자원 블록 수에서 이 셀에 대한 다운링크 서브밴드 오프셋
그룹
· DlReuse3Sub대역폭: 다운링크 재사용 3개의 하위 대역폭 구성
리소스 블록 그룹
· DlReuse1Sub대역폭: 다운링크 재사용 1개의 하위 대역폭 구성
리소스 블록 그룹
· Rsrq임계값: RSRQ가 이 임계값보다 나쁜 경우 UE는
가장자리 하위 대역
· CenterAreaPowerOffset: 중앙 하위 대역에 대한 PdschConfigDedicated::Pa 값, 기본값
값 dB0
· EdgeAreaPowerOffset: 에지 하위 대역에 대한 PdschConfigDedicated::Pa 값, 기본값
dB0
· DlCqi임계값: RBG에 대한 DL-CQI가 이 임계값보다 높으면 전송
RBG에서는 가능합니다
· UlCqi임계값: RBG에 대한 UL-CQI가 이 임계값보다 높으면 전송
RBG에서는 가능합니다
· CenterAreaTpc: 중앙 영역에 있는 UE들을 위해 DL-DCI에 설정될 TPC 값, Absolute
모드가 사용되면 기본값 1은 TS1 표 36.213-5.1.1.1에 따라 -2에 매핑됩니다.
· EdgeAreaTpc: Edge Area에 있는 UE들을 위해 DL-DCI에 설정될 TPC 값, Absolute
모드가 사용되면 기본값 1은 TS1 표 36.213-5.1.1.1에 따라 -2에 매핑됩니다.
아래 예에서는 DL 및 UL의 오프셋이 0RB이고 4RB가 사용됩니다. 기본 구획 and
중-고등부 구획. 중앙과 가장자리 영역 사이의 RSRQ 임계값은 25dB입니다. DL 및 UL CQI
임계값은 10으로 설정됩니다. 중앙 영역의 전력은 다음과 같습니다. LteEnbPhy::TxPower - 6dB,
가장자리 영역의 전력은 다음과 같습니다. LteEnbPhy::TxPower + 0dB:
lteHelper->SetFfrAlgorithmType("ns3::LteFfrEnhancedAlgorithm");
lteHelper->SetFfrAlgorithmAttribute("RsrqThreshold", UintegerValue (25));
lteHelper->SetFfrAlgorithmAttribute("DlCqiThreshold", UintegerValue (10));
lteHelper->SetFfrAlgorithmAttribute("UlCqiThreshold", UintegerValue (10));
lteHelper->SetFfrAlgorithmAttribute("CenterAreaPowerOffset",
UintegerValue (LteRrcSap::PdschConfigDedicated::dB_6));
lteHelper->SetFfrAlgorithmAttribute("EdgeAreaPowerOffset",
UintegerValue (LteRrcSap::PdschConfigDedicated::dB0));
lteHelper->SetFfrAlgorithmAttribute("UlSubBandOffset", UintegerValue (0));
lteHelper->SetFfrAlgorithmAttribute("UlReuse3SubBandwidth", UintegerValue (4));
lteHelper->SetFfrAlgorithmAttribute("UlReuse1SubBandwidth", UintegerValue (4));
lteHelper->SetFfrAlgorithmAttribute("DlSubBandOffset", UintegerValue (0));
lteHelper->SetFfrAlgorithmAttribute("DlReuse3SubBandwidth", UintegerValue (4));
lteHelper->SetFfrAlgorithmAttribute("DlReuse1SubBandwidth", UintegerValue (4));
분산 분수의 진동수 재사용 암호알고리즘
분산된 부분 주파수 재사용을 위해서는 모든 eNB 간의 X2 인터페이스가 필요합니다.
설치되었습니다. X2 인터페이스는 EPC가 구성된 경우에만 설치할 수 있으므로 이 FFR 방식은
EPC 시나리오에서만 사용할 수 있습니다.
분산 분수 주파수 재사용 알고리즘을 통해 eNb는 전체 셀 대역폭을 사용하고
두 개의 하위 대역, 즉 중앙 하위 대역과 가장자리 하위 대역이 있을 수 있습니다. 이들 부대역 내에서 UE
다양한 전력 수준으로 제공될 수 있습니다. 알고리즘은 셀 가장자리에 대한 RB를 적응적으로 선택합니다.
인접 셀로부터의 조정 정보(즉, RNTP)를 기반으로 부대역에 전송하고 이를 통보합니다.
에지 하위 대역에서 사용하기 위해 선택한 RB인 인접 셀의 기지국. 만약에
셀에 edge UE로 분류된 UE가 없으면 eNB는 어떤 RB도 edge sub-band로 사용하지 않습니다.
분산 분수 주파수 재사용 알고리즘은 다음 속성을 제공합니다.
· 계산간격: Edge 하위 대역 계산 사이의 시간 간격, 기본값
값은 1초
· Rsrq임계값: RSRQ가 이 임계값보다 나쁜 경우 UE는
가장자리 하위 대역
· Rsrp차이임계값: 수신된 신호의 전력에 차이가 있는 경우
UE가 서빙 셀로부터 수신한 신호의 전력과 인접 셀로부터 수신한 신호의 전력
셀이 RsrpDifferenceThreshold 값보다 작으면 셀 가중치가 증가합니다.
· CenterPowerOffset: 에지 하위 대역에 대한 PdschConfigDedicated::Pa 값, 기본값
dB0
· EdgePowerOffset: 에지 하위 대역에 대한 PdschConfigDedicated::Pa 값, 기본값 dB0
· EdgeRbNum: Edge Sub-band에서 사용할 수 있는 RB의 개수
· CenterAreaTpc: 중앙 영역에 있는 UE들을 위해 DL-DCI에 설정될 TPC 값, Absolute
모드가 사용되면 기본값 1은 TS1 표 36.213-5.1.1.1에 따라 -2에 매핑됩니다.
· EdgeAreaTpc: Edge Area에 있는 UE들을 위해 DL-DCI에 설정될 TPC 값, Absolute
모드가 사용되면 기본값 1은 TS1 표 36.213-5.1.1.1에 따라 -2에 매핑됩니다.
아래 예에서는 계산 간격이 500ms입니다. 중앙과 가장자리 사이의 RSRQ 임계값
영역은 25입니다. RSRP Difference Threshold는 5로 설정됩니다. DL 및 UL 6에서는 RB가 사용됩니다.
에지 하위 대역의 각 셀. 중앙 지역의 전력은 다음과 같습니다. LteEnbPhy::TxPower - 0dB, 힘
가장자리 영역은 다음과 같습니다. LteEnbPhy::TxPower + 3dB:
lteHelper->SetFfrAlgorithmType("ns3::LteFfrDistributedAlgorithm");
lteHelper->SetFfrAlgorithmAttribute("CalculationInterval", TimeValue(밀리초(500)));
lteHelper->SetFfrAlgorithmAttribute("RsrqThreshold", UintegerValue (25));
lteHelper->SetFfrAlgorithmAttribute("RsrpDifferenceThreshold", UintegerValue (5));
lteHelper->SetFfrAlgorithmAttribute("EdgeRbNum", UintegerValue (6));
lteHelper->SetFfrAlgorithmAttribute("CenterPowerOffset",
UintegerValue (LteRrcSap::PdschConfigDedicated::dB0));
lteHelper->SetFfrAlgorithmAttribute("EdgePowerOffset",
UintegerValue (LteRrcSap::PdschConfigDedicated::dB3));
Automatic 구성
주파수 재사용 알고리즘은 설정만 하면 보다 "자동" 방식으로 구성할 수도 있습니다.
대역폭 및 FrCellTypeId. FR 인스턴스를 초기화하는 동안
대역폭을 설정하면 FrCellTypeId가 구성 테이블에서 가져옵니다. 그건 중요해
하위 대역만 구성되고 임계값과 전송 전력은 다음과 같이 설정됩니다.
기본값. 원한다면 임계값과 전송 전력을 다음과 같이 변경할 수 있습니다.
이전 하위 섹션에서.
세 가지 FrCellTypeId가 있습니다. 1, 2, 3, 이는 세 가지 다른 구성에 해당합니다.
각 대역폭마다. 세 가지 구성을 통해 서로 다른 구성을 가질 수 있습니다.
육각형 eNB 레이아웃의 인접 셀. 사용자가 더 다른 것을 필요로 하는 경우
인접 셀을 구성하려면 수동 구성을 사용해야 합니다.
아래 예는 자동 FR 알고리즘 구성을 보여줍니다.
lteHelper->SetFfrAlgorithmType("ns3::LteFfrSoftAlgorithm");
lteHelper->SetFfrAlgorithmAttribute("FrCellTypeId", UintegerValue (1));
NetDeviceContainer enbDevs = lteHelper->InstallEnbDevice(enbNodes.Get(삼));
업 링크 출력 Control
업링크 전원 제어 기능은 기본적으로 활성화되어 있습니다. 사용자는 설정을 통해 이를 비활성화할 수 있습니다.
부울 속성 ns3::LteUePhy::EnableUplinkPowerControl 사실로.
사용자는 개방형 루프 전력 제어와 폐쇄형 루프 전력 제어 메커니즘 사이를 전환할 수 있습니다.
부울 속성을 설정하여 ns3::LteUePowerControl::ClosedLoop. 기본적으로 폐쇄됨
누적 모드를 통한 루프 전력 제어가 활성화됩니다.
경로 손실은 업링크 전력 제어의 핵심 구성 요소입니다. 의 차이로 계산됩니다.
필터링된 RSRP 및 ReferenceSignalPower 매개변수. ReferenceSignalPower는 SIB2와 함께 전송됩니다.
업링크 전원 제어에서 사용할 수 있는 속성:
· 폐쇄 루프: true인 경우 폐쇄 루프 업링크 전력 제어 모드가 활성화되고 개방 루프가 활성화됩니다.
그렇지 않으면 전원 제어, 기본값은 false입니다.
· 누적 활성화됨: true인 경우 누적 모드가 활성화되고 절대 모드가 활성화됩니다.
그렇지 않으면 기본값은 false입니다.
· 알파: 경로 손실 보상 계수, 기본값은 1.0
· PC민: 최소 UE TxPower, 기본값은 -40dBm입니다.
· Pcmax: 최대 UE TxPower, 기본값은 23dBm입니다.
· PoNominal푸시: 이 매개변수는 상위 레이어에서 설정해야 하지만 현재는 필요합니다.
속성 시스템으로 구성하려면 가능한 값은 범위(-126 ...
24), 기본값은 -80입니다.
· PoUe푸쉬: 이 매개변수는 상위 레이어에서 설정해야 하지만 현재는
속성 시스템으로 구성할 수 있으며 가능한 값은 범위(-8 ... 7)의 정수입니다.
기본값은 0입니다.
· Psrs오프셋: 이 매개변수는 상위 레이어에서 설정해야 하지만 현재는
속성 시스템으로 구성할 수 있으며 가능한 값은 범위(0 ~ 15)의 정수입니다.
기본값은 7입니다. 이는 P_Srs_Offset_Value = 0을 제공합니다.
추적 된 값 in 업 링크 출력 제어:
· 신고PuschTxPower: 현재 PUSCH용 UE TxPower
· 신고PucchTxPower: PUCCH에 대한 현재 UE TxPower
· 보고서SrsTxPower: SRS에 대한 현재 UE TxPower
예시 구성은 다음과 같습니다.
Config::SetDefault ("ns3::LteUePhy::EnableUplinkPowerControl", BooleanValue (true));
Config::SetDefault("ns3::LteEnbPhy::TxPower", DoubleValue (30));
Config::SetDefault ("ns3::LteUePowerControl::ClosedLoop", BooleanValue (true));
Config::SetDefault ("ns3::LteUePowerControl::AccumulationEnabled", BooleanValue (true));
예를 들어, 사용자는 lena-uplink-power-control 프로그램을 살펴보고 실행할 수 있습니다.
예 프로그램
디렉토리 src/lte/예제/ 방법을 보여주는 몇 가지 예제 시뮬레이션 프로그램이 포함되어 있습니다.
다양한 LTE 시나리오를 시뮬레이션합니다.
참조 시나리오
다음에서 찾을 수 있는 방대한 양의 참조 LTE 시뮬레이션 시나리오가 있습니다.
문학. 여기에 그 중 일부가 나열되어 있습니다.
· [TR2]의 섹션 A.36814에 언급된 시스템 시뮬레이션 시나리오.
· 예시에서 부분적으로 구현된 이중 스트라이프 모델 [R4-092042]
프로그램 src/lte/examples/lena-dual-stripe.cc. 이 예제 프로그램에는 다음과 같은 많은 기능이 포함되어 있습니다.
해당 전역 변수를 변경하여 사용자 정의할 수 있는 구성 가능한 매개변수
변수. 이러한 모든 전역 변수 목록을 얻으려면 다음 명령을 실행할 수 있습니다.
./waf --run lena-dual-stripe --command-template="%s --PrintGlobals"
다음 하위 섹션에서는 다음을 사용하여 시뮬레이션 캠페인을 실행하는 예를 제시합니다.
이 예제 프로그램.
이양 시뮬레이션 운동
이 하위 섹션에서는 다음을 사용하여 시뮬레이션 캠페인을 실행하는 예를 보여줍니다.
LTE 모듈 NS-3. 캠페인의 목적은 각 제품의 효과를 비교하는 것입니다.
LTE 모듈의 핸드오버 알고리즘이 내장되어 있습니다.
캠페인에서는 레나-듀얼-스트라이프 예제 프로그램. 먼저,
필요한 출력을 생성하는 예제 프로그램입니다. 이번 기회에 우리는 생산하고 싶습니다.
핸드오버 횟수, 사용자 평균 처리량, 평균 SINR.
핸드오버 횟수는 횟수를 계산하여 구할 수 있습니다. 인계종료확인
이양 흔적 해고되었습니다. 그런 다음 사용자 평균 처리량은 다음을 활성화하여 얻을 수 있습니다.
RLC 시뮬레이션 산출. 마지막으로 PHY 시뮬레이션을 활성화하여 SINR을 얻을 수 있습니다.
산출. 다음 샘플 코드 조각은 위의 결과를 얻을 수 있는 한 가지 방법을 보여줍니다.
무효화
NotifyHandoverEndOkUe(std::string 컨텍스트, uint64_t imsi,
uint16_t 셀 ID, uint16_t rnti)
{
std::cout << "IMSI 핸드오버 " << imsi << std::endl;
}
INT
메인(int argc, char *argv[])
{
/*** 캡처 ***/
구성::연결("/NodeList/*/DeviceList/*/LteUeRrc/HandoverEndOk",
MakeCallback(&NotifyHandoverEndOkUe));
lteHelper->EnablePhyTraces();
lteHelper->EnableRlcTraces();
포인트 rlcStats = lteHelper->GetRlcStats();
rlcStats->SetAttribute("StartTime", TimeValue(초(0)));
rlcStats->SetAttribute("EpochDuration", TimeValue(초(simTime)));
시뮬레이터::실행();
시뮬레이터::파괴();
0가 돌아;
}
그런 다음 시뮬레이션 요구 사항에 맞게 프로그램의 매개변수를 구성해야 합니다. 우리
시뮬레이션에서 다음과 같은 가정을 찾고 있습니다.
· 육각형으로 배포된 7섹터 매크로 eNodeB(예: 21개 매크로셀)의 XNUMX개 사이트
사이트 간 거리가 500m인 레이아웃.
· 하지만 레나-듀얼-스트라이프 원래는 2계층(매크로셀 및
femtocell) 시뮬레이션을 통해 시뮬레이션을 1계층(매크로셀)으로 단순화하겠습니다.
시뮬레이션 전용.
· UE는 사이트 주변에 무작위로 분산되어 자동으로 네트워크에 연결됩니다.
유휴 모드 셀 선택을 사용합니다. 그 후 UE는 시뮬레이션 환경을 로밍합니다.
60kmph의 이동 속도로.
· 50초의 시뮬레이션 기간이므로 UE는 일부를 트리거할 만큼 충분히 멀리 이동했을 것입니다.
양도.
· 46dBm 매크로셀 Tx 전력 및 10dBm UE Tx 전력.
· X2 핸드오버 절차에서는 EPC 모드를 활성화해야 하므로 EPC 모드가 사용됩니다.
· TCP 프로토콜을 사용하는 5MHz 대역폭의 전체 버퍼 다운링크 및 업링크 트래픽
그리고 비례 박람회 스케줄러.
· 이상적인 RRC 프로토콜.
작업대 레나-듀얼-스트라이프 매개 변수 구성 for 이양 운동 아래는 우리가 방법을 보여줍니다
매개변수 구성 레나-듀얼-스트라이프 위의 가정을 달성하기 위해.
레나-듀얼-스트라이프 매개 변수 구성 for 이양 운동
┌───────────────────┬─────────┬─────────────────── ───────┐
│매개변수 이름 │ 값 │ 설명 │
├───────────────────┼─────────┼─────────────────── ───────┤
│simTime │ 50 │ 50초 시뮬레이션 │
│ │ │ 기간 │
├───────────────────┼─────────┼─────────────────── ───────┤
│n블록 │ 0 │ 아파트 비활성화 │
│ │ │ 건물 및 펨토셀 │
├───────────────────┼─────────┼─────────────────── ───────┤
│nMacroEnbSites │ 7 │ 매크로셀 수 │
│ │ │ 사이트(각 사이트에는 3 │
│ │ │ 셀) │
├───────────────────┼─────────┼─────────────────── ───────┤
│nMacroEnbSitesX │ 2 │ 매크로셀 사이트는 │
│ │ │ 2-3-2 │에 배치
│ │ │ 편성 │
├───────────────────┼─────────┼─────────────────── ───────┤
│interSiteDistance │ 500 │ 500m 사이의 거리 │
│ │ │ 인접한 매크로셀 사이트 │
├───────────────────┼─────────┼─────────────────── ───────┤
│macroEnbTxPowerDbm │ 46 │ 각각에 대한 46dBm Tx 전력 │
│ │ │ 매크로셀 │
├───────────────────┼─────────┼─────────────────── ───────┤
│epc │ 1 │ EPC 모드 활성화 │
└───────────────────┴─────────┴─────────────────── ───────┘
│epcDl │ 1 │ 전체 버퍼 DL 활성화 │
│ │ │ 교통 │
├───────────────────┼─────────┼─────────────────── ───────┤
│epcUl │ 1 │ 전체 버퍼 UL 활성화 │
│ │ │ 교통 │
├───────────────────┼─────────┼─────────────────── ───────┤
│useUdp │ 0 │ UDP 트래픽 비활성화 및 │
│ │ │ 대신 TCP 활성화 │
├───────────────────┼─────────┼─────────────────── ───────┤
│macroUeDensity │ 0.00002 │ UE 수 결정 │
│ │ │(│에서 48개의 UE로 변환됨)
│ │ │ 시뮬레이션) │
├───────────────────┼─────────┼─────────────────── ───────┤
│outdoorUeMinSpeed │ 16.6667 │ 최소 UE 이동 │
│ │ │ 속도(m/s)(60kmph) │
├───────────────────┼─────────┼─────────────────── ───────┤
│outdoorUeMaxSpeed │ 16.6667 │ 최대 UE 이동 │
│ │ │ 속도(m/s)(60kmph) │
├───────────────────┼─────────┼─────────────────── ───────┤
│macroEnbBandwidth │ 25 │ 5MHz DL 및 UL │
│ │ │ 대역폭 │
├───────────────────┼─────────┼─────────────────── ───────┤
│generateRem │ 1 │ (선택 사항) 플로팅용 │
│ │ │ 무선 환경 │
│ │ │ 지도 │
└───────────────────┴─────────┴─────────────────── ───────┘
필수 가정 중 일부는 매개변수로 사용할 수 없습니다. 레나-듀얼-스트라이프. 에
이 경우 표에 표시된 대로 기본 속성을 재정의합니다. 재정의 디폴트 값
속성 for 이양 운동 아래.
재정의 디폴트 값 속성 for 이양 운동
┌──────────────────────────────────────────────── ────┬───────────────────────────────┬──────────── ──────────────┐
├──────────────────────────────────────────────── ────┼───────────────────────────────┼───────────── ──────────────┤
│ns3::LteHelper::핸드오버 알고리즘 │ ns3::NoOpHandover알고리즘, │ 인계 선택 │
│ │ ns3::A3Rsrp핸드오버 알고리즘, │ 알고리즘 │
│ │ ns3::A2A4Rsrq핸드오버 알고리즘 │ │
├──────────────────────────────────────────────── ────┼───────────────────────────────┼───────────── ──────────────┤
│ns3::LteHelper::스케줄러 │ ns3::PfFfMac스케줄러 │ 비례박람회 │
├──────────────────────────────────────────────── ────┼───────────────────────────────┼───────────── ──────────────┤
├──────────────────────────────────────────────── ────┼───────────────────────────────┼───────────── ──────────────┤
│ns3::RadioBearerStatsCalculator::DlRlcOutputFilename │ -DlRlcStats.txt │ DL RLC 파일 이름 │
├──────────────────────────────────────────────── ────┼───────────────────────────────┼───────────── ──────────────┤
│ns3::RadioBearerStatsCalculator::UlRlcOutputFilename │ -UlRlcStats.txt │ UL RLC 파일 이름 │
├──────────────────────────────────────────────── ────┼───────────────────────────────┼───────────── ──────────────┤
│ns3::PhyStatsCalculator::DlRsrpSinr파일 이름 │ -DlRsrpSinrStats.txt │ DL PHY 파일 이름 │
├──────────────────────────────────────────────── ────┼───────────────────────────────┼───────────── ──────────────┤
│ns3::PhyStatsCalculator::UlSinr파일 이름 │ -UlSinrStats.txt │ UL PHY 파일 이름 │
└──────────────────────────────────────────────── ────┴───────────────────────────────┴──────────── ──────────────┘
NS-3 구성 값을 시뮬레이션에 전달하는 다양한 방법을 제공합니다. 이에
예를 들어 명령줄 인수를 사용하겠습니다. 기본적으로 다음을 추가하여 수행됩니다.
매개변수와 그 값을 waf 각 개별 시뮬레이션을 시작할 때 호출합니다. 그래서
전에, waf 3가지 시뮬레이션을 호출하기 위한 호출은 다음과 같습니다.
$ ./waf --run="lena-dual-stripe
--simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
--epc=1 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
--ns3::LteHelper::HandoverAlgorithm=ns3::NoOpHandoverAlgorithm
--ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=no-op-DlRlcStats.txt
--ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=no-op-UlRlcStats.txt
--ns3::PhyStatsCalculator::DlRsrpSinrFilename=no-op-DlRsrpSinrStats.txt
--ns3::PhyStatsCalculator::UlSinrFilename=no-op-UlSinrStats.txt
--RngRun=1" > no-op.txt
$ ./waf --run="lena-dual-stripe
--simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
--epc=1 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
--ns3::LteHelper::HandoverAlgorithm=ns3::A3RsrpHandoverAlgorithm
--ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=a3-rsrp-DlRlcStats.txt
--ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=a3-rsrp-UlRlcStats.txt
--ns3::PhyStatsCalculator::DlRsrpSinrFilename=a3-rsrp-DlRsrpSinrStats.txt
--ns3::PhyStatsCalculator::UlSinrFilename=a3-rsrp-UlSinrStats.txt
--RngRun=1" > a3-rsrp.txt
$ ./waf --run="lena-dual-stripe
--simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
--epc=1 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
--ns3::LteHelper::HandoverAlgorithm=ns3::A2A4RsrqHandoverAlgorithm
--ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=a2-a4-rsrq-DlRlcStats.txt
--ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=a2-a4-rsrq-UlRlcStats.txt
--ns3::PhyStatsCalculator::DlRsrpSinrFilename=a2-a4-rsrq-DlRsrpSinrStats.txt
--ns3::PhyStatsCalculator::UlSinrFilename=a2-a4-rsrq-UlSinrStats.txt
--RngRun=1" > a2-a4-rsrq.txt
실행에 대한 몇 가지 참고 사항:
· 일부 인수는 이미 인수와 동일하기 때문에 지정되지 않았습니다.
기본값. 또한 각 기본 설정에서 핸드오버 알고리즘을 유지합니다.
· 시뮬레이션 출력의 파일 이름(예: RLC 추적 및 PHY 추적)을 기록해 두십시오.
다음 시뮬레이션 실행 시 덮어쓰이지 않도록 해야 합니다. 이에
예를 들어 명령줄 인수를 사용하여 이름을 하나씩 지정합니다.
· --RngRun=1 끝에 있는 인수는 실행 번호를 설정하는 데 사용됩니다.
시뮬레이션에 사용된 난수 생성기. 우리는 동일한 시뮬레이션을 다시 실행합니다.
다른 RngRun 따라서 동일한 값에 대한 여러 개의 독립적인 복제가 생성됩니다.
시뮬레이션. 그런 다음 이러한 복제에서 얻은 결과를 평균하여 다음을 달성합니다.
약간의 통계적 신뢰도.
· 우리는 --generateRem=1 생성에 필요한 파일을 생성하는 인수
시뮬레이션의 REM(Radio Environment Map). 결과는 그림 REM 획득
에 a 시뮬레이션 in 이양 운동 아래는 다음과 같이 생산할 수 있습니다.
섹션에 설명된 단계 라디오 환경 지도. 이 그림은 또한
다음을 사용하여 시뮬레이션 시작 시 eNodeB 및 UE의 위치 RngRun = 1. 다른
~의 가치 RngRun 다른 UE 위치를 생성할 수 있습니다.
[이미지] 핸드오버 캠페인 시뮬레이션에서 얻은 REM.UNINDENT
몇 시간 동안 실행한 후 시뮬레이션 캠페인은 결국 종료됩니다. 다음으로 우리는
의미 있는 결과를 얻기 위해 생성된 시뮬레이션 출력에 대해 일부 후처리를 수행합니다.
그것에서 정보.
이 예에서는 GNU Octave를 사용하여 처리량 및 SINR 데이터 처리를 지원합니다.
아래의 샘플 GNU Octave 스크립트에 설명된 대로:
% RxBytes는 10번째 열입니다.
DlRxBytes = 로드("no-op-DlRlcStats.txt") (:,10);
DlAverageThroughputKbps = 합계(DlRxBytes) * 8 / 1000 / 50
% RxBytes는 10번째 열입니다.
UlRxBytes = 로드("no-op-UlRlcStats.txt") (:,10);
UlAverageThroughputKbps = 합계(UlRxBytes) * 8 / 1000 / 50
% Sinr은 6번째 열입니다.
DlSinr = 로드("no-op-DlRsrpSinrStats.txt") (:,6);
% NaN 값 제거
idx = isnan(DlSinr);
DlSinr(idx) = 0;
DlAverageSinrDb = 10 * log10 (평균 (DlSinr)) % dB로 변환
% Sinr은 5번째 열입니다.
UlSinr = 로드("no-op-UlSinrStats.txt") (:,5);
% NaN 값 제거
idx = 이스난(UlSinr);
UlSinr(idx) = 0;
UlAverageSinrDb = 10 * log10 (평균 (UlSinr)) % dB로 변환
핸드오버 횟수는 간단한 쉘 스크립트를 사용하여 핸드오버 횟수를 계산할 수 있습니다.
로그 파일에 "Handover" 문자열이 나타납니다.
$ grep "핸드오버" no-op.txt | 화장실 -l
작업대 결과 of 이양 운동 아래는 작업이 완료된 후의 전체 통계를 보여줍니다.
모든 개별 시뮬레이션 실행에 대한 후처리를 수행합니다. 표시된 값은 평균입니다.
에서 얻은 결과 중 RngRun 1, 2, 3, 4 중.
결과 of 이양 운동
┌────────────────────┬────────────┬────────────┬─ ───────────────┐
│통계 │ 무작동 │ A2-A4-RSRQ │ 가장 강한 셀 │
├────────────────────┼────────────┼─────────────┼─ ───────────────┤
│평균 DL 시스템 │ 6kbps │ 615kbps │ 20kbps │
│처리량 │ │ │ │
├────────────────────┼────────────┼─────────────┼─ ───────────────┤
│평균 UL 시스템 │ 4 095kbps │ 5 705kbps │ 6 627kbps │
│처리량 │ │ │ │
├────────────────────┼────────────┼─────────────┼─ ───────────────┤
│평균 DL SINR │ -0.10dB │ 5.19dB │ 5.24dB │
├────────────────────┼────────────┼─────────────┼─ ───────────────┤
│평균 UL SINR │ 9.54dB │ 81.57dB │ 79.65dB │
├────────────────────┼────────────┼─────────────┼─ ───────────────┤
│인계 횟수 │ 0 │ 0.05694 │ 0.04771 │
│초당 UE당 │ │ │ │
└────────────────────┴───────────┴─────────────┴─ ───────────────┘
결과는 이동성 시뮬레이션에서 핸드오버 알고리즘을 사용하면 두 가지 모두가 향상된다는 것을 보여줍니다.
사용자 처리량과 SINR이 크게 향상되었습니다. 둘 사이에는 차이가 거의 없습니다
이 캠페인 시나리오의 핸드오버 알고리즘. 그들의 모습을 보는 것은 흥미로울 것입니다.
홈 eNodeB 배포 시나리오와 같은 다양한 시나리오에서의 성능.
진동수 재사용 예
주파수 재사용 알고리즘 기능을 보여주는 두 가지 예가 있습니다.
레나-주파수-재사용 삼각형 레이아웃의 3개 eNB를 사용한 간단한 예입니다. 셀이 3개 있어요
이 삼각형의 중심에 위치한 edge UE와 3개의 셀 중심 UE(하나는 근처에 있음)
각 eNB). 사용자는 무작위로 위치한 UE의 수를 지정할 수도 있습니다. FR 알고리즘은
eNB에 설치되어 있고 각 eNB는 서로 다른 FrCellTypeId를 가지고 있습니다. 이는 각 eNB가 사용하는 FrCellTypeId를 의미합니다.
다른 FR 구성. 사용자가 실행할 수 있습니다 레나-주파수-재사용 6가지 다른 FR
알고리즘: NoOp, Hard FR, Strict FR, Soft FR, Soft FFR 및 Enhanced FFR. 시나리오를 실행하려면
분산 FFR 알고리즘을 사용하는 경우 사용자는 다음을 사용해야 합니다. 레나-분산-ffr. 이 두 가지 예
매우 유사하지만 Distributed FFR에서는 EPC를 사용해야 하기 때문에 분할되었습니다.
다른 알고리즘은 그렇지 않습니다.
실행하려면 레나-주파수-재사용 다양한 주파수 재사용 알고리즘을 사용하면 사용자는 다음을 수행해야 합니다.
기본 속성을 재정의하여 FR 알고리즘을 지정합니다. ns3::LteHelper::Ffr알고리즘.
실행할 명령 예 레나-주파수-재사용 Soft FR 알고리즘을 사용하는 방법은 다음과 같습니다.
$ ./waf --run "lena-주파수-재사용 --ns3::LteHelper::FfrAlgorithm=ns3::LteFrSoftAlgorithm"
이 예에서는 REM 및 스펙트럼 분석기 추적을 생성하는 기능이 추가되었습니다.
사용자는 설정을 통해 생성을 활성화할 수 있습니다. 생성Rem and 생성 스펙트럼 추적
속성.
데이터 채널에서 RB 1에 대한 REM을 생성하는 명령 레나-주파수-재사용 시나리오
Soft FR 알고리즘은 다음과 같습니다.
$ ./waf --run "lena-주파수-재사용 --ns3::LteHelper::FfrAlgorithm=ns3::LteFrSoftAlgorithm
--generateRem=true --remRbId=1"
Soft FR에 대한 무선 환경 맵은 그림에 나와 있습니다. REM for RB 1 획득 에
레나-주파수-재사용 예 과 부드러움 FR 연산 사용 가능.
[이미지] 에서 얻은 RB 1에 대한 REM 레나-주파수-재사용 Soft FR 알고리즘의 예
활성화되었습니다.UNINDENT
스펙트럼 추적을 생성하는 명령 레나-주파수-재사용 Soft FFR을 사용한 시나리오
알고리즘은 아래에 나와 있습니다(스펙트럼 분석기 위치는 내부에서 구성해야 함).
스크립트):
$ ./waf --run "lena-주파수-재사용 --ns3::LteHelper::FfrAlgorithm=ns3::LteFfrSoftAlgorithm
--generateSpectrumTrace=true"
스펙트럼 분석기 추적의 예가 그림에 나와 있습니다. 스펙트럼 분석기 더듬다 획득
에 레나-주파수-재사용 예 과 부드러움 FFR 연산 사용하도록 설정되었습니다. 스펙트럼 분석기 였다
위치한 필요한 것 eNB 과 FrCellTypeId 2.. 볼 수 있듯이, 서로 다른 데이터 채널 부대역
구성에 따라 다른 전력 레벨로 전송되는 반면 제어 채널은
전체 시스템 대역폭을 따라 균일한 전력으로 전송됩니다.
[이미지] 스펙트럼 분석기 추적에서 얻은 레나-주파수-재사용 Soft FFR의 예
알고리즘이 활성화되었습니다. 스펙트럼 분석기는 FrCellTypeId 2..UNINDENT가 포함된 eNB가 필요한 것으로 확인되었습니다.
레나-듀얼-스트라이프 모든 매크로에 설치된 주파수 재사용 알고리즘을 사용하여 실행할 수도 있습니다.
eNB. 사용자는 기본 속성을 재정의하여 FR 알고리즘을 지정해야 합니다.
ns3::LteHelper::Ffr알고리즘. 실행할 명령 예 레나-듀얼-스트라이프 하드 FR 포함
알고리즘은 아래와 같습니다:
$ ./waf --run="lena-dual-stripe
--simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
--epc=1 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
--ns3::LteHelper::HandoverAlgorithm=ns3::NoOpHandoverAlgorithm
--ns3::LteHelper::FfrAlgorithm=ns3::LteFrHard알고리즘
--ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=no-op-DlRlcStats.txt
--ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=no-op-UlRlcStats.txt
--ns3::PhyStatsCalculator::DlRsrpSinrFilename=no-op-DlRsrpSinrStats.txt
--ns3::PhyStatsCalculator::UlSinrFilename=no-op-UlSinrStats.txt
--RngRun=1" > no-op.txt
데이터 채널에서 RB 1에 대한 REM을 생성하는 명령 예 레나-듀얼-스트라이프 대본
Hard FR 알고리즘을 사용하는 방법은 다음과 같습니다.
$ ./waf --run="lena-dual-stripe
--simTime=50 --nBlocks=0 --nMacroEnbSites=7 --nMacroEnbSitesX=2
--epc=0 --useUdp=0 --outdoorUeMinSpeed=16.6667 --outdoorUeMaxSpeed=16.6667
--ns3::LteHelper::HandoverAlgorithm=ns3::NoOpHandoverAlgorithm
--ns3::LteHelper::FfrAlgorithm=ns3::LteFrHard알고리즘
--ns3::RadioBearerStatsCalculator::DlRlcOutputFilename=no-op-DlRlcStats.txt
--ns3::RadioBearerStatsCalculator::UlRlcOutputFilename=no-op-UlRlcStats.txt
--ns3::PhyStatsCalculator::DlRsrpSinrFilename=no-op-DlRsrpSinrStats.txt
--ns3::PhyStatsCalculator::UlSinrFilename=no-op-UlSinrStats.txt
--RngRun=1 --generateRem=true --remRbId=1" > no-op.txt
다음에서 생성된 RB 1, 10, 20에 대한 무선 환경 맵 레나-듀얼-스트라이프 시나리오
하드 주파수 재사용 알고리즘은 아래 그림에 나와 있습니다. 이 RB가 선택되었습니다.
왜냐하면 각각은 다른 FR 세포 유형에 의해 사용되기 때문입니다.
[이미지] 에서 얻은 RB 1에 대한 REM 레나-듀얼-스트라이프 Hard FR 알고리즘을 이용한 시뮬레이션
활성화되었습니다.UNINDENT
[이미지] 에서 얻은 RB 10에 대한 REM 레나-듀얼-스트라이프 Hard FR 알고리즘을 이용한 시뮬레이션
활성화되었습니다.UNINDENT
[이미지] 에서 얻은 RB 20에 대한 REM 레나-듀얼-스트라이프 Hard FR 알고리즘을 이용한 시뮬레이션
활성화되었습니다.UNINDENT
문제해결 and 디버깅 도움말
많은 사용자가 ns-3-users 메일링 리스트에 예를 들어 왜 아무 것도 받지 못하는지 묻는 게시물을 게시합니다.
시뮬레이션에서는 트래픽이 발생하거나 업링크만 있고 다운링크 트래픽은 없을 수도 있습니다. 대부분의 경우
이 경우에는 사용자 시뮬레이션 프로그램의 버그입니다. 디버깅을 위한 몇 가지 팁은 다음과 같습니다.
프로그램을 실행하고 문제의 원인을 찾아보세요.
일반적인 접근 방식은 관련 로깅을 선택적이고 점진적으로 활성화하는 것입니다.
LTE 모듈 구성 요소는 활성화될 때마다 출력이 예상대로인지 확인합니다. ~ 안에
세부 사항 :
· 먼저 제어 평면, 특히 RRC 연결 설정을 확인합니다.
절차, 로그 구성요소 LteUeRrc 및 LteEnbRrc를 활성화하여
· 그런 다음 로그를 활성화하여 시작하여 데이터 평면에서 패킷 전송을 확인합니다.
LteUeNetDevice 및 EpcSgwPgwApplication, EpcEnbApplication 구성요소
LTE 라디오 스택(PDCP, RLC, MAC, 마지막으로 PHY)으로 이동합니다. 이 모든 것은 당신까지
패킷 처리/전달이 중지되는 위치를 찾으세요.
지원 문서
살펴보기
ns-3 LTE 모듈을 테스트하고 검증하기 위해 다음과 같은 여러 테스트 스위트가 제공됩니다.
ns-3 테스트 프레임워크와 통합되었습니다. 이를 실행하려면 다음을 구성해야 합니다.
다음과 같은 방식으로 시뮬레이터를 빌드합니다.
$ ./waf 구성 --enable-tests --enable-modules=lte --enable-examples
$ ./test.py
위의 내용은 LTE 모듈에 속하는 테스트 스위트뿐만 아니라
LTE 모듈이 의존하는 다른 모든 ns-3 모듈에 속합니다. ns-3 보기
테스트 프레임워크에 대한 일반적인 정보에 대한 매뉴얼입니다.
다음과 같은 방법으로 HTML 형식의 보다 자세한 보고서를 얻을 수 있습니다.
$ ./test.py -w 결과.html
위의 명령을 실행한 후 다음을 열면 각 테스트에 대한 자세한 결과를 볼 수 있습니다.
파일 결과.html 웹 브라우저로.
다음 명령을 사용하여 각 테스트 스위트를 개별적으로 실행할 수 있습니다.
$ ./test.py -s 테스트 스위트 이름
에 대한 자세한 내용은 test.py 및 ns-3 테스트 프레임워크는 ns-3을 참조하십시오.
수동.
상품 설명 of 전에, test 스위트 룸
단위 테스트
SINR 계산 in 전에, 다운 링크
테스트 스위트 LTE-다운링크-sinr 다운링크에서 SINR 계산이 수행되는지 확인
바르게. 다운링크의 SINR은 데이터에 할당된 각 RB에 대해 계산됩니다.
고려되는 eNB로부터 의도된 신호의 전력을 다음으로 나누어 전송합니다.
잡음 전력과 다른 eNB에서 나오는 동일한 RB의 모든 전송의 합
(간섭 신호):
일반적으로 서로 다른 기간 동안 서로 다른 신호가 활성화될 수 있습니다. 우리는
큰 덩어리 시작 또는 끝 유형의 두 사건 사이의 시간 간격
파형. 즉, 청크는 집합이 지속되는 시간 간격을 식별합니다.
활성 파형은 변경되지 않습니다. i를 일반적인 덩어리라고 하고, T_i의 지속 시간과
thrm{SINR_i}는 위의 방정식으로 계산된 SINR입니다. 평균 계산
SINR 리me
테스트 스위트는 위의 계산이 시뮬레이터에서 올바르게 수행되는지 확인합니다.
테스트 벡터는 위를 구현하는 Octave 스크립트를 통해 오프라인으로 얻습니다.
방정식을 통해 다수의 무작위로 전송된 신호와 간섭을 재현합니다.
UE가 eNB의 신호를 디코딩하려고 시도하는 시나리오를 모방하는 신호
다른 eNB의 간섭에 직면합니다. 계산된 값이 다음과 같으면 테스트가 통과됩니다.
10^{-7}의 허용오차 내에서 테스트 벡터입니다. 공차는 다음을 설명하기 위한 것입니다.
부동 소수점 연산의 일반적인 근사 오류입니다.
SINR 계산 in 전에, 업 링크
테스트 스위트 LTE-업링크-sinr 업링크에서 SINR 계산이 수행되는지 확인
바르게. 이 테스트 스위트는 다음과 동일합니다. LTE-다운링크-sinr 이전에 설명한
섹션, 신호와 간섭의 차이점은 이제 다음을 참조하십시오.
전송은 UE가 수행하고, 수신은 eNB가 수행합니다. 이 테스트 스위트
다수의 무작위로 전송된 신호와 간섭 신호를 재현하여
eNB가 여러 UE의 신호를 동시에 디코딩하려고 시도하는 시나리오(
다른 UE(eNB의 셀에 있는 UE)의 간섭을 받는 동안
다른 셀에).
테스트 벡터는 전용 Octave 스크립트를 통해 얻습니다. 다음과 같은 경우 테스트가 통과됩니다.
계산된 값은 10^{-7}의 허용오차 내에서 테스트 벡터와 동일합니다.
다운링크 SINR 테스트는 부동 소수점 산술 근사 문제를 다룹니다.
E-UTRA 절대 라디오 진동수 채널 번호 (EARFCN)
테스트 스위트 LTE-earfcn 사용하는 반송파 주파수를 확인합니다.
LteSpectrumValueHelper 클래스(LTE 스펙트럼 모델을 구현함)는 다음에서 수행됩니다.
[TS36101]을 준수합니다. 여기서 E-UTRA 절대 무선 주파수 채널 번호는
(EARFCN)이 정의됩니다. 이 테스트 스위트의 테스트 벡터는 EARFCN 값 세트로 구성됩니다.
그리고 사양에 따라 손으로 계산된 해당 반송파 주파수
[TS36101]. LteSpectrumValueHelper에서 반환된 반송파 주파수가 다음과 같은 경우 테스트가 통과됩니다.
테스트 벡터의 각 요소에 대해 알려진 값과 동일합니다.
테스트
고객에게 기여 열매 맺는 초목 비활성화 테스트
테스트 스위트 'lte-test-deactivate-bearer'는 단일 EnodeB 및 Three로 테스트 케이스를 생성합니다.
UE의. 각 UE는 하나의 Default EPS Bearer와 동일한 베어러를 가진 하나의 Dedicated EPS Bearer로 구성됩니다.
사양이지만 ARP가 다릅니다. 테스트 케이스 흐름은 다음과 같습니다: UE 연결 -> 생성
Default+Dedicated Bearer -> Dedicated Bearer 중 하나를 비활성화합니다.
테스트 케이스는 다음의 베어러 ID 2(LCID=BearerId+2)를 갖는 전용 베어러를 추가로 비활성화합니다.
첫 번째 UE(UE_ID=1) 사용자는 다음을 사용하여 특정 시간 지연 후 베어러 비활성화를 예약할 수 있습니다.
시뮬레이터::Schedule () 메서드.
테스트 케이스 실행이 끝나면 DlRlcStats.txt 및 UlRlcStats.txt가 생성됩니다. 열쇠
통계에서 확인해야 할 필드는 다음과 같습니다.
|
시작 | 끝 | 셀 ID | 임시 | RNTI | LCID | Tx바이트 | Rx바이트 |
테스트 케이스는 1개의 에포크(epoch)에 걸쳐 실행됩니다. 0.04) 첫 번째 Epoch(1.04s-XNUMXs)에서 모든 UE와
해당 베어러가 연결됩니다.
활성화된 전용 베어러를 통한 패킷 흐름.
2. 두 번째 Epoch(1.04s-2.04s)에서는 베어러 비활성화가 인스턴스화되므로 사용자는 다음을 볼 수 있습니다.
다른 베어러에 비해 UE_ID=1 및 LCID=4의 TxBytes 수가 상대적으로 적습니다.
3. 세 번째 Epoch(2.04s-3.04s)에서는 UE_ID=1 및 LCID=4의 베어러 비활성화가
완료되면 사용자는 LCID=4와 관련된 로깅을 볼 수 없습니다.
1) IMSI=1 및 LCID=4가 세 번째 에포크에서 완전히 제거된 경우에만 테스트 사례가 통과됩니다. 2)
IMSI=1 및 LCID=4에 해당하는 TxBytes 및 RxBytes에 패킷이 표시되지 않습니다. 위의 경우
기준이 실패한 것으로 간주되는 테스트 케이스와 일치하지 않습니다.
적응 조정 and 코딩 테스트
테스트 스위트 LTE-링크 적응 시나리오를 재현하는 시스템 테스트를 제공합니다.
단일 eNB 및 단일 UE. 서로 다른 테스트 케이스가 생성됩니다.
UE가 인지하는 SNR 값. 테스트의 목적은 각 테스트 케이스에서 다음 사항을 확인하는 것입니다.
선택한 MCS는 일부 알려진 참조 값에 해당합니다. 이 기준값은 다음과 같습니다.
Octave에서 다시 구현하여(참조 src/lte/test/reference/lte_amc.m)에 설명된 모델
스펙트럼 효율 계산을 위한 섹션 sec-lte-amc 및
[R1-081483]의 테이블을 수동으로 조회하여 해당 MCS 인덱스를 확인하세요. 결과
테스트 벡터는 그림에 표시됩니다. Test 벡터 for 적응 조정 and 코딩.
시뮬레이터에서 사용하는 MCS는 추적 출력을 얻어 측정됩니다.
4ms 후에 스케줄러에 의해 생성됩니다(이는 초기 지연을 설명하는 데 필요합니다).
CQI 보고). 시뮬레이터에 의해 계산된 SINR은 다음을 사용하여 얻습니다.
LteChunk프로세서 상호 작용. 다음 조건이 모두 충족되면 테스트가 통과됩니다.
만족하는:
1. 시뮬레이터에 의해 계산된 SINR은 내부 테스트 벡터의 SNR에 해당합니다.
10^{-7}의 절대 허용오차;
2. 시뮬레이터에서 사용된 MCS 지수는 테스트의 MCS 지수와 정확히 일치합니다.
벡터.
[이미지] 적응형 변조 및 코딩을 위한 테스트 벡터.UNINDENT
세포 간 간섭 테스트
테스트 스위트 LTE 간섭 셀 간을 다시 생성하는 시스템 테스트를 제공합니다.
두 개의 eNB가 있는 간섭 시나리오(각각에는 단일 UE가 연결되어 있고 사용)
다운링크와 업링크 모두에서 적응형 변조 및 코딩. 토폴로지는
시나리오는 그림에 나와 있습니다. 토폴로지 for 전에, 셀 간 간섭 test. d_1
매개변수는 각 UE와 UE가 연결된 eNB까지의 거리를 나타내는 반면, d_2는 UE가 연결된 eNB까지의 거리를 나타냅니다.
매개변수는 간섭자 거리를 나타냅니다. 시나리오 토폴로지는 다음과 같습니다.
간섭자 거리는 업링크와 다운링크에 대해 동일합니다. 아직도, 실제
전파 손실이 다르기 때문에 인식되는 간섭 전력도 달라집니다.
업링크 및 다운링크 대역에서. d_1과
d_2 매개변수.
[이미지] 셀 간 간섭 테스트를 위한 토폴로지.UNINDENT
테스트 벡터는 전용 옥타브 스크립트(에서 사용 가능)를 사용하여 얻습니다.
src/lte/test/reference/lte_link_budget_interference.m), 링크 예산을 수행합니다.
각 테스트 케이스의 토폴로지에 해당하는 계산(간섭 포함),
결과 SINR 및 스펙트럼 효율을 출력합니다. 후자는 다음에 익숙합니다.
(에 대해 채택된 것과 동일한 절차를 사용하여 결정) 적응 조정 and 코딩 테스트. 우리
테스트 벡터에는 업링크와 다운링크에 대한 별도의 값이 포함되어 있습니다.
UE 측정 테스트
테스트 스위트 LTE-UE 측정 셀 간을 다시 생성하는 시스템 테스트를 제공합니다.
정의된 것과 동일한 간섭 시나리오 LTE 간섭 테스트 스위트.
그러나 이 테스트에서는 테스트할 수량을 RSRP와 RSRQ로 표시합니다.
스택의 서로 다른 두 지점, 즉 소스에서 UE가 수행한 측정
UE PHY 계층이고 목적지는 eNB RRC이다.
테스트 벡터는 전용 옥타브 스크립트(에서 사용 가능)를 사용하여 얻습니다.
src/lte/test/reference/lte-ue-measurements.m), 링크 예산 계산을 수행합니다.
(간섭 포함) 각 테스트 케이스의 토폴로지에 대응하여 출력합니다.
결과 RSRP 및 RSRQ. 얻은 값은 다음의 정확성을 확인하는 데 사용됩니다.
PHY 계층의 UE 측정. 그 이후에는 3GPP에 따라 변환되어야 합니다.
eNB RRC 수준에서 정확성을 확인하기 위한 형식입니다.
UE 측량 구성 테스트
앞서 언급한 테스트 모음 외에도 UE 테스트를 위한 3개의 다른 테스트 모음이 있습니다.
측정 : lte-ue-측정-조각별-1, lte-ue-측정-조각별-2및
LTE-UE-측정-인계. 이 테스트 모음은 보고 트리거에 더 중점을 둡니다.
절차, 즉 이벤트 기반 트리거링 구현의 정확성
기준은 여기에서 확인됩니다.
보다 구체적으로, 테스트는 다음을 검증합니다. 타이밍 그리고 함유량 각 측정 보고서의
eNodeB에서 수신했습니다. 각 테스트 케이스는 독립형 LTE 시뮬레이션이며 테스트 케이스는
측정 보고서가 지정된 시간에만 발생하고 올바른 값을 표시하면 통과합니다.
RSRP 수준(RSRQ는 현재 검증되지 않음)
조각으로 구성
조각별 구성은 특정 UE 측정 구성을 테스트하는 것을 목표로 합니다. 그만큼
시뮬레이션 스크립트는 UE에 해당 측정 구성을 설정합니다.
시뮬레이션 내내 활성화됩니다.
기준 값은 손으로 미리 계산되므로 다음과 같은 몇 가지 가정이 이루어집니다.
시뮬레이션을 단순화합니다. 첫째, 채널은 경로 손실 모델에만 영향을 받습니다.
경우에는 Friis 모델이 사용됩니다). 둘째, 이상적인 RRC 프로토콜을 사용하며, Layer 3
필터링이 비활성화되었습니다. 마지막으로 UE는 4개 사이에서 미리 정의된 모션 패턴으로 이동합니다.
그림과 같이 뚜렷한 점 UE 운동 더듬다 도처에 전에, 시뮬레이션 in
조각별로 구성 아래에. 따라서 측정된 RSRP의 변동은 다음과 같을 수 있습니다.
더 쉽게 결정됩니다.
[이미지] 조각별 구성으로 시뮬레이션 전반에 걸쳐 UE 이동 추적.UNINDENT
뒤에 숨은 동기 "텔레포트" 미리 정의된 지점 사이에
RSRP 수준의 급격한 변화로 인해 진입 또는 탈퇴 트리거가 보장됩니다.
테스트된 이벤트의 조건. 급격한 변경을 수행하여 테스트를 실행할 수 있습니다.
더 짧은 시간.
그림 정확히 잰 RSRP 더듬다 of an 예 이벤트 A1 test 케이스 in 조각별로 구성
아래는 레이어 1이 PHY 레이어에 의해 필터링된 후 측정된 RSRP를 보여줍니다.
조각별 구성으로 시뮬레이션합니다. 레이어 3 필터링이 비활성화되었기 때문에 이러한
보고 트리거를 평가하기 위해 UE RRC 인스턴스가 사용하는 정확한 값입니다.
절차. 값은 기본값인 200ms마다 새로 고쳐집니다.
PHY 계층 측정 보고서의 필터링 기간입니다. 그림에는 시간도 표시되어 있습니다.
이벤트 A1 예시 인스턴스의 조건에 들어가고 나가는 경우(서빙 셀은
임계값보다 좋음)이 시뮬레이션 중에 발생합니다.
[이미지] 이벤트 A1 테스트 사례 예시의 RSRP 추적을 조각별로 측정했습니다.
구성.UNINDENT
각 보고 기준은 다양한 임계값/오프셋을 사용하여 여러 번 테스트됩니다.
매개변수. 일부 테스트 시나리오에서는 히스테리시스와 트리거 시간도 고려합니다.
그림 정확히 잰 RSRP 더듬다 of an 예 이벤트 A1 과 히스테리시스 test 케이스 in 조각별로
구성 이벤트 A1 테스트의 또 다른 예에서 히스테리시스의 효과를 묘사합니다.
[이미지] 히스테리시스 테스트 케이스가 포함된 예제 이벤트 A1의 측정된 RSRP 추적
조각별 구성.UNINDENT
조각별 구성은 UE 측정의 두 가지 테스트 스위트에 사용됩니다. 첫 번째는
lte-ue-측정-조각별-1, 이후부터는 1개의 UE를 시뮬레이션하는 Piecewise 테스트 #1과
1 eNodeB. 다른 하나는 lte-ue-측정-조각별-2, 1개의 UE와 2개의 eNodeB를 갖습니다.
시뮬레이션에서.
조각별 테스트 #1은 종속적이지 않은 이벤트 기반 기준을 테스트하기 위한 것입니다.
이웃 셀의 존재 여부. 이러한 기준에는 이벤트 A1 및 A2가 포함됩니다. 그만큼
다른 이벤트도 간략하게 테스트하여 여전히 올바르게 작동하는지 확인합니다.
(아무것도 보고하지 않지만) 이웃 셀이 없는 경우. 테이블 UE
측정 시간 상관관계 test 시나리오 사용 조각별로 구성 #1 아래에는 시나리오가 나열되어 있습니다.
조각별 테스트 #1에서 테스트되었습니다.
UE 측정 시간 상관관계 test 시나리오 사용 조각별로 구성 #1
┌───────┬───────────┬─────────────────┬────────── ──┬─────────────────┐
│테스트 # │ 보고 │ 임계값/오프셋 │ 히스테리시스 │ 트리거 시간 │
│ │ 기준 │ │ │ │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│1 │ 이벤트 A1 │ 낮음 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│2 │ 이벤트 A1 │ 일반 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│3 │ 이벤트 A1 │ 일반 │ 아니요 │ 단기 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│4 │ 이벤트 A1 │ 보통 │ 없음 │ 롱 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│5 │ 이벤트 A1 │ 일반 │ 없음 │ 슈퍼 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│6 │ 이벤트 A1 │ 일반 │ 예 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│7 │ 이벤트 A1 │ 높음 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│8 │ 이벤트 A2 │ 낮음 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│9 │ 이벤트 A2 │ 일반 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│10 │ 이벤트 A2 │ 일반 │ 아니요 │ 단기 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│11 │ 이벤트 A2 │ 보통 │ 없음 │ 롱 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│12 │ 이벤트 A2 │ 일반 │ 없음 │ 슈퍼 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│13 │ 이벤트 A2 │ 일반 │ 예 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│14 │ 이벤트 A2 │ 높음 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│15 │ 이벤트 A3 │ 제로 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│16 │ 이벤트 A4 │ 일반 │ 아니요 │ 아니요 │
└───────┴───────────┴─────────────────┴────────── ──┴─────────────────┘
│17 │ 이벤트 A5 │ 일반-일반 │ 아니요 │ 아니요 │
└───────┴───────────┴─────────────────┴────────── ──┴─────────────────┘
Event A3, A4, A5와 같은 다른 이벤트는 주변 셀의 측정에 따라 달라지므로
Piecewise 테스트 #2에서 더 철저하게 테스트되었습니다. 시뮬레이션은 노드를
직선으로 이동하고 UE에게 다음을 지시합니다. "도약" Piecewise 테스트 #1과 비슷한 방식으로 수행됩니다.
시뮬레이션에서는 Handover가 비활성화되므로 서빙 셀과 인접 셀의 역할이 수행됩니다.
시뮬레이션 중에는 전환하지 마십시오. 테이블 UE 측정 시간 상관관계 test 시나리오 사용 조각별로
구성 #2 아래에는 Piecewise 테스트 #2에서 테스트된 시나리오가 나와 있습니다.
UE 측정 시간 상관관계 test 시나리오 사용 조각별로 구성 #2
┌───────┬───────────┬─────────────────┬────────── ──┬─────────────────┐
│테스트 # │ 보고 │ 임계값/오프셋 │ 히스테리시스 │ 트리거 시간 │
│ │ 기준 │ │ │ │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│1 │ 이벤트 A1 │ 낮음 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│2 │ 이벤트 A1 │ 일반 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│3 │ 이벤트 A1 │ 일반 │ 예 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│4 │ 이벤트 A1 │ 높음 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│5 │ 이벤트 A2 │ 낮음 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│6 │ 이벤트 A2 │ 일반 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│7 │ 이벤트 A2 │ 일반 │ 예 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│8 │ 이벤트 A2 │ 높음 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│9 │ 사건 A3 │ 긍정적 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│10 │ 이벤트 A3 │ 제로 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│11 │ 이벤트 A3 │ 제로 │ 아니요 │ 쇼트 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│12 │ 이벤트 A3 │ 제로 │ 아니요 │ 슈퍼 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│13 │ 이벤트 A3 │ 제로 │ 예 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│14 │ 사건 A3 │ 부정적 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│15 │ 이벤트 A4 │ 낮음 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│16 │ 이벤트 A4 │ 일반 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│17 │ 이벤트 A4 │ 일반 │ 아니요 │ 단기 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│18 │ 이벤트 A4 │ 일반 │ 없음 │ 슈퍼 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│19 │ 이벤트 A4 │ 일반 │ 예 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│20 │ 이벤트 A4 │ 높음 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│21 │ 이벤트 A5 │ 저-저 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│22 │ 이벤트 A5 │ 낮음-보통 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│23 │ 이벤트 A5 │ 저-고 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│24 │ 이벤트 A5 │ 보통-낮음 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│25 │ 이벤트 A5 │ 일반-일반 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│26 │ 이벤트 A5 │ 노멀-노멀 │ 없음 │ 쇼트 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│27 │ 이벤트 A5 │ 노멀-노멀 │ 없음 │ 슈퍼 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│28 │ 이벤트 A5 │ 정상-정상 │ 예 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│29 │ 이벤트 A5 │ 보통-고 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│30 │ 이벤트 A5 │ 고-저 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│31 │ 이벤트 A5 │ 높음-보통 │ 아니요 │ 아니요 │
├───────┼───────────┼─────────────────┼────────── ──┼─────────────────┤
│32 │ 이벤트 A5 │ 고-고 │ 아니요 │ 아니요 │
└───────┴───────────┴─────────────────┴────────── ──┴─────────────────┘
트리거 시간 테스트에 대한 참고 사항은 3가지 다른 값을 사용하여 테스트된다는 것입니다.
트리거 시간: 짧은 (보고 간격보다 짧음), 긴 (필터보다 짧음
측정 기간은 200ms), 감독자 (200ms 이상). 처음 두 가지는 다음을 보장합니다.
트리거 시간 평가는 항상 PHY에서 받은 최신 측정 보고서를 사용합니다.
층. 마지막 항목은 트리거 취소 시간을 확인하는 역할을 담당하지만
PHY의 측정 보고서에 진입/탈퇴 조건이 없음으로 표시되는 경우의 예
첫 번째 트리거가 실행되기 전에는 true입니다.
이양 구성
Handover 설정의 목적은 UE 측정 여부를 검증하는 것입니다.
성공적인 핸드오버가 이루어진 후 구성이 올바르게 업데이트됩니다. 이를 위해
목적에 따라 시뮬레이션은 서로 다른 UE 측정값을 사용하여 2개의 eNodeB를 구성합니다.
구성하면 UE는 한 셀에서 다른 셀로 핸드오버를 수행합니다. UE는
2개의 eNodeB 사이의 직선에 위치하며 핸드오버가 호출됩니다.
수동으로. 각 시뮬레이션의 지속 시간은 2초(마지막 테스트 사례 제외)이며
핸드오버는 정확히 시뮬레이션 중간에 트리거됩니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 LTE-UE-측정-인계 테스트 스위트에는 다양한 유형의 구성이 포함됩니다.
차이점. 첫 번째는 보고 간격의 차이입니다. 예를 들어 첫 번째 eNodeB는
480ms 보고 간격으로 구성되고 두 번째 eNodeB는 240ms로 구성됩니다.
보고 간격. 따라서 UE가 두 번째 셀로 핸드오버를 수행한 경우, 새로운
보고 간격이 적용되어야 합니다. 조각별 구성과 마찬가지로 타이밍과
eNodeB가 수신한 각 측정 보고서의 내용이 확인됩니다.
테스트 스위트에서 다루는 다른 유형의 차이점은 이벤트 및
임계값/오프셋의 차이. 테이블 UE 측정 시간 상관관계 test 시나리오 사용 이양
구성 아래에는 테스트된 시나리오가 나열되어 있습니다.
UE 측정 시간 상관관계 test 시나리오 사용 이양 구성
───────────────────────────────────────────────── ──────────────────────
테스트 # 테스트 대상 초기 핸드오버 후
구성 구성
───────────────────────────────────────────────── ──────────────────────
1 보고 간격 480ms 240ms
───────────────────────────────────────────────── ──────────────────────
2 보고 간격 120ms 640ms
───────────────────────────────────────────────── ──────────────────────
3 이벤트 이벤트 A1 이벤트 A2
───────────────────────────────────────────────── ──────────────────────
4 이벤트 이벤트 A2 이벤트 A1
───────────────────────────────────────────────── ──────────────────────
5 이벤트 이벤트 A3 이벤트 A4
───────────────────────────────────────────────── ──────────────────────
6 이벤트 이벤트 A4 이벤트 A3
───────────────────────────────────────────────── ──────────────────────
7 이벤트 이벤트 A2 이벤트 A3
───────────────────────────────────────────────── ──────────────────────
8 이벤트 이벤트 A3 이벤트 A2
───────────────────────────────────────────────── ──────────────────────
9 이벤트 이벤트 A4 이벤트 A5
───────────────────────────────────────────────── ──────────────────────
10 이벤트 이벤트 A5 이벤트 A4
───────────────────────────────────────────────── ──────────────────────
11 임계값/오프셋 RSRP 범위 52 RSRP 범위 56
(이벤트 A1) (이벤트 A1)
───────────────────────────────────────────────── ──────────────────────
12 임계값/오프셋 RSRP 범위 52 RSRP 범위 56
(이벤트 A2) (이벤트 A2)
───────────────────────────────────────────────── ──────────────────────
13 임계값/오프셋 A3 오프셋 -30 A3 오프셋 +30
(이벤트 A3) (이벤트 A3)
───────────────────────────────────────────────── ──────────────────────
14 임계값/오프셋 RSRP 범위 52 RSRP 범위 56
(이벤트 A4) (이벤트 A4)
───────────────────────────────────────────────── ──────────────────────
15 임계값/오프셋 RSRP 범위 52-52 RSRP 범위 56-56
(이벤트 A5) (이벤트 A5)
───────────────────────────────────────────────── ──────────────────────
16 트리거 시간 1024ms 100ms
───────────────────────────────────────────────── ──────────────────────
17 트리거 시간 1024ms 640ms
┌───────┬──────────────────┬────────────────────┬ ─────────────────────┐
│ │ │ │ │
바이너리 파일(표준 입력)이 일치합니다.
onworks.net 서비스를 사용하여 온라인으로 ns-3-model-library를 사용하세요.