什么是协议?规定数据通信和交互规则的约定
协议的作用:1.通信规范:数据格式,传输方式,消息结构(报文)编码规则
确保通信的可靠性和一致性,互操作性
2.数据交换:数据在网络中的交换方式,数据包的组织方式,传输顺序,
错误检测,纠正机制,保证数据传播的正确性和完整性
3.安全性:协议可以规定数据加密和身份认证机制,保障通信的安全,防止数据被未经授权的人访问,篡改,泄露
4.设备互联:不同设备和不同系统之间能相互连接和通信,不同厂商之间的不同设备实现互操作性
5.网络管理:定义网络管理和监控的规范,通过指定协议追踪管理网络中的设备,配置,故障,确保网络的正常运行
TCP 传输控制协议
定义:面对连接可靠的进程到进程的通信协议,TCP提供全双工服务,数据同时双向传输,每个TCP都有发送缓存和接收缓存,用来临时存储数据
注:通信双方必须建立连接,连接有规范,有步骤
tcp报文段
控制位FLAGS:
URG:紧急位,紧急指针有效位
ACK:确认位,只有ACK=1,确认的序列号字段才有效;ACK=0 确认号字段无效
Ack:表示接收方期望收到发送方下一个报文段第一个字节数据的编号,确认传输是否有问题
SEQ:TCP报文的序号
SYN:同步位,连接位,同步序号位,tcp需要建立连接时,SYN=1建立连接
FIN:断开位,TCP完成数据传输之后需要断开连接,提出断开连接的一方,需要把FIN=1
PSH:急迫位,设为1时,要求接收方尽快把数据发送到应用层
RST:重置位,RST为1时,要求重新建立TCP连接
WIN:接收缓存区的空闲空间
UDP 用户数据报协议 (流媒体)
定义:无连接,不保证可靠的传输层协议(可靠性由其他上层协议来保证)
传输的数据更快,效率更高
注: 发送端不关心数据是否到达,接收端不会对发送端做出回应
三次握手
PC1与 PC2建立连接(三次握手)
1.PC1发送想要建立连接的报文
(1) Seq=x (表示报文的序号)
(2) SYN=1 (表示同步位,请求与PC2建立连接)
2.PC2收到PC1的请求,回复SYN+ACK的报文
(1)Seq=y (表示PC2发送的报文的序号)
(2) Ack=x+1 (表示PC2让PC1下一次发送x+1序号的报文给PC1)
(3) SYN=1,ACK=1(表示PC2同意确定与PC1建立连接)
3.收到PC2同意建立连接的报文后
(1)会发送一个序号为x+1报文
(2)告诉PC2希望你下次发送序号为y+1的序号给PC1
(3)确认位,将ACK=1发送确认,连接成功
抓包示例
为什么是三次握手,而不是两次握手,四次握手?
第一次握手:PC1发包,PC2收到了
由此可以确定PC1的发送能力、PC2的接收能力是正常的
第二次握手:PC2发包,PC1收到了
由此可以确定PC2的接收、发送能力是正常的,但是并不能确定PC1的接收能力是否正常
第三次握手:PC1发包,PC2收到了
PC1做出回应由此可以确定PC1的接收、发送能力正常
因此,需要三次握手才能确认双方的接收与发送能力是否正常。
总结:三次握手的本质是确认通信双方收发数据的能力
四次挥手
- PC1向PC2发送FIN(结束)请求,ACK=1,表示PC1要确定请求关闭连接
- PC2收到FIN请求,向PC1发送ACK确认是要关闭连接,表示PC2已收到请求
- PC2向PC1发送FIN请求,表示PC2也要关闭连接
- PC1收到PC2的FIN请求,向PC2发送ACK确认,表示PC1已经收到请求并准备好关闭连接,然后连接关闭
总结:四次挥手的目的就是关闭一个连接
在TCP断开连接的过程中,有一个半关闭得概念。TCP一端可以中止发送数据,但是仍然可以接收数据,称之为半关闭
(1)PC1发送FIN,表示PC1停止发送数据,但是PC2还需要继续发送数据;
(2)PC1表示不再发送数据,但是接收数据不受影响;
(3)PC2回应ACK=1,此时处于半关闭状态,PC2继续传输未传完的数据;
当PC2也传输完了数据,就进入挥手的最后阶段,
(4)ACK=1 确定关闭连接
为什么是四次挥手,而不是三次?
因为当PC2收到PC1的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。
关闭连接时,当PC2收到FIN报文时,连接并不会立即关闭,所以会回复一个ACK报文,告诉PC1,你的请求关闭连接的消息我收到了
但是需要我这边所有的数据都发送给你,我才能发送FIN报文确定断开连接,故需要四次挥手。