1.TCP-三次握手与四次挥手
1-1 三次握手
SYN报文:当SYN=1而ACK=0时,表明这是一个连接请求报文;当SYN=1而ACK=1时对方同意建立连接,所以SYN=1表示这是一个连接请求或者连接接收请求。
ACK报文:只有ACK=1时有效,连接建立后所有发送的报文ACK必须为 1,表示确认。
- 客户端:SYN=1, ACK = 0
- 服务器端: SYN = 1, ACK = 1
- 客户端: ACK = 1
为什么TCP一定要握手三次
- 客户端和服务器端都经历了一次请求和一次响应,确认了当时网络状态不错
- 确认了沟通的对象既能请求又能响应
1-2 四次握手
FIN报文:FIN=1表示此报文段的发送方的数据已经发送完毕,请求释放运输连接。
- 客户端: FIN = 1 请求结束关系
- 服务器端:ACK = 1 表示确认
- 服务器端:FIN = 1 请求结束关系(在第二步确认后把要发给客户端的发完,然后请求结束关系)
- 客户端: ACK = 1表示确认
为什么TCP一定要挥手四次
- 前两次挥手,只是对分手这件事进行确认,但不会立即执行分手
- 第三次挥手前,服务器端会把自己想说的话都说完,再通知一次客户端
- 第四次挥手,客户端接收到了确认分手请求才进行分手。
当客户端想要断开连接时,只能确认自己没有数据要传输给服务器,通过四次挥手确认了服务器没有数据要发送。
2.TCP与UDP的辨析
- TCP: “面向连接的可靠传输”,连接的建立需三次握手确保双方都能确实建立稳定的传输通道
- UDP:“无连接的不可靠传输”,数据想法就发,随时可发,不关心对方有没有收到数据
UDP的优点
- 可以面向多方提供服务:不止支持一对一,还支持一对多和多对一
- 头部开销小:8个字节
- 随意:想发就发,很灵活
UDP和TCP应用场景
- UDP对一些实时性的场景比较好:网络电话、视频会议、在线直播
- TCP对可靠性和稳定性的场景好: 文件传输