1、TCP:传输控制协议。面向连接的、可靠的、点到点的通信;
2、UDP:用户数据报协议。面向非连接的、不可靠的、点到多点的通信;
3、TCP 三次握手,四次挥手?
264052-f39112b5385c35ee.jpg三次握手:
(1)Client 端首先发送一个 SYN 包,告诉 Server 端我的初始序列号是 X;Client 端进入了 SYN-SENT(同步已发送状态)状态。
(2)Server 端收到 SYN 包后回复给 Client 一个 ACK 确认包,告诉 Client 说我收到了;Server 端进入了SYN-RCVD(同步收到)状态。接着 Server 端也需要告诉 Client 端自己的初始序列号,于是 Server 也发送一个 SYN 包告诉 Client 我的初始序列号是Y;
(3)Client 端收到后,回复 Server 一个 ACK 确认包说我知道了。之后 Client 和 Server 进入ESTABLISHED(已建立连接)状态。
四次挥手:eg:主动关闭方是客户端,被动关闭方是服务端
(1)客户端向服务端发起关闭链接,并停止发送数据;
(2)服务端收到关闭链接的请求时,向客户端发送回应,我知道了,然后停止接收数据;
(3)当服务端发送数据结束之后,向客户端发起关闭链接,并停止发送数据;
(4)客户端收到关闭链接的请求时,向服务端发送回应,我知道了,然后停止接收数据;
为什么要三次握手:
为了防止已失效的链接请求报文段突然又传送到了服务器,因而产生错误。假设这是一个早已失效的报文段,但服务端收到此失效的连接请求报文段后,就误认为客户端再次发出的一个新的连接请求,于是就向客服端发送了一个确认报文段,同意建立连接。假设不采用”三次握手“,那么只要服务端发出确认,新的连接就建立了。由于现在客户端并没有发出建立连接的请求,因此不会理会服务端的确认,也不会向服务端发送数据。但是服务端却以为新的运输连接已经建立,并一直等待客户端发来数据,这样服务端的很多资源就白白浪费掉了。
如果采用的是”三次握手“,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。
为什么要四次挥手,能不能变成三次挥手呢?
因为TCP是全双工通信的,在收到客户端的关闭请求时,还可能在向客户端发送着数据,因此不能在回应关闭链接的请求时,同时发送关闭链接的请求。
网友评论