网络基础知识总结

1、TCP/IP协议基础:
七层协议(OSI):
①物理层:通过传输介质发送和接收二进制比特流
②数据链路层:实现二层转发,主要对应的是转发表,设备:交换机
③网络层:实现三层转发,主要对应的是路由表,对应的协议:ARP协议、ip协议、icmp协议、路由协议(RIP协议、OSPF、Isis、bgp协议等)
④传输层:对应的协议是tcp、udp协议
⑤会话层
⑥表示层
⑦应用层
而通常我们是将⑤⑥⑦放在一起,简化为应用层,①和②放一起,简化为网络接口层,那么就剩下四层了,就是我们所说的TCP/IP协议栈,其中应用层的协议有:HTTP HTTPs ftp SNMP dns tftp telnet等协议

重点聊一下传输层和网络层:
传输层:也就是tcp/ip协议的第三层,负责向两个主机中进程之间的通信提供服务。运输层还要处理端到端差错检测(与数据链路层不同)、拥塞控制流量控制等问题。
传输层的协议:
TCP:面向连接、可靠数据传输服务,数据传输单位是报文段.
UDP:无连接。尽最大努力的数据传输服务,数据传输单位是用户数据报.

网络层:负责对子网间的数据包进行路由选择,为分组交换网上的不同主机提供通信服务。网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接。每一个分组(即:IP数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺。

网络层协议的代表包括:ARP、IP、ICMP、IGMP等。

报文主要是:ip报文,ip地址,表现为数据包。

介绍ARP协议:
首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。

2)当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向“本网段”的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。

3)当本网络的所有主机收到该ARP数据包时,首先检查数据包中的目的主机IP 地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。

4)源主机收到ARP响应包后,将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP 查询失败。
ARP请求发送的广播报文,所以是在局域网内进行广播,目的mac地址为00-00:00-00:00-00
ARP响应为单播。

MTU为数据链路层的最大传输帧长,一般不超过1500个字节,如果超过这个长度就会被分片。
iP报文的总长度最大为2^16-1=65535个字节,去掉前面最大的60个字节首部(20个固定字节首部+40个可变的),剩下的就是数据部分的字节,一般不会这么大。

TCP流量控制、拥塞控制和重传机制

TCP是面向连接的可靠传输协议,如何实现可靠传输,下面来详细介绍一下:
滑动窗口机制:

流量控制:是让发送方慢点发,使用滑动窗口机制来解决

拥塞控制:当请求的资源大于当前网络环境中的可用资源时,就会出现拥塞。
解决办法:就是使得请求的资源小于当前网络环境中的可用资源。
目前已实现的拥塞控制算法有四种:
①慢开始
②拥塞避免
③快重传
④快恢复

一、慢开始和拥塞避免
其思想就是,慢慢的开始,而不是一下子就发很大的数据,就跟开车一样,先从低档开始,路上没有什么车的话,道路畅通,可以慢慢的加速。
先不传大量的数据报文,先将发送窗口设置为1,发送一个报文之后,如果接收方确认了,那么将发送窗口变成2,如果收到了接受方的这两个确认报文,那么就将创建变成4,以此类推,8、16、倍数的增加。

上面不可能一直增加,因为可能会导致出现网络拥塞,所以有一个门限值,叫做慢开始门限ssthresh:
①当rwnd < ssthresh时,执行慢开始算法
②当rwnd > sstheresh时,执行拥塞避免算法
③当相等,则两种均可以

拥塞避免算法的思想就是:让rwnd缓慢的增加,每次加1,而不是加倍。在坐标轴中表现就是线性增长。
慢开始算法在坐标轴中的表现就是x^2,抛物线的趋势增长。
网络基础知识总结_第1张图片
上述过程,可以看到当出现网络拥塞,立即就会将发送窗口改成1,,执行慢开始算法,在这样重复下去。

所以说慢开始和拥塞避免是配合着使用的。
二、快重传和快恢复;
快重传的思想是:如果接收方的接收窗口中有无序的数据,那么就会重传上一次的确认报文,重传三个,发送方收到三个重复的确认报文则会对该报文进行重传。
快恢复算法的思想:当出现上面的发送方收到接受方的三个重复确认报文,那么就会减小发送方的发送窗口,乘法算法减小,比如当前是24,那么就减为12.也就是减半。减半之后不会去执行慢开始算法,而是执行拥塞控制算法。下图举例:
网络基础知识总结_第2张图片
三次握手和四次挥手:
发送方发送syn给接收方,接收方给发送方发送sys+ack报文,发送方收到之后,给接收方发送ack报文。这样连接就建立了。
这里有个问题:为什么要不是两次握手,要三次?
原因就是:发送方给接收方发送的连接请求报文如果在网络中延时导致接受方在一定的时间内没有收到,那么发送方会重传,此时他们已经建立连接了,最后连接也关闭了,但是此时接受方收到了发送方发送的第一个报文,那么接受方会回应syn+ack报文。如果没有三次握手,那么此时接受方给发送方发完确认就把连接打开了,但是发送方收到ack并不会理会,导致接受方一直在等着A发数据给他,从而导致资源的浪费。
注意:上面的syn报文不能携带数据,但是单独的ack报文是可以携带数据的。
四次挥手:
就是TCP断开连接的过程:首先是发送方发送FIN报文给接受方,请求连接关闭,此时发送方处于fin-wait1的状态,接收方收到之后,回复一个ack报文,发送方进入了fin-ack2的状态,自己进入closed-wait的状态,此时发送方已经不能向接受方发送数据了,但是接收方还是可以向发送方发送没有发送完的数据,发送完之后,接受方发送FIN报文请求发送方关闭连接,自己进入last-ack状态,发送方收到之后,回复一个ack报文之后,自己进入了time-wait的状态。接受方收到发送方的ack报文之后,就进行了closed的状态。
上面发送方还是在time-wait的状态,时间是2MSL(最长报文段寿命),如果在这个时间段内,没有收到接受方重传的fin报文,那么就会自动进入closed状态。

为什么会有上面的2MSL的时间等待呢?原因就是因为:如果发送方给接收方的ack报文丢了,那么自己已经closed状态了,此时接受方没有收到ack报文,则会重新发fin报文,此时发送方就不会理会接受方,那么这个反向的连接就没有正常关闭,导致资源的浪费。

最后来看下应用层的一些协议:
DNS:(域名系统)
主要是将域名转换为ip地址的。
主要需要知道dns的解析过程就行了。下面给一个例子;
浏览器输入url之后经历的过程:
发送http请求前进行域名解析(DNS解析),获取相应的ip地址
浏览器向服务器发起连接,建立tcp三次握手
浏览器向服务器发送请求,请求数据包
服务器收到请求,返回数据
浏览器收到http响应,解析html源码
生成DOM,解析css,js

HTTP1.0和HTTP2.0的区别
超文本传输协议:定义了客户端进程如何向万维网服务器请求万维网文档以及服务器怎么把文档传送给浏览器。

你可能感兴趣的:(软件测试,计算机网络)