TCP协议
拓展:
FTP:(File Transfer Protocol) 文件传输协议
FIle 协议:访问本地文件
Webscoket:网络通信协议;主动给客户端发送协议
FTP:文件传输协议
① 重点:
面试重点:TCP、UDP协议区别
UDP (User Datagram Protocol)是一种在计算机网络中广泛使用的传输层协议。一般用于游戏。
特点:不可靠、无连接的数据服务。通俗讲:会主动给客户端发送协议。
TCP协议:可靠性,有连接。应用于要求较高的应用场景,如网页浏览、文件传输、电子邮件等。
提供了可靠的数据传输和流控制机制,能够确保数据的完整性和有序性。
由于TCP协议在传输过程中引入了较多的控制信息,因此相比于UDP协议,TCP的传输速度较慢。
UDP和TCP区别:
TCP提供面向连接的传输,通信前要建立连接(三次握手机制); | UDP提供无连接的传输,通信前不需要建立连接; |
TCP提供可靠的传输(有序,无差错,不丢失,不重复); | UDP提供不可靠的传输; |
TCP提供拥塞控制和流量控制机制; | UDP不提供拥塞控制和流量机制; |
TCP面向字节流的传输,因此能将信息分割成组,并在接收端将其重组; | UDP是面向数据报的传输,没有分组开销; |
拥塞控制:对资源的需求超过可用的资源。若网络中的许多资源同时供应不足,网络的性能就会明显变坏,网络的吞吐量随负荷的增大而下降。
解决拥塞控制:慢启动、拥塞控制、快速重传、快速恢复。
流量控制:一般来说,就是希望数据传输的更快。但发送方的数据发送的很快,而接收端来不及接收,就会造成数据的丢失。
流量控制就是让发送方的发送速率不要太快,让接收方来不及接受。
② TCP三次握手,四次挥手
三次握手:
TCP协议中,主动发起请求的一端称为『客户端』,被动连接的一端称为『服务端』。
不管是客户端还是服务端,TCP连接建立完后都能发送和接收数据。
刚开始的时候,服务器和客户端都为CLOSED状态。在通信开始前,双方都得创建各自的传输控制块(TCB)。
服务器创建完TCB后进入LISTEN状态,此时准备接收客户端发来的连接请求。
大白话情景演绎:我 VS 在看的你(帅哥/美女)
我:在吗?下午去吃烧烤...
你:好,有空!
我:下午告诉通知地点...
此时都约定好下午吃烧烤, 你 等待接收。
第一次握手:
客户端向服务端发送连接请求报文段。该报文段的头部中同步SYN=1,确认ACK=0,同时选择一个初始序号seq=x。请求发送后,客户端便进入SYN-SENT状态。
-
-
SYN=1,ACK=0表示该报文段为连接请求报文
-
x为本次TCP通信的字节流的初始序号
-
TCP规定:SYN=1的报文段不能有数据部分,但要消耗掉一个序号
-
第二次握手:
服务端收到连接请求报文段后,如果同意连接,会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1。发送完应答后服务端进入SYN-RCVD状态。
-
-
SYN=1,ACK=1表示该报文段为连接同意的应答报文
-
seq=y表示服务端作为发送者时,发送字节流中的第一个字节序号
-
ack=x+1表示服务端希望客户端发送的下一个数据报初始序号是从x+1开始
-
第三次握手:
客户端收到服务端连接同意的应答后,会向服务端发送一个确认报文段;表示:服务端发来的连接同意应答已经成功收到。该报文段的头部为:ACK=1,seq=x+1,ack=y+1。
客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成!
为什么不可以是两次或者四次呢?
用我的大白话讲讲。当两次握手时,服务端不知道客户端要与建立连接,而客户端一直在等待,会造成资源空耗。
若四次握手,三次握手通信正常,刚好建立连接,超过四次就会造成浪费。
四次挥手:保证数据传输完毕。
第一次挥手:
客户端数据发送完成,向服务端发送连接释放请求。该请求只有报文头,头中携带的主要参数为:FIN=1,seq=u。此时,客户端将进入FIN-WAIT-1状态。
TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
-
-
FIN=1表示该报文段是一个连接释放请求。
-
seq=u,u-1是客户端向服务端发送的最后一个字节的序号。
-
第二次挥手:
服务器收到客户端连接释放报文,通知相应的高层应用进程,告诉它客户端向服务器这个方向的连接已经释放了。
此时服务端进入了CLOSE-WAIT(关闭等待)状态,并向客户端发出连接释放的应答,其报文头包含:ACK=1,ack=u+1,并且带上自己的序列号seq=v。
客户端收到该应答后,进入FIN-WAIT-2状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
-
-
ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答。
-
seq=v,v是服务端释放应答报文段第一个字节序号。
-
ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节。
-
第三次挥手:
服务端将最后的数据发送完毕后,就向客户端发送连接释放报文,其报文头包含:FIN=1,ack=u+1,由于在CLOS-WAIT状态,服务端很可能又发送了一些数据,假定此时的序列号为seq=w。
此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
第四次挥手:
客户端收到服务器的连接释放报文后,向服务端发出确认应答,报文头:ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。
该状态会持续2MSL(最长报文段寿命)时间,这个期间TCP连接还未释放,若该时间段内没有服务端的重发请求的话,客户端就进入CLOSED状态,撤销TCB。服务端会比客户端结束的早。
【注意】页面响应不能超过三秒且不可超过三次。
大白话情景演绎:在看的 帅哥 VS 美女 此时,吃完烧烤在看电影....
美女:分手吧!你太直男了...
帅哥:分就分...
此时,电影还未结束.../电影已结束...
帅哥:看完电影再分吧!/再见!下一个会更好...
美女:那就看完再分!/魂淡...
等待2MLS:客户端发送ACK,用于判断服务器是否正常关闭。
若在2MSL后,没有接到来自服务器的返回,则认为服务器正常关闭,客户端关闭;(2MSL的MSL有30秒,1分钟,2分钟)。
标签:协议,UDP,报文,TCP,发送,连接,服务端,客户端 From: https://www.cnblogs.com/warmNest-llb/p/17900942.html