TCP的三次握手和四次挥手

复习到网络协议的时候,对这个有点模糊,整理一下。

基础知识

1、TCP是一个面向连接、可靠的、基于字节流的传输层协议。TCP层是位于IP层之上,应用层之下的中间层
2、报文解释
SYN:同步序列号,请求建立连接,在其序列号字段进行序列号初始值设定
ACK:确认标识,当ACK=1时,确认字段才有效。
FIN:用来释放一个连接,FIN=1时,标识报文段的发送方数据已经发送完毕,要求释放连接。
seq:数据包本身的序列号,4个字节
ack:对收到数据包的确认,4个字节,值=等待接收的数据包的序列号。
连接的请求

建立连接

三次握手

Q1:为什么连接需要3次,而不是2次、4次?
A1:为防止失效的请求报文又传送到服务端导致错误。如果只有2次握手,失效的请求被服务端接收后,服务端建立连接状态,会一直等待发送数据,浪费资源。3次则可以确保连接的可靠,不需要4次握手。

终止连接

四次挥手

Q2:为什么关闭需要四次
A2:客户端发送fin请求关闭时,服务端收到报文,但是不会立即关闭,先回复一个ACK报文告诉客户端“你发的FIN报文已经收到”,为了等待服务端的所有报文都发送完毕再发送FIN报文,所以需要四次握手。
Q3:为什么需要等待时间
A3:为了防止服务端的释放连接请求丢失,等待服务端超时重传。另一种情况是客户端发生故障的话,服务端在等待时间过后会再次发送探测信息,决定是否释放连接

TCP vs UDP

顺带复习一下两者的区别

TCP(Transmission Control Protocol ) UDP(User Datagram Protocol)
连接 面向连接,端到端(一对一)。传输数据之前,三次握手。传输完要断开连接 面向无连接,可实现广播发送(一对多、多对一、多对多)
机制 确认、窗口、重传、拥塞控制机制。 无。不保证数据正确性、顺序
传输数据模式 面向字节流 面向报文
特点 比UDP慢、效率低,占用系统资源高,多重机制消耗时间长 请求资源少,所以快。
应用 http、https、ftp、POP、smtp 查询应答服务、即时语音、视频、NFS
逻辑通信信道 全双工(任意一段可以发送/接收数据)的可靠信道 不可靠信道

你可能感兴趣的:(TCP的三次握手和四次挥手)