协议(一)
协议
双方沟通之后达成的约定
网络协议
通信计算机需要遵循的一组约定,只有遵循了这些约定,才能够正常通信
通信是数据从源到目的的传输,体现在的网络上就是数据包
OSI分层模型
国际标准化组织ISO提出的概念模型,开放系统互连参考模型。
目的:保证不同系统的计算机能够相互通信
为什么要分层?
网络传输本身非常复杂,为了解决复杂问题,采用分层的概念,每一层负责独立具体的功能,再把这些分层组合起来,最终实现模块化,复杂问题简单化。
每一层为上层提供服务,使用下层的服务。
OSI七层模型详解
-
应用层:为网络用户提供应用程序
常见协议:HTTP,FTP,SMTP
示例:我在咸鱼上架了一个人体工学椅
-
表示层:数据转化,压缩和加密解密
常见协议:ASCII,JPEG
示例:把椅子拆解,包装起来,带上一份组装说明书
-
会话层:建立、管理和终止会话连接
常见协议:SQL,RPC
示例:有人下单了,会话开始,等到对方收获,会话结束
-
传输层:建立端口和端口之间的连接,为会话层提供可靠传输。
常见协议:TCP,UDP
示例:快递公司,负责把货物从西安送到上海。
-
网络层:建立主机与主机之间的连接,为数据传输进行网络路由选择(选择主机到主机间最短/最快的路径)
常见协议:IP,ICMP
示例:快递公司确定了起始点和终点,选择出最短/最快的路径进行包裹发送
-
数据链路层:物理寻址,为网络层提供传输服务
常见协议:HDLC,PPP
示例:快递员通过电话和姓名联系到我们,取走快递,交给快递点。。。。到了目的地之后,快递员取走快递,交给对方。
-
物理层:数据传输介质,进行实际的数据传输
常见协议:RJ45,RS-232
示例:快递飞机,火车,小三轮等设备
TCP/IP模型
由OSI模型简化而成,并不是只有TCP、IP协议,只是说因为TCP/IP协议比较有代表性所以如此命名
-
应用层:对照的是OSI模型的应用层、表示层和会话层,为网络用户提供应用程序,负责一切与应用程序相关的功能
协议:HTTP,SMTP,FTP
-
传输层:为应用层提供可靠的数据传输
协议:TCP,UDP
-
网络层:实现网络间的寻址和数据传输
协议:IP,ICMP
-
网络接口层:确定数据传输的物理设备,进行实际的数据传输
OSI模型与TCP/IP模型的比较
- OSI七层模型,TCP/IP四层模型
- OSI模型复杂,TCP/IP模型相对简单
- OSI模型先提出模型,后由协议;TCP/IP模型现有协议和应用,后来参照OSI模型提出TCP/IP模型
- OSI模型理想化,一直未被完整实现;TCP/IP模型是现行互联网的标准模型
TCP协议
传输控制协议,是一种面向连接的,可靠的,基于字节流的传输层通信协议
作用:保证数据传输的可靠性和完整性。
- 特点
- 面向连接的:先建立连接才能进行数据传输。
- 可靠的:
- 确认机制:发送方发送的报文,接收方必须确认,如果没有确认,就认为报文丢失,会重发报文。
- 超时重发:发送方估计一个保守的时间作为报文发送的超时时间,如果超过超时时间接收方仍没有确认,那就重发报文。
- 校验和:发送方通过报文数据计算出一个校验和,将校验和放到报文中一起发送,接收方接收之后使用相同的算法进行计算,结果与报文中一致就确认,不一致就丢掉等待重发。
- 基于字节流:应用层传递下来的数据非常庞大,如果一次性发送,遇到不稳定的网络问题,会造成时间和数据的损失。TCP协议会将数据转化成字节流,将数据分成一段一段,然后分别编号,分组发送。
- 报文结构
- 序列号和确认号
- 连接阶段通信双方会各自产生一个随机编号
- 发送方将自己的编号看作序号,确认对方的编号看作确认号
- 接收方确认的是对方序号的包,确认完成之后,需要将需要加一作为确认号,提示发送方下次发送什么序号的包
- SYN:连接标志,ACK:确认标志,FIN:释放连接标志
- ACK标志位在连接完成之后始终置一,直到断开连接
三次握手
- A->B: A发起连接,SYN置1,产生随机序列号200,将请求发送给B
- B->A:B进行确认,ACK置1,确认号为200+1,SYN置1,产生随机序列号500
- A->B:A进行确认,ACK置1,确认好为500+1,序列号为201
- 连接建立
四次挥手
- A->B: A发起断开连接请求,FIN置1,ACK置1,seq_num=300,ack_num=600
- B->A: B进行确认,ACK置1,seq_num=600, ack_num=301
- B->A:B发送断开请求,FIN置1,ACK置1,seq_num=600, ack_num=301
- A->B: A进行确认,ACK置1,seq_num=301,ack_num=601,
- B关闭连接,A等待一段时间之后关闭
三次握手和四次挥手面试题
-
为什么不能是两次握手?
握手阶段需要确认双方的收发能力,两次握手做不到,三次握手是将四次握手中间两步合并了
-
为什么不能是三次挥手?
被动断开连接的一方可能有未发完的数据,所以需要先发送ACK包进行确认,之后再发送FIN包
-
四次挥手阶段,为什么最后主动断开连接的一方需要等待一段时间(2MSL)?
MSL: 报文最大生存周期
A发送的最后一个报文,如果B没有收到,A就直接关闭,会导致B重发的FIN包无法被确认
等待2MSL意味着A可以等到B之后重发的报文,确保连接正常关闭
UDP协议
用户数据报协议
特点:
1. 无连接1. 不可靠的:尽可能的进行交付1. 面向报文的:上层传来的报文,不合并不拆分,一次交付整个报文
报头
TCP协议和UDP协议的比较
- TCP协议是面向连接的,UDP协议是无连接的
- TCP协议是可靠传输,UDP协议是不可靠的的
- TCP协议传输效率低,UDP协议传输效率高
- TCP协议支持一对一通信,UDP协议支持一对多,多对多,多对一,一对一
- TCP协议基于字节流,UDP协议是基于报文的
5)]
TCP协议和UDP协议的比较
- TCP协议是面向连接的,UDP协议是无连接的
- TCP协议是可靠传输,UDP协议是不可靠的的
- TCP协议传输效率低,UDP协议传输效率高
- TCP协议支持一对一通信,UDP协议支持一对多,多对多,多对一,一对一
- TCP协议基于字节流,UDP协议是基于报文的
- TCP多应用于邮件传输,文件传输;UDP多应用于直播,游戏