一 网络分层的含义
OSI七层模型
OSI(Open System Interconnection)<开放式系统互联通信>, 它是理想化的模型,将 网络进行分层(也就是将网络通信的过程分为七个层级),其目的是将复杂的流程简单化,从而实现分而治之。
下层是为上层提供服务的
物数网传会表应
- 物理层:(核心就是传递比特流的,如何将数据从一个点传递到另一个点) 传输的介质 (双绞线、光纤。。。)
- 数据链路层:(设备之间的数据传递了,将传递的数据封装成帧)
- 网络层:(寻址,找到对方能进行传输,控制速度)
- 传输层:(分段、分片、排号,数据丢失如何处理)
- 会话层:(负责建立,管理会话的,断开会话)
- 表示层:(数据是如何表示的,可以对数据进行编码、解码。。。)
- 应用层:(用户最终使用的接口)
TCP/IP模型
- 网络接口层 (物理层、数据链路层) 数据包 + 增加mac 地址 -》 数据帧
- 网络层 数据段 + ip地址 -》 数据包
- 传输层 原文内容 + 端口号,拆分 -》 数据段
- 应用层 (会话层,表示层,应用层) 原文内容
二 地址
通信是通过ip地址查找对应的mac来进行通信的。 IP地址 是可变的(类似我们收件地址)MAC地址是不可变的。IP地 址是逻辑地址而MAC地址是物理地址
IP地址
IPV4 网际协议版本4 ,地址由 32 位二进制数值组成 例如: 192.168.1.1 ,大概42亿个
IPV6 网际协议版本6 ,地址由 8个16进制数组成,共128位。
例如:2408:8207:788b:2370:9530:b5e7:9c53:ff87 大约 (2^128 = 3.4*10^38)
32位二进制数就是有32个0或者1
例如:11111111 11111111 11111111 11111111
为了便于书写,所以我们的ip,掩码之类的都用十进制来书写,
分成4个八位,于是上面的例子换写成十进制就是:255.255.255.255
MAC地址
设备通信都是由内部的网卡设备来进行的,每个网卡都有自己 的mac地址(原则上唯一)
三 物理设备
物理层
- 中继器:通过网线进行传输,最大距离是100m。 默认中继器只有两个口,可以链接双方,实现信号放大的功能
- 集线器:多口的中继器, 在同一个网络中实现多人的互联。 不记录互相的端口mac地址。 缺点就是广播发送数据,有的人不需要也会收到消息
链路层
- 交换机: 多个端口,将物理设备和端口关联在一起。只有第一次是通过广播的方式 , 后续通信可以直接找到对应的人
网络层
- 路由器: 检测数据的 ip 地址是否属于自己网络,如果不是 会发送到另一个网络。没有 wan 口的路由器可以看成交换 机。 路由器一般充当网关,路由器会将本地IP地址进行 NAT(Network Address Translation) 转换为公网IP地址。
三层的工作模型 通过网卡来进行通信 mac地址,找到对方的mac地址才能够通信
TCP/IP参考模型
Transmission Control Protocol/Internet Protocol,传输控制 协议/网际协议。TCP/IP 协议实际上是一系列网络通信协议的 统称,最核心的两个协议是 TCP 和 IP
什么是协议
协议就是约定和规范,在五层模型中能称之为协议 的都在三层以上
数据链路层、物理层 :物理设备
网络层:
- IP 协议:寻址通过路由器查找,将消息发送给对方路由 器,通过 ARP 协议,发送自己的mac地址
- ARP 协议:Address Resolution Protocol 从ip地址获 取mac地址 (局域网)
传输层
TCP 、 UDP
应用层:
HTTP、DNS、FTP、TFTP、SMTP 、DHCP
ARP
根据目的 IP 地址,解析目的 mac 地址
DHCP协议
通过DHCP自动获取网络配置信息 (动态主机配置协议 Dynamic Host Configuration
Protocol)我们无需自己手动配置 IP
DNS协议
DNS是Domain Name System的缩写,DNS服务器进行域名和与之对应的 IP 地址转换的服务器
顶级域名 .com、
二级域名 .com.cn、
三级域名 www.xxx.com.cn,
有几个点就是几级域名
访问过程:我们访问 xxx.com.cn
- 操作系统里会对 DNS 解析结果做缓存,如果缓存中有直接 返回IP地址
- 查找C:\WINDOWS\system32\drivers\etc\hosts 如果有 直接返回 IP 地址
- 通过 DNS 服务器查找离自己最近的根服务器,通过根服务器 找到 .cn 服务器,将 ip 返回给 DNS 服务器
- DNS 服务器会继续像此 ip 发送请求,去查找对应 .cn 下 .com 对应的 ip ...
- 获取最终的 ip 地址。缓存到 DNS 服务器上
TCP协议和UDP协议(*)
两个协议都在传输层
tcp 面向连接的 (墨迹,可靠安全), udp是面向无连接的 (快,可能会丢失)
TCP协议
tcp 传输控制协议 Transimision Control Protocal 可 靠、面向连接的协议,传输效率低 (在不可靠的IP层上建立可靠 的传输层)。 TCP提供全双工服务,即数据可在同一时间双向传 播。
TCP数据格式
- 源端口号、目标端口号,指代的是发送方随机端口,目标端 对应的端口
- 序列号:32位序列号是用于对数据包进行标记,方便重组
- 确认序列号:期望发送方下一个发送的数据的编号
- 4位首部⻓度:单位是字节,4位最大能表示15,所以头部⻓ 度最大为60
- URG :紧急信号、 ACK :确认信号、 PSH :应该从TCP缓冲区读走数据、 RST :断开重新连接、 SYN :建立连接、 FIN :表示要断开
- 窗口大小: 当网络通畅时将这个窗口值变大加快传输速度, 当网络不稳定时减少这个值。在TCP中起到流量控制作用。
- 校验和:用来做差错控制,看传输的报文段是否损坏
- 紧急指针:用来发送紧急数据使用
TCP 对数据进行分段打包传输,对每个数据包编号控制顺 序。
交互流程
1)建立连接
- 1我能主动给你打·电话吗?
- 2当然可以啊!那我也能给 你打电话吗?
- 3可以的呢,建立连接成功!
2)数据传输
3)断开链接
UDP协议
UDP的数据格式
udp用户数据报协议User Datagram Protocol ,是一个无连 接、不保证可靠性的传输层协议。你让我发什么就发什么!
使用场景:DHCP协议、DNS协议、QUIC(Quick UDP Internet Connection)协议等 (处理速度 快,可以丢包的情况)
滑动窗口
- 滑动窗口:TCP是全双工的,所以发送端有发送缓存区;接 收端有接收缓存区,要发送的数据都放 到发送者的缓存区, 发送窗口(要被发送的数据)就是要发送缓存中的哪一部分
- 核心是流量控制:在建立连接时,接收端会告诉发送端自己 的窗口大小( rwnd ),每次接收端收到数据后都会再次确认 (rwnd)大小,如果值为0,停止发送数据。 (并发送窗口 探测包,持续监测窗口大小)
粘包
- Nagle 算法的基本定义是任意时刻,最多只能有一个未被确认的小段 (TCP内部控制)
- Cork算法当达到MSS(Maximum Segment Size )值时统一进行 发送(此值就是帧的大小 - ip头 - tcp头 = 1460个字节)理论值
TCP拥塞处理
- TCP 维护一个拥塞窗口cwnd (congestion window)变量 ,在传输过程中没有拥塞就将此值增大。如果出现拥塞(超 时重传 RTO(Retransmission TimeOut) )就将窗口值减 少。
- cwnd < ssthresh 使用慢开始算法
- cwnd > ssthresh使用拥塞避免算法
- ROT时更新 ssthresh值为当前窗口的一半,更新cwnd = 1
快重传,可能在发送的过程中出现丢包情况。此时不要立即 回退到慢开始阶段,而是对已经收到的报文重复确认,如果 确认次数达到3此,则立即进行重传 快恢复算法 (减少超时 重传机制的出现),降低重置 cwnd 的频率。