计算机网络
HTTP 请求类型(大致)
POST / HTTP/ 1.1 请求方法路径协议版本
Host: xx. cn 请求主机
Connection:keep-alive 保持 TCP 协议不断,复用传输
Content-type: text/html; charset=utf-8 请求数据的类型
Content-Length: 123 请求体的字节数
响应类型
HTTP/1.1 200 OK 协议版本返回码返回码含义
Server: nginx 1.1.1 服务端中间件信息
Content-Length:





客户端会在发送出ACK之后进入到TIME_WAIT状态,同时设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么客户端会重发ACK并再次等待2MSL。
所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,客户端都没有再次收到FIN,那么客户端推断ACK已经被成功接收,则结束TCP连接。

TCP 通过以下几个特性保证数据传输的可靠性
- 序列号和确认应答
- 超时重传
- 流量控制
- 拥塞控制
- 校验和
基础概念
- 网络号:负责标识该 IP 地址是属于哪个「子网」的。
主机号:负责标识同一「子网」下的不同主机。
键入网址到网页显示,期间发生了什么?
解析URL:首先浏览器要解析URL,_URL_包括协议 + web服务器 + 目录名和文件名,继而生成发送给web服务器的、对该资源的请求信息DNS解析:查询服务器域名对应的 IP 地址。DNS服务器保存了 Web 服务器域名与 IP 的对应关系。客户端发送DNS请求给本地DNS服务器,查询对应的IP地址后返回客户端。PS:需要查询时,浏览器、操作系统、hosts文件依次看有没有缓存,不一定每次都要解析IP。TCP连接:HTTP报文是基于TCP传输的,涉及到三次握手。组装好TCP报文后交给网络层处理。发送HTTP请求:
(1) 加入IP头部,生成IP报文
(2) 加入MAC头部。(发送方MAC地址在网卡里,接收方的MAC地址靠ARP协议在以太网广播寻找,当然也是有缓存的)
(3) 再经过_网卡、交换机、路由器_,抵达服务器服务器处理请求并返回HTTP报文:服务器依次检查_MAC头部、IP头、TCP头_检查序列号和端口号,HTTP进程收到后把这个网页封装在HTTP响应报文里并返回(相同步骤)。浏览器解析渲染页面:浏览器是一个边解析边渲染的过程。连接结束
为什么要四次?
接收方可能还有数据要发送,所以并不能马上发送 FIN 报文,而是将发送 FIN 报文的控制权交给接收方应用程序
什么情况下三次挥手?
1没有数据要发送 且 2开启了TCP延迟确认机制
TCP延迟确认机制:解决了单独发送ACK(不带数据)效率低的问题
有数据要发送时,ACK会一同发送
没有数据要发送时,ACK会等待数据一起发送;如果这时又收到了数据报文,就会立刻发出
全连接和半连接队列
查看某个服务的全连接队列大小
ss -lnt 'sport = : 8080'
滑动窗口

拥塞 窗口

SDN
网络接入
路由
介绍
路由是Web框架中的一个重要概念,它用于将HTTP请求映射到相应的处理程序。路由是指将URL与特定的处理程序或控制器相关联的过程。当用户访问Web应用程序时,路由将决定哪个控制器或处理程序将处理该请求。路由通常使用HTTP方法(GET、POST、PUT等)和URL路径来定义。
路由一定是对称的吗?
不一定。
路由是工作在哪一层协议?
不仅仅 ip 层,连接层也可能
路由是改的 IP 地址吗?
路由是改 Mac,找到发包口
动态路由 BGP, OSPF 等
API 路由和 web 路由
API路由和Web路由是两种不同类型的路由。API路由用于处理API请求,而Web路由用于处理Web请求。API路由通常返回JSON或XML格式的数据,而Web路由通常返回HTML格式的数据。
ARP
逻辑同网段才能发送 ARP,跨网段找下一段
免费 ARP
新增服务器,刷新缓存
新增 ip,防止 IP 冲突
ARP 代理
劫持 ARP 请求
ARP 本质上是查找下一跳的 MAC,不是请求目标地址
IP 协议
网络模型
数据链路层
数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思
数据链路层的功能:定义了电信号的分组方式。
网络层
区分哪些计算机是同一广播域,引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址。
子网掩码作用
知道”子网掩码”,我们就能判断,任意两个 IP 地址是否处在同一个子网络。
特殊地址
全零地址:"0.0.0.0"对应当前地址。它表示的是这样一个集合:所有不清楚的主机和目的网络。
全“1”地址:"255.255.255.255"是当前子网的广播地址。限制广播地址,这个地址不能被路由器转发。
回环地址:"127.0.0.1"即本机地址, windows 系统别名 Localhost
NAT
介绍
网络地址转换,替换 IP 报文头部的地址信息。NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力。
解决多个内网访问同一个目标地址+端口
ip+端口
流程
- 网络被分为私网和公网两个部分,NAT 网关设置在私网到公网的路由出口位置,双向流量都必须经过 NAT 网关;
- 网络访问只能先由私网侧发起,公网无法主动访问私网主机;
- NAT 网关在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换;
- NAT 网关的存在对通信双方是保持透明的;
- NAT 网关为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来。
静态 NAT
一个内部主机占用一个公网 ip
主要为了实现一些特殊的组网需求,比如隐藏内部主机的真实 ip,或者实现两个 ip 地址重叠网络的通信。
NAT 重载(经常应用)
PAT(port address Translation,端口地址转换,一对多模型,也叫端口地址复用)
缺点
(1)无法进行端到端的 IP 跟踪
(2)使 IP 会话的保持时效变短
解决措施:
主动发送一个 NAT 能感知到而又没有实际数据的保活消息,这么做的主要目的就是重置 NAT 的会话定时器。
(3)许多应用层协议无法识别
网络传输
MSS
timewait?
http 与 tcp 区别
其实 http 只是多了一层规矩,http 依然是 tcp,只是这个规矩让用户更清晰,更简洁。
非对称路由解决方法
OSPF
相关名词
OSPF
开放式(公共)最短路径优先协议,是一种链路状态路由协议
链路状态:共享拓扑,本地计算路由
SPF
最短路算法,OSPF 路由协议核心算法
LSA
链路状态通告,可以简单的理解为每台路由器都产生一个描述自己直连接口状态(包括接口的开销、与邻居路由器之间的关系等)的通告
OSPF 作为链路状态路由协议,路由器之间交互的是 LSA(链路状态通告),路由器将网络中泛洪的 LSA 搜集到自己的 LSDB(链路状态数据库)中,这有助于 OSPF 理解整张网络拓扑,并在此基础上通过 SPF 最短路径算法计算出以自己为根的、到达网络各个角落的、无环的树,最终,路由器将计算出来的路由装载进路由表中。
DNS 记录类型
CNAME
CNAME 记录,也叫别名记录,相当于给 A 记录中的域名起个小名儿,比如 www. xx. com 的小名儿就叫 www. yy. com 好了,然后 CNAME 记录也和 A 记录一样,是一种指向关系,把小名儿 www. yy. com 指向了 www. xx. com,然后通过 A 记录,www. xx. com 又指向了对应的 IP:
- \www. yy. com → www. xx. com → 1.1.1.1
A/AAA
IP 指向记录,用于指向 IP,前者为 IPv4 记录,后者为 IPv6 记录。
MX
邮件交换记录,用于指向邮件交换服务器
NS
解析服务器记录,用于指定哪台服务器对于改域名解析、
SOA 记录
起始授权机构记录,每个 zone 有且仅有唯一的一条 SOA 记录,SOA 是描述 zone 属性以及权威服务器的记录
CDN
静态加速
CDN=更智能的镜像+缓存+流量导流
CDN (内容分发网络) 指的是一组分布在各个地区的服务器。这些服务器存储着数据的副本,因此服务器可以根据哪些服务器与用户距离最近,来满足数据的请求。CDNs 提供快速服务,较少受高流量影响。
CDNs 被广泛用于传输 stylesheets 和 JavaScript 等静态资源,像 Bootstrap,Jquery 等。对这些库文件使用 CDN 技术,有以下几点好处:
- 通过 CDN 向用户分发传输相关库的静态资源文件,可以降低我们自身服务器的请求压力。
- 大多数 CDN 在全球都有服务器,所以 CDNs 上的服务器在地理位置上可能比你自己的服务器更接近你的用户。地理距离会按比例影响延迟。
- CDNs 已经配置了恰当的缓存设置。使用 CDN 节省了在你的服务器中对静态资源文件的配置。
判断一个网站是否使用 CDN
观察网络请求:在浏览器的开发者工具中可以查看网站的网络请求。如果发现一些有 CDN 域名的资源请求,则可以判断该网站使用了 CDN。
查询 DNS 记录:可以通过一些工具查询网站的 DNS 记录,查看是否有 CDN 相关的记录。
使用在线工具:一些在线工具,如 www. chinaz. com,可以查询一个域名是否使用了 CDN。
如何绕过 CDN
-
直接访问源站:如果 CDN 的加速域名和源站域名不同,可以直接访问源站,绕过 CDN 的加速。
-
修改 Hosts 文件:在 Hosts 文件中添加源站的 IP 地址和域名映射,也可以绕过 CDN 的加速。
-
使用代理:使用代理服务器可以更改请求路径,从而绕过 CDN 的加速。
域名解析对应多个 IP 地址一定是使用了 cdn 吗?
答:也有可能是 dns 解析时多添加几个不同 IP 的 A 记录,部分服务器使用 DNS 解析,利用域名解析作为第一级负载均衡,再在服务器中使用 NGINX 负载均衡作为第二级负载均衡
多地 ping 一个域名只有一个 ip 一定没用 cdn 吗?
答:有可能是用了 Anycast CDN,一个 IP 走遍天下。根据访问量动态调整节点数量,访问量少的时候,CDN 只开个别节点,甚至只保留一个节点,提高缓存命中率,节约成本。(但是这种情况极少)
AnyCast,也称任意播,或泛播,指 IPV 6 协议中一个发送方同最近的一组接收方之间的通信。BGP AnyCast 就是利用一个(或多个)AS 号码在不同的地区广播相同的一个 IP 段。即不同地区若干个 AS 号广播同一个 IP(段)。
命中 header 就一定是使用了 cdn 吗?
如果要通过客户端看某个网站是否使用 CDN,看网站的发向客户端的 HEADER 信息,如果 header 信息里面有 X-Cache MISS from cache. xxx. com. cn, MISS from cache. xxx. com. cn 类似这样的头部,就可能使用了 CDN,不过也不好说,因为服务器使用了反向代理技术(如 squid)也会发出这样的头部,这种情况得到的也不是网站真实 ip。
动态加速 DCDN
针对 POST 等非静态请求等不能在用户边缘缓存的业务,基于智能选路技术,从众多回源线路中择优选择一条线路进行传输。
ISP
四层负载均衡
基于 IP+端口,利用某种算法将报文转发给某个后端服务器,实现负载均衡地落在后端服务器上。
主要功能
- 解耦 vip 和 rs
- NAT
- 防攻击:syn proxy
常见的调度算法原理
RR 轮询:Round Robin,将所有的请求平均分配给每个真实服务器 RS
加权 RR 轮询:给每个后端服务器一个权值比例,将请求按比例分配
最小连接:把新的连接请求分配到当前连接数最小的服务器
五元组 hash:根据 sip, sport, proto, dip, dport 对静态分配的服务器做散列取模
缺点:当后端某个服务器故障后,所有连接都重新计算,影响整个 hash 环
一致性 hash:只影响故障服务器上的连接 session,其余服务器上的连接不受影响。
外网核心设备用于流量拦截和清洗
七层负载均衡
时钟
日历时钟
根据某个日历(也称挂钟时间)返回当前日期和时间
单调钟
适用于测量持续时间
在分布式系统中,使用单调钟测量经过时间(比如超时)通常很好,因为它不假定不同节点的时钟之间存在任何同步,并且对测量的轻微不准确性不敏感。
TCP协议自带的KeepAlive机制能否替代心跳机制?
- 结论是:无法替代;
- 原因是:TCP KeepAlive机制的作用是检测连接的有无(死活),但无法检测连接是否有效。
习题
10Mbps的Ethernet的争用期是51.2us,在争用期内可发送【】的数据
10Mb/sX51.2us
=10^6 bit /sX51.2X10^-6s
=512bit
=64Byte
波特率和比特率都是都是传输速率的单位,它们之间的关系是( 取决于调制方法)。
MAC 地址是一个(6 )字节的二进制串,以太网 MAC 地址由 IEEE 负责分配。以太网地址分为两个部分:地址的前(3 )个字节代表厂商代码,后( 3)个字节由厂商自行分配。
在PPP协议中,帧定界符(Flag)是一个特殊的字节,其值为 01111110。为了避免数据中的某些字节被误认为是帧定界符,PPP协议采用了字节填充机制。具体来说,如果数据中出现了与帧定界符相同的字节 01111110,或者出现了转义字符 01111101,那么在这些字节之前会插入一个转义字符 01111101。
无类别域间路由(CIDR)
传统的 IP 地址类 ABCDE 分配网络
网络 = 网络地址/子网掩码
CIDR 通过变长子网掩码 (VLSM) 分配 IP 地址,例如对超过 254 但少于 65534 台设备的公司,将 B 类分成多个小网络,从而实现 IP 地址的有效利用。
# Example of allocating one /23 networks
network1 = '192.0.2.0/23',地址范围从192.0.2.0 - 192.0.3.255,共512个地址
# Or allocate two /24 network
network1 = '192.0.2.0/24',地址范围从192.0.2.0 - 192.0.2.255,共256个地址
network2 = '192.0.6.0/24',地址范围从192.0.6.0 - 192.0.6.255,共256个地址
UDP 打洞
原理
- Peer1 的NAT路由器:
- 初始状态:空
- 第一次发送后:
- 第二次接收后:保持不变
- Peer2 的NAT路由器:
- 初始状态:空
- 第一次接收后:丢弃数据包,路由表不变
- 第二次发送后:
| 内部IP | 内部端口 | 外部IP | 外部端口 |
|---|---|---|---|
| 192.168.2.3 | 23456 | 203.0.113.2 | 65432 |
- 第三次接收后:保持不变
限制
1. NAT类型
- 完全锥形NAT(Full Cone NAT):完全锥形NAT,所有从同一个内网IP和端口号发送过来的请求都会被映射成同一个外网IP和端口号,并且任何一个外网主机都可以通过这个映射的外网IP和端口号向这台内网主机发送包。
- (IP)受限锥形NAT(Restricted Cone NAT):限制锥形NAT,它也是所有从同一个内网IP和端口号发送过来的请求都会被映射成同一个外网IP和端口号。与完全锥形不同的是,外网主机只能够向先前已经向它发送过数据包的内网主机发送包。
- 端口受限锥形NAT(Port Restricted Cone NAT):端口限制锥形NAT,与限制锥形NAT很相似,只不过它包括端口号。也就是说,一台IP地址X和端口P的外网主机想给内网主机发送包,必须是这台内网主机先前已经给这个IP地址X和端口P发送过数据包。
上面是锥形 NAT,和下面互补 - 对称NAT(Symmetric NAT):对称NAT,所有从同一个内网IP和端口号发送到一个特定的目的IP和端口号的请求,都会被映射到同一个IP和端口号。如果同一台主机使用相同的源地址和端口号发送包,但是发往不同的目的地,NAT将会使用不同的映射。此外,只有收到数据的外网主机才可以反过来向内网主机发送包。(STUN 不支持)

2. NAT超时
- NAT路由器通常会在一段时间后删除映射条目,如果在这段时间内没有数据包传输,映射条目可能会被删除,导致打洞失败。(需要保证连接基本同时)
3. 多层NAT
- 在某些网络环境中,可能存在多层NAT(例如,家庭路由器后面还有企业路由器),这会增加打洞的复杂性。
P2P 技术
-
STUN:帮助客户端发现其公共IP地址和端口,辅助NAT穿透。
-
TURN:在无法直接建立点对点连接的情况下,通过中继服务器转发数据包。
-
ICE:结合STUN和TURN,提供一种灵活的机制来建立点对点连接,应对复杂的网络环境。来建立点对点连接,应对复杂的网络环境。
WebRTC 的六大关键协议 ICE、STUN、TURN、SRTP、DTLS 和 RTP
ICMP
ICMP数据报是封装在IP数据报中进行传递的。(此时,IP数据报首部的协议字段设置为1,表示当前传递的是ICMP报文。)

ICMP报文通用格式如下,主要关注Type、Code两个字段。
- Type字段:ICMP报文类型。比如超时错误(Time Exceeded Message)、目标主机不可达错误(Destination Unreachable Message)等。
- Code字段:子类型。比如,导致目标主机不可达错误的原因可能有多种,比如主机错误(code=1),端口错误(code=3)等。

IP数据报未到达目标主机,且TTL被置为0时,返回的就是超时错误(Time Exceeded Message),此时Type=11,code=0。
traceroute收到ICMP报文,发现Type=11,code=0,记录下发送节点的IP和耗时。
RIP基于UDP,BGP基于TCP,OSPF和EIGRP基于IP。
片偏移字段的值:
第一个分片:0
第二个分片:1480 / 8 = 185
第三个分片:2960 / 8 = 370




组播
地址范围: 224.0.0.0 到 239.255.255.255

组播需要接收方和发送方具有保证相同的端口
n开头表示从网络字节序转换h开头表示从主机字节序转换p表示可打印的格式(presentation)s表示短整型(short)


浙公网安备 33010602011771号