Networking Overview
2021-08-17
0. 前言
花了大概一个月的时间,总算看完了 Pluralsight 上的一门 Networking 入门课。
在 Monash 的第一学期其实也学过 9135 这门 Networking 的课程,也拿了不错的分数,但是总觉得 networking 很抽象,里面的一些概念没法融会贯通,后来因为一直在搞 application 层面的东西,就没有去温习网络相关的知识,可能潜意识里认为这块知识并不重要。
工作了两年之后,对网络通信的认识跟之前有所不同,我现在的理解是,好的 software engineer 需要有这方面的知识,比如各种 port number 到底是干嘛的,DNS server 是怎么运作的,ip subnet 和 masking 是什么。
更重要的是,OSI model 的每个层面到底在做什么,为什么我们需要那么多的 layer。
今天这篇文章就来整理一下我从这门课中学到的核心知识,不求面面俱到,但是会着重讲一些我之前的知识盲区。
1. OSI Model Overview
Note
- OSI Model 里面有 7 层,但我们要关注的主要是 2347 这四个 layer,因为 physical layer 就是各种线,layer 5、6 也可以宽泛地归于 layer 7;
- Networking 的终极任务是让 data 在 A 和 B 之间顺利移动,实现 A 和 B 的通信(比如你上网,就是跟某网站之间的通信,你能看到的内容是某网站的服务器发送给你的数据);
一个简单的表格
Layer No. | Layer Name | Key Parts | Responsibility |
---|---|---|---|
2 | Data Link Layer | Ethernet, Switch, MAC address table, ARP | LAN - moving data in local area networks |
3 | Network Layer | Router, IP Address, Routing table | Moving data from end to end |
4 | Transport Layer | TCP, UDP, port numbers | Build session |
7 | Application Layer | Telnet, SSH, HTTP, FTP, email, DHCP, DNS | Actual communication |
2. Layer 2 - Data Link Layer
The data link layer is responsible for protocols that allow traffic to move in between devices that are locally connected together, so devices that are all hooked up to the same device.
Any time we’re discussing Ethernet, or frames, or switches, we’re talking about layer two, the data link layer.
Data Link Layer 实现的是两个小范围的 device 之间的数据移动。
比如你的电脑和你家的路由器之间的数据移动,这个 layer 可以搞定;
但是假如你要上网浏览其他网页,那这个 layer 做不到,因为你的电脑和你访问的网站的服务器离得太远了。
重要组成部分
- 硬件 - Switch(交换机)
- 技术 - Ethernet(以太网)
- 身份识别 - MAC Address(物理地址)
- Table - MAC Address Table(Switch 保存)
- 数据 - Data Frame
Ethernet is a family of wired computer networking technologies commonly used in local area networks (LAN), metropolitan area networks (MAN) and wide area networks (WAN).
Layer 2 详解
Q:Ethernet 是什么?
A:Ethernet 可以分为 wired 和 wireless,就是有线网和无线网,大家应该都很清楚了,有线就是得插根网线才能上网,无线就是输个 wifi 密码就能上网。
家庭网络:
企业网络:
Q:Switch 是干嘛的?
A:每个 device 要传信息的时候,都统一发送给 switch,由 switch 来进行分发,switch 可以防止信息碰撞(collision)发生。
Q:怎么防止?
A:通过 MAC Address Table,把 port number 和 MAC address 一一对应起来,传输信息的时候确保传给正确的 destination device。
Q:MAC Address 包含什么信息?
A:我们的手机电脑等设备都有出厂的 MAC address,MAC address 包含 Manufacture ID + Serial Number,就好比这个设备的身份证号。
Q:我可以看到这个 MAC Address Table 吗?
A:Windows 可以用 putty 连接到 switch device,然后输入 show macaddress-table dynamic
来查看,在 command 里面输入 ipconfig 可以看到自己当前 device 的 MAC address (physical address).
Q:我家里好像没有交换机这个东西呀。
A:大部分家用路由器(router)都集成了交换机的功能,公司的网络则会用到单独的交换机(长下面这样)。
家里的路由器(router)一般有 4-5 个 port 可以插网线,比如下面这个路由器就包含了内置的 ethernet switch,并且能提供有线网络和无线网络。
Q:网线也属于 layer 2 吗?
A:Ethernet cable(网线)把各个设备连接起来,属于 layer 1 - physical layer 的范畴。
协议数据单元,是指在分层网络结构,例如在开放式系统互联(OSI)模型中,在传输系统的每一层都将建立协议数据单元(PDU)。
Q:Layer 2 传输的数据长什么样?
A:Layer 2 传输的是数据是 Ethernet Frame,它包含以下关键信息:
- Destination MAC Address
- Source MAC Address
- Data/Packet/Payload
Q: 路由器的 WAN 和 LAN 是什么意思?
A:路由器有两个地址:WAN 是 external address,LAN 是 internal address。
其他概念
Carrier Sense Multiple Access with Collision Detection - CSMA/CD
目的是让 local network 里面的多个 device 能够同时传数据,通过电压可以判断是否有 collision。
Half Duplex and Full Duplex
前者是类似对讲机那种,同一时间只能一个设备传数据;后者是双方可以同时传数据。
用 full duplex 就不用考虑 collision 的问题了。
Network Topologies: Bus, Ring, Star
Star 最常用,涉及到 hub (layer 1 device),hub 和 switch 长得几乎一样,唯一的作用就是 repeat message。
Broadcast message
当 destination MAC address = FFFF FFFF FFFF 的时候,它就是一条广播信息,除了发信息的 device 之外,所有在同一局域网的设备都会受到这条信息。
VLAN
用一个 switch 分成两个 virtual LAN,互不影响。
Spanning Tree Protocol
防止出现 loop。
3. Layer 3 - Network Layer
The network layer allows end to end communication. It is responsible for getting traffic across the network from one Ethernet segment onto another Ethernet segment.
Ethernet, ip addressing and ip routing work very closely together to get messages from one device on the network all the way to the side of your network.
Network Layer 实现的是 end-to-end communication,确保你在上网浏览网页时顺利获取服务器的数据,就是这个 layer 的重任。
Note:
- ARP(Address Resolution Protocol)是用来连接 layer 2 和 layer 3 的协议;
- Internet is full of routers.
- Gateway = Router,这两个词可以互换;
- Router 非常非常非常重要,防火墙基本上要在 layer 3 去做,因为这是内网和外网连接的渠道;
重要组成部分
- 硬件 - Router(路由器)
- 身份识别 - IP Address(互联网协议地址)
- Table - Routing Table(Router 保存),ARP Table(Router 和 Switch 一起保存)
- 数据 - IP Packet
Layer 3 详解
Q:Router 是怎么做到把本地网络和外部网络连接到一起的?
A:Router 至少有两个 interface(就是可以插两根线),可以理解成有两个网卡的 PC,一个连着本地网络,一个连着外部网络,两个 interface 各有一个 ip address。
Q:这两个 ip address 各有什么用途呢?
A:外部网络的 ip address 就好比你家的门牌号,可以在定外卖的时候用这个地址让别人送东西过来;
内部网络的 ip address 就是你家里的 device 要跟外界沟通的统一接口,所以的 device 都把信息传到这个 router 的内部 address,router 负责把消息传出去(也会把外部的消息传回来)。
Q:Default Gateway 又是什么呢?
A:Gateway 和 Router 是一个东西,default gateway 就是当你不知道要把外部信息传给那个 router 的时候,默认传输的 router。
Q:Router 怎么把我的信息传到外部收件人手里的呢?
A:Router 有一个 routing table,里面存着其他 router 的 ip 地址,根据收件人的 ip 地址来传给对应的 router,有点类似接力赛。这里还涉及到域名解析服务器(DNS)和 DHCP server 这两个概念。
Q:DHCP server 是干嘛的?
A:它负责分配 ip address, subnet mask, default gateway, DNS server,这四个是让网络运作的关键,有了这些信息,我们才能把 layer 2 的 MAC address 和 layer 3 的 ip address bind 起来。
Q:DNS 又是干嘛的呢?
A:当你属于一个 url,比如 google.com 的时候,我们需要把这个网址翻译成一个 ip address,这就需要找 DNS 来帮忙了,查名用到了 URL hierarchy system(暂时不展开了)。
Q:好吧,那回到 layer 3,我们传输的数据长什么样?
A:IP Packet 会把 layer 2 的 data frame 加一层包起来,主要增加了以下几个关键信息:
- Source IP Address
- Destination IP Address
- TTL (time to live)
Q:TTL 是什么?
A:它定义了 message 最多经过的 router 数量,防止出现 loop。
Q:Layer 2 的 Data Frame 包含收发信息双方的 MAC address,假如 10.0.0.20/24 要发信息给 10.0.0.10/24,它们只知道对方的 ip 地址,怎么才能获取 MAC Address 呢?
A:好问题!在同一个局域网中,我们可以用 ARP,它可以通过 Layer 3 address 来获取 Layer 2 address(也就是通过 IP 地址来查询 MAC 地址)。
Q:ARP 具体是怎么获取 MAC 地址的呢?
A:它可以在 layer 2 发一个 broadcast message,比如「谁是 10.0.0.10?」,10.0.0.10 收到信息之后就会把回复自己的 MAC 地址,router 和 switch 会把这个 mapping 信息保存在 ARP Table 里面。
ARP command
在 windows 中,使用arp -a
可以看到当前储存的 mapping 信息,这是 ip address 和 MAC address 的 mapping。
我们 ping internal ip 的时候,arp table 就会把新的记录添加进去。
Tracert command
这个命令可以让我们看到具体的 routing 情况,比如 tracert -d 8.8.8.8
就会告诉我们从自己的电脑到 8.8.8.8 这个地址经过了几个 router,这些 router 的 ip 地址都是什么。
Network Address Translation
Router 用 Network Address Translation 把局域网的 ip 换成 public ip,这样才能把信息传出去。
- 具体的 implementation 有 Port Address Translation(ip swapping),Port Forwarding (socket swapping).
- Socket swapping 涉及到 layer 3 IP address + layer 4 port number.
4. Layer 4 - Transport Layer
Client and serve need to set up session before starting to transmit data.
Transport Layer 的作用,简单来说,就是让发信息的 device 和收信息的 device 之间建立连接。
虽然你有了对方的 ip address,但是你也不能随意地去乱发信息对吧?你得让对方同意才行呀(就像打电话的时候对方接了你才能说话,没接你就不能说)。
这个 layer 琢磨的事情很简单,怎么让双方建立联系。
主要的关注点在于:
- 建立 session
- 交换信息并且确认对方已经收到
- 结束 session
重要组成部分
- Protocol - TCP, UDP
- 身份识别 - Port Number(决定 layer 7 用哪个 protocol)
- 数据 - 加 header
TCP - Transmission Control Protocol
三次握手,四次分手。
TCP 还可以 track message 是否送达以及 re-send request,确保沟通的顺畅。
三次握手 - SYN, SYN-ACK, ACK
- client sends a SYN(synchronize) message to web server, change state to “waiting for reply”
- server sends reply called “SYN-ACK” (acknowledgement of SYN message), client change state to “SYN received”.
- client responses with a message “ACK”
牵手成功之后,client 可以发送 request 给 server(比如 http request),这就是 layer 7 的责任范围了。
四次分手 - FIN, FIN-ACK, FIN, FIN-ACK
- client or server sends FIN message, go into FIN-WAIT state
- another sends FIN-ACK message and a FIN message
- the initiated device sends FIN-ACK message
分手的话,每个 device 都要发一次 FIN 和一次 FIN-ACK,session end 之后就不能继续发信息了。
快速分手 - RESET
1 device sends RESET message, RESET 就好比挂电话(可能由 firewall 发起,直接切断 session)。
UDP - User Datagram Protocol
- 快速的传小数据,不稳定(就好比开门对着外面大喊一声,我要这个信息,对方有可能传给你也有可能不传);
- sequence number 和 acknowledge number 是 TCP 里面用来确认消息发送成功的 field;
- DNS 用的就是 UDP,不然的话 IP 解析还得 3 次握手 + 4 次分手,太费事儿了。
Layer 4 Header(关键信息)
- source port number
- destination port number(决定 layer 7 protocol)
5. Layer 7 - Application Layer
We are going to transfer the content (files) in this layer.
Application Layer 的作用是决定到底要传什么数据,怎么传。
比如发邮件,有专门的的 protocol,看网页,也有专门的 protocol,这些都是 application layer 根据用户的需求来决定的。
Layer 4 负责建立关系(告诉 layer 7 现在用什么 port 说话),Layer 7 负责具体聊天。
Layer 2 和 3 是数据的搬运工,负责把信息传给正确的地址。
重要组成部分
各种 Protocol,包括 HTTP(S), (S)FTP, SMTP, DHCP 等等。
带 S 的一般更安全。
DNS: Domain Name System
和 URL hierarchy system 相关,DNS server 找不到某个网址的时候,会咨询上一级的 DNS server。
nslookup
ipconfig /all # show all configurations including dns server
nslookup google.com
nslookup # returns the current dns server
server 8.8.8.8 # change dns server to be google's
6. 结语
本文没有展开的内容主要是 ip address + subnet、ipv4 vs ipv6,其他比较核心的概念都提到了。
最后总结一下:
- Layer 2(Data Link Layer):局域网传输 + MAC address + switch
- Layer 3(Network Layer):点对点传输 + IP address + router
- Layer 4(Transport Layer):建立关系 + 确定 port
- Layer 7(Application Layer):client 和 server 用不同的 protocol 沟通