<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="http://blog.nmicht.com/feed.xml" rel="self" type="application/atom+xml" /><link href="http://blog.nmicht.com/" rel="alternate" type="text/html" /><updated>2024-09-17T00:38:56+00:00</updated><id>http://blog.nmicht.com/feed.xml</id><title type="html">@nmicht</title><subtitle>Random thoughts on tech and life.
</subtitle><author><name>Michelle Torres</name><email>hi@michelletorres.dev</email></author><entry><title type="html">Exported Authenticators (ExpAuth)</title><link href="http://blog.nmicht.com/2024/09/17/expauth.html" rel="alternate" type="text/html" title="Exported Authenticators (ExpAuth)" /><published>2024-09-17T00:00:00+00:00</published><updated>2024-09-17T00:00:00+00:00</updated><id>http://blog.nmicht.com/2024/09/17/expauth</id><content type="html" xml:base="http://blog.nmicht.com/2024/09/17/expauth.html"><![CDATA[<p>Imagine you’re playing a game with your friends, and you’ve already agreed on the rules (like setting up a secret handshake). But after the game starts, one of your friends says, “Wait! I want to show my membership card to prove I’m in the club.” You don’t need to stop the game and start over — they can just show the card during the game. That’s kind of how <strong>Exported Authenticators</strong> work in computer networks. They let someone prove who they are after the secure connection is already set up.</p>

<p><strong>Exported Authenticators (ExpAuth)</strong> are a feature in the <strong>TLS 1.3</strong> protocol designed to provide <strong>mutual authentication</strong> after an encrypted session has already been established. Essentially, they allow for client or server authentication to be performed after the initial handshake has completed, without needing to renegotiate a new session. This is useful in scenarios where authentication is deferred or where multiple parties need to authenticate during the same secure connection.</p>

<h2 id="exported-authenticators-in-tls-13">Exported Authenticators in TLS 1.3</h2>

<p>In <strong>TLS 1.3</strong>, the initial handshake sets up a secure encrypted session between a client and server. During this handshake, the server typically authenticates itself to the client using a certificate, and optionally, the client may authenticate itself as well.</p>

<p>However, there are scenarios where it’s beneficial to authenticate after the session has already started, rather than during the handshake. This is where <strong>Exported Authenticators (ExpAuth)</strong> come into play. They allow for additional or deferred authentication using <strong>certificate-based authentication</strong> after the handshake is complete, leveraging the existing secure session.</p>

<h2 id="how-exported-authenticators-work">How Exported Authenticators Work</h2>

<ol>
  <li>
    <p><strong>Session Established</strong>: First, a <strong>TLS 1.3 session</strong> is established between the client and server. This session is already encrypted and secure.</p>
  </li>
  <li>
    <p><strong>Authenticator Export</strong>: During or after the session, either the client or server can generate an <strong>exported authenticator</strong>, which is essentially a cryptographic proof of identity tied to the established session.</p>
  </li>
  <li><strong>Authentication Request</strong>: The party that needs to be authenticated (client or server) creates the exported authenticator. This authenticator includes:
    <ul>
      <li>A <strong>certificate</strong> proving their identity.</li>
      <li>A <strong>signature</strong> created using the session keys from the established TLS session.</li>
    </ul>
  </li>
  <li><strong>Verification</strong>: The other party receives the exported authenticator and verifies the proof by checking the signature and certificate against the current session information. If everything matches, the authentication is considered valid, and the connection continues securely without needing a new handshake.</li>
</ol>

<h2 id="key-benefits-of-exported-authenticators">Key Benefits of Exported Authenticators</h2>

<ul>
  <li>
    <p><strong>Deferred Authentication</strong>: Exported Authenticators allow for deferred or additional authentication to take place after the secure connection has been established, which can be useful in multi-phase authentication processes.</p>
  </li>
  <li>
    <p><strong>No Need for Renegotiation</strong>: Traditional TLS would require renegotiating a session to perform new authentication steps. Exported Authenticators avoid this by using the existing session, reducing overhead and potential security issues related to renegotiation.</p>
  </li>
  <li>
    <p><strong>Mutual Authentication</strong>: Both the client and server can authenticate each other during an ongoing session, making it ideal for environments where multi-party authentication is required.</p>
  </li>
</ul>

<h2 id="example-use-case">Example Use Case</h2>

<p>A common use case for Exported Authenticators might be a secure web service that initially only requires the server to authenticate to the client during the TLS handshake (like most HTTPS connections). Later in the session, when the client tries to access sensitive resources, the server may request the client to authenticate using an exported authenticator, without breaking or renegotiating the existing connection.</p>

<h2 id="standards-and-implementation">Standards and Implementation</h2>

<ul>
  <li><strong>Exported Authenticators</strong> are part of the <strong>TLS 1.3 specification</strong> and described in <strong>RFC 8446</strong>.</li>
  <li><strong>Browser vendors</strong> and <strong>CDNs</strong> (e.g., <strong>Cloudflare</strong>) are slowly adopting these advanced authentication mechanisms, especially in environments requiring enhanced security and mutual trust.</li>
</ul>

<h2 id="references">References</h2>

<ul>
  <li><a href="https://datatracker.ietf.org/doc/html/rfc8446">RFC 8446 - TLS 1.3 Specification</a></li>
  <li><a href="https://blog.cloudflare.com/exported-authenticators-the-long-road-to-rfc/">Exported Authenticators</a></li>
</ul>]]></content><author><name>Michelle Torres</name><email>hi@michelletorres.dev</email></author><category term="computer-networks" /><category term="security" /><summary type="html"><![CDATA[Imagine you’re playing a game with your friends, and you’ve already agreed on the rules (like setting up a secret handshake). But after the game starts, one of your friends says, “Wait! I want to show my membership card to prove I’m in the club.” You don’t need to stop the game and start over — they can just show the card during the game. That’s kind of how Exported Authenticators work in computer networks. They let someone prove who they are after the secure connection is already set up.]]></summary></entry><entry><title type="html">Correlation between HTTP and TLS</title><link href="http://blog.nmicht.com/2024/09/16/http-tls.html" rel="alternate" type="text/html" title="Correlation between HTTP and TLS" /><published>2024-09-16T00:00:00+00:00</published><updated>2024-09-16T00:00:00+00:00</updated><id>http://blog.nmicht.com/2024/09/16/http-tls</id><content type="html" xml:base="http://blog.nmicht.com/2024/09/16/http-tls.html"><![CDATA[<p>Imagine the Internet is like sending letters between two friends. <strong>HTTP</strong> is the language or format the letter is written in, like using English or another language. <strong>TLS</strong> is the envelope and lock you use to protect the letter so no one else can read it. Different versions of HTTP or TLS are like using newer types of letters or stronger locks to keep things safe.</p>

<p>The <strong>correlation between TLS (Transport Layer Security) versions and HTTP (Hypertext Transfer Protocol) versions</strong> revolves around securing communication between clients (like web browsers) and servers (like websites). While HTTP defines how data is structured and transferred, TLS provides the encryption layer that secures that data in transit.</p>

<p>Although TLS and HTTP are separate protocols with distinct functions, they often work together. Below is a breakdown of their relationship through different versions.</p>

<h2 id="http-versions">HTTP Versions</h2>

<ol>
  <li>
    <p><strong>HTTP/1.1</strong>:
   - Introduced in 1997.
   - Uses a text-based request-response model (e.g., GET and POST methods).
   - Works with <strong>both non-secure (HTTP)</strong> and <strong>secure (HTTPS)</strong> protocols. HTTPS in HTTP/1.1 is enabled by adding TLS encryption on top of it (via a handshake before the HTTP data is transferred).
   - Can use multiple versions of TLS (e.g., TLS 1.0, 1.1, 1.2, and 1.3).</p>
  </li>
  <li>
    <p><strong>HTTP/2</strong>:
   - Introduced in 2015.
   - Binary-based, instead of text-based, which makes it more efficient.
   - Designed to support multiplexing (sending multiple requests at once over a single connection), header compression, and server push.
   - Often used <strong>exclusively over TLS</strong>, and many browsers require HTTP/2 to be used with <strong>TLS 1.2 or higher</strong>. It improves performance but relies heavily on encryption.</p>
  </li>
  <li>
    <p><strong>HTTP/3</strong>:
   - Built on top of <strong>QUIC</strong> (a transport layer protocol that integrates security natively).
   - Uses <strong>TLS 1.3</strong> exclusively as its encryption mechanism, but it handles the TLS handshake within QUIC, not separately as in earlier versions.</p>
  </li>
</ol>

<h2 id="tls-versions">TLS Versions</h2>

<ol>
  <li>
    <p><strong>TLS 1.0</strong> (deprecated):
   - Released in 1999. It had several vulnerabilities, which led to its deprecation.
   - Compatible with HTTP/1.1, but generally not recommended anymore.</p>
  </li>
  <li>
    <p><strong>TLS 1.1</strong> (deprecated):
   - Released in 2006. Like TLS 1.0, it is now deprecated due to security flaws.</p>
  </li>
  <li>
    <p><strong>TLS 1.2</strong>:
   - Released in 2008. Still widely used and supported by most browsers and services.
   - Compatible with both <strong>HTTP/1.1</strong> and <strong>HTTP/2</strong>.
   - Provides strong encryption and more robust security mechanisms compared to its predecessors.</p>
  </li>
  <li>
    <p><strong>TLS 1.3</strong>:
   - Released in 2018. It simplifies the handshake process and enhances security and performance.
   - Compatible with <strong>HTTP/1.1</strong>, <strong>HTTP/2</strong>, and <strong>HTTP/3</strong>.
   - HTTP/3, built on QUIC, <strong>requires TLS 1.3</strong> due to its more efficient handshake and stronger security features.</p>
  </li>
</ol>

<h2 id="correlation-between-tls-and-http-versions">Correlation Between TLS and HTTP Versions</h2>

<ul>
  <li><strong>HTTP/1.1</strong> can work with older and newer versions of TLS, though it’s common to use <strong>TLS 1.2</strong> or <strong>TLS 1.3</strong> for security reasons today.</li>
  <li><strong>HTTP/2</strong> is typically used with <strong>TLS 1.2</strong> or higher. Many browsers require <strong>HTTP/2 over TLS</strong> for security, making TLS a near-mandatory part of the protocol.</li>
  <li><strong>HTTP/3</strong> is designed to work specifically with <strong>TLS 1.3</strong> because of the integration of QUIC, which natively handles secure transport.</li>
</ul>

<h2 id="summary-of-correlations">Summary of Correlations:</h2>

<table>
  <thead>
    <tr>
      <th><strong>HTTP Version</strong></th>
      <th><strong>TLS Version Compatibility</strong>     </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>HTTP/1.1        </td>
      <td>TLS 1.0, 1.1, 1.2, 1.3 (modern sites use 1.2 or 1.3)</td>
    </tr>
    <tr>
      <td>HTTP/2          </td>
      <td>TLS 1.2, TLS 1.3 (1.2 is most common)</td>
    </tr>
    <tr>
      <td>HTTP/3          </td>
      <td><strong>TLS 1.3 only</strong>                 </td>
    </tr>
  </tbody>
</table>

<h2 id="example-of-big-companies-using-these-protocols">Example of Big Companies Using These Protocols</h2>

<ul>
  <li><strong>Google</strong>: One of the first to deploy <strong>HTTP/2</strong> and <strong>HTTP/3</strong> with <strong>TLS 1.3</strong> in their web services like Gmail and YouTube. Google’s QUIC project eventually became the foundation for HTTP/3.</li>
  <li><strong>Cloudflare</strong>: Also an early adopter of <strong>HTTP/3</strong> and <strong>TLS 1.3</strong>, enabling faster and more secure browsing across its CDN services.</li>
</ul>

<h2 id="references">References</h2>

<ul>
  <li><a href="https://datatracker.ietf.org/doc/rfc8446/">TLS 1.3 - IETF RFC 8446</a></li>
  <li><a href="https://blog.cloudflare.com/http-3-from-root-to-tip/">QUIC and HTTP/3 - Cloudflare</a></li>
  <li><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview_of_HTTP#http2">HTTP/2 Overview - Mozilla</a></li>
</ul>]]></content><author><name>Michelle Torres</name><email>hi@michelletorres.dev</email></author><category term="computer-networks" /><category term="security" /><summary type="html"><![CDATA[Imagine the Internet is like sending letters between two friends. HTTP is the language or format the letter is written in, like using English or another language. TLS is the envelope and lock you use to protect the letter so no one else can read it. Different versions of HTTP or TLS are like using newer types of letters or stronger locks to keep things safe.]]></summary></entry><entry><title type="html">Datagrams</title><link href="http://blog.nmicht.com/2024/07/24/datagrams.html" rel="alternate" type="text/html" title="Datagrams" /><published>2024-07-24T00:00:00+00:00</published><updated>2024-07-24T00:00:00+00:00</updated><id>http://blog.nmicht.com/2024/07/24/datagrams</id><content type="html" xml:base="http://blog.nmicht.com/2024/07/24/datagrams.html"><![CDATA[<p>Imagine sending a message in a bottle across the ocean. Each bottle has a short message, your friend’s address, and a number to tell them which order to read the messages in case they get more than one. That’s like a datagram on the Internet.</p>

<h2 id="formal-explanation">Formal Explanation</h2>

<p>A <strong>datagram</strong> is a basic unit of data transfer in a packet-switched network. It is a self-contained, independent packet that carries information necessary for its delivery. Datagrams are used in communication protocols where reliability and ordering are not guaranteed, such as the User Datagram Protocol (UDP).</p>

<h3 id="characteristics-of-a-datagram">Characteristics of a Datagram</h3>

<ol>
  <li><strong>Self-contained</strong>: Each datagram contains all the information needed for it to be delivered to its destination, including source and destination addresses.</li>
  <li><strong>Independent</strong>: Datagrams are sent independently of each other and can take different paths to reach their destination.</li>
  <li><strong>Connectionless</strong>: Datagram-based communication does not require establishing a connection between sender and receiver before data is transmitted.</li>
  <li><strong>Unreliable</strong>: There is no guarantee that datagrams will arrive in the order sent or even arrive at all. There is no built-in mechanism for error checking and correction.</li>
  <li><strong>Best-effort delivery</strong>: The network will do its best to deliver datagrams, but there is no guarantee of delivery, order, or duplicate protection.</li>
</ol>

<h3 id="how-datagrams-work">How Datagrams Work</h3>

<ol>
  <li><strong>Creation</strong>: A datagram is created by the sender with all necessary information, including the payload (data being sent), source address, and destination address.</li>
  <li><strong>Transmission</strong>: The datagram is sent over the network. It may be broken into smaller packets if the payload is too large.</li>
  <li><strong>Routing</strong>: Each datagram is independently routed through the network. Routers determine the best path for each datagram to take.</li>
  <li><strong>Delivery</strong>: The datagram arrives at the destination, where it is reassembled if necessary. The application processes the data without any guarantee of order or reliability.</li>
</ol>

<h2 id="example-of-datagram-use">Example of Datagram Use</h2>

<p><strong>User Datagram Protocol (UDP)</strong>:</p>
<ul>
  <li>UDP uses datagrams for communication. It is commonly used in applications where speed is critical, and some data loss is acceptable, such as video streaming, online gaming, and VoIP (Voice over Internet Protocol).</li>
</ul>

<h2 id="advantages-of-datagrams">Advantages of Datagrams</h2>

<ol>
  <li><strong>Speed</strong>: Since datagrams do not require a connection to be established, they can be sent quickly, making them ideal for real-time applications.</li>
  <li><strong>Simplicity</strong>: The protocol for sending datagrams is simpler than connection-oriented protocols, which reduces overhead.</li>
  <li><strong>Efficiency</strong>: Datagrams are suitable for broadcasting and multicasting, where the same data needs to be sent to multiple receivers.</li>
</ol>

<h2 id="disadvantages-of-datagrams">Disadvantages of Datagrams</h2>

<ol>
  <li><strong>Unreliable Delivery</strong>: There is no guarantee that datagrams will reach their destination or that they will arrive in order.</li>
  <li><strong>No Error Correction</strong>: Datagrams do not have built-in mechanisms for error detection and correction, so applications need to handle these issues if required.</li>
</ol>

<h2 id="references">References</h2>

<ul>
  <li><a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">User Datagram Protocol (UDP)</a></li>
  <li><a href="https://www.ibm.com/docs/en/i/7.4?topic=SSAW57_7.4/com.ibm.iyig.doc/c_ipv4datagram.htm">Internet Protocol (IP) Datagram</a></li>
  <li><a href="https://www.geeksforgeeks.org/difference-between-datagram-packet-virtual-circuit/">How Datagram Networks Work</a></li>
</ul>]]></content><author><name>Michelle Torres</name><email>hi@michelletorres.dev</email></author><category term="computer-networks" /><summary type="html"><![CDATA[Imagine sending a message in a bottle across the ocean. Each bottle has a short message, your friend’s address, and a number to tell them which order to read the messages in case they get more than one. That’s like a datagram on the Internet.]]></summary></entry><entry><title type="html">Anycast and Unicast routing systems</title><link href="http://blog.nmicht.com/2024/07/13/unicast-anycast.html" rel="alternate" type="text/html" title="Anycast and Unicast routing systems" /><published>2024-07-13T00:00:00+00:00</published><updated>2024-07-13T00:00:00+00:00</updated><id>http://blog.nmicht.com/2024/07/13/unicast-anycast</id><content type="html" xml:base="http://blog.nmicht.com/2024/07/13/unicast-anycast.html"><![CDATA[<p>Imagine you have a letter to send. If you send it to one specific friend, that’s like unicast. But if you want to send it to whichever friend is closest to you at the moment, that’s like anycast.</p>

<p><strong>Unicast</strong> and <strong>Anycast</strong> are two different methods of routing network traffic to deliver data to its destination.</p>

<h2 id="unicast">Unicast</h2>

<p><strong>Unicast</strong> is a one-to-one communication method where data is sent from one specific sender to one specific receiver. Each receiver has a unique IP address, and the data is sent directly to that IP address.</p>

<ul>
  <li><strong>How It Works</strong>:
    <ul>
      <li>A device (sender) sends data packets addressed to a single specific device (receiver).</li>
      <li>The data travels through the network directly to the receiver’s unique IP address.</li>
    </ul>
  </li>
  <li><strong>Example</strong>:
    <ul>
      <li>When you visit a website, your computer sends a request to the web server’s IP address. The server then sends the web page data back to your computer’s IP address.</li>
    </ul>
  </li>
</ul>

<h2 id="anycast">Anycast</h2>

<p><strong>Anycast</strong> is a one-to-nearest communication method where data is sent from one sender to the nearest or best receiver out of a group of potential receivers. All the potential receivers share the same IP address, but the network directs the data to the closest one.</p>

<ul>
  <li><strong>How It Works</strong>:
    <ul>
      <li>Multiple servers (receivers) are assigned the same IP address.</li>
      <li>When data is sent, the network routing protocols determine the closest or best receiver to deliver the data.</li>
    </ul>
  </li>
  <li><strong>Example</strong>:
    <ul>
      <li>Content Delivery Networks (CDNs) like Cloudflare use anycast routing. When you request a web page, the data is delivered from the nearest server in the CDN, which helps to reduce latency and improve load times.</li>
    </ul>
  </li>
</ul>

<h2 id="key-differences">Key Differences</h2>

<ol>
  <li><strong>Destination</strong>:
    <ul>
      <li><strong>Unicast</strong>: One specific receiver.</li>
      <li><strong>Anycast</strong>: The nearest or best receiver from a group of receivers sharing the same IP address.</li>
    </ul>
  </li>
  <li><strong>Use Cases</strong>:
    <ul>
      <li><strong>Unicast</strong>: Regular web browsing, video streaming, email.</li>
      <li><strong>Anycast</strong>: CDNs, DNS services, load balancing.</li>
    </ul>
  </li>
  <li><strong>Network Efficiency</strong>:
    <ul>
      <li><strong>Unicast</strong>: Direct path to the receiver, potentially longer distances and higher latency.</li>
      <li><strong>Anycast</strong>: Shortest path to the nearest receiver, reducing latency and improving performance.</li>
    </ul>
  </li>
</ol>

<h2 id="big-companies-using-these-methods">Big Companies Using These Methods</h2>

<p><strong>Google</strong>:</p>
<ul>
  <li>Uses unicast for direct communication between users and specific services.</li>
  <li>Uses anycast for its global DNS service, which ensures that DNS queries are resolved by the nearest server, enhancing speed and reliability.</li>
</ul>

<p><strong>Cloudflare</strong>:</p>
<ul>
  <li>Uses anycast routing to deliver content from its CDN. When a user requests content, the request is handled by the nearest Cloudflare server, optimizing speed and performance.</li>
</ul>

<h2 id="references">References</h2>

<ul>
  <li><a href="https://www.cloudflare.com/learning/cdn/glossary/anycast-network/">What is Anycast?</a></li>
  <li><a href="https://cloud.google.com/load-balancing/docs/anycast-architecture">Google Cloud Load Balancing</a></li>
</ul>]]></content><author><name>Michelle Torres</name><email>hi@michelletorres.dev</email></author><category term="internet" /><category term="routing" /><summary type="html"><![CDATA[Imagine you have a letter to send. If you send it to one specific friend, that’s like unicast. But if you want to send it to whichever friend is closest to you at the moment, that’s like anycast.]]></summary></entry><entry><title type="html">Synthetic testing</title><link href="http://blog.nmicht.com/2024/07/12/synthetic-testing.html" rel="alternate" type="text/html" title="Synthetic testing" /><published>2024-07-12T00:00:00+00:00</published><updated>2024-07-12T00:00:00+00:00</updated><id>http://blog.nmicht.com/2024/07/12/synthetic-testing</id><content type="html" xml:base="http://blog.nmicht.com/2024/07/12/synthetic-testing.html"><![CDATA[<p>Imagine you have a new toy robot, and you want to make sure it works perfectly. Instead of waiting for your friends to come over and play with it, you test it yourself. You press all the buttons and make it walk around to see if everything works fine. This is like what synthetic testing does for websites.</p>

<p><strong>Synthetic testing</strong> is a method used to measure and analyze the performance and functionality of a website or application by simulating user interactions in a controlled environment. Unlike Real User Monitoring (RUM), which gathers data from actual users, synthetic testing uses automated tools to create virtual users that interact with the website or application.</p>

<h2 id="how-synthetic-testing-works">How Synthetic Testing Works</h2>

<ol>
  <li><strong>Script Creation</strong>:
    <ul>
      <li>Automated scripts are written to simulate user interactions with the website, such as loading pages, clicking links, and filling out forms.</li>
    </ul>
  </li>
  <li><strong>Test Execution</strong>:
    <ul>
      <li>The scripts are run from various locations and environments to simulate different user conditions.</li>
      <li>Tests can be scheduled to run at regular intervals or triggered on demand.</li>
    </ul>
  </li>
  <li><strong>Data Collection</strong>:
    <ul>
      <li>Performance metrics and other data are collected during the test runs.</li>
      <li>Common metrics include page load times, Time to First Byte (TTFB), response times, DNS resolution times, server response times, availability, and error rates.</li>
      <li>Availability metrics are also monitored to detect any downtime or accessibility issues.</li>
    </ul>
  </li>
  <li><strong>Analysis</strong>:
    <ul>
      <li>The collected data is analyzed to identify performance issues, downtime, and other potential problems.</li>
      <li>Results are compared against predefined thresholds and benchmarks.</li>
    </ul>
  </li>
  <li><strong>Reporting</strong>:
    <ul>
      <li>The results are presented in reports and dashboards, highlighting key performance indicators (KPIs) and areas that need improvement.</li>
    </ul>
  </li>
</ol>

<h2 id="advantages-of-synthetic-testing">Advantages of Synthetic Testing</h2>

<ol>
  <li><strong>Proactive Monitoring</strong>:
    <ul>
      <li>Allows for the detection of performance issues and downtime before they impact real users.</li>
    </ul>
  </li>
  <li><strong>Controlled Environment</strong>:
    <ul>
      <li>Tests are conducted in a consistent and controlled environment, making it easier to identify and reproduce issues.</li>
    </ul>
  </li>
  <li><strong>Benchmarking and Comparison</strong>:
    <ul>
      <li>Enables benchmarking against competitors and comparing performance over time.</li>
    </ul>
  </li>
  <li><strong>Geographical Testing</strong>:
    <ul>
      <li>Tests can be run from multiple locations around the world to understand performance across different regions.</li>
    </ul>
  </li>
  <li><strong>Continuous Improvement</strong>:
    <ul>
      <li>Helps in continuously monitoring and improving the performance and reliability of the website or application.</li>
    </ul>
  </li>
</ol>

<h2 id="how-companies-use-synthetic-testing">How Companies Use Synthetic Testing</h2>

<p><strong>Google</strong>: Google uses synthetic testing to monitor the performance of its search engine and other services. By simulating user interactions, Google can detect and address performance issues before they affect real users.</p>

<p><strong>Amazon</strong>: Amazon employs synthetic testing to ensure that its e-commerce platform remains fast and reliable. By running tests from various locations, Amazon can optimize its website for users around the world.</p>

<h2 id="technical-details">Technical Details</h2>

<ul>
  <li><strong>Implementation</strong>: Involves creating automated scripts using tools like Selenium, Apache JMeter, or dedicated synthetic monitoring platforms like Dynatrace or New Relic.</li>
  <li><strong>Metrics Collected</strong>: Common metrics include page load time, time to first byte (TTFB), response times, error rates, and availability.</li>
  <li><strong>Testing Scenarios</strong>: Can include load testing, stress testing, uptime monitoring, and transaction monitoring.</li>
</ul>

<h2 id="synthetic-testing-process-example">Synthetic Testing Process Example</h2>

<ol>
  <li><strong>Script Creation</strong>: Write a script to simulate a user logging in, searching for a product, and completing a purchase.</li>
  <li><strong>Test Execution</strong>: Schedule the script to run every 15 minutes from servers in North America, Europe, and Asia.</li>
  <li><strong>Data Collection</strong>: Collect data on how long each step takes, any errors encountered, and overall availability.</li>
  <li><strong>Analysis</strong>: Analyze the data to identify slow steps or failures.</li>
  <li><strong>Reporting</strong>: Generate reports showing performance trends and any issues detected.</li>
</ol>

<h2 id="references">References</h2>

<ul>
  <li><a href="https://www.dynatrace.com/platform/synthetic-monitoring/">Dynatrace Synthetic Monitoring</a></li>
  <li><a href="https://newrelic.com/platform/synthetic-monitoring">New Relic Synthetic Monitoring</a></li>
  <li><a href="https://jmeter.apache.org/">Apache JMeter</a></li>
  <li><a href="https://www.selenium.dev/">Selenium</a></li>
</ul>]]></content><author><name>Michelle Torres</name><email>hi@michelletorres.dev</email></author><category term="web" /><category term="testing" /><summary type="html"><![CDATA[Imagine you have a new toy robot, and you want to make sure it works perfectly. Instead of waiting for your friends to come over and play with it, you test it yourself. You press all the buttons and make it walk around to see if everything works fine. This is like what synthetic testing does for websites.]]></summary></entry><entry><title type="html">A month in the new job: a rollercoaster</title><link href="http://blog.nmicht.com/2024/06/26/rollercoaster.html" rel="alternate" type="text/html" title="A month in the new job: a rollercoaster" /><published>2024-06-26T00:00:00+00:00</published><updated>2024-06-26T00:00:00+00:00</updated><id>http://blog.nmicht.com/2024/06/26/rollercoaster</id><content type="html" xml:base="http://blog.nmicht.com/2024/06/26/rollercoaster.html"><![CDATA[<p>It’s now a month in my new job. It has been a rollercoaster, not just of emotions, but also in my sleeping patterns, 😅.</p>

<p>In the last month I learned so much more than what I learned in the almost two years at my last job.</p>

<p>Is it easy? No, not all. It is a extremely complicated area and unfortunately, the day only have 24hrs.</p>

<p>Am I enjoying it? Hell yes! I’m exhausted and my brain has zero capacity, but the satisfaction I’m getting is worthy.</p>

<p>So yeah, a rollecoaster of emotions.</p>]]></content><author><name>Michelle Torres</name><email>hi@michelletorres.dev</email></author><category term="life" /><category term="journaling" /><summary type="html"><![CDATA[It’s now a month in my new job. It has been a rollercoaster, not just of emotions, but also in my sleeping patterns, 😅.]]></summary></entry><entry><title type="html">Real User Monitoring (RUM)</title><link href="http://blog.nmicht.com/2024/06/26/rum.html" rel="alternate" type="text/html" title="Real User Monitoring (RUM)" /><published>2024-06-26T00:00:00+00:00</published><updated>2024-06-26T00:00:00+00:00</updated><id>http://blog.nmicht.com/2024/06/26/rum</id><content type="html" xml:base="http://blog.nmicht.com/2024/06/26/rum.html"><![CDATA[<p>Let’s imagine you want to know how fast a toy car goes on different tracks in your house. You ask your friends to play with the car on each track and tell you how fast it went. This helps you understand which track is the fastest. That’s kind of what RUM does for websites.</p>

<p><strong>Real User Monitoring (RUM)</strong> is a method used to measure and analyze the performance of a website or application based on real users’ interactions. It involves collecting data from actual users in real-time as they interact with a website, rather than relying solely on synthetic tests or simulations.</p>

<h2 id="how-rum-works">How RUM Works</h2>

<ol>
  <li><strong>Data Collection</strong>:
    <ul>
      <li>JavaScript snippets are embedded in web pages to gather performance data as users interact with the site.</li>
      <li>This data includes metrics like page load times, user interaction times, error rates, and more.</li>
    </ul>
  </li>
  <li><strong>Transmission</strong>:
    <ul>
      <li>The collected data is sent to a central server or analytics platform for processing and analysis.</li>
    </ul>
  </li>
  <li><strong>Analysis</strong>:
    <ul>
      <li>The data is analyzed to identify performance bottlenecks, user experience issues, and areas for improvement.</li>
    </ul>
  </li>
  <li><strong>Visualization and Reporting</strong>:
    <ul>
      <li>The results are visualized in dashboards and reports, showing key metrics and insights about how real users experience the website.</li>
    </ul>
  </li>
</ol>

<h2 id="advantages-of-rum">Advantages of RUM</h2>

<ol>
  <li><strong>Real-World Insights</strong>:
    <ul>
      <li>Provides accurate data on how real users experience a website, reflecting actual performance rather than simulated conditions.</li>
    </ul>
  </li>
  <li><strong>Performance Optimization</strong>:
    <ul>
      <li>Helps identify slow-loading pages, high error rates, and other performance issues that can be optimized to improve user experience.</li>
    </ul>
  </li>
  <li><strong>User Experience Improvement</strong>:
    <ul>
      <li>Allows businesses to understand user behavior and improve the usability and responsiveness of their websites.</li>
    </ul>
  </li>
  <li><strong>Geographical Performance</strong>:
    <ul>
      <li>Provides insights into how users from different geographical locations experience the website, enabling region-specific optimizations.</li>
    </ul>
  </li>
</ol>

<h2 id="example-how-companies-use-rum">Example: How Companies Use RUM</h2>

<p><strong>Google</strong>:</p>
<ul>
  <li>Google uses RUM to gather performance data for its services, ensuring that users have a fast and reliable experience regardless of their location.</li>
</ul>

<p><strong>Amazon</strong>:</p>
<ul>
  <li>Amazon employs RUM to monitor and improve the performance of its e-commerce platform, ensuring that users have a seamless shopping experience.</li>
</ul>

<h2 id="technical-details">Technical Details</h2>

<ul>
  <li><strong>Implementation</strong>: Typically involves adding a JavaScript library or tag to web pages to collect performance data.</li>
  <li><strong>Metrics Collected</strong>: Common metrics include page load time, time to first byte (TTFB), time to interactive (TTI), error rates, and more.</li>
  <li><strong>Tools and Platforms</strong>: Various tools and platforms provide RUM services, such as Google Analytics, New Relic, and Dynatrace.</li>
</ul>

<h2 id="rum-process-example">RUM Process Example</h2>

<ol>
  <li><strong>User Visits Page</strong>: A user visits a web page with RUM instrumentation.</li>
  <li><strong>JavaScript Collects Data</strong>: The embedded JavaScript code collects performance data.</li>
  <li><strong>Data Sent to Server</strong>: The collected data is sent to a central server or RUM platform.</li>
  <li><strong>Analysis and Reporting</strong>: The data is processed, analyzed, and presented in reports and dashboards.</li>
</ol>

<h2 id="references">References</h2>

<p>These resources provide further details and technical documentation on implementing and utilizing RUM for performance monitoring and optimization.</p>

<ul>
  <li><a href="https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics">Google Real User Monitoring</a></li>
  <li><a href="https://newrelic.com/platform/real-user-monitoring">New Relic Real User Monitoring</a></li>
  <li><a href="https://www.dynatrace.com/platform/real-user-monitoring/">Dynatrace Real User Monitoring</a></li>
</ul>]]></content><author><name>Michelle Torres</name><email>hi@michelletorres.dev</email></author><category term="web" /><category term="telemetry" /><category term="metrics" /><summary type="html"><![CDATA[Let’s imagine you want to know how fast a toy car goes on different tracks in your house. You ask your friends to play with the car on each track and tell you how fast it went. This helps you understand which track is the fastest. That’s kind of what RUM does for websites.]]></summary></entry><entry><title type="html">Server Name Indication (SNI)</title><link href="http://blog.nmicht.com/2024/06/25/sni.html" rel="alternate" type="text/html" title="Server Name Indication (SNI)" /><published>2024-06-25T00:00:00+00:00</published><updated>2024-06-25T00:00:00+00:00</updated><id>http://blog.nmicht.com/2024/06/25/sni</id><content type="html" xml:base="http://blog.nmicht.com/2024/06/25/sni.html"><![CDATA[<p>Imagine you have a big box with many smaller boxes inside, each for different friends. When someone wants to open one of the smaller boxes, they need to tell you which friend’s box they want. That’s what SNI does for websites on a server.</p>

<p><strong>Server Name Indication (SNI)</strong> is an extension to the Transport Layer Security (TLS) protocol that allows a client to specify the hostname it wants to connect to at the start of the TLS handshake process. This is particularly useful when multiple websites are hosted on the same IP address, allowing the server to present the correct SSL/TLS certificate for the requested hostname.</p>

<h2 id="how-sni-works">How SNI Works</h2>

<ol>
  <li><strong>Client Hello</strong>:
    <ul>
      <li>When a client (e.g., a web browser) connects to a server, it initiates the TLS handshake by sending a “Client Hello” message.</li>
      <li>The SNI extension is included in this message, specifying the hostname of the website the client wants to connect to.</li>
    </ul>
  </li>
  <li><strong>Server Response</strong>:
    <ul>
      <li>The server reads the SNI hostname from the “Client Hello” message.</li>
      <li>The server selects the appropriate SSL/TLS certificate for that hostname and sends it to the client as part of the TLS handshake.</li>
    </ul>
  </li>
  <li><strong>Secure Connection</strong>:
    <ul>
      <li>Once the correct certificate is provided, the TLS handshake continues, and a secure connection is established between the client and the server.</li>
    </ul>
  </li>
</ol>

<h2 id="importance-of-sni">Importance of SNI</h2>

<ol>
  <li><strong>Hosting Multiple SSL Certificates</strong>:
    <ul>
      <li>Allows hosting multiple SSL certificates on a single IP address, enabling secure connections for multiple domains.</li>
    </ul>
  </li>
  <li><strong>Cost Efficiency</strong>:
    <ul>
      <li>Reduces the need for multiple IP addresses, lowering costs for hosting providers and businesses.</li>
    </ul>
  </li>
  <li><strong>Simplified Configuration</strong>:
    <ul>
      <li>Simplifies the configuration and management of SSL certificates for websites hosted on the same server.</li>
    </ul>
  </li>
</ol>

<h2 id="example-how-sni-is-used-by-big-companies">Example: How SNI is Used by Big Companies</h2>

<p><strong>Cloudflare</strong>: Cloudflare uses SNI to provide SSL/TLS protection for websites on their content delivery network. This allows them to secure multiple websites hosted on the same IP address with different SSL certificates.</p>

<p><strong>Amazon Web Services (AWS)</strong>: AWS uses SNI in services like Amazon CloudFront and Elastic Load Balancing to enable secure connections for multiple domains on a single server or load balancer.</p>

<h2 id="technical-details">Technical Details</h2>

<ul>
  <li><strong>Protocols</strong>: SNI is an extension to the TLS protocol and is supported in TLS 1.0, 1.1, 1.2, and 1.3.</li>
  <li><strong>Implementation</strong>: Supported by most modern web browsers and servers, including Apache, Nginx, and Microsoft IIS.</li>
</ul>

<h2 id="sni-handshake-example">SNI Handshake Example</h2>

<ol>
  <li><strong>Client Hello</strong>:
    <ul>
      <li>Client sends a “Client Hello” message with the SNI extension specifying “example.com”.</li>
    </ul>
  </li>
  <li><strong>Server Hello</strong>:
    <ul>
      <li>Server recognizes “example.com” and sends the corresponding SSL certificate.</li>
    </ul>
  </li>
  <li><strong>Key Exchange</strong>:
    <ul>
      <li>Client and server exchange keys and establish a secure session.</li>
    </ul>
  </li>
  <li><strong>Secure Connection</strong>:
    <ul>
      <li>Client and server communicate securely using the established session.</li>
    </ul>
  </li>
</ol>

<h3 id="references">References</h3>

<ul>
  <li><a href="https://www.cloudflare.com/learning/ssl/what-is-sni/">SSL/TLS and SNI Overview</a></li>
  <li><a href="https://datatracker.ietf.org/doc/html/rfc6066">RFC 6066 - TLS Extensions</a></li>
  <li><a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-create-https-ssl-load-balancer.html">AWS Elastic Load Balancing - SNI</a></li>
</ul>]]></content><author><name>Michelle Torres</name><email>hi@michelletorres.dev</email></author><category term="computer-networks" /><category term="protocols" /><summary type="html"><![CDATA[Imagine you have a big box with many smaller boxes inside, each for different friends. When someone wants to open one of the smaller boxes, they need to tell you which friend’s box they want. That’s what SNI does for websites on a server.]]></summary></entry><entry><title type="html">Remote Desktop Protocol (RDP)</title><link href="http://blog.nmicht.com/2024/06/21/rdp.html" rel="alternate" type="text/html" title="Remote Desktop Protocol (RDP)" /><published>2024-06-21T00:00:00+00:00</published><updated>2024-06-21T00:00:00+00:00</updated><id>http://blog.nmicht.com/2024/06/21/rdp</id><content type="html" xml:base="http://blog.nmicht.com/2024/06/21/rdp.html"><![CDATA[<p>Imagine you have a magical TV remote that lets you control your friend’s TV from your house. You can change channels, adjust the volume, and even see what’s on the screen. That’s kind of what RDP does, but for computers!</p>

<p><strong>Remote Desktop Protocol (RDP)</strong> is a proprietary protocol developed by Microsoft, which allows users to connect to and control another computer over a network. It provides a graphical interface to the user, allowing them to log into the remote computer and interact with its desktop as if they were physically present at that location.</p>

<h2 id="how-rdp-works">How RDP Works</h2>

<ol>
  <li><strong>Client-Server Model</strong>:
    <ul>
      <li><strong>Client</strong>: The computer you are using to connect to the remote machine.</li>
      <li><strong>Server</strong>: The remote computer you are connecting to, which must have RDP server software running.</li>
    </ul>
  </li>
  <li><strong>Connection Establishment</strong>:
    <ul>
      <li>The client initiates a connection to the remote server using the server’s IP address or hostname.</li>
      <li>The server authenticates the client using credentials (username and password).</li>
    </ul>
  </li>
  <li><strong>Session Creation</strong>:
    <ul>
      <li>Once authenticated, the server creates a session for the user, mirroring the desktop environment of the remote machine on the client’s device.</li>
      <li>The graphical interface is transmitted from the server to the client, while user inputs (keyboard, mouse) are sent from the client to the server.</li>
    </ul>
  </li>
  <li><strong>Data Transmission</strong>:
    <ul>
      <li>RDP uses port 3389 by default to transmit data. It compresses and encrypts data before sending it over the network to ensure efficient and secure communication.</li>
    </ul>
  </li>
</ol>

<h2 id="advantages-of-rdp">Advantages of RDP</h2>

<ol>
  <li><strong>Remote Access</strong>:
    <ul>
      <li>Users can access their desktop, files, and applications from anywhere, as long as they have an internet connection.</li>
    </ul>
  </li>
  <li><strong>Centralized Management</strong>:
    <ul>
      <li>IT administrators can manage and troubleshoot computers remotely, reducing the need for physical presence.</li>
    </ul>
  </li>
  <li><strong>Resource Sharing</strong>:
    <ul>
      <li>RDP allows for resource sharing, such as printers and clipboard, between the local and remote machines.</li>
    </ul>
  </li>
  <li><strong>Security</strong>:
    <ul>
      <li>RDP includes encryption and authentication mechanisms to ensure secure remote sessions.</li>
    </ul>
  </li>
</ol>

<h2 id="example-how-companies-use-rdp">Example: How Companies Use RDP</h2>

<p><strong>Microsoft</strong> is the primary company using and developing RDP, integrating it into their Windows operating systems. Many businesses use RDP to allow employees to work from home or to access their office computers remotely.</p>

<p><strong>Amazon Web Services (AWS)</strong> offers services like Amazon WorkSpaces, which provides RDP-based virtual desktops to businesses, allowing users to access their desktop environments from any device.</p>

<h2 id="standards-and-usage">Standards and Usage</h2>

<p>RDP was introduced by Microsoft in 1998 with the release of Windows NT 4.0 Terminal Server Edition and has since become a standard tool for remote desktop access. It follows the T.128 application sharing protocol as its base.</p>

<h2 id="references">References</h2>

<ul>
  <li><a href="https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/remote-desktop-protocol">Microsoft Remote Desktop Protocol Overview</a></li>
  <li><a href="https://aws.amazon.com/workspaces/">Amazon WorkSpaces</a></li>
  <li><a href="https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/understanding-rdp-network-level-authentication">Understanding RDP and Network Level Authentication</a></li>
</ul>]]></content><author><name>Michelle Torres</name><email>hi@michelletorres.dev</email></author><category term="computer-networks" /><category term="protocols" /><summary type="html"><![CDATA[Imagine you have a magical TV remote that lets you control your friend’s TV from your house. You can change channels, adjust the volume, and even see what’s on the screen. That’s kind of what RDP does, but for computers!]]></summary></entry><entry><title type="html">Media over QUIC (MoQ)</title><link href="http://blog.nmicht.com/2024/06/20/moq.html" rel="alternate" type="text/html" title="Media over QUIC (MoQ)" /><published>2024-06-20T00:00:00+00:00</published><updated>2024-06-20T00:00:00+00:00</updated><id>http://blog.nmicht.com/2024/06/20/moq</id><content type="html" xml:base="http://blog.nmicht.com/2024/06/20/moq.html"><![CDATA[<p>Let’s imagine you want to watch a video or play a game online. Sometimes, it can be really slow, or the video might stop and start a lot. That’s because the internet has to send a lot of information back and forth, and sometimes things get a bit jammed up.
What is MoQ?</p>

<p>MoQ stands for “Media over QUIC.” It’s like a special helper that makes sure videos and games can get to you quickly and smoothly over the internet.</p>

<p>It is an emerging protocol designed to facilitate the efficient streaming and real-time delivery of media content, such as videos and audio, over the QUIC protocol. QUIC (Quick UDP Internet Connections) is a transport layer network protocol developed by Google, which combines the benefits of TCP and UDP to provide a faster and more reliable internet experience.</p>

<h2 id="key-features-of-moq">Key Features of MoQ:</h2>

<ol>
  <li><strong>Low Latency</strong>:
    <ul>
      <li>MoQ is designed to minimize latency, making it ideal for real-time media applications such as live streaming, video conferencing, and interactive media.</li>
    </ul>
  </li>
  <li><strong>Reliability</strong>:
    <ul>
      <li>By leveraging QUIC’s capabilities, MoQ ensures reliable data delivery even in less stable network conditions, reducing packet loss and improving overall media quality.</li>
    </ul>
  </li>
  <li><strong>Scalability</strong>:
    <ul>
      <li>MoQ can handle high volumes of media traffic efficiently, making it suitable for large-scale media distribution platforms.</li>
    </ul>
  </li>
  <li><strong>Adaptive Streaming</strong>:
    <ul>
      <li>It supports adaptive bitrate streaming, which adjusts the quality of the media stream based on the current network conditions, providing a seamless viewing experience.</li>
    </ul>
  </li>
  <li><strong>Security</strong>:
    <ul>
      <li>Built on top of QUIC, MoQ benefits from QUIC’s strong security features, including encryption and authentication, to protect media content from eavesdropping and tampering.</li>
    </ul>
  </li>
</ol>

<h3 id="how-moq-works">How MoQ Works:</h3>

<ul>
  <li><strong>Media Segmentation</strong>: Breaking Things Down
    <ul>
      <li>Imagine your video is a big puzzle. Instead of sending the whole puzzle at once, MoQ breaks it into small pieces and sends them one by one. This way, if one piece gets lost, it can quickly resend just that piece without starting over.</li>
      <li>Media content is divided into small segments or chunks, which are then transmitted over the QUIC protocol. This segmentation allows for better error correction and efficient retransmission of lost data.</li>
    </ul>
  </li>
  <li><strong>Multiplexing</strong>: Sending Multiple Things at Once
    <ul>
      <li>MoQ uses something called QUIC, which is like a super-fast highway just for the internet. This highway helps your video pieces travel really fast and not get stuck in traffic.</li>
      <li>Let’s say you’re watching a video and chatting with a friend at the same time. MoQ can handle both things together without mixing them up, making sure both the video and your chat messages get to you quickly.</li>
      <li>MoQ allows multiple media streams to be multiplexed over a single QUIC connection, reducing overhead and improving resource utilization.</li>
    </ul>
  </li>
  <li><strong>Prioritization</strong>: Smart Helper
    <ul>
      <li>If the internet gets busy, MoQ can decide which pieces of the video to send first, so you see the important parts without waiting. It’s like a smart helper organizing your puzzle pieces perfectly.</li>
      <li>MoQ can prioritize certain media streams or segments, ensuring that critical content is delivered promptly. This is particularly important for interactive applications like video calls.</li>
    </ul>
  </li>
</ul>

<h3 id="example-googles-use-of-moq">Example: Google’s Use of MoQ</h3>

<p>Google, a pioneer in developing QUIC, is actively involved in the standardization and implementation of MoQ. By integrating MoQ into its media services, Google can offer improved streaming quality and reduced latency for platforms like YouTube and Google Meet. This enhances user experience by providing smooth playback and real-time interaction, even under varying network conditions.</p>

<h3 id="references">References:</h3>
<ul>
  <li><a href="https://datatracker.ietf.org/wg/moq/about/">IETF MoQ Working Group</a></li>
  <li><a href="https://www.chromium.org/quic/">QUIC Protocol Overview</a></li>
  <li><a href="https://www.fastly.com/blog/why-google-quic-protocol-is-potential-http2-replacement">Google QUIC</a></li>
</ul>]]></content><author><name>Michelle Torres</name><email>hi@michelletorres.dev</email></author><category term="computer-networks" /><category term="protocols" /><summary type="html"><![CDATA[Let’s imagine you want to watch a video or play a game online. Sometimes, it can be really slow, or the video might stop and start a lot. That’s because the internet has to send a lot of information back and forth, and sometimes things get a bit jammed up. What is MoQ?]]></summary></entry></feed>