计算机网络笔记
 
 
 
 
 
 
 
 
 
 
 
贡献者: 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 地址是静态的。
致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者
热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利