在平时的工作中我们接触的最多的就是网络?网络到底是个什么东西,和我们平时应用程序,中间件相关的网络模型是依据什么来定义的呢?这里希望通过对网路只是的重新梳理学习,理清楚这些概念。
先来看下OSI七层网络模式:图片来自网络
- 网络层:可以理解为构建网络的基础层,包含光纤,双绞线、无线电波等
- 数据链路层: 主要用于数据的传输,,主要协议有如ARP其中重要的作用就是将数据转换为帧(以太帧),并对传输的数据进行数据校验。 数据链路层主要有两个部分,下层介质存储控制(Media Access Control MAC) 和上层逻辑链路控制(LLC), mac主要负责和物理介质的通讯。
当接收数据时LLC用于接收网络层协议对其进行封装传递给mac,
当发送数据时,llc可以识别任何mac上的方法。
mac层主要负责介质间的通讯,将0,1的比特流组成帧,并提供错误校验。支持底层的协议,提供对共享介质的访问方法,包括以太网的带冲突检测的载波侦听多路访问(CSMA/CD)、令牌环(TokenRing)、光纤分布式数据接口(FDDI)等 - 网络层: 网络层实现各种网络中的互联主要有IP协议,ARP,RARP等
- 传输层: 负责数据的传输,也有流量控制及数据校验的功能,主要协议有TCP,UDP等
- 会话层:管理表示层与实体之间的会话
- 表示层:提供各种数据的转码,压缩,加密等方法
- 应用层: 最上层的应用接口等主要协议有http,ftp,smtp,rpc等
下面是一张各层的协议表:
像数据链路层中IEEE标准的协议,我们在平时的wifi连接和网络连接中经常有看到。这里暂不做深入的了解。
来看下网络层与我们开发关系最密切的协议有那些:
IP
我们通常使用的IP是IPV4,采用4个字节32位地址来表示。我们为了方便记忆便采用了十进制方式以中间加点的方式来区分IP地址。所以ip地址可以记录
2^23 = 4294967296
台计算机。通常我们的IP地址是根据网卡来划分的,一台机器上至少可以有一个Ip地址,而路由器可以设置多个IP
IP地址分类
ip地址由网络号和主机号两不分组成,通常分为5类
根据这样的规定,我们可以算出没个分类的IP地址范围:
什么是CIDR
由于分类的网络地址存在着缺陷,不能区分地址层次,不能根据网络的需求去合理的划分地址。因此有了CIDR无分类地址:以a.b.c.d/x 其中x是网络号的位数表示。
比如10.10.120.0/24
则前面24是网络好,后面8位是主机号
网络号:10.10.120.0
第一个主机: 10.10.120.1
最后一个主机: 10.10.120.254
广播地址: 10.10.120.255
另外子网掩码也是这个概念二进制位用于与ip做&运算,用于掩盖掉主机号,剩下的就是网络号。同时子网掩码也可以做子网划分,通过设置掩码将具体的子网划分出来。
IP数据的转发
先来看下IP的包的首部结构
这里面包含了当前IP数据的一些信息。紧接着跟着的就是具体的数据内容。
在IP数据的发送过程中具有最大传输单元MTU一般linux计算机中未1500个字节,超过这个字节大小的数据会被进行分片。同时在接收方的主机上进行重组。在分片传输中,一旦某个分片丢失,则会造成整个 IP 数据报作废,所以 TCP 引入了MSS也就是在 TCP 层进行分片不由 IP 层分片。
Ip在传输的过程中,如果目标ip和原IP在一个网段内,则直接通过ARP找到要发送的Mac地址。如果在不同网段内则转发到路由器,进行数据转发。
这里稍微提及一下IPV6,IPV6使用128位存储,因此可分配的IP数量巨大,解决了IPV4数量不足的问题。同时对发送的数据包进行了优化。
所以IPV6的地址采用十六进制显示:
每16位一组
TCP/UDP
UDP( User Datagram Protocol) 用户数据报协议,udp不需要握手,因此提高了通讯的速度。UDP允许数据包的丢失,传输低延迟。
TCP(Transmission Control protocol) 传输控制协议。TCP能确保传输的安全性。下面罗列下TCP的特点:
- TCP的传输会带有序号和确认号保证数据准确。
消息类型 | 描述 |
---|---|
SYN | 同步序列编号sychrinize sequence number ,客户端与服务端进行连接时首先会发送SYN到服务端 |
ACK | 确认收到SYN后回复对方 |
SYN-ACK | 本地的SYN和上一次的ACK,ACK一般是接收到序号+1 |
FIN | 断开请求 |
为什么需要三次握手呢?
我的理解是,比如如果只经过2次握手,服务端发送回复消息后没有接收到客户端的回复,那服务端就不知道客户端是否已准备好。这时候如果服务端认为客户端没准备好而断开通讯。客户端再向服务端发送信息,服务端就接收不到了。三次握手也是为了保证双方可以正常通讯。
正式因为有序列号和应答号。当传输的过程错误时,TCP会引发重传机制,这里分为两种,超时重传和快速重传,超时重传是指发送一条报文后就启动一个计时器。这个计时器的时间一般是通过客户端与服务端的几个通讯时常的平均值。
快速重传,是指接收方在接收到不连续的编号时就连续发三条ACK告诉发送方报文丢失了,这时发送方就立即发送报文,不需要等到超时。
-
流量控制
TCP在传输的过程中通过滑动窗口,来保证发送方的数据不会因为发送的太快而导致接收方无法处理的情况,滑动窗口的工作机制大致如下:
图片来自网络
如果窗口为3,那tcp允许发送方连续发送3条数据,当几首到的ack为4时说明发送正常,接着发送。当接收到ack为3时说明接收到两条数据,3丢失了。这时候从3开始发,且窗口大小变为2,发送3,4后接收到5说明发送正常。滑动窗口的大小会更具传输过程中的的正确率进行调整。 -
拥塞控制
拥塞控制会更具全部网络的情况,进行数据传输流量的控制。这里有两个符号
cwnd 拥塞窗口大小
ssthreshold 拥塞阀值
这里主要介绍几种控制方式:
(1)慢启动,当cwnd<ssthreshold根据1,4,8,16这种方式增长,开始先发送小的数据包,如果确认网络正常后再发送正常大小的数据包
(2) 当cwnd>ssthreshold时候可呈线性发送
(3)当出现网络拥堵时,可进行这两个值的调整
(4)快速回复,在决定了启动策略之后进行策略恢复阶段