TCP与UDP协议

1.TCP协议与UDP协议的区别

共同点:同为传输层协议

不同点
TCP:有连接,可靠
UDP:无连接,不保证可靠

有连接:正式数据传输之前确保双方都能够收和发
无连接:直接传输数据,不管是否能收和发
可靠:即数据无误、数据无丢失、数据无失序、数据无重复到达的通信
不保证可靠:有可能会丢失、会出错、会失序或者重复到达

2.TCP与UDP协议适用的场合

适用场合:
Tcp适合于对传输质量要求较高,以及传输大量数据的通信,比如登录、文件的传输等。
Udp适合于对传输速度要求较高,以及小尺寸数据的通信,比如视频会议等。

3.TCP的三次握手和四次挥手

TCP连接:
三次握手:
第一次握手:客户端给服务器发送连接请求(客户端能发)
第二次握手:服务器给客户端应答同时给客户端发送连接请求(服务器能收,服务器能发)
第三次握手:客户端给服务器应答(客户端能收)
三次握手
建立连接的标号,SYN=1,seq运行的标号。ack是对应应答的内容,ACK=1是应答标号
(1)第一次握手:
客户端(Client)向服务器(Server)发送一个SYN段(在 TCP 标头中 SYN 位字段为 1 的 TCP/IP 数据包),该段中也包含一个客户端的初始序列号(Sequence number = x,seq)。
(2)第二次握手
服务器端返回一个 SYN +ACK 段(在 TCP 标头中SYN和ACK位字段都为 1 的 TCP/IP 数据包),该段中包含服务器的初始序列号(Sequence number = y)。同时使 Acknowledgment number = x + 1来表示确认已收到客户端的 SYN段(Sequence number = y)。
(3)第三次握手
客户端给服务器响应一个ACK段(在 TCP 标头中 ACK 位字段为 1 的 TCP/IP 数据包)(SYN已变为0), 该段中使 Acknowledgment number = y+ 1来表示确认已收到服务器的 SYN段(Sequence number = y),自己的序列号则是变成seq=x+1。

TCP连接断开:
四次挥手:
第一次挥手:客户端向服务器发送断开连接请求(客户端不发了)
第二次挥手:服务器应答(服务器不收了)
第三次挥手:服务器向客户端发送断开连接请求(服务器不发了)
第四次挥手:客户端应答(客户端不收了)
四次挥手
FIN=1断开连接的请求,seq运行编号,
(1)第一次挥手:
客户端打算断开连接,向服务器发送FIN报文(FIN标记位被设置为1,1表示为FIN,0表示不是),FIN报文中会指定一个序列号,之后客户端进入FIN_WAIT_1状态。
也就是客户端发出连接释放报文段(FIN报文),指定序列号seq = u,主动关闭TCP连接,等待服务器的确认。
(2)第二次挥手:
服务器收到连接释放报文段(FIN报文)后,就向客户端发送ACK应答报文,以客户端的FIN报文的序列号 seq+1 作为ACK应答报文段的确认序列号ack = seq+1 = u + 1。
接着服务器进入CLOSE_WAIT(等待关闭)状态,此时的TCP处于半关闭状态(下面会说什么是半关闭状态),客户端到服务器的连接释放。客户端收到来自服务器的ACK应答报文段后,进入FIN_WAIT_2状态。
(3)第三次握手:
服务器也打算断开连接,向客户端发送连接释放(FIN)报文段,之后服务器进入LASK_ACK(最后确认)状态,等待客户端的确认。
服务器的连接释放(FIN)报文段的FIN=1,ACK=1,序列号seq=m,确认序列号ack=u+1。
(4)第四次握手:
客户端收到来自服务器的连接释放(FIN)报文段后,会向服务器发送一个ACK应答报文段,以连接释放(FIN)报文段的确认序号 ack 作为ACK应答报文段的序列号 seq,以连接释放(FIN)报文段的序列号 seq+1作为确认序号ack。
之后客户端进入TIME_WAIT(时间等待)状态,服务器收到ACK应答报文段后,服务器就进入CLOSE(关闭)状态,到此服务器的连接已经完成关闭。
客户端处于TIME_WAIT状态时,此时的TCP还未释放掉,需要等待2MSL后,客户端才进入CLOSE状态。

4.为什么要三次握手、四次挥手?

4.1为什么要三次握手?

“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”
客户端发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达服务器。本来这是一个早已失效的报文段。但服务器收到此失效的连接请求报文段后,就误认为是客户端再次发出的一个新的连接请求。于是就向客户端发出确认报文段,同意建立连接。
假设不采用“三次握手”,那么只要服务器发出确认,新的连接就建立了。由于现在客户端并没有发出建立连接的请求,因此不会理睬服务器的确认,也不会向服务器发送数据。但服务器却以为新的运输连接已经建立,并一直等待客户端发来数据。这样,服务器的很多资源就白白浪费掉了。

4.2为什么要四次挥手?

第二次挥手与第三次挥手没有一起做的区别:因为客户端发的信息或许还没传送完,所以说服务器先将发的功能关闭,等到把所有消息接收完成,把接收信息的功能关闭。
是为了保证连接的可靠传输,防止未传输完成而导致字节丢失。
TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。
首先客户端发送fin给服务器端,告诉自己没有数据要传送了,服务器端收到后发送对应的ack报文段给客户端,告诉他我知道了,不过这次服务器端还可以向客户端传送数据,当服务器端没有要传送的数据后就发送fin给客户端,客户端收到后发送对应ack给服务武器端,告诉他我知道了,然后双方断开链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值