计算机网络笔记
 
 
 
 
 
 
 
 
 
 
 
贡献者: addis
参考:图解计算机网络(小林)。如果写成教程需要避免版权问题。
- 以浏览器访问小时百科
https://wuli.wiki/index.html
为例。浏览器发送了一个 http
协议的包,发到了服务器的 Nginx 程序,然后 Nginx 返回一个 http 包,里面包含了 index.html
文件,也就是小时百科首页的网页。但这看似简单的过程中,要确保这个包要送到想要的应用,并返回一个包到原地址,是较为复杂的。
- 一个电脑可能有一张或多张网卡,一张网卡提供一个以太网插口,具有一个写死到硬件中的 MAC 地址(当然也有网卡为了隐私可以改变 MAC),还有一个没那么固定的 IP 地址(可以由操作系统设置)。MAC 地址用于两个(由交换机)直接相连的网卡通信。当然现在许多网卡有自动跳线功能,把两个网卡直连也通常没问题。
- 一个电脑可能同时运行多个程序,所以一个程序直接占用一个网卡太浪费了,还需要区分(虚拟的)端口。这些虚拟端口是 TCP 或 UDP 协议中的概念。一张网卡的端口数以万计,一个端口一次只能被一个程序占用(监听)。某些特定数字的端口一般被作为一些常用软件的默认端口,例如
https
通常是服务器的 443 端口。
- 先假定 IP 都是公网 IP,互联网每张网卡都有一个唯一的 IP。所以浏览器想发包给 Nginx,就直接指定 IP 和端口即可精确送达。但要先把域名
wuli.wiki
转为 IP(域名的作用就是给 IP 一个更好记的名字),这需要对互联网的 DNS 服务器进行询问,但我们先跳过这一步,假设已经问到了 IP。所以现在浏览器把这个 http 包外面再加一个包装纸,填好 IP 和端口(443),递给操作系统。
- 操作系统根据 IP 地址在它的路由表中的范围决定包裹的下一站网卡 IP 是多少,以及如果电脑有多块网卡用哪块网卡发送(每张网卡可能连接不同局域网,需要找到下一站 IP 所在的局域网)。在发送网卡随机选一个端口专门用于本次连接(待会要用同一个端口接收返回
html
文件的包)。为了表明寄件人地址方便回信,在包中添加上寄件所用网卡的 IP 和这个随机端口。发完以后对该端口持续监听等待回信。
图 1:路由表示例
- 但发件网卡要把包发到下一张网卡,写到包裹上的并不是它的 IP 地址而是 MAC 地址,因为 MAC 地址就是专门用于直连的网卡之间通信的。它会在 IP 包的外面再贴一层 MAC 地址信息。但 MAC 如何获取呢?
- 电脑网卡通常用以太网线或者 wifi 直接连接到交换机。交换机比 IP 协议更底层,它只根据 MAC 地址把包发到下一张网卡。电脑网卡通过网线插入交换机时,它会在一张表记录第几个插口(或 wifi 连接)对应哪个 MAC 地址。所以交换机自己并没有 IP。
- 事实上如果局域网只有两台电脑,可以把它们用一根网线连接组成局域网,效果和连到一台交换机是一样的。交换机只是充当了一个分线器的角色把两台电脑直接相连变为多台 “直接” 相连。
- 若操作系统通过路由表知道了下一块网卡的 IP 但不知道 MAC,就用 ARP 协议对所有同一个局域网进行广播询问,局域网的所有 MAC 地址都能收到。然后具有被询问 IP 的网卡就会用 ARP 协议回答 MAC 地址。
图 2:ARP 表的例子
- 局域网如果不连接互联网,就只能内部通信,上不了
wuli.wiki
。其实互联网本质上就是很多不同的局域网通过路由器互相连起来。
- 路由器可以看作一个专门用于转发包的电脑,把不同的局域网相连。它有多块网卡,每块有自己的 IP,连接不同的局域网。路由器的操作系统也有路由表。收到一个包后,就根据包中的最终 IP 地址决定把它转到哪个局域网的哪台机器(通常是下一个路由器),最后到达小时百科服务器所在的局域网,进入服务器的网卡。
- 如果一个路由器把局域网连接到互联网,它就叫做网关。操作系统发包时,如果发现路由表中的 IP 是同一局域网的,就直接填写对应的 Mac 地址,如果不认识就默认它是别的局域网的并填写本局域网默认网关的 Mac 地址。
- 但 IP 地址不够用了,所以就有了 NAT,把事情搞得更复杂。
- 实际上家里的 wifi 路由器一般既充当交换机由充当路由器。
拓展内容:
1. 具体笔记
- IPv4 有 4 byte,32 bit
- IP 分为网络号和主机号,可以开头有多少个连续的 1 来区分 A-E 五类。A-C 类具有不同的网络号比特数和主机号比特数。
- 一个网络中主机号全为零的地址用于表示该网络本身,全为 1 的地址用于表示广播到所有主机
- 最常用的 C 类地址的主机号占 8 位,那么 C 类地址的最大主机个数位 256-2=254
- 另外还可以用 CIDR 做子网划分,例如
10.100.122.2/24
指定前 24bit(3 字节)为网络号,最后一个字节为主机号。24
也可以用子网掩码 255.255.255.0
表示。把主机 IP 和掩码做与运算就可以得到子网号(主机 bit 都为零)。
- 在本网络内广播的叫做本地广播,在不同网络之间的广播叫做直接广播,多数情况下会在路由器上设置为不转发直接广播。
- 两台计算机要通讯,首先要判断是否处于同一个广播域内,即网络地址是否相同。如果网络地址相同,表明接受方在本网络上,那么可以把数据包直接发送到目标主机。
- 路由器寻址工作中,也就是通过这样的方式来找到对应的网络号的,进而把数据包转发给对应的网络内。
- 在主机和路由器上都会有各自的路由表
- 计算机使用一个特殊的 IP 地址 127.0.0.1 作为环回地址,数据包不离开电脑
- 每种数据链路的最大传输单元 MTU 都是不相同的,如以太网的 MTU 是 1500 字节。
IPv6
- IPv6 的地址是 128 位(16 字节,IPv4 的 4 倍)的,这可分配的地址数量是大的惊人,说个段子 IPv6 可以保证地球上的每粒沙子都能被分配到一个 IP 地址
2. TCP 笔记
图 3:TCP 包结构
- 没有 IP,有两个端口号
- 通常说的(虚拟)端口不是 TCP 就是 UDP 的
- TCP 是可靠通信,如果丢包了会重传,会验证每个包的数据 hash
- 包的序号,这个是为了解决包乱序的问题
- 确认号,目的是确认发出去对方是否有收到。如果没有收到就应该重新发送,直到送 达,这个是为了解决不丢包的问题
- 状态位。例如 SYN 是发起一个连接,ACK 是回复,RST 是重新连接,FIN 是 结束连接等。TCP 是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更。
- 窗口大小。TCP 要做流量控制,通信双方各声明一个窗口(缓存大小),标识自己 当前能够的处理能力
- 拥塞控制,对于真正的通路堵车不堵车,它无能为力,唯一能做的就 是控制自己,也即控制发送的速度
- TCP 是面向连接的传输层协议,传输数据前先要建立连接
- TCP 传输数据之前,要先三次握手建立连接
- TCP 是一对一的两点服务,即一条连接只有两个端点。
- 这个所谓的「连接」,只是双方计算机里维护一个状态机,在连接建立的过程中,双方的状态变化时序 图就像这样。
- TCP 的连接状态查看,在 Linux 可以通过
netstat -napt
命令查看
- 如果 HTTP 请求消息比较长,超过了 MSS 的长度,这时 TCP 就需要把 HTTP 的数据拆解成一块块 的数据发送,而不是一次性发送所有数据。
- TCP 实现可靠传输的方式之一,是通过序列号与确认应答。
- 在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消 息。
- 重传机制的其中一个方式,就是在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方 的 ACK 确认应答报文,就会重发该数据,也就是我们常说的超时重传。
- 下面还有一大堆几十页 TCP 的内容,看到头图。
3. Socket 编程
- 服务端和客户端初始化 socket ,得到文件描述符
- 服务端调用 bind ,将绑定在 IP 地址和端口;
- 服务端调用 listen ,进行监听
- 服务端调用 accept ,等待客户端连接
- 客户端调用 connect ,向服务器端的地址和端口发起连接请求
- 服务端 accept 返回用于传输的 socket 的文件描述符
- 客户端调用 write 写入数据;服务端调用 read 读取数据
- 客户端断开连接时,会调用 close ,那么服务端 read 读取数据的时候,就会读取到了 EOF ,待处理完数据后,服务端调用 close ,表示连接关闭
======= 旧内容 ========
参考书:An Introduction to Computer Networks (Peter L Dordal)
图 4:4 层/7 层模型
- Local Area Network (LAN): 物理上的网络,链接,家庭,学校或者公司中的设备。例如 wifi
- Internet Protocol (IP): 将 LAN 连接成 Internet
- layers: LAN 是 link layer, IP 是 internet layer 或 network layer, TCP 是 transport layer
- 以上三个 layer 加上 application layer 叫做 4 layer model
- 每个 layer 就是一个 programming interface 和 library,只和上面和下面的 layer 直接交流
- 每层 layer 调用下一层的 layer。软件调用 TCP 库发送数据,TCP 调用 IP 库,IP 库使用 LAN。软件库不会直接使用 IP 或者 LAN
- LAN 也可以细分为两层,底层是纯物理的,模拟电路数字电路,光纤,导线。上面一层是数据层面的对包的操作。
- data rate:数据(比特)传输的速率
- throughput:净传输量,考虑 overhead 等
- bandwidth:可以是以上两个中的一个,但该书中主要指 data rate。这个词是从无线电来的。
- goodput:aplication-layer throughput
- Kbps 和 Mbps 中的 b 是 bits,K 是 $10^3$, M 是 $10^6$。
- KB 和 MB 是 1024 bytes 和 1024*1024 bytes,新符号也记为 KiB 和 MiB
- packet 是传输过程中的一个整体,每个 packet 的 header 中有 delivery information (address),类比快递的包裹
- 最大的 packet 大小由 LAN 决定,Ethernet 是 1500 byte
- 大包的 LAN 如何传输数据到小包 LAN 呢?这个由 IP 来解决
- 一般来说,每一个 layer 会在包前面加一个 header。Ethernet header 一般 14 byte,IP header 一般 20 byte,TCP 20 bytes
4. 杂
参考这篇文章。
- packet-switched network 使用 package 可以让不同设备间在同一条线路上通讯。这种叫做方式 connectionless
- 如果一条线路只给两个设备传输信息,就是 dedicated
- Internet 基本上是一个 connectionless network.
- circuit-switched network 例如电话网络,当两个人通话时,communication circuit (path) 被设立起来在通话过程中专门给两个人使用。
- router(路由器)在两个或者多个 packet-switched network 之间传递信息。router 查看 packet 的 IP 地址,决定传递 packet 的最佳路线,并向该路线发送 packet。
- router 是一种常见的 gateway
- wide area network (WAN) 是地理上长距离的 private 网络,将若干个 LAN 连接起来。例如公司用 WAN 将不同的分公司连接起来。通常使用 router 将 LAN 连接成 WAN。
- virtual private network (VPN) 是一个程序,在一个没那么安全的网络上(例如 internet)创建一个安全加密的连接。VPN 使用 tunneling protocols 在一端加密然后在另一端解密。地址同样被加密。VPN 是 point-to-point connection
- Ethernet 以太网,是一种连接 LAN 的传统技术(LAN 基本上就是用 Ethernet),对应的 layer 是 link layer。 IEEE 802.3 系列标准
- Power line networking: 基本上就是用墙上的电源插座传递上网信号,基本可以达到 Gigabit 网线的一半
- Media Access Control (MAC) 地址是硬件的地址,每个设备有一个永远不变的 MAC 地址(烧在硬件里面的)。例如 00:70:40:42:8A:60。前三个数字通常是制造商的编号
5. Wi-Fi
- wireless LAN (WLAN),IEEE 802.11 系列标准规定 WLAN 使用 Ethernet protocol,简称 wifi
- dynamic host configuration Protocol (DHCP) 例如公司的像衣柜一样的服务器,用于动态给各个设备分发 IP 地址
- Access point (AP) 就是发出 wifi 的设备。可以单独购买,连接路由器,发射无线网络。但是一般的做法是直接买无线路由器
- dual band 路由器有两个 AP,不同频率,一般是 2.4GHz 和 5GHz
- WLAN client 或 wifi client 就是连接到 wifi 的设备。可以假设这些设备有隐形的 port 和 cable
- wifi 加密方式:WEP (淘汰), WPA, WPA2 (最安全)。后两者的两种加密方式为 Temporal Key Integrity Protocol (TKIP) 和 Advanced Encryption Standard (AES)
6. 路由器
- 【错】严格来说我们可以将两台电脑直接用网线连起来,但是需要使用特殊的 crossover cable,以及手动设置 IP 地址,比较麻烦,所以常见的做法还是把所有设备通过路由器相连。
- 基本所有市场上的路由器都有 web interface,即用浏览器设置
- 路由器上只有一个 WAN 接口,用来连接墙上的插头(如果不需要 internet 则不需要连接)
- 路由器有多个 LAN 接口,许多路由器有 4 个 LAN 口
- 如果需要更多 LAN 接口,可以使用 switch 或者 hub 来完成,一般家用路由器可以最多连接 250 个设备
- Ethernet 一般有两种,Ethernet (理论 13 MB/s,实际约 8 MB/s) 和 Gigabit Ethernet (150 MB/s,实际约 45-100MB/s)
- 一般使用的网线是 category 5 (CAT5),其实大部分是 CAT5e,支持 Gigabit。CAT6 和 CAT5 的性能基本差不多
- 要使用 Gigabit Ethernet,路由器,电脑和网线都需要支持才行。如果连接路由器的一台设备是 Gigabit,另一台是普通 Ethernet,速度就会等于后者的速度
- hub 将所有的 LAN 端口 share 一个 channel,而 switch 给每个端口一个 channel
- hub 连接的设备越多,速度越慢,而 switch 不会变。现在基本用 switch。
- reset 按钮用户恢复默认设置
- 连接好以后,可以在浏览器中输入 IP 地址 92.168.x.1 访问浏览器设置页面,x 一般是 0, 1, 2, 3, 10 或者 11
路由器设置
- 登录用户名一般是 admin,密码一般是 admin, password, default 或者 1234. 也可以查看说明书或者机身
- 在 windows 上要查看 router 的 ip,在 cmd 用 ipconfig 命令,会在显示 Default Gateway
- login 以后注意要改密码
- 设置板块一般有 Wireless, WAN, LAN, password, System
- Wireless 板块:设置 wifi 名称和密码
- WAN 设置:大部分时候使用默认,除非 ISP 网络提供商有特殊要求
- LAN 设置:可以设置路由器的 IP 地址。可以设置设备的本地 IP 地址范围。也可以设置 DHCP reservation list,该列表中 IP 地址是静态的。
 
 
 
 
 
 
 
 
 
 
 
© 小时科技 保留一切权利