网络分层(由下到上):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
重点在: 物理层、数据链路层(这两层需要了解基本的原理)、网络层、传输层(这两层需要了解功能作用,原理和相关的一些协议)、应用层(http协议)。
开始之前先跟大家说一下协议,很多人不知道协议是什么,尤其是刚接触这方面东西的时候,一听协议,感觉很吊的样子,但是又不知其所云,其实,协议可以理解为:一个双方通信需要共同遵守的规范。
记住,在网络分层协议中,所有下层的协议的作用就是为了上层服务,谨记!
接下来,我跟大家一一道来,首先登场的是物理层。
一.物理层
作用:比特流与电子信号的转换。例如光纤通过光的亮与灭的形式进行传递,进而转换为比特流。
这一层主要就是跟硬件打交道,这一层也是所有上层的基础。
二.数据链路层
作用:通过介质相互连接设备之间数据传输规范。
数据链路层强调的是一种传输规范,这是指什么呢?说白了,就是指每次传输的最大容量(最大传输单元),数据组织结构(以太网帧的概念)、传输的目的地等。
MAC地址:烧录在网卡ROM中的一串数字,长度48bit。
分组交换:较大数组分割为较小数组,依次发送。
原因是数据链路层有不定长度的最大传输单元。
以太网的帧的概念:前导码(8字节)+本体(首部+数据+FCS)
交换机:在数据链路层工作的网络设备。
原理:依靠MAC地址决定向哪个端发送数据,需要“转发表”。
转发表是交换机自动学习得到的。
三.网络层(拿IP协议举例)
作用:保证不同数据链路层下数据的可达性。
ARP协议(获取MAC地址)和ICMP协议(数据发送异常通知)
作用:识别对端信息的地址。地址为32位正整数表示,分为四个部分,每个部分由8位整数组成。说白了,是识别要传输目的地的地址。
每位对应十进制范围:0-255。
IP地址:网络标识(区分网段)+主机标识(区分同一网段下的主机)
[注]:网络标识和主机标识是为了寻址而发明。
IP分类:A类、B类、C类、D类。
A类:
第一位为“0”的地址,前8位为网络标识,0.0.0.0-127.0.0.0是A类IP地址的理论范围。
B类:
前两位为“10”的地址,前16位是网络标识,128.0.0.0-191.255.0.0,主机标识16位。
C类:
前三位为“110”的地址。前24位网络标识,192.0.0.0-223.255.255.0,主机标识为8位。
D类:
前4位为“1110”的地址。网络标识为32位,没有主机标识。
子网掩码:
IP地址长度仅可表达43亿左右的主机数目,(区分网络标识和主机标识)共32位(一段连续的0和一段连续的1)组成,1的长度就表示网络标识的长度。
子网掩码的作用是区分IP地址是否在同一子网内。
路由控制:
分组数据发送到目标地址的功能,持有路由控制表,它在路由控制表中查找目标IP地址对应的下一个路由器地址。
源主机--->网卡--->路由器1(路由器控制表)--->路由器2--->网卡--->目标主机
IP报文分割重组(分片、重组)
IP协议最大包为2的16次幂,等于65536.
接下来介绍几个IP协议相关的协议或技术:
DNS解析:
将域名转化为IP地址(域名也是分层处理请求的,每一层都有对应的DNS服务器)。
ARP技术(类似一种广播):
通过目标IP地址,定位下一个接收数据包的网络设备(主机或路由器)的MAC地址。
在数据链路层发送广播,如果没有ARP技术,就没有办法穿透中间的服务器(ARP请求+ARP应答)。
NAT和NAPT技术
NAT:用于将局域网中的私有地址转换为全局IP地址的技术。
每个路由器只有一个对外的全局IP地址,如果一个内网主机都向外通讯,怎么办?
就要使用到NATP技术,可转为TCP和UDP端口号。
不同的内网IP被转换成同一个公共的IP,但是NAPT技术可以使用不同的端口加以区分。
NAT和NAPT都需要路由器内部维护一张转换表。
举例:TCP首次SYN时,会生成这个表,关闭连接时会发出FIN包,收到这个包应答时转换表会被删除。
四.传输层
TCP和UDP
定义:实现应用程序之间的通信。
TCP:面向有连接的协议,建立连接需要3步,关闭连接需要4步。
具备数据重传、流量控制等功能,能正确处理丢包功能并有效利用宽带。
UDP:比较适合做实时视频和音频,效率比TCP高。
TCP有5个要素:源IP地址、目标IP地址、源端口号、目标端口号、协议号,同一台机器的端口号可以区分为不同的应用程序。
UDP首部:
校验和=源IP地址(IP协议首部)+目标IP地址(IP协议首部)+源端口+目标端口
包长度=首部长度+数据长度
TCP首部:
应该可以从下图看出来,TCP的首部比UDP的首部要复杂的多,所以也一定会影响的传输的速度和效率。
简单介绍一下首部的相关参数:
序列号:发送数据的位置
确认应答号:下一次应用接收到的数据的序列号
数据偏移:TCP首部的长度,单位为4字节。
控制位:长度为8位。
窗口大小:用于表示从应答号开始能够接受多少个8位字节。
紧急指针:尽在URG控制位为1时有效,表示紧急数据的末尾在TCP数据部分中的位置。
接下来最重要的一个技术点来了:
TCP握手
以下是通俗话解释连接和断开过程:
建立连接的过程:
1.client:我要建立连接。
2.server:我知道你要建立连接了,我这边没问题。
3.client:我了解你知道我要建立连接了,开始通信吧!
结束连接的过程:
1.client:我要关闭连接了
2.server:你那边可以关闭了
3.server:我这边也准备关闭了
4.client:我已关闭,你可以关闭了
[注]:连接是双方面的,所以关闭也是要自行关闭的。
TCP丢包和重发机制
数据包重发:保证ACK的值和发送方下次发送数据包的序列号相等。
接收方通过TCP首部中的控制位SYN判断这个数据是否曾经接收过?接收过就会舍弃。
重传超时时间(RTO)动态改变,略大于连接往返时间(RTT),RTO有自己的估算公式
TCP窗口:
定义:无需等待ACK,可以发送的最大数量。(窗口大小由接收端控制)
作用:为了解决发送数据包后,直至ACK确认返回之前,发送端都无法在进行发送的问题。
流量控制:
定义:接收端有缓存区数据溢出(如果窗口较大)
通俗一点的意思就是让发送方慢一点,免得接收方接收不过来。
慢启动:
TCP会慢启动算法得出窗口的大小,对发送数据量进行控制。
发送方拥有一个拥塞窗口,对发送的数据量进行控制。
TCP协议中的窗口是指:发送方和接收方窗口中的最小值。
慢启动过程:
1.通讯开始,发送方窗口为1。每收到一个ACK确认后,拥塞窗口翻倍。
2.由于指数级增长快,很快就会出现确认包超时。
3.设置慢启动阈值,它的值为拥塞窗口的大小的一半。
4.将拥塞窗口大小设置为1,重新进入慢启动过程。
5.慢启动阈值存在,当拥塞窗口大小达到阈值时,不再翻倍,而是线性增长。
6.随窗口大小的不断增长,可以收到三次重复的ACK,进入“快速重发”阶段。
7.TCp将慢启动阈值设置为当前拥塞窗大小的一半,再将拥塞窗口大小设成阈值大小。
8.拥塞窗口又会线性增加,直至下一次出现3次ACK或者超时。