参考资料:‘计算机网络原理:自顶向下’ 和 ‘TCP/IP 协议卷1’
Udacity讲解:https://classroom.udacity.com/courses/ud436/lessons/1727228776/concepts/4247787570923
UCB TA讲解On Longest Prefix Match: https://www.youtube.com/watch?v=1VMJt2-Kvq4&list=WL&index=168&t=1303s
Subnet: https://www.youtube.com/watch?v=4ci5y4t9f0Q&t=0s&list=LLmi_YVDztbpnU1kk2cCGKlw&index=6
互联网基础知识:
两种主流上网方式拨号上网 与 cable上网
Splitter 用来将接收到的信号区分开是网络数据,还是电话。分给电话机,或者电脑。
Protocol 概况:
这个图很经典,Protocol一层包一层。
Application Layer
DNS runs in parallel to HTTP in the Application Layer (layer 7). DNS is in effect an application that is invoked to help out the HTTP application, and therefore does not sit "below" HTTP in the OSI stack.
Transport/TCP
握手细节在信息安全部分里有写。
Network Layer/ IP部分
这里就是如何bypass 防火墙的关键。在End system resemble
ICMP
traceroute, ping
subnet
Organization获取IP:
一个organization比如学校,他的IP不是凭空来的,是要去申请的。申请过后会被赋予A block of IP address.然后管理员要上网远程把IP configure 进router里。
DPCP
对于organization里面的用户[host]们,他们不会去主动配置自己的IP。他们的IP都是动态变化的。今天来学校一个IP,明天来可能又一个IP。由DPCP 远程动态把available的IP assign 给他们。
NAT
在一个局域网里,虽然我们有a block of IPs. 但是由于人们可能越来越多,或者一个人的机器设备越来越多。IP会不够。可以用IPv6来解决,也可以用NAT来解决。NAT就是一个IP翻译器,在一个内网里的IP他随意给,然后自己人跟自己人交流就无所谓了,如果跟外界交流,NAT会翻译一下。其实只要让外界知道是从这个organziation的IP就好了,具体哪个subnet外面人不需要知道。如果外面人发送进来reply,会根据translation table里记载的Port。
ARP
From 我的另一篇博客:https://www.jianshu.com/writer#/notebooks/16065002/notes/19137362
Normally, a protocol from layer N+1 is encapsulated with the header of the protocol from Layer N, but protocols like arp, stp, cdp, icmp and igmp are exceptions because are encapsulated with a header of a protocol from the same layer.
ARP is layer 2. The reason being is that a broadcast is sent on layer 2 (data link layer) and ARP will normally not traverse to layer 3 (network layer). However it can provide extra features to the layer 3 protocol.
The truth is that not all protocols fit the OSI model exactly, because after all it's just a model. If you really want to push it into a spot I'd say ARP is a layer 2.5 protocol. It fits layer 2, but doesn't fit layer 3 completely.
看这里两个机器都是subnet 192.168.1里的两个host。也就是在一个局域subnet里发送信息的时候,机器会把找的IP广播,符合IP的那个机器会对口气喊我的物理MAC地址是多少。
Router 路由:
主要任务就是负责 网络数据的转发。Router 连接着一堆别的Router有许多路线,那么选择哪条路线呢?
根据内部的Routing Table的Rules采用IP longest prefix matching来决定路线。
那么Table里的Rules哪里来的?
有两种主流算法来Fill in Routing Table
1. Link State 就是假设我们知道整个网络里所有路线的capacity和路线长度,再来决定。具体决定就是用Dijstra的最短路径法。
2. Distance Vector 算法:
假设我们不知道整个网络里所有路线的capacity和路线长度, 每个router不断跟互相发送自己的Table,which has information about 附近的router信息。这样一直循环update,所有router里的table就能有一个pretty good approximation about 所有路径。
Longest Prefix Match:
首先Table里一堆的rules,把他们变成数据结构比如说BST。然后keep track of Last Match prefix IP.
变成compound data structure 来节省空间
我们可以propagate up 然后discard一些不需要的node
自治区网络
自治区网络内部传输可以用上面的Dijstra 或者 Distance Vector Algorithm
自治区与自治区直接的链接
核心idea就是在每个自治区的出口会有一个Gateway,Gateway会连到另一个自治区的gateway。【用Border Gateway Protocol 一个很复杂的Protocol】
那么自治区1里的router A 去自治区2的router B 就是router A找到Gateway1, Gateway1找到gateway2,gateway2 再通过内部找到routerB。
Rate Control
switch vs router
https://www.diffen.com/difference/Router_vs_Switch
似乎switch是一个network内部分发data的。【因为数据从外网发来到router后,要传给在这个网里的机器啊】
hub也是一个network内部分发data的,但是它只会broadcast。【比switch落后】
Buffer
右边那个是router。
Congestion:
有点像控水一样。我们要控制进水的速度,具体方法从出水口得到反馈来调整。比如说池子快满了就放慢入水速度。
通过packets drop的情况可以判断sender 应该发送的速率是多。
window based: 就是每次发一chunk of data, received的话ACK回来 然后sender才能再发,这样的后果是比较慢。