赞
踩
作用 | TCP | UDP |
---|---|---|
可靠性 | 可靠 | 不可靠 |
连接性 | 面向连接 | 无连接 |
报文 | 面向字节流 | 面向报文 |
效率 | 传输效率低 | 传输效率高 |
双工性 | 全双工 | 一对一、一对多、多对一、多对多 |
流量控制 | 滑动窗口 | 无 |
拥塞控制 | 慢开始、拥塞避免、快重传、快恢复 | 无 |
传输速度 | 慢 | 快 |
应用场景 | 对效率要求低,对标准性要求高或者要求有连接的场景 | 对效率要求高,对准确性要求低 |
三次握手的主要作用:确认双方的接收能力和发送能力是否正常、指定自己的初始序列号(ISN)为后面的可靠性传输做准备。
TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
第一次握手:客户端向服务端发送一个 SYN 报文(SYN = 1),并指明客户端的初始序列号 ISN(x),即图中的 seq = x,表示本报文段所发送的数据的第一个字节的序号。此时客户端处于 SYN 发送(SYN_Send)状态。
第二次握手:服务器收到客户端的 SYN 报文之后,会发送 SYN 和 ACK 报文作为应答(SYN = 1 , ACK = 1),并且指定自己的初始序列号 ISN(y),即图中的 seq = y。同时会把客户端的 ISN + 1 作为确认号 ack 的值,表示已经收到了客户端发来的的 SYN 报文,希望收到的下一个数据的第一个字节的序号是 x + 1,此时服务器处于 SYN 收到(SYN_RECV => SYN_RECEIVED)的状态。
第三次握手:客户端收到服务器端响应的 SYN 报文之后,会发送一个 ACK 报文,也是一样把服务器的 ISN + 1 作为 ack 的值,表示已经收到了服务端发来的的 SYN 报文,希望收到的下一个数据的第一个字节的序号是 y + 1,并指明此时客户端的序列号 seq = x + 1(初始为 seq = x,所以第二个报文段要 +1),此时客户端处于建立连接(ESTABLISHED)状态,同时服务器收到 ACK 报文之后,也处于建立连接(ESTABLISHED)状态,至此双方建立起了 TCP 连接。
当客户端和服务端通过三次握手建立了 TCP 连接以后,且数据传送完毕,肯定是要断开 TCP 连接的。那对于TCP的断开连接,这里就有了神秘的“四次挥手”。
注意:客户端和服务端均可主动发起挥手动作。
第一次挥手:客户端发送一个 FIN 报文(请求连接终止:FIN = 1),报文中会指定一个序列号 seq = u。并停止再发送数据,主动关闭 TCP 连接。此时客户端处于 FIN_WAIT1 状态,等待服务端的确认。
第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 u + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。此时的 TCP 处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待 2)状态,等待服务端发出的连接释放报文段。
第三次挥手:如果服务端也想断开连接了(没有要向客户端发出的数据),和客户端的第一次挥手一样,发送 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态,等待客户端的确认。
第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答(ack = w+1),且把服务端的序列值 +1 作为自己 ACK 报文的序号值(seq=u+1),此时客户端处于 TIME_WAIT (时间等待)状态,等待 2MSL(一个报文的来回时间)后依然没有收到回复,则证明服务端已经正常关闭,那么客户端也可以关闭连接了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。