TCP的三次握手和四次挥手
2019-01-13 本文已影响30人
ss酱
复习到网络协议的时候,对这个有点模糊,整理一下。
基础知识
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 |
逻辑通信信道 | 全双工(任意一段可以发送/接收数据)的可靠信道 | 不可靠信道 |