TCP、UDP相关知识点

  • TCP为传输控制层协议,为面向连接、可靠的、点到点的通信;
  • UDP为用户数据报协议,非连接的不可靠的点到多点的通信;
  • TCP侧重可靠传输,UDP侧重快速传输。

TCP三次握手

(1)第一次握手:Client 标志SYN=1(标识建立连接),随机一个数值J赋值给seq(seq=J),并将数据包发送个Server,Client进入SYN_SENT。
(2)第二次握手:Server接受数据包通过SYN=1知道Client要建立连接请求,Server将SYN、ACK都置1,ack=J+1(Client生成的随机数),随机生成数值K,seq=K,并将数据包发送给Client,Server进入SYN_RCVD。
(3)第三次握手:Client接收到数据包,检查ack=J+1 并且 ACK=1,如果正确则标记ACK=1,ack=K+1(Server生成的随机数)并发送给Server,然后Server检查ack=K+1且ACK=1,此时Client和Server进入ESTABLISHED状态,完成三次握手。

TCP四次挥手 (Server和Client都可发起关闭,以Client为例)

  • 第一次挥手:Client发送FIN(=M)用来关闭Client到Server的数据传送,Client进入泥土FIN_WAIT状态
  • 第二次挥手:Server收到FIN后,发送ACK到Client, 确认序号+1 (ack = M+1),Server进入CLOSE_WAIT状态。
  • 第三次挥手:Server发送FIN (=N),用来关闭Server到Client的数据传送,Server 进入LAST_ACK状态。
  • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,发送ACK给Server,确认序号+1(ack = N+1),Server接收到后进入 CLOSED状态,完成四次挥手。
TCP为什么要三次握手

防止已失效链接请求 又发送到服务器而产生升错误
举例:Client发送一个链接请求在服务器滞留了,然后Client进入closed状态,此时Server认为Client想要建立链接,于是发送报文,但是Client已经Closed,收到的报文都会丢弃,如果是两次握手的话现在两者已经建立连接了,服务端一直等待Client的消息,而Client已经关闭了。

TCP为什么要四次挥手

关闭链接时,服务端收到客户端发送的FIN时,仅仅表示对方不再发送数据了,但是还能接受数据,这时候的服务端还是能继续发送数据的,而且服务端也有可能还有未发送完的数据,在这个阶段还是可以继续发送的。等完成后,服务端发送FIN给客户端表示同意关闭链接。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容