IP
Internet Protocol(互联网协议)
IP提供了无连接的、不可靠的、数据包(报文)服务
也就是可能会出现以下问题:
1.漏传
2.错传(顺序不对)
3.内容被篡改
4.重传
为了在IP这个不可靠的‘马路’上,给应用程序提供‘可靠的双向字节流’服务,所以才在IP之上发明了TCP协议
TCP
Transmission Control Protocol(传输控制协议)
控制体现在:
1.建立连接(三次握手)
client->server(SYN)
server->client(SYN-ACK)
client->server(ACK)
通过这三次握手,双方约定初始序号,窗口大小,建立一条虚拟通道
2.分段与编号(将字节流切块)
应用(比如浏览器/软件)丢给TCP一大串连续的字节(比如一个10MB的图片),TCP会把这串字节切分成若干个小段(每个段叫TCP Segment),并给每一个字节都编上一个唯一的序号(Seq号)。
3.可靠传输(校验、确认与超时重传)
(1)校验
发送方算出一个数学值(Checksum)附在包上,接收方收到后重新算一遍,如果不一致,说明内容被篡改,直接丢弃
(2)确认(ACK):接收方收到一个段后,必须发回一个确认包(ACK)说“我已收到第1-100号字节”。
(3)超时重传:发送方发出包后,启动一个定时器。如果时间到了没收到对方的ACK确认,它就认为这个包丢了,然后重新发送一遍。
4.按序组装与流量控制(滑动窗口)
排序:由于IP层可能乱序送达),接收方的TCP会把所有到达的段先放进缓冲区,根据序号(Seq号)排好队,排成正确的顺序(1,2,3…)后,再一起交给上层的应用程序。
流量控制:TCP还会动态协商发送方的速度。如果接收方(比如你的手机)CPU处理不过来,就会告诉发送方“慢点发,我缓存要满了”,防止数据把你电脑的内存撑爆。
TCP/IP的工作流程
应用层
电脑上的各种软件 传输层
Windows的Winsock API、Linux的Socket接口,以及内核中的TCP拥塞控制算法、端口号管理(哪个程序用哪个端口,比如80给网页,443给HTTPS)
负责把数据拆包、编号(TCP)、校验重传、排序组装,最后按端口号把数据交给正确的应用程序(比如微信收微信的,浏览器收浏览器的)。这是保证“可靠”或“快速”的软件逻辑层
网络层
路由器(硬件)+ IP协议栈(操作系统内核中的软件)
链路层
网卡(NIC)、网线/光纤、Wi-Fi天线、交换机(非路由器)
UDP
代理
clash/v2ray
系统代理
操作系统在注册表/配置文件里写下的一个“全局通知”:告诉所有遵守规范的程序,“当你需要访问网络时,请把请求发给这个代理地址(IP:端口)”。
全局代理(TUN)
操作系统创建虚拟网卡,修改路由表,所有 IP 包先经过虚拟网卡
VPS
vitural private server,本质也是一种云服务器,但是它的作用是接受并转发你的网络请求(代理)
怎么选vps?
网络线路(回程是否走CN2 GIA) 和 物理距离(离你越近越快)。
ChinaNet Next Carrying Network(中国电信下一代承载网),它的内部代号是 AS4809。
GIA 是 Global Internet Access(全球互联网接入)的缩写。
CN2 GT Global Transit(全球转接) “半程高速”。数据包在你的城市到国内出口走CN2,但到了美国或日本落地时,就下高速走普通163线路。 白天挺快,但晚高峰(8-11点)依然会卡,因为回程走的是拥堵的163。 CN2 GIA(你需要的) Global Internet Access(全球互联网接入) “全程高速”。数据包从你家出发到国外机房,全程都走CN2专用通道,去程和回程都不进普通163网络。 全天候稳定,晚高峰几乎不受影响,延迟极低且不丢包。这是自建体验超过机场的核心保障。 CN2 GIA-E 是GIA的增强版 拥有更高的带宽优先级和更少的跳数,通常只有大企业或金融客户才买得起。 对个人用户来说,普通GIA已经足够,GIA-E性能过剩且价格昂贵。
TLS
Transport Layer Security 传输层安全协议
tcp/ip只保证了稳定的信息传输,但是后来人们发现第三方可以截取,篡改数据.为了解决这个问题,引入了TLS(Transport Layer Security)传输层安全协议.
1.身份验证 通过ssl证书(非对称加密),确保不是钓鱼网站
查有效期:看有没有过期。
查域名:看证书上的域名是不是 www.baidu.com,别是 www.pianzi.com。
查签名:浏览器内置了权威机构(CA)的根证书。它会用CA的公钥去验算我的证书上是否有CA的“数字签名”
2.确定密钥 建立连接阶段,双方各自生成一个随机数(A/B),并交换.同时确立后面要用什么对称加密算法来传输数据
服务器会发送自己的ssl证书
客户端再生成一个随机数C,并用服务器ssl证书里的公钥加密,发给服务器
服务器用自己的私钥解密,得到随机数C,双方现在都持有三个随机数,通过前面约定的对称加密算法,各自算出了相同的会话密钥,来传输数据
3.加密传输 通过对称加密,确保数据传输的安全性
随机数C是否会因为公钥泄露而泄露?
老模式(RSA密钥交换)确实会出现
在早期的TLS(如TLS 1.0/1.1,以及TLS 1.2的纯RSA模式)中,流程是这样的:
客户端用证书公钥加密“随机数3”发给服务器。
服务器用证书私钥解密得到“随机数3”。
黑客可以先截取保存数据,等以后获得了服务器私钥(攻击服务器获得)再解密
现在的TLS 1.2(主流)和TLS 1.3(强制)已经抛弃了上述模式,改用 ECDHE(椭圆曲线临时密钥交换)。
不再用证书公钥加密随机数3。
服务器和客户端在握手时,各自在本地临时生成一对“一次性密钥对”(临时的公钥+临时的私钥)。这个临时私钥是只在内存里存在几毫秒的,用完就彻底销毁,绝不写入硬盘。
双方在公开网络上交换了各自的公钥(即使被黑客完整截获),却只有通信的双方能算出同一个密钥,第三方算不出来
双方交换临时的公钥,然后结合自己的临时私钥,通过数学算法(椭圆曲线),直接计算出“会话密钥”。
本质是在求“离散对数”。这个东西是计算不可行的
DNS
Domain Name System 域名系统
没有域名前,想访问访问网站,只能输ip,难以记忆,而且ip不是固定的,可能会因为机房迁移、负载均衡而动态变化
负载均衡 一个域名可以对应多个IP。DNS会根据你的地理位置,返回离你最近的服务器IP。 容灾切换 如果某个机房着火或断网了,DNS可以瞬间把域名指向备用机房的IP,用户毫无感知。
DNS本质是一个分布式数据库: 它将域名和IP地址进行了映射,存储在多个服务器上,通过递归查询的方式,将域名解析成对应的IP地址。
根服务器(Root):全球只有13组(不是13台,是13组集群),负责管理顶级域(如 .com、.cn)。
顶级域服务器(TLD):负责管理二级域(如 .com 下的 baidu.com)。
权威DNS服务器:每个网站自己的DNS服务器,负责管理最终的IP映射(如 www.baidu.com -> 183.2.172.42)。
输入 www.baidu.com:
电脑先问本地DNS(一般是运营商的DNS)。
浏览器缓存->操作系统缓存 / hosts 文件-> 网络配置中设置的 DNS 服务器(通常是你运营商提供的,如 114.114.114.114 或 8.8.8.8)发起查询请求。
本地DNS不知道,于是去问根服务器:“.com 在哪?”
根服务器告诉它:“去问 .com 的顶级域服务器。”
本地DNS去问 .com 服务器:“baidu.com 在哪?”
.com 服务器告诉它:“去问 baidu.com 的权威DNS。”
本地DNS去问 baidu.com 的权威DNS:“www 的IP是多少?”
权威DNS告诉它:“IP是 183.2.172.42。”
本地DNS把结果缓存下来,告诉你