We may earn an affiliate commission when you visit our partners.
Course image
Hussein Nasser

We are entering an era in software engineering where we rely on libraries and frameworks to do most of our work. While this is useful and save tremendous dev hours, it creates leaky abstractions that manifest in form of performance degradation, unexpected errors, 100% CPU , network and disk usage, hangs, latency and many other. It becomes difficult to articulate what goes wrong on the backend and how to fix it when engineers don't understand the basic building block of what they are interacting with.

Read more

We are entering an era in software engineering where we rely on libraries and frameworks to do most of our work. While this is useful and save tremendous dev hours, it creates leaky abstractions that manifest in form of performance degradation, unexpected errors, 100% CPU , network and disk usage, hangs, latency and many other. It becomes difficult to articulate what goes wrong on the backend and how to fix it when engineers don't understand the basic building block of what they are interacting with.

Network communication is one of the most critical pieces in backend engineering. And the TCP/IP Internet suite is the basic fundemntal building block of communications that link the frontend to the backend. Any protocol we use eventually gets encapsulated into either a TCP segment or UDP datagram. That packet is wrapped in an IP packet which is placed into a frame and then sent across the network. These layers are important to understand for backend engineers in order to optimize the stack, minimize latency, and increase throughput. What matters  is the true understanding of these pieces and not just memorizing definitions and packet headers to pass an exam. If an engineer truly understood what is happening when their backend API receives an HTTP POST request for example, they will be astonished at how much is happening behind the scenes. They would completely change the way they approach backend API designs, they will try to select the best protocol for the job, and they will tune that protocol to its maximum potential. They will start asking questions about frameworks and libraries that nobody else does. It is those questions that will make them fully utilize those framework to their maximum potential.

This course is primarily designed for backend engineers who built applications, services or APIs and want to take their skillset to the next level. If you are a frontend engineer who are interested in the backend and have attempted to build backend apps before this course is also for you. If you are a network engineer who already know the basic fundamentals and want to start building backend applications effectively this course might help you bridge the gap

This course is not designed for those who want to pass network certification tests (.)

Enroll now

What's inside

Learning objectives

  • Ip protocol
  • Tcp protocol
  • Udp protocol
  • Understand the circumstances where requests and responses are slowed down
  • Learn how dns works
  • Learn how tls works
  • Learn the building blocks of tcp/ip protocol
  • Learn the osi model and where your application fits in it
  • Understand the performance impact of tcp/ip in backend applications
  • Make better decisions on what protocol to select for the backend
  • Build and design better tcp/udp backends
  • Use wireshark to inspect traffic
  • Use tcpdump to inspect traffic
  • Build tcp and udp servers with multiple languages (javascript and c)
  • Networking with docker
  • Show more
  • Show less

Syllabus

Introduction
Welcome
Who is this course for?
Course Outline
Read more

You can download the slides and codes from here. The slides will be updated so make sure to check back often.

Quick quiz to test the understanding of these fundamentals.

List of private ip addresses https://en.wikipedia.org/wiki/Private_network

RFC 1918 that defines the private IP addresses https://www.rfc-editor.org/rfc/pdfrfc/rfc1918.txt.pdf (also attached)

Now that you know IP, TCP and UDP. Any other protocol must be built on top of these three.

TLS or Transport Layer security is a protocol used to encrypt the communication between two hosts. This lecture describes an overview of the protocol. RFCs attached and can be retrieved here.

https://www.rfc-editor.org/rfc/pdfrfc/rfc8446.txt.pdf

https://www.rfc-editor.org/rfc/pdfrfc/rfc5246.txt.pdf

John Nagle developed this algorithm to ensure efficient bandwidth, however it harmed performance in certain cases, let us discuss this. Download the full RFC from here. https://www.rfc-editor.org/rfc/pdfrfc/rfc896.txt.pdf, I also included it in this lecture as a downloadable.

As described in RFC 1122, the delayed acknowledgment algorithm can delay ACKs by up to half a second which  in combination with Nagle algorithm it can have devestating performance on communication

Download RFC 1122 here https://www.rfc-editor.org/rfc/pdfrfc/rfc1122.txt.pdf, I also included it as a downloadable on this lecture for more reading

Postgres Access Control https://www.postgresql.org/docs/current/auth-pg-hba-conf.html

In this video I learned how to decrypt TLS traffic with Wireshark so we can look at the traffic. Then took a look at how HTTP/2 streams are formed. The Magic HTTP/2 Stream is for sure interesting and the odd stream Ids are too!

HTTP/2 RFC

https://tools.ietf.org/html/rfc7540#section-3.5

https://http2.github.io/http2-spec/#SETTINGS_MAX_CONCURRENT_STREAMS

Connection Preface

HTTP/2 connections are opened with the preface '0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a', or "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n". The preface is designed to avoid the processing of frames by servers and intermediaries which support earlier versions of HTTP but not 2.0.

connection preface

Note: The client connection preface is selected so that a large

proportion of HTTP/1.1 or HTTP/1.0 servers and intermediaries do

not attempt to process further frames. Note that this does not

address the concerns raised in [TALKING].

export SSLKEYLOGFILE=/Users/HusseinNasser/tempkeys/key

:30 protocol ossifcations

13-30 http smuggling

From RFC (we discovered this in the video)

5.1.1 Stream Identifiers

Streams are identified with an unsigned 31-bit integer. Streams initiated by a client MUST use odd-numbered stream identifiers; those initiated by the server MUST use even-numbered stream identifiers. A stream identifier of zero (0x0) is used for connection control messages; the stream identifier of zero cannot be used to establish a new stream.

In this lecture I wireshark MongoDB and describe how it works in the wire. We will be Decrypting TLS traffic, showing the mongo protocol, cursors and more

Source code for MongoDB source code here https://github.com/hnasr/javascript_playground/blob/master/mongodb-js/test.js

Source Code

https://github.com/hnasr/javascript_playground/tree/master/server-sent-events

In this lecture I explain how TLS 0-RTT work

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Explores TCP/IP, which is a fundamental building block for backend engineers to optimize stacks, minimize latency, and increase throughput in their applications
Teaches how to build TCP and UDP servers with Javascript and C, which are valuable skills for backend engineers working with different technology stacks
Examines the performance impact of TCP/IP in backend applications, enabling backend engineers to make informed decisions about protocol selection and optimization
Uses Wireshark and TCPDUMP to inspect traffic, which are essential tools for backend engineers to diagnose network issues and understand protocol behavior
Discusses Nagle's algorithm and delayed acknowledgments, which can help backend engineers understand and mitigate potential performance bottlenecks in network communication
Requires familiarity with client-server architecture, which may necessitate additional learning for those without prior experience in backend development

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Intro network engineering for backend

Based on the course description and objectives, this course aims to provide software engineers with a fundamental understanding of network protocols underlying backend communications. It appears designed for those who want to go beyond surface-level abstractions to understand performance and efficiency impacts. Learners might expect a focus on TCP/IP fundamentals, OSI model, and practical application using tools like Wireshark and TCPDUMP. It seems tailored for backend and frontend engineers seeking deeper technical knowledge, explicitly stating it is not for certification preparation. A hands-on approach with code examples in Javascript and C is indicated.
Explicitly states it's not exam preparation.
"This course is focused on understanding, not memorizing for tests."
"It's mentioned upfront this isn't for network certifications."
"If you need a cert, this is not the right course for you."
Covers TCP/IP, UDP, DNS, TLS fundamentals.
"I wanted to understand the building blocks like TCP and UDP."
"The course explains how layers like IP, TCP, and UDP interact."
"It covers DNS and TLS, which are crucial for web development."
Includes demos with Wireshark and TCPDUMP.
"Using Wireshark to inspect traffic is very useful."
"Learning TCPDUMP helped me see packets on the wire."
"The demos with analyzing real protocols like HTTP/2 are great."
Connects networking concepts to backend design.
"It addresses performance impacts relevant to backend applications."
"Understanding these layers helps in optimizing backend APIs."
"I learned how networking affects backend architecture decisions."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Fundamentals of Network Engineering with these activities:
Review OSI Model Fundamentals
Reinforce your understanding of the OSI model to provide a solid foundation for understanding how different network protocols interact.
Browse courses on OSI Model
Show steps
  • Read about each layer of the OSI model.
  • Identify protocols that operate at each layer.
  • Explain the purpose of each layer.
Review 'Computer Networking: A Top-Down Approach'
Gain a deeper understanding of networking concepts and protocols by studying a widely used textbook.
Show steps
  • Read the chapters related to TCP/IP and UDP.
  • Work through the end-of-chapter exercises.
  • Focus on the sections covering congestion control and flow control.
Practice Wireshark Packet Analysis
Develop practical skills in analyzing network traffic using Wireshark to identify and diagnose network issues.
Show steps
  • Capture network traffic using Wireshark.
  • Filter traffic based on IP address and port number.
  • Analyze TCP and UDP headers.
  • Identify potential network bottlenecks.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Create a Blog Post on TCP vs UDP
Solidify your understanding of TCP and UDP by explaining their differences and use cases in a blog post.
Show steps
  • Publish your blog post online.
  • Research the key differences between TCP and UDP.
  • Outline the structure of your blog post.
  • Write a clear and concise explanation of each protocol.
  • Provide examples of applications that use each protocol.
Build a Simple TCP/UDP Server
Apply your knowledge by building a basic TCP or UDP server in a language of your choice.
Show steps
  • Choose a programming language (e.g., Python, Node.js).
  • Implement a basic server that listens for connections.
  • Handle incoming requests and send responses.
  • Test your server with a client application.
Review 'TCP/IP Illustrated, Volume 1: The Protocols'
Gain a comprehensive understanding of the TCP/IP protocol suite by studying a classic reference book.
Show steps
  • Read the chapters related to TCP, IP, and UDP.
  • Study the packet diagrams and protocol state transitions.
  • Focus on the sections covering congestion control and error handling.
Contribute to a Networking Project
Deepen your understanding by contributing to an open-source networking project.
Show steps
  • Find an open-source networking project on GitHub.
  • Identify a bug or feature to work on.
  • Submit a pull request with your changes.
  • Address feedback from the project maintainers.

Career center

Learners who complete Fundamentals of Network Engineering will develop knowledge and skills that may be useful to these careers:
Backend Engineer
A backend engineer builds and maintains the server-side logic that powers applications, services, and APIs, often working with databases, servers, and network protocols. This course is designed primarily for backend engineers and provides in-depth knowledge of the TCP/IP protocol suite, which is critical for optimizing backend performance. Understanding how these network protocols function helps a backend engineer build more efficient and reliable systems, tune protocols and select the best one for the job. By taking this course, a backend engineer can gain insights into the network layer, enabling them to diagnose and fix performance issues related to latency, throughput and unexpected errors. The course's focus on analyzing network traffic using tools like Wireshark and TCPDump is especially valuable for a backend engineer to troubleshoot and fine-tune their applications.
Network Programmer
A network programmer specializes in developing software that interacts directly with computer networks, often working at a low level of abstraction with sockets and protocols. This course fits the needs of a network programmer perfectly, as it focuses on the underlying principles of network communication. The course covers the TCP/IP protocol suite, which is fundamental to writing network applications. The course's practical examples of building TCP and UDP servers with Javascript and C will allow a network programmer to build upon their existing expertise. The course may equip a network programmer to make better decisions on protocol selection and optimization. The use of Wireshark and TCPDump for network traffic analysis will also improve a network programmer's ability to diagnose and troubleshoot.
Site Reliability Engineer
A site reliability engineer is responsible for ensuring the reliability, performance, and availability of software systems. This course provides practical information to a site reliability engineer because it covers essential network protocols, performance considerations, and how to diagnose and fix network-related issues. The focus on TCP/IP, UDP, DNS, TLS, and related protocols is highly relevant for understanding how to optimize network communication and troubleshoot issues. The course's emphasis on using Wireshark and TCPDump to analyze network traffic also prepares a site reliability engineer to effectively diagnose and resolve performance bottlenecks. A site reliability engineer can benefit from learning to select an appropriate protocol for the job.
API Developer
An API developer designs, builds, and maintains Application Programming Interfaces. This course provides valuable insight to an API developer as it offers knowledge of the fundamental network protocols that underpin API communication. The focus on TCP/IP, UDP, DNS, and TLS gives an API developer the knowledge to design and implement more performant and reliable APIs. An API developer can use this course to optimize communication, minimize latency, and increase throughput. The course also covers the important topic of protocol selection, which allows the API developer to choose the best communication approach. The course may help an API developer understand the impact of design choices on network performance.
Network Engineer
A network engineer is responsible for designing, implementing, and managing computer networks and related systems. This course provides the foundational knowledge needed to work with network protocols and troubleshoot network performance, especially within the context of backend applications. Although this course is not targeted at those who seek to pass networking certifications, the focus on TCP/IP fundamentals, the OSI model, and the understanding of protocols like TCP, UDP, DNS and TLS is still relevant. A network engineer who understands how backend applications interact with the network will be able to better optimize their network infrastructure and support application needs. The course may be helpful to a network engineer who is working to bridge the gap to building backend applications.
Systems Engineer
A systems engineer designs, builds, and maintains complex systems, often involving a combination of hardware and software components. This course is relevant to a systems engineer by providing a deep understanding of network communication, which is a fundamental aspect of many systems. The course covers TCP/IP, UDP, DNS, TLS and other protocols, and helps a systems engineer to build a deeper understanding of how applications interact with the network. A systems engineer will gain valuable knowledge about how to optimize systems, minimize latency, and increase throughput by understanding the underlying network protocols. The course also covers practical aspects of network analysis using tools like Wireshark and TCPDump, which helps a systems engineer troubleshoot performance issues.
Cloud Engineer
A cloud engineer builds, deploys, and maintains applications and services on cloud platforms. This course provides knowledge about the networking aspects of cloud infrastructure, a key component of cloud technology. The course's deep dive into TCP/IP protocols, DNS, TLS, and other communication protocols helps a cloud engineer understand how applications interact within a cloud environment. This is important when optimizing performance, ensuring security, and troubleshooting network issues. The course’s discussion of Docker networking is also relevant, as many cloud applications rely on containerization. A cloud engineer can benefit from the course's focus on analyzing network traffic with tools like Wireshark and TCPDump.
DevOps Engineer
A devops engineer works to streamline the software development lifecycle by automating processes and ensuring smooth collaboration between development and operations teams. This course may be useful for a devops engineer as it focuses on the fundamental aspects of network communication and how they impact the performance and reliability of applications. Understanding TCP/IP protocols, the OSI model, and tools like Wireshark and TCPDump can help a DevOps engineer diagnose network-related issues and optimize the infrastructure. The course's coverage of networking with Docker is also directly relevant to deployment and containerization, which are core elements of DevOps practices.
Software Architect
A software architect designs the high-level structure and components of a software system. The course may be useful for a software architect because understanding network protocols and their performance characteristics is crucial for designing efficient and reliable applications, particularly in distributed or networked systems. This course helps a software architect to make informed decisions about protocol selection, tuning, and optimizing network communication. The course's detailed look at the TCP/IP suite, the OSI model and related protocols allows a software architect to better understand the system as a whole. A software architect can use the information in this course to design systems that minimize latency and maximize throughput.
Technical Lead
A technical lead guides development teams and makes critical decisions on technical matters for their team. This course may benefit a technical lead as it helps them develop a deeper understanding of the network layer of an application. It provides an understanding of protocols such as TCP/IP, UDP, DNS and TLS, which are essential for any technical lead working on networked applications. By taking this course and understanding the technical details of how the software interacts with the network, the technical lead can make better decisions on architecture, protocol selection, and optimization of the network communication. This can lead to more efficient, reliable, and secure applications. This course also covers practical aspects of network analysis, which allows the technical lead to better guide their team.
Security Engineer
A security engineer is responsible for protecting computer systems and networks from security threats. The course may help a security engineer understand how network protocols work and identify potential vulnerabilities, particularly those related to TCP/IP. The course covers multiple protocols, including TLS, which is key to securing network communication. A security engineer can also use the knowledge of network traffic analysis, as taught in this course, using tools such as Wireshark and TCPDump, to look for suspicious patterns and detect security threats. The course's detailed discussion of the layers within the OSI model can also give a security engineer a more complete picture of how data is transmitted and where potential vulnerabilities can exists.
Solutions Architect
A solutions architect designs and oversees the implementation of complex technology solutions for organizations. This course may assist a solutions architect as it provides a deep understanding of network communication, which is a fundamental aspect of many solutions. The course's focus on TCP/IP protocols, the OSI model, and networking concepts may be helpful when designing robust and efficient systems. This course may also assist a solutions architect when making informed decisions about protocol selection, security, and system optimization. The course's practical aspects, such as network analysis using tools like Wireshark and TCPDump, can also guide a solutions architect in troubleshooting and fine-tuning solutions.
Technical Consultant
A technical consultant provides expert advice and guidance to clients on technology-related matters. This course may be useful for a technical consultant working on networked applications, by providing the fundamental knowledge of network communication and protocols. The course's focus on TCP/IP, UDP, DNS, TLS and other relevant protocols may help a technical consultant better understand the technical aspects of backend infrastructure. The course may be helpful in better diagnosing performance or security issues, and also provides a solid foundation for offering advice on network-related matters. The course's use of tools like Wireshark and TCPDump may also help a technical consultant to illustrate technical concepts to clients.
Database Administrator
A database administrator is responsible for managing and maintaining databases, which are often accessed over a network. This course may be helpful to a database administrator because it provides a fundamental understanding of network protocols and how to optimize network communication between applications and databases. Understanding TCP/IP, DNS, TLS, and other protocols, as taught in this course, can help a database administrator diagnose performance issues related to network latency and throughput. The course also covers the important topic of database access control, which is crucial for a database administrator to maintain security. The course may assist a database administrator to better troubleshoot issues related to database connectivity.
Embedded Systems Engineer
An embedded systems engineer designs and develops software and hardware for embedded systems, which often involve network connectivity. Although focused on backend applications, this course may be useful to an embedded systems engineer by providing them fundamental knowledge of network protocols. The course's coverage of TCP/IP, UDP and other protocols may be helpful for designing embedded systems that communicate on local networks or on the internet. An embedded systems engineer working with networked devices can benefit from the course's focus on protocol optimization, to tune performance and minimize latency. The course may help an embedded systems engineer understand network communication at a deeper level.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Fundamentals of Network Engineering.
Provides an in-depth look at the TCP/IP protocol suite, covering everything from the physical layer to the application layer. It is particularly useful for understanding the details of how TCP and IP work. This book classic reference for network engineers and developers. It provides a detailed and comprehensive explanation of the TCP/IP protocols, making it an invaluable resource for anyone working with networks.
Provides a comprehensive overview of computer networking concepts, starting from the application layer and working down to the physical layer. It is particularly useful for understanding the design principles and protocols used in modern networks. This book is commonly used as a textbook in university-level networking courses. It offers a more in-depth treatment of the topics covered in the course, making it a valuable resource for students seeking a deeper understanding.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser