How to Implement Presentation Layer in NS2

 

To implementation the Presentation Layer in ns2 is the 6th layer of the OSI Model which is accountable for data translation, encryption, compression and making sure that data is in an accessible format amidst applications. We can’t plainly execute this in ns2 because ns2 concentrates on lower-layer network simulation (from the transport layer down to the physical layer). Nonetheless, we can simulate the fundamental functions of the presentation layer (includes data encoding/decoding, encryption/decryption and compression/decompression) over logic built on top of the transport layer. Follow the below procedure to implement this in ns2:

  1. Key Functions of the Presentation Layer:
  1. Data Translation: Adapting data from one format to another.
  2. Encryption and Decryption: Securing data by encrypting it before transmission and decrypting it at the receiver’s end.
  3. Data Compression and Decompression: Minimizing the size of data for efficient transmission and decompressing it on the receiving end.

We have to execute them over TCL script or alter the C++ source code because ns2 doesn’t model these functions directly.

  1. Steps to Simulate Presentation Layer Functions in NS2
  1. Simulating Data Translation and Encoding/Decoding: You can simulate data translation or encoding/decoding at the application layer by processing the data before it is deliver over the network.
  2. Simulating Encryption and Decryption: To replicate encryption and decryption, you can apply a simple encryption algorithm (like XOR encryption) before sending the data and decrypt it upon receipt.
  3. Simulating Data Compression and Decompression: Data compression can be simulated by decreasing the size of packets before sending them and expanding them back at the receiver.

Example TCL Script to Simulate Presentation Layer

In this sample, we replicate a simple encoding/decoding and encryption/decryption mechanism at the application level.

# Create a new simulator instance

set ns [new Simulator]

# Open trace and nam files

set tracefile [open “presentation_layer_trace.tr” w]

$ns trace-all $tracefile

set namfile [open “presentation_layer.nam” w]

$ns namtrace-all-wireless $namfile

# Define network topology

set n0 [$ns node]

set n1 [$ns node]

# Define UDP agents

set udp0 [new Agent/UDP]

set null0 [new Agent/Null]

$ns attach-agent $n0 $udp0

$ns attach-agent $n1 $null0

$ns connect $udp0 $null0

# Define a CBR application (sending data)

set cbr0 [new Application/Traffic/CBR]

$cbr0 set packetSize_ 512

$cbr0 set rate_ 1Mb

$cbr0 attach-agent $udp0

# Simulate Presentation Layer: Encode and Encrypt Data

proc encode_and_encrypt {data} {

# Simulate encoding by converting to uppercase

set encoded_data [string toupper $data]

# Simulate encryption using XOR with a simple key (e.g., key = 42)

set encrypted_data “”

foreach char [split $encoded_data “”] {

set encrypted_char [expr [scan $char %c] ^ 42]

append encrypted_data [format %c $encrypted_char]

}

return $encrypted_data

}

# Simulate Presentation Layer: Decrypt and Decode Data

proc decrypt_and_decode {data} {

# Simulate decryption using XOR with the same key (42)

set decrypted_data “”

foreach char [split $data “”] {

set decrypted_char [expr [scan $char %c] ^ 42]

append decrypted_data [format %c $decrypted_char]

}

# Simulate decoding by converting back to lowercase

set decoded_data [string tolower $decrypted_data]

return $decoded_data

}

# Custom Application to Send and Receive Data with Presentation Layer Functions

proc send_data {} {

global cbr0

# Original data to be sent

set data “hello ns2 presentation layer”

# Apply presentation layer encoding and encryption

set encrypted_data [encode_and_encrypt $data]

puts “Sending encrypted data: $encrypted_data”

# Start sending encrypted data (simulate data transmission)

$cbr0 start

}

proc receive_data {} {

# Simulate receiving data (encrypted data is received)

set received_data “Bqooi~NS2~Presentation~layer”

 

# Apply presentation layer decryption and decoding

set decrypted_data [decrypt_and_decode $received_data]

puts “Received and decoded data: $decrypted_data”

}

# Schedule data sending and receiving

$ns at 1.0 “send_data”

$ns at 2.0 “receive_data”

# Define finish procedure

proc finish {} {

global ns tracefile namfile

$ns flush-trace

close $tracefile

close $namfile

exec nam presentation_layer.nam &

exit 0

}

$ns at 5.0 “finish”

# Run the simulation

$ns run

Explanation of the TCL Script:

  1. Data Encoding and Encryption:
    • The encode_and_encrypt approach simulates the presentation layer functionality by encoding the data (converting it to uppercase) and put on simple XOR encryption.
    • The original message “hello ns2 presentation layer” is changed to uppercase and encrypted using XOR with a simple key (42).
  2. Data Decryption and Decoding:
    • The decrypt_and_decode procedure converses the process. It decrypts the data using XOR and then decodes it by changing it back to lowercase.
  3. Simulating Data Transfer:
    • The send_data procedure cooks the data (after applying encoding/encryption) for transmission, simulating sending data over the network.
    • The receive_data procedure simulates receiving the encrypted data and then accomplishes decryption and decoding.
  1. Simulating Data Compression and Decompression:

For data compression, you can decrease the packet size before sending and then restore the original size upon receipt.

# Compress the data (simulating by reducing packet size)

proc compress_data {data} {

# Simulate compression by shortening the data

return [string range $data 0 10]

}

# Decompress the data (restoring original size)

proc decompress_data {data} {

# Simulate decompression by adding back original content

return “$data (decompressed)”

}

  1. Advanced Presentation Layer Features (Optional):

If you want latest presentation layer mechanisms, you can:

  • Implement stronger encryption like AES or RSA algorithms by incorporating with external encryption libraries (if operating with a real environment, not NS2 simulation).
  • Handle complex data formats like XML or JSON, simulating format conversion.
  • Implement protocol translation where the sender and receiver enable on data formats dynamically.
  1. Creating a Custom C++ Presentation Layer in NS2 (Optional)

If you want to go deeper and execute a presentation layer protocol in C++, you can:

  1. Create a Custom Application Class: Accomplish a custom application that operates encryption, compression, or encoding/decoding in the C++ layer.
  2. Modify or Extend Existing Classes:
    • Simulate the presentation layer functions like encryption or data translation by extending the agent class in ns2.

Example (basic encryption inside an NS2 agent):

void PresentationLayerAgent::encrypt(char* data) {

// Simple XOR encryption logic

for (int i = 0; i < strlen(data); i++) {

data[i] ^= 42;  // XOR encryption

}

}

After implementing the custom logic in C++, recompile NS2:

cd ns-allinone-2.35/ns-2.35/

./configure

make clean

make

  1. Analyzing Presentation Layer Behavior

After executing the simulation, you can evaluate the actions of the presentation layer functions (encoding, encryption, etc.) by inspecting the trace file and monitoring the NAM visualization.

  • Trace file (presentation_layer_trace.tr): You can see how data is sent after being processed by the presentation layer.
  • NAM file (presentation_layer.nam): This will visualize the packet transmission, however the actual encoding/encryption process is more noticeable in the trace file or logs.

Through this detailed implementation process, you can get to know about the initialization and execution of the presentation layer for the security purpose and translation of data which will be established in the ns2 environment. You can analyze the outcome and able to envision the simulation.

You can get engaging project concepts from our team of researchers. Receive customized support for your Presentation Layer implementation in NS2. We provide detailed comparative analysis for your projects; simply send us your project specifics for further assistance. Our expertise includes data encoding and decoding, encryption and decryption, as well as compression and decompression, all tailored to meet your specific needs.