文章目录
网络分层
物理层
连接不同的物理设备,用来传输比特流。
eg:双绞线、同轴电缆、光纤、红外线、无线介质、激光等。 网卡
数据链路层
将上层数据封装成帧、用MAC地址访问媒介、差错检测。相邻物理节点传输
帧:数据链路层数据的基本单位。发送端在网络层的一段数据块前后添加特定标记形成帧。
差错检测:循环冗余校验码CRC
MAC地址
MAC地址:物理地址、硬件地址、设备地址。每个设备都有一个唯一的MAC地址。48位(6个字节),用12个16进制数表示。
查看MAC地址:ipconfig/all
以太网协议:是一种广泛使用的局域网技术,应用于数据链路层,可以完成相邻设备的数据帧传输。
MTU:最大传输单元。数据链路层的最大MTU为1500字节,最小MTU为64字节。
网络层
提供IP地址,将数据设法从源端经过若干个节点传送到目的端,为传输层提供最基本的端到端的数据传输服务。(路径选择、路由及逻辑寻址)
具体功能:寻址、路由选择、连接建立、保持和终止。
IP协议
IP协议:计算机网络相互连接进行通信的协议,屏蔽了物理网络之间的差异。解决了在虚拟网络中数据报传输路径的问题。路径选择
IP地址:每个计算机设备的唯一编号。32位(4个字节),用4个10进制数表示。
IP地址的分类:
子网
子网的划分:193.10.10.0 是C类地址,最大主机号为254,把IP地址的第25位看做子网号。
子网的掩码:快速判断某个IP的网络号
子网掩码和IP地址一样,都是32位;由连续的1和连续的0组成,某一个子网的掩码有**网络号位数**个连续的1。
A:8个1+24个0
B:16个1+16个0
C:24个1+8个0
例 :IP地址:193.10.10.6,通过子网掩码255.255.255.128得到它的网络号
193.10.10.6 11000001.00001010.00001010.00000110
255.255.255.128 11111111.11111111.11111111.10000000
二进制做与运算 11000001.00001010.00001010.00000000 193.10.10.0
无分类编址CIDR:没有A、B、C类网络号和子网划分的概念
将网络前缀相同的IP地址称为一个“CIDR地址块”
网络前缀是任意位数的,不受限于任何一类网络地址
相比子网划分更加灵活
斜线记法:193.10.10.129/25 :网络前缀有25位
11000001.00001010.00001010.10000001
IP数据报
版本:占4位,指IP协议的版本,当前主流版本是4,即Ipv4
首部位长度:占4位,最大十进制数值为15,单位是32位(4个字节),即最大15*4=60字节
总长度:占16位,最大数值为65535。总长度=IP首部+IP数据
TTL:占8位,表示IP数据报文在网络中的寿命,每经过一个设备,TTL-1,当TTL=0时,网络设备丢弃该报文。
协议:占8位,表示IP数据所携带的具体数据是什么协议的(TCP、UDP)
首部校验和:占16位,校验IP首部是否有出错
IP协议的转发流程
路由表简介 :计算机A发出数据到计算机C
计算机A通过网卡发出数据帧
数据帧到达路由器,路由器取出前6个字节(MAC地址)
路由器匹配MAC地址表,找到对应的网络接口(计算机C)
路由器往该接口发送数据帧
IP协议的转发流程(网络层) :计算机A需要跨设备把数据传到计算机C
A发出目的地为C的IP数据报,查询路由表发现下一跳为E
A将数据报发送给E
E查询路由表发下下一跳为F,将数据报发送给F
F查询路由表发现目的地C直接连接,将数据报发送给C
IP协议的转发流程(结合网络层和数据链路层) :计算机A需要跨设备把数据传到计算机C
A发出目的地为C的IP数据报,查询路由表发现下一跳为E
A将IP数据报交给数据链路层,并告知目的MAC地址是E
数据链路层填充源MAC地址A和目的MAC地址E
数据链路层通过物理层将数据发送给E
E的数据链路层收到数据帧,把数据帧交给网络层
E查询路由表,发现下一跳为F
E把数据报交给数据链路层,并告知目的MAC地址为F
E的数据链路层封装数据帧发送
F的数据链路层接收到数据帧,把数据帧交给网络层
F查询路由表,发现下一跳为C
F把数据交给数据链路层,并告知目的MAC地址为C
F的数据链路层封装数据帧并发送
ARP协议
如果ARP缓存表里没有缓存IP地址和MAC地址的映射关系
也就是E检查MAC地址表,发现没有C的信息,E将广播A的数据包到除A以外的端口,E将收到来自B、C的回应,并将地址记录。
ARP协议 :地址解析协议,把网络层32位IP地址→数据链路层48位MAC地址。
RARP协议 :逆地址解析协议,把数据链路层48位MAC地址→网络层32位IP地址。
ARP缓存表 :左列是IP地址,右列是其对应的MAC地址。即IP地址和MAC地址的映射关系。是ARP协议和RARP协议高效运行的关键。其中的记录不是永久有效的,有一定的期限限制(IP地址会变化)
查看ARP缓存表:arp -a
ARP报文:总共28个字节
帧类型:0x0806
ARP首部:
硬件类型:硬件地址的类型,1表示以太网地址。2个字节
协议类型:协议地址的类型,0x0800表示IP地址。2个字节
硬件地址长度1、协议地址长度1、操作类型:2个字节
发送端硬件(以太网)地址:6个字节
发送端IP地址:4个字节
目的端硬件(以太网)地址:6个字节
目的端IP地址:4个字节
ICMP协议
ICMP协议:网际控制报文协议,可以报告错误信息或异常情况。辅助IP协议
传输层
实现网络不同主机上用户进程之间的数据通信。可靠与不可靠的传输,传输层的错误检测、流量控制等。
TCP和UDP协议的区别
UDP是无连接协议--------TCP是面向连接协议
UDP不能保证可靠的数据交付--------TCP提供可靠的传输服务
UDP是面向报文传输的---------TCP是面向字节流的
UDP传输速度快-------TCP传输速度慢
UDP没有拥塞控制---------TCP协议有拥塞控制
UDP首部开销很小
可靠传输的基本原理
用可靠传输协议实现可靠传输:停止等待协议、连续ARQ协议(自动重传请求)
停止等待协议
就是在三种情况下(发送的消息在路上丢失、确认的消息在路上消失、确认的消息很久才到),通过超时重传,保证可靠传输的机制
发送方发送消息给接收方,然后停止等待接收方返回确认信息。此前接收方也在等待发送方发送消息给它。(超时定时器:每发送一个消息,都需要设置一个定时器,计算消息过期的时间,超过这个时间还没有收到确认消息,就判定为过期)
发送方给接收方发送的消息1发生丢失,就等不到接收方的确认消息,此时就会重新发送这个消息1,称为超时重传。超时重传是保证停止等待协议可靠传输的方法。
同理,当接收方发送确认消息时发生丢失的情况,或者确认消息在很久很久之后才能到,发送方在一段时间后没有收到确认消息,也会重新发送消息。
停止等待协议是最简单的可靠传输协议,但它对信道的利用效率不高(因为它每发送一个消息,就要等待一个确认消息)
连续ARQ(自动重传请求)协议
根据停止等待协议的缺点:单个发送和确认效率低 改进的协议。
使用批量发送多个数据【滑动窗口:一次批量发送的大小】的方法,前面数据的确认消息收到时,将滑动窗口向前移动【收到几个确认消息,移动几个】。
累计确认:只要收到某个数据的确认消息,那就说明这个数据之前的所有数据的确认消息都收到了。即使确认丢失,也不必重传。减少了确认消息的数量,提高了网络效率。
缺点是不能向发送方反映接收方已经正确接收到的数据信息。
G0-back-N(回退N):表示需要退回来重传已经发送过的N个数据
TCP协议的可靠传输
可靠传输应该满足的要求:
(1)传输的信道不产生差错
(2)保证传输数据的正确性,无差错、不丢失、不重复、按序达到
TCP的可靠传输基于连续ARQ协议的。TCP滑动窗口以字节为单位。
TCP的可靠传输的原因有三点:
(1)首先:采用三次握手来建立TCP连接,四次挥手来释放TCP连接,从而保证传输信道的可靠。
(2)然后:采用连续ARQ协议(Go-back-N、回退N)保证数据传输的正确性,使用滑动窗口来保证接收方能及时处理所接收到的数据,进行流量控制。
滑动窗口协议的规则:(1)凡是已经发送过的数据,在未收到确认之前,都必须暂时保留,以便在超时重传时使用;(2)只有当发送方收到了接收方的确认序号时,发送方窗口才可以向前滑动几个序号;(3)当发送方发送的数据经过一段时间没有收到确认(超时计时器),就要使用回退N步协议,回到最后收到确认号的地方,重新发送这部分数据。
流量控制:让发送端发送数据速率不要太快;使用滑动窗口实现。
如果接收方给发送方的窗口大小的消息丢失,发送方就会一直处于等待状态,形成死锁。为了避免死锁,使用坚持定时器
坚持定时器:当发送方接收到窗口为0的消息时,则启动坚持定时器;
坚持定时器每隔一段时间就会发送一个窗口探测报文,询问接收方的窗口大小有没有增大
(3)最后:TCP使用慢启动、拥塞避免、快重传、快恢复来进行拥塞控制,避免网络拥塞。
拥塞控制:是指在网络传输数据过程中,传输的数量太多,由于储存转发节点的资源有限导致网络传输性能下降。为防止过多数据注入网络,使网络中的路由器或链路不过载,使用拥塞控制。
(1)慢启动算法:指不要一开始就发送大量的数据,而是由小到大逐渐增加(指数增加)发送数据量,开始设置拥塞窗口大小cnwd=1,每收到一个报文确认就加1。增加到慢启动阈值ssthresh(为防止cnwd过大引起网络拥塞)时,开始使用拥塞避免算法。
(2)拥塞避免算法:在拥塞避免阶段,只要网络不拥塞,就将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
(3)当网络发生拥塞时,把ssthresh值减小为拥塞前ssthresh值的一半,拥塞窗口重新设置为1,再从步骤(1)开始执行
(4)快速重传:指的是接收方在收到一个失序的报文段后就立即发出重复确认(为了使发送方及早知道报文段有没有到达对方),而不要等到自己发送数据时捎带确认。发送方只要一连收到3个重复确认就应该立即重传对方尚未收到的报文段,而不必等待设置的重传计数器时间到期
(5)快速恢复:当发送方连续收到3个重复确认,就执行“乘法减小”算法,把慢启动阈值更新为此时拥塞窗口阈值的一半(为了预防网络拥塞)。接下来不执行慢启动,而是把cwnd值设置为慢启动阈值减半后的值,开始执行拥塞避免算法,使cwnd缓慢线性增大
流量控制和拥塞控制的区别:
流量控制考虑点对点的通信量的控制,考虑接收方可能的接收性能达不到发送的量
拥塞控制考虑整个网络,是全局性的考虑
TCP协议的三次握手,原因?
TCP标记说明:
ack : 确认号字段。占4个字节,是期望收到对方的下一个报文段数据的第一个字节的序号。若ack=N,表示到序号N-1为止的所有数据都已经正确收到
ACK :确认位。表示你发来的请求我已经接收到。只有当ACK=1时确认号字段ack才会生效。ACK=0时,ack无效
SYN : 同步位。SYN=1表示这是一个连接请求或连接接收报文。当SYN=1且ACK=0时,这是一个连接请求报文。对方若同意连接,则在响应报文中使用SYN=1且ACK=1,。
第一次握手:
发送端给接收端发送建立连接请求报文 ,其中SYN(同步位)=1,seq(序列号)=x;连接求情报文不携带数据,但要消耗一个序列
当报文段的SYN=1且ACK=0时,表示请求建立连接;
发送完之后,客户端进入同步已发送状态
第二次握手:
接收端接收到请求报文之后,给发送端发送确认报文段。其中SYN=1,ACK(确认位)=1,ack=x+1,同时设置自己的初始序列号seq=y。确认报文不携带数据,消耗一个序列
当报文段的SYN=1且ACK=1时,表示这是一个确认建立连接的响应报文段。
seq是本身数据包的序列号,ack是期望下次收到对方发送的数据包序列号
接收端发送完之后,进入同步已接收状态
第三次握手:
发送端收到接收端确认报文段之后,还需要向接收端发送确认报文段。其中ACK=1,seq=x+1,ack=y+1。
发送完之后,发送端进入建立连接状态,接收端接收到确认报文段之后,也进入建立连接状态(传输数据)
原因:避免已经失效的连接请求报文突然传送到对方,引起错误
TCP协议的四次挥手?原因
TCP标记说明:
FIN : 终止位。用来释放连接。FIN=1表示发送方发送数据完毕,请求释放传输连接。
第一次挥手:
发送端主动请求释放连接,给接收端发送一个连接释放报文,停止发送数据。其中FIN=1,seq=u。
seq=u :表示之前已经传送过的数据最后一个自己的序列号加1。
TCP是全双工的。也就是说一条TCP连接上有两条数据通路,当发送FIN报文时,发送FIN报文的一方就不能再发送数据,也就是关闭了其中一条数据通路,另一条还可以发送数据。
发送端进入第一个释放等待状态
第二次挥手:
接收端收到请求释放报文,然后发出确认释放报文,并且向发送端发送自己未发送完的数据。其中ACK=1,seq=v,ack=u+1。
此时,发送端到接收端的数据连接就释放了。
发送端进入第二个释放等待状态,接收端进入关闭等待状态
第三次挥手:
接收端发送完自己的数据之后,会再发送一个连接释放报文。其中FIN=1,ACK=1,seq=w,ack=u+1。
接收端进入最后确认状态
第四次挥手:
发送端收到接收端的释放报文之后,发出确认报文段。其中ACK=1,seq=u+1,ack=w+1。
发送端进入等待计时器状态
等待计时器设置的时间为2MSL(最长报文段寿命),建议设置为2分钟
接收端接收到确认报文段之后,两端同时进入关闭状态
为什么要进入等待计时器状态等待2MSL?
(1)保证第四次挥手的发送端发出的确认报文段能够到达接收端,若2MSL时间内没有收到,接收方会重发连接释放报文
(2)确保当前连接的所有报文都已经过期