<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arnav Das, Author at AIORI</title>
	<atom:link href="https://portal.aiori.in/author/arnav-dasiifon-net/feed/" rel="self" type="application/rss+xml" />
	<link>https://portal.aiori.in</link>
	<description>Advanced Internet Operations Research in India</description>
	<lastBuildDate>Tue, 16 Dec 2025 07:00:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://portal.aiori.in/wp-content/uploads/2024/07/aio-150x150.png</url>
	<title>Arnav Das, Author at AIORI</title>
	<link>https://portal.aiori.in</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Diagnosing IPv6 in Nanoseconds: RFC 8250</title>
		<link>https://portal.aiori.in/rfc8250-ietf122/</link>
					<comments>https://portal.aiori.in/rfc8250-ietf122/#respond</comments>
		
		<dc:creator><![CDATA[Arnav Das]]></dc:creator>
		<pubDate>Sun, 16 Jun 2024 10:37:16 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[IETF122]]></category>
		<category><![CDATA[IPPM]]></category>
		<category><![CDATA[RFC8250]]></category>
		<guid isPermaLink="false">https://portal.aiori.in/?p=4205</guid>

					<description><![CDATA[<p>As modern networks scale, the boundary between application performance and network behavior grows blurry. Network performance issues are notoriously hard to pinpoint. A web page loads slowly, but is it the DNS resolution, the server, the network? Often, the tools used to answer these questions are built on guesswork and indirect probes. RFC 8250, however, [&#8230;]</p>
<p>The post <a href="https://portal.aiori.in/rfc8250-ietf122/">Diagnosing IPv6 in Nanoseconds: RFC 8250</a> appeared first on <a href="https://portal.aiori.in">AIORI</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="4205" class="elementor elementor-4205" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-d71bcbf e-con-full e-flex e-con e-parent" data-id="d71bcbf" data-element_type="container" data-e-type="container">
				</div>
		<div class="elementor-element elementor-element-535adbbc e-flex e-con-boxed e-con e-parent" data-id="535adbbc" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-3dbd23e elementor-widget elementor-widget-text-editor" data-id="3dbd23e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-size: 1rem">As modern networks scale, the boundary between application performance and network behavior grows blurry. Network performance issues are notoriously hard to pinpoint. A web page loads slowly, but is it the DNS resolution, the server, the network? Often, the tools used to answer these questions are built on guesswork and indirect probes. RFC 8250, however, proposes something far more strategic, i.e. embedding timing diagnostics directly inside IPv6 packets.</span></p><p>This blog is a technical walkthrough of <span style="font-weight: bold">how Performance and Diagnostic Metrics </span>defined in [<a href="https://datatracker.ietf.org/doc/rfc8250/">RFC 8250</a>] is implemented in a <span style="font-weight: bold">Linux kernel module</span>, and how the entire application layer network stack can run on top of it. The goal is high-precision, low-noise, protocol-agnostic performance measurement, without needing any clock synchronization or special hardware.</p>								</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-840059f e-flex e-con-boxed e-con e-parent" data-id="840059f" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-9c4d2a3 elementor-widget elementor-widget-text-editor" data-id="9c4d2a3" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h3><b>Network Latency Without Visibility</b></h3><p>Whenever data moves across a network, say, a DNS query to resolve a domain name, it passes through multiple layers of software and hardware. From the application issuing the request, through the operating system’s networking stack, down to the network interface card and into the network itself, as shown in <a href="#network-stack">Fig 1</a>. Once the packet arrives at the destination, the process happens in reverse.</p><p>Now, imagine trying to understand <i>where</i> in that path the delay happened. <i>Was the application slow to send</i>? <i>Did the server take too long to process</i>? <i>Was the network congested</i>? Most of the time, these questions go unanswered because there&#8217;s no visibility built into the path itself, making the localization of the point of high latency tricky.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-0100ad3 elementor-widget elementor-widget-image" data-id="0100ad3" data-element_type="widget" data-e-type="widget" id="network-stack" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img fetchpriority="high" decoding="async" width="768" height="428" src="https://portal.aiori.in/wp-content/uploads/2025/06/NetworkStack-768x428.png" class="attachment-medium_large size-medium_large wp-image-4208" alt="" srcset="https://portal.aiori.in/wp-content/uploads/2025/06/NetworkStack-768x428.png 768w, https://portal.aiori.in/wp-content/uploads/2025/06/NetworkStack-300x167.png 300w, https://portal.aiori.in/wp-content/uploads/2025/06/NetworkStack-1024x571.png 1024w, https://portal.aiori.in/wp-content/uploads/2025/06/NetworkStack.png 1312w" sizes="(max-width: 768px) 100vw, 768px" />											<figcaption class="widget-image-caption wp-caption-text">Fig 1. The lifecycle of data through the networking stack</figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-d82b956 elementor-widget elementor-widget-text-editor" data-id="d82b956" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>As the figure <a href="#network-stack" data-wplink-edit="true">Fig 1</a> illustrates, while packets traverse the operating system&#8217;s layers and are managed in memory buffers, there’s no built-in mechanism to record timestamps or associate related packets. There’s no breadcrumb trail inside the system for measuring timing across this path.</p>								</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-b92357e e-flex e-con-boxed e-con e-parent" data-id="b92357e" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-eacab81 elementor-widget elementor-widget-text-editor" data-id="eacab81" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h3 style="font-family: Roboto, sans-serif;color: #7a7a7a"><span style="font-weight: bold;color: inherit;font-family: inherit;font-size: 1.75rem">RFC 8250</span></h3><p>RFC 8250 proposes a better solution for performance measurements by allowing IPv6 packets to carry <span style="font-weight: bold">Performance and Diagnostic Metrics (PDM)</span> directly within them. <span style="font-size: 1rem">Assuming a request-response based protocol, say a pair of DNS packets, the request IPv6 packet is enriched with a blank PDM Extension Header, with only a </span><span style="font-size: 1rem;font-weight: bold">sequence number</span><span style="font-size: 1rem"> (like a tracking ID), While the response from the server is enriched with the </span><span style="font-size: 1rem;font-weight: bold">previous sequence number</span><span style="font-size: 1rem">, a </span><span style="font-size: 1rem;font-weight: bold">new sequence number</span><span style="font-size: 1rem">, and the </span><span style="font-size: 1rem;font-weight: bold">time taken by the server</span><span style="font-size: 1rem">.</span></p>								</div>
				</div>
		<div class="elementor-element elementor-element-abcef0b e-grid e-con-full e-con e-child" data-id="abcef0b" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-48b5fce elementor-widget elementor-widget-text-editor" data-id="48b5fce" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-size: 1rem">As shown in </span><a style="background-color: #ffffff;font-size: 1rem" href="#pdm-exchange">Fig 2</a><span style="font-size: 1rem">, The first packet sent from the Client (Host A) contains a PDM header with only its packet id 16 at timestamp 540413. The Server (Host B), sends back the response packet at timestamp 681705, containing a PDM header with the previous packet id 16, current packet id 10, and the server latency of </span><i style="font-size: 1rem">24 units</i><span style="font-size: 1rem">, jointly represented by the </span><i style="font-size: 1rem">deltatlr </i><span style="font-size: 1rem">and the </span><i style="font-size: 1rem">scaledtlr</i><span style="font-size: 1rem">, i.e. (24, 46).</span></p><p>This, paired with the timing information in Client (Host A), can be used to calculate the network latency (RTD) of <i>28 units</i> as well.</p><p>By comparing these values, both the systems can exchange:</p><ul style="font-size: 16px;background-color: #ffffff"><li style="font-size: 16px"><span style="font-weight: bold">Server Processing Delay</span>: How long a system spent on the request.</li><li style="font-size: 16px"><span style="font-weight: bold">Network Delay</span>: The time spent in transit (RTT minus processing time).</li></ul><div> </div>								</div>
				</div>
				<div class="elementor-element elementor-element-d784b90 elementor-widget elementor-widget-image" data-id="d784b90" data-element_type="widget" data-e-type="widget" id="pdm-exchange" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img decoding="async" width="498" height="427" src="https://portal.aiori.in/wp-content/uploads/2025/06/PdmExchange.png" class="attachment-medium_large size-medium_large wp-image-4209" alt="" srcset="https://portal.aiori.in/wp-content/uploads/2025/06/PdmExchange.png 498w, https://portal.aiori.in/wp-content/uploads/2025/06/PdmExchange-300x257.png 300w" sizes="(max-width: 498px) 100vw, 498px" />											<figcaption class="widget-image-caption wp-caption-text">Fig 2. PDM exchange between 2 hosts</figcaption>
										</figure>
									</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-87745b5 elementor-widget elementor-widget-text-editor" data-id="87745b5" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>This approach doesn’t require synchronized clocks as this RFC works on time delta instead of timestamp. This approach also doesn’t require the PDM support from routers in between, although it does require the network to be fully IPv6 enabled without any translation technology (NAT64 or NAT46) in between as those technologies do not usually support IPv6 Extension Headers, and may result into dropping of the IPv6 Packet entirely.</p><p>Unlike TCP timestamps or ICMP round trips, RFC 8250’s PDM is <span style="font-weight: bold">stateful </span>but <span style="font-weight: bold">agnostic to application protocols</span>. It uses IPv6&#8217;s Destination Options header to carry a compact 16-byte structure per packet, just enough to measure round-trip time (RTT), round-trip delay (RTD), and server-side processing latency.</p><p>But PDM is just a spec. The real question is: <i>where should it be implemented?</i></p>								</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-77a2a47 e-flex e-con-boxed e-con e-parent" data-id="77a2a47" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-4776a0d elementor-widget elementor-widget-text-editor" data-id="4776a0d" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h3><b style="color: inherit;font-family: inherit;font-size: 1.75rem">Implementing the Protocol</b></h3><p><span style="font-weight: 400">In our case, the PDM logic is implemented in the Linux </span><b>Netfilter framework</b><span style="font-weight: 400"> inside the kernel. By embedding timing measurements at RX and TX hooks, the server can record timestamps with attoseconds precision, correlate requests with responses, and attach diagnostics on the wire.</span></p><p><span style="font-weight: 400">The implementation of PDM within the Linux kernel is divided into two parts:</span></p><ul><li style="font-weight: 400"><b>RX path</b><span style="font-weight: 400">: for handling incoming packets and recording diagnostic anchors</span></li><li style="font-weight: 400"><b>TX path</b><span style="font-weight: 400"><span style="font-weight: 400"><span style="font-weight: 400">: for handling outgoing packets and embedding timing information into the response</span></span></span><p> </p></li></ul><p><span style="font-size: 1rem">The RX logic is triggered through a Netfilter hook at </span><span style="font-size: 1rem">NF_INET_LOCAL_IN</span><span style="font-size: 1rem">, which intercepts IPv6 packets </span><i style="font-size: 1rem">after</i><span style="font-size: 1rem"> they&#8217;ve been received by the system but </span><i style="font-size: 1rem">before</i><span style="font-size: 1rem"> they are handed off to the userspace application.</span></p><p><span style="font-weight: 400">When a packet with a PDM extension header arrives, the kernel module:</span></p><ol><li style="font-weight: 400"><b>Parses the packet</b><span style="font-weight: 400"> and extracts the PDM header.</span></li><li style="font-weight: 400"><b>Identifies the protocol and packet chain</b><span style="font-weight: 400">, such as a DNS query using its transaction ID.</span></li><li style="font-weight: 400"><b>Captures the current timestamp</b><span style="font-weight: 400"> using </span><span style="font-weight: 400">ktime_get_real_ns()</span><span style="font-weight: 400"> serving as a precise marker of when the packet entered the system.</span></li><li style="font-weight: 400"><b>Stores the information</b><span style="font-weight: 400"> in a custom datatype </span><b>segmented hashmap</b><span style="font-weight: 400"><span style="font-weight: 400"><span style="font-weight: 400">, meant for fast in-kernel structure organized by protocol type (e.g., DNS, TCP, etc.).</span></span></span><p> </p></li></ol><p><span style="font-weight: 400">The segmented hashmap acts as a temporary registry of packets that are &#8220;in-flight&#8221;, those for which a response is expected later. It avoids linear searches and uses direct indexing by protocol + identifier, making the time complexity constant.</span></p><p><span style="font-weight: 400">This part corresponds to the </span><b>right half</b><span style="font-weight: 400"> of </span><span style="font-weight: 400"><a href="#network-stack" data-wplink-edit="true">Fig 1</a></span><span style="font-weight: 400">. where packets are received as socket buffers (</span><span style="font-weight: 400">sk_buff</span><span style="font-weight: 400">), but typically disappear into the application layer with no diagnostic footprint. With the RX logic in place, the kernel now tags these incoming packets with context and time as seen in the </span><b>top half</b><span style="font-weight: 400"> of </span><a href="#pdm-netfilter"><span style="font-weight: 400">Fig 3</span></a><span style="font-weight: 400">.</span></p>								</div>
				</div>
				<div class="elementor-element elementor-element-21dd2ea elementor-widget elementor-widget-image" data-id="21dd2ea" data-element_type="widget" data-e-type="widget" id="pdm-netfilter" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img decoding="async" width="800" height="423" src="https://portal.aiori.in/wp-content/uploads/2025/06/PdmNetfilter-1024x541.png" class="attachment-large size-large wp-image-4214" alt="" srcset="https://portal.aiori.in/wp-content/uploads/2025/06/PdmNetfilter-1024x541.png 1024w, https://portal.aiori.in/wp-content/uploads/2025/06/PdmNetfilter-300x159.png 300w, https://portal.aiori.in/wp-content/uploads/2025/06/PdmNetfilter-768x406.png 768w, https://portal.aiori.in/wp-content/uploads/2025/06/PdmNetfilter.png 1527w" sizes="(max-width: 800px) 100vw, 800px" />											<figcaption class="widget-image-caption wp-caption-text">Fig 3. RFC 8250 Kernel Logic</figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-b2cf329 elementor-widget elementor-widget-text-editor" data-id="b2cf329" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>The TX hook, registered at NF_INET_LOCAL_OUT, activates when a packet is being sent out from the local system.</p><p>When the application responds to a previous request for example, sending a DNS reply the kernel module intercepts the outgoing packet and:</p><ol style="font-size: 16px;background-color: #ffffff"><li style="font-size: 16px"><span style="font-weight: bold">Parses the packet</span> and extracts its protocol identifier (e.g., the DNS transaction ID).</li><li style="font-size: 16px"><span style="font-weight: bold">Checks the segmented hashmap</span> for a corresponding entry recorded earlier in the RX path.</li><li style="font-size: 16px"><span style="font-weight: bold">Computes the time delta</span> between RX and TX.</li><li style="font-size: 16px"><span style="font-weight: bold">Converts the time delta into a scaled form</span>, using custom logic (as referred in the source RFC) to fit large time values into 16-bit fields.</li><li style="font-size: 16px"><span style="font-weight: bold">Constructs a new PDM header</span>, populating fields such as psntp (packet sequence number), deltatlr and scaledtlr (delay since last reception), and leaves placeholders for client-returned timing fields (to be filled in later)</li><li style="font-size: 16px"><span style="font-weight: bold">Injects this header into the outgoing packet</span> by manipulating the sk_buff by ensuring enough tailroom using <em>pskb_expand_head()</em>, then shifting the packet payload forward with <em>memmove()</em>and writing the new PDM header into the space just after the IPv6 header, as shown in <a href="#skbuff-modification">Fig 4</a>.</li></ol>								</div>
				</div>
				<div class="elementor-element elementor-element-c7227c5 elementor-widget elementor-widget-image" data-id="c7227c5" data-element_type="widget" data-e-type="widget" id="skbuff-modification" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="781" height="202" src="https://portal.aiori.in/wp-content/uploads/2025/06/SkbuffModification.png" class="attachment-large size-large wp-image-4218" alt="" srcset="https://portal.aiori.in/wp-content/uploads/2025/06/SkbuffModification.png 781w, https://portal.aiori.in/wp-content/uploads/2025/06/SkbuffModification-300x78.png 300w, https://portal.aiori.in/wp-content/uploads/2025/06/SkbuffModification-768x199.png 768w" sizes="auto, (max-width: 781px) 100vw, 781px" />											<figcaption class="widget-image-caption wp-caption-text">Fig 4. Modification of sk_buff</figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-19df84b elementor-widget elementor-widget-text-editor" data-id="19df84b" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>This corresponds to the <span style="font-weight: bold">left half</span> of <a href="#network-stack">Fig 1</a> where outgoing packets are written into the socket buffer and pushed to the network interface. Now, before transmission, they carry self-reported diagnostic timing data embedded directly into the packet itself, by following the logic in the <span style="font-weight: bold">bottom half</span> of <a href="#pdm-netfilter">Fig 3</a>.</p><p>By stitching together RX and TX with a shared registry and deterministic packet identifiers, the system enables <span style="font-weight: bold">round-trip diagnostics directly inside the protocol stack</span>, without requiring external logging, packet captures, or synchronized clocks.</p><p>The entire code for the server side RFC8250 (for Linux systems only) is available at <a href="https://github.com/indiainternetfoundation/IPv6PerformanceDiagnosticMetric">https://github.com/indiainternetfoundation/IPv6PerformanceDiagnosticMetric</a></p>								</div>
				</div>
				<div class="elementor-element elementor-element-e68ce8f elementor-widget elementor-widget-text-editor" data-id="e68ce8f" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>On the client&#8217;s side, the protocol loads in the user space application, as it only needs the RTT to be measured. An open source implementation of the client (for Linux systems only) can be installed simply by using</p>								</div>
				</div>
				<div class="elementor-element elementor-element-e9a72ac elementor-widget elementor-widget-code-highlight" data-id="e9a72ac" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default  ">
			<pre data-line="" class="highlight-height language-bash ">
				<code readonly="true" class="language-bash">
					<xmp>$ pip install git+https://github.com/indiainternetfoundation/py_measure_dns</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-b92180e elementor-widget elementor-widget-text-editor" data-id="b92180e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>This package uses the same structure as of <i>dnspython</i>, but before sending it to-wire, it has the capability to add PDM Extension Header, as well as receiving PDM Header from a response. </p>								</div>
				</div>
				<div class="elementor-element elementor-element-db811fd elementor-widget elementor-widget-code-highlight" data-id="db811fd" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default  ">
			<pre data-line="" class="highlight-height language-python line-numbers">
				<code readonly="true" class="language-python">
					<xmp>from measure_dns import DNSQuery, send_dns_query, DNSFlags

# Define the domain to be queried
domain = "testprotocol.in"
    
# Define the DNS server to query (IPv6 addresses of authoritative nameservers)
dns_server = "2406:da1a:8e8:e863:ab7a:cb7e:2cf9:dc78"  # ns1.testprotocol.in

result = send_dns_query(
        DNSQuery(qname=domain, rdtype="A"),  # Querying A record for domain
        dns_server,
        DNSFlags.PdmMetric  # Requesting PDM option
)

# Check if a response was received
if result:
    print(f"Latency: {result.latency_ns} ns")  # Print query response latency
    print(result.response.answer)  # Print DNS response
else:
    print("Failed to get a response.")  # Indicate query failure</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-810a44a elementor-widget elementor-widget-text-editor" data-id="810a44a" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>The <i>result</i>, given that the DNS server is PDM enabled, will have <i>additional_params </i>that contain the PDM information, as shown below.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-e4c7a62 elementor-widget elementor-widget-code-highlight" data-id="e4c7a62" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default  ">
			<pre data-line="" class="highlight-height language-python line-numbers">
				<code readonly="true" class="language-python">
					<xmp>    # Process additional DNS parameters if PDM option is present
    if result.additional_params:
        for option in result.additional_params:
            if option.option_type == 15:  # PDM option identifier
                pdm_option = option
                print()
                print(f"PDM Option Type: 0x{pdm_option.option_type:02x} ({pdm_option.option_type})")
                print(f"PDM Opt Len: 0x{pdm_option.opt_len:02x} ({pdm_option.opt_len})")
                print(f"PSNTP: 0x{pdm_option.psntp:02x} ({pdm_option.psntp})")
                print(f"PSNLR: 0x{pdm_option.psnlr:02x} ({pdm_option.psnlr})")
                print(f"DeltaTLR: 0x{pdm_option.deltatlr:02x} ({pdm_option.deltatlr})")
                print(f"DeltaTLS: 0x{pdm_option.deltatls:02x} ({pdm_option.deltatls})")
                print(f"Scale DTLR: 0x{pdm_option.scale_dtlr:02x} ({pdm_option.scale_dtlr})")
                print(f"Scale DTLS: 0x{pdm_option.scale_dtls:02x} ({pdm_option.scale_dtls})")</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-811cdfe elementor-widget elementor-widget-text-editor" data-id="811cdfe" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>The <i>pdm_option</i>, received from the <i>result.additional_params </i>represents the raw PDM Extension Header and will need further processing to convert to known units like <i>ms</i>, <i>ns</i>, etc.</p>								</div>
				</div>
		<div class="elementor-element elementor-element-2f72227 e-grid e-con-full e-con e-child" data-id="2f72227" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-8934ed6 elementor-widget elementor-widget-text-editor" data-id="8934ed6" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-size: 1rem">Once the PDM is successfully deployed, network features like network latency between 2 points can be measured as shown in <a href="#network-latency-comparison">Fig 5</a>, where we measured network latency in AWS network, by deploying DNS authoritative servers in </span><span style="font-size: 1rem;font-weight: bold">Mumbai</span><span style="font-size: 1rem"> and </span><span style="font-size: 1rem;font-weight: bold">Singapore</span><span style="font-size: 1rem"> regions, and measuring RTT and RTD for the DNS queries.</span></p><p><span style="font-size: 1rem">Mumbai to Mumbai network latency (RTD) can be seen to be considerably lower, in a range of 4 &#8211; 10 ms, with consistent spikes and considerably lower noise where as, the Mumbai to Singapore network latency can be seen to be considerably higher, within the range of 65 &#8211; 73 ms, with more noise. </span></p>								</div>
				</div>
				<div class="elementor-element elementor-element-b6c416a elementor-widget elementor-widget-image" data-id="b6c416a" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img decoding="async" src="https://portal.aiori.in/wp-content/uploads/elementor/thumbs/NetworkLatencyMumbaiSingaporeAWS-r7dsmh1xkzzq2vwaxjb2h6nrmarqnlc0t4qyuqk2zg.png" title="NetworkLatencyMumbaiSingaporeAWS" alt="NetworkLatencyMumbaiSingaporeAWS" loading="lazy" />											<figcaption class="widget-image-caption wp-caption-text">Fig 5. Plotting the Network Latency for servers between Mumbai-Mumbai and Mumbai-Singapore</figcaption>
										</figure>
									</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-624cef7 e-flex e-con-boxed e-con e-parent" data-id="624cef7" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-e27025a elementor-widget elementor-widget-text-editor" data-id="e27025a" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-size: 1rem">Both the server-side and client-side implementations are </span><b style="font-size: 1rem">open source</b><span style="font-size: 1rem">:</span></p>
<ul>
<li style="font-weight: 400"><b>Server-Side Kernel Module</b><span style="font-weight: 400">:</span><span style="font-weight: 400"><br></span><span style="font-weight: 400"> <img decoding="async" class="emoji" role="img" src="https://s.w.org/images/core/emoji/15.1.0/svg/1f517.svg" alt="&#x1f517;"></span><a href="https://github.com/indiainternetfoundation/IPv6PerformanceDiagnosticMetric"> <span style="font-weight: 400">https://github.com/indiainternetfoundation/IPv6PerformanceDiagnosticMetric</span></a></li>
<li style="font-weight: 400"><b>Python Client Library</b><span style="font-weight: 400">:</span><span style="font-weight: 400"><br></span><span style="font-weight: 400"> <img decoding="async" class="emoji" role="img" src="https://s.w.org/images/core/emoji/15.1.0/svg/1f517.svg" alt="&#x1f517;"></span><a href="https://github.com/indiainternetfoundation/py_measure_dns"> <span style="font-weight: 400">https://github.com/indiainternetfoundation/py_measure_dns</span></a></li>
</ul>
<p><b>&nbsp;</b></p>
<p><b>India Internet Foundation (IIFON) actively welcomes contributions</b><span style="font-weight: 400"> to these repositories &#8211; whether it&#8217;s code, testing, docs, bug reports, or feature ideas. These efforts are part of a broader national initiative to make the Internet stack more observable, efficient, and intelligent.</span></p>								</div>
				</div>
				<div class="elementor-element elementor-element-c0f38f2 elementor-widget elementor-widget-text-editor" data-id="c0f38f2" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-size: 1rem">This work has been carried out by the </span><b style="font-size: 1rem">India Internet Foundation (IIFON)</b><span style="font-size: 1rem"> under the project </span><b style="font-size: 1rem">AIORI (Advanced Internet Operations Research in India)</b><span style="font-size: 1rem">, supported by </span><b style="font-size: 1rem">MeitY (Ministry of Electronics and Information Technology, Government of India)</b><span style="font-size: 1rem">.</span></p><p><span style="font-weight: 400">It has also been formally presented at </span><b>IETF 122</b><span style="font-weight: 400">. See the <a href="https://datatracker.ietf.org/meeting/122/materials/slides-122-hackathon-sessd-evaluating-the-performance-of-different-dns-server-software-implementations-with-pdm-using-aiori-imn-measurement-platform-01">materials here</a>.</span></p>								</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="https://portal.aiori.in/rfc8250-ietf122/">Diagnosing IPv6 in Nanoseconds: RFC 8250</a> appeared first on <a href="https://portal.aiori.in">AIORI</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://portal.aiori.in/rfc8250-ietf122/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
