网络
OSI 七层模型,是理想化的模型,将复杂的流程分解为几个功能实现复杂问题简单化。
七层模型
- 7.应用层(用户最终的接口) 微信、QQ , HTTP\DNS\FTP\TFTP\SMTP\DHCP
- 6.表示层(数据的表示、安全、压缩)
- 5.会话层(建立和管理会话)
- 4.传输层 TCP、UDP
- 3.网络层(路由器) IP 协议 ipv4、ipv6
- 2.数据链路层(交换机、网卡)
- 1.物理层(物理设备,网线、光纤)
七层模型是倒着看的,下层是为了给上层提供服务的
没有插 wan 口的路由器可以充当交换机,但传输效率不如交换机
应用层(整合表示层与会话层)
代表性协议是 HTTP、DNS。
管理会话建立会话、数据表示。
把用户要传递的数据封装一层,即装包,但它并没有传输能力,传输是靠传输层来处理的。
传输层
代表性协议是 TCP、UDP,目前有且仅有两种。
传输的数据叫做段。
将应用层传递来的数据进行拆分(应用层可能传来一个很大的数据,不可能一次性直接传到下一层)、包装,加入序号(用来标记这个被拆开的数据位置)、端口号(传递本地端口和对方端口以供连接)。
网络层(IP层)
代表性协议是 IP 协议(ipv4、ipv6)。
传输的数据叫做包。
对传输层传递来的数据再进行包装,同时如果这个数据太大,也会拆分数据。将 ip 地址包装进去。
数据链路层
传输的数据叫做帧。
会把数据再进行包装,增加一头一尾,形成帧(Frame),也叫 MTU, 一帧理论可以传 1500 字节。
超过 1500 字节会在网络层进行分包。(注:HTTP2 中还有分帧的概念)
物理层
物理上的设备,网线、光纤、双绞线。
概念
IP 地址和 MAC 地址(ip转换为mac地址是只支持局域网的)
- 最终通信都是通过 MAC 地址通信,每个网卡都有自己的 MAC 地址(原则上唯一)。
- 交换机/路由器通过 DHCP 协议分配给每台电脑 IP,通过 ARP 协议(局域网内有效)将 IP 地址转化成 mac 地址。(注:电信、网通也是通过 DHCP 协议来给各个用户动态分配 IP 的)
路由器和交换机
- 交换机:维护 mac 地址表(交换机端口对应的 mac 地址),不关心 ip 地址。核心就是交换数据,交换效率高。交换机传输数据时,先查看内存中的地址对照表以确定目的MAC,存在就直接对着 MAC 地址发送,如果目的 MAC 不存在地址表中,就广播所有端口 ,经过 ARP 协议之后得到 MAC 地址,并且将 MAC 地址与端口号缓存到内部地址表中,以供下次使用。
- 路由器:分为 lan 口 和 wan 口,在不接 wan 口的情况下,路由器可以看成是交换机,但效率低。有网的路由器关联了 ip 地址,可以上网。
网关
TCP/IP 中规定两个子网不能直接通信(通过子网掩码来区分两个设备是否是同一个子网),我们从内网访问到外网属于两个不同的子网。路由器就充当了网关的角色,因此网关(Gateway)又称网间连接器、协议转换器。因此访问外网就通过路由器来访问。
比如 192.168.0.1 和 192.168.0.2 两个 ip,可以通过 & 255.255.255.0(子网掩码) 来判断是否在同一局域网下,& 之后两者的值都为 192.168.0.0,为同一局域网,不需要走网关。
计算机子网访问公网(如 192.168.0.1 访问 110.242.68.4 即百度)时,是通过路由器的,源 IP 会经过 SNAT 协议(还会虚拟一个端口号作为标识)把子网 IP 转化后转发到公网上,接收到公网数据后,通过之前虚拟出来的端口号,找到要给哪个端口发送数据。
TCP/IP 参考模型(五层模型)
Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议,TCP/IP 协议簇不仅仅指TCP 和 IP 两个协议。
协议就是通信的规则,以 http 协议当作范例来说(协议就是对数据的封装和传输)
- 数据链路层、物理层:物理设备
- 网络层:
- IP 协议:寻址通过路由器查找,将消息发送给对方路由器,通过 ARP 协议,发送自己的 mac 地址。
- ARP 协议:Address Resolution Protocol ,从 ip 地址获取 mac 地址(局域网),RARP (通信由 mac 地址通信,通过自己的 mac 地址,对方的 ip,获取对方的 mac 地址,就是反着来)。如果是七层模型,ARP 可以归为数据链路层。五层模型时,网络层才开始有协议
- 传输层:TCP、UDP
- 应用层:HTTP、DNS、FTP、TFTP、SMTP(simple mail 简易邮件传输协议)、DHCP
DNS 协议
Domain Name System, DNS 服务器是进行域名和对应的 IP 地址转换的服务器。
- 顶级域名 .com
- 二级域名 .com.cn
- 三级域名
www.xxx.com.cn
,有多少个点就是几级域名,如果www.baidu.com
就是 2级
访问过程:我们访问 www.baidu.com.cn
时,假设 DNS 服务器没有对应的域名缓存,就会通过 DNS 服务器查找离自己最近的根服务器,通过根服务器找到 .cn 服务器,将 ip 返回给 DNS 服务器,DNS 服务器会继续向此 IP 发送请求,去查找对应 .cn 下 .com 对应的 ip,接着返回后继续寻找 .baidu 的 ip,直到最后获得 www 的 ip,缓存到 DNS 服务器上。
路由器也是 DNS 服务器,如果我们选择自动获取 DNS 服务器,就会指向路由器,我们常用的 DNS 服务器有 114.114.114.114(国内移动、电信、联通 DNS) 和 8.8.8.8 (Google DNS)。
IP协议(寻址)
目前主流的是 IPV4、IPV6
- IPV4 地址最大是 255.255.255.255, 总共可以编 43亿个地址,不够用,因此出现 IPV6
- 通过IP地址逐级查找,直到定位到最终的设备。(如找到 192.168.1.12,先去 255.0.0.0 找,再去 255.255.0.0 找,以此类推,直到找到设备)
TCP 协议(传输)
tcp 传输控制协议 Transmision Control Protocal
是可靠、面向连接(在发数据前要连接好)的协议,传输效率低(因为要在不可靠的 IP 层上建立可靠的传输层,需要握手)。TCP 提供全双工服务,即数据可以在同一时间双向传播。数据是无序地在网络间传递,接收方需要有一种算法在接受到数据后恢复原有的顺序。
一个 TCP 段最多 60 个字节,但这里包含有 20 字节的头部,每次传输数据都需要 20 个字节作为头部,相当大了,所以 tcp 传输过程中有粘包的概念(一个数据分段传了好几个,会粘到一起)。
IP 层不可靠的原因:丢包, TCP 发现丢包会重发
单工:只能往一个方向传递,比如 A -> B,而不能 B -> A
半双工:可以往两个方向传递,但同一时间只能传递同一方向,如 B -> A 的同时不能 A -> B
全双工:可以同时往两个方向传递,在 A -> B 的同时可以 B -> A
- 源端口号、目的端口号,指的是发送方随机端口,目标端对应的端口,由于是 16 位,可以得知端口号只会是 0 - 65535 之间
- 32 位序列号是用于对数据进行标记,方便重组,如这次数据传输传到第 100 位,下次这个值就位 100,表示本次数据传输是从第 100 位开始
- 确认号表示指下一次应该受到的数据的序列号,实际上它是已收到确认应答号减一为止的数据,当前报文段最后一个字节的编号 + 1 即为确认应答号。
- 4 位首部长度(数据偏移):表示首部长度,也可以表示 TCP 所传输的数据部分从 TCP 的哪个位置开始算,最大值为 0b1111,也就是 15,单位是 4 字节,也就是说首部最大 60 字节。比如该值为 5,就表示 TCP 包的开始 20 (4 * 5)字节为 TCP 头,其他为 TCP 数据
- URG:紧急信号;ACK:确认信号;PSH:应该从 TCP 缓冲区读走数据;RST:断开重连;SYN:建立连接;FIN:表示要断开连接
- 校验和:用来做差错控制,看看传输的报文段是否损坏
- 窗口大小:该字段长为16位。用于通知从相同TCP首部的确认应答号所指位置开始能够接收的数据大小,TCP不允许发送超过此处所示大小的数据。不过,如果窗口为0,则表示可以发送窗口探测,以了解最新的窗口大小。
- 紧急指针:用来发送紧急数据使用,只有在 URG 控制位为1时有效。
TCP 是提供可靠的网络传输,需要建立连接,流速控制。 UDP 协议只发包,无连接协议,速度快。