systemsapproach / book Goto Github PK
View Code? Open in Web Editor NEWComputer Networks: A Systems Approach -- Textbook
Home Page: https://book.systemsapproach.org/
License: Other
Computer Networks: A Systems Approach -- Textbook
Home Page: https://book.systemsapproach.org/
License: Other
Hi there,
first of all, I am thoroughly enjoying the book. Absolutely great work guys!
I'll get straight to the point: Is this project supposed to work with python
3? because it doesn't on my machine (detailed explanation below). However it works with a python2
-based virtualenv
Now, if the project it's a python 2 only project, would you be open to:
Makefile
to create a python2
-based virtualenv, even on machines that have python
at version 3.I can create a draft PR if you are interested.
python
3I cloned the repo and ran:
# this is outside the virtualenv
# it is, however, what `virtualenv` will pick up
# by default when creating `doc_venv`
python --version
# Python 3.10.4
make html
# ... redacted for brevity ... I can provide entire output if needed
# source ./doc_venv/bin/activate ;\
# set -u ;\
# sphinx-build -M html "." "_build"
# Running Sphinx v1.8.6
# Extension error:
# Could not import extension sphinx.builders.latex (exception: cannot import name 'contextfunction' from 'jinja2' (/home/vise890/code/systemsapproach/book_issue/doc_venv/lib/python3.10/site-packages/jinja2/__init__.py))
# make: *** [Makefile:53: html] Error 2
So I tried to force python2 for the venv creation:
# Create the virtualenv with all the tools installed
doc_venv:
virtualenv --python=$(shell which python2) doc_venv ;\
source ./doc_venv/bin/activate ;\
pip install livereload ;\
pip install -r requirements.txt
Then tried building, and it seems to all work π
In data/presentation.rst ch7.1, we have this:
To make matters worse, on some machines integers are represented in big-endian form (the most significant bit of a word is in the byte with the highest address), while on other machines integers are represented in little-endian form (the most significant bit is in the byte with the lowest address).
This is phrased in reverse right? The way I understand endianness from OS, and what I just now had to reconfirm/review, big-endian means most significant byte is sent/stored first, and little-endian means least significant byte is sent/stored first, where "stored first" means the lower address, and "sent first" means first outgoing byte in a stream.
The receiver is now expecting frames 7, 0..5
The receiver has already successfully received frames 0-6 shouldn't it be expecting only frames that occur after 6?
For example, we might decide that the maximum number of hops to get across a certain network is never going to be more than 16, and so we could pick 16 as the value that represents infinity. This at least bounds the amount of time that it takes to count to infinity. Of course, it could also present a problem if our network grew to a point where some nodes were separated by more than 16 hops.
I think the value that represents infinity should be 17 as in the first and last sentences it indicates the 16 is an acceptable number of hops.
how about a pdf?
Hi, I just start to read this book. When it comes to section 1.4 Software, the author provides two example code snippets for socket server and client. They are written in C and don't work unless I add another 3 lines:
#include <stdlib.h> // for exit
#include <unistd.h> // for close
#include <string.h> // for strlen
I am a novice in C Programming so I don't know whether it's my problem or the author just neglect these 3 libraries. If the latter is the real reason, it seems a little bit confused for a beginner.
BTW, I know this book is more about architecture & system approach in theory and I really like them. However, maybe a guide to run the codes mentioned above is also useful, such as:
gcc server.c -o server.out
./server.out
and
gcc client.c -o client.out
./client.out localhost
When trying to run make
to build a web version of the book, the following error is generated:
runTopLevelLifecycles β 2 β β’βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
internal/child_process.js:323
throw errnoException(err, 'spawn');
^
Error: spawn E2BIG
at _errnoException (util.js:992:11)
at ChildProcess.spawn (internal/child_process.js:323:11)
at exports.spawn (child_process.js:502:9)
at spawn (/Users/mohammedalameen/.gitbook/versions/3.2.3/node_modules/npm/lib/utils/spawn.js:7:13)
at runCmd_ (/Users/mohammedalameen/.gitbook/versions/3.2.3/node_modules/npm/lib/utils/lifecycle.js:237:14)
at runCmd (/Users/mohammedalameen/.gitbook/versions/3.2.3/node_modules/npm/lib/utils/lifecycle.js:196:5)
at runPackageLifecycle (/Users/mohammedalameen/.gitbook/versions/3.2.3/node_modules/npm/lib/utils/lifecycle.js:160:3)
at Array.<anonymous> (/Users/mohammedalameen/.gitbook/versions/3.2.3/node_modules/npm/node_modules/slide/lib/bind-actor.js:15:8)
at LOOP (/Users/mohammedalameen/.gitbook/versions/3.2.3/node_modules/npm/node_modules/slide/lib/chain.js:15:14)
at chain (/Users/mohammedalameen/.gitbook/versions/3.2.3/node_modules/npm/node_modules/slide/lib/chain.js:20:5)
make: *** [setup] Error 1
Blockstack has moved on and so has the decentralized Internet. Suspect this entire section is due for a rewrite
advantages
Hello, I found a typo in the sentence:
But today most networks deploy Ethernet in a point-to-point configuration, with these links interconneted by L2 switches to form a switched Ethernet.
where the word "interconneted" is misspelled.
I hope this is the right place to report it (saw another issue created for a typo), otherwise, sorry for posting it here.
I wanted to address a typo I found in the second paragraph of Section 3.3.6 which reads:
"One simple way to map an IP address into a physical network address is to encode a hostβs physical address in the host part of its IP address. For example, a host with physical address 00100001 01001001 (which has the decimal value 33 in the upper byte and 81 in the lower byte) might be given the IP address 128.96.33.81."
I believe there is a typo in the binary representation of the physical address as "01001001" would be 73, but the rest of the sentence indicates this was meant to be 81 (01010001).
I was unsure of the best place to bring this to your attention, so I apologize if I should not have submitted it here.
Seems like an oversight to have no mention of NAT in 2024
It appears sphinx and docutils have an incompatibility at the moment. Solution was found here:
readthedocs/readthedocs.org#8616 (comment)
I installed docutils 0.18b1 and this resolved my issue.
make epub
source ./doc_venv/bin/activate ;
set -u ;
sphinx-build -M epub "." "_build"
Running Sphinx v1.8.5
making output directory...
building [mo]: targets for 0 po files that are out of date
building [epub]: targets for 76 source files that are out of date
updating environment: 76 added, 0 changed, 0 removed
reading sources... [ 3%] applications/infrastructure
Exception occurred:
File "~/systemsapproach/book/doc_venv/lib/python3.8/site-packages/sphinx/domains/std.py", line 638, in note_labels
n = node.traverse(addnodes.toctree)[0]
TypeError: 'generator' object is not subscriptable
The full traceback has been saved in /tmp/sphinx-err-lr1it0br.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at https://github.com/sphinx-doc/sphinx/issues. Thanks!
make: *** [Makefile:53: epub] Error 2
(Thanks Jeremy for the assist in figuring this out!)
In the first paragraph of 1.2.5 "Network management has historically been
a human-intensive aspect of networking, and while it is ulikely weβll get people entirely out of the loop, it is
increasingly being addressed by automation and self-healing designs."
Should be changed to unlikely
OR
While HTTP/3 is mentioned in the section on QUIC in e2e chapter, there is no discussion of it in the Applications chapter, which only gets as far as HTTP/2. This should be updated with a pointer back to the QUIC section.
In Section 9.1.2, the discussion of HTTP get requests makes a distinction between "absolute URLs" and "relative identifiers" that I believe is not quite correct. In the HTTP 1.1 RFC, the request target can be an absolute URL, yes, but the alternative is not a relative path, it's the "origin form" which explicitly must be an absolute path.
So I believe the GET request example should be corrected as:
GET /index.html HTTP/1.1
Host: www.cs.princeton.edu
Under Classes of Applications, the example link (http://www.cs.princeton.edu/llp/index.html) does not go to one of the author's pages. A "Page not found" page from Princeton's website is returned instead.
In section 1.1 Applications, the second to last paragraph contains this sentence:
"Later in the book we will develop a more complete taxonomy of application types to help guide our discussion of key design decisions as we seek to build, operate, and use networks that such a wide range of applications."
The last part of the sentence does not make sense, I'm not sure what it's meant to say.
The checksum code (in the error detection section of chapter 2) in the old printed versions had a bit flip using "~" in the return. I believe flipping the bits at the end is the correct behavior. This is missing in the current online version. Is this an intentional change?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.