首页 > 编程知识 正文

tcp三次握手四次挥手(tcp和udp的异同点)

时间:2023-05-04 02:25:39 阅读:87784 作者:4574

一、分别解释

传输控制协议(TCP )以连接为导向提供可靠的字节流服务;

用户数据报协议(UDP )是一种简单的面向数据报的传输层协议;

1.1相同点

UDP协议和TCP协议都是传输层协议。

1.2不同点

1 )标题不同

2 )特征不同

3 )协议不同

小结TCP与UDP的区别:

1、不通过TCP连接与UDP连接;

2、对系统资源的要求(TCP多、UDP少);

3、UDP程序结构简单;

4、TCP协议流量模式和UDP协议数据报模式;

5、TCP保证数据的正确性,UDP有丢包的可能性;

6、TCP保证数据的顺序,UDP不保证。

二、详解

更新

标头

图1 UDP标题

UDP数据报的最大长度为64K,包括UDP报头。 如果数据长度超过64K,则需要在APP应用层手动分包。 UDP不能保证数据包的顺序,需要在APP应用层进行编号。

特长

1 )由于UDP没有连接,即不需要在通信时创建连接(在数据传输结束时也可以解除连接),所以开销和数据传输之前的等待时间变小。

2 )由于UDP要尽最大努力交货,不能保证可靠的交货,所以主机不需要维持复杂的连接状态;

3 ) UDP以消息为导向,只需在从APP应用层传递的消息之前添加报头即可将其下载到IP层;

4 ) UDP是非阻塞控制,即使网络有拥塞也不会影响发送侧的发送频率

5 ) UDP支持一对一、一对多、多对一、多对多的相互通信

6 ) UDP的开头开销小至8字节,比TCP的20字节的开头短。

协议

NFS:网络文件系统TFTP:简易文件传输协议DHCP:动态主机配置协议BOOTP:启动协议(用于无盘设备启动) DNS:域名解析协议

国际电信联盟

标头

图2 TCP标题

(如果能理解以下说明就好了,但请不要作为重点回答)

源/目标端口号:表示数据来自哪个进程,要去哪个进程。

32位编号/32位确认编号:不一定从0开始(作用:保证确认响应; 消除保证数据按顺序到达的重量;

4位的TCP报头长度:表示在其TCP报头中有多少32位的位(有多少4字节),所以TCP报头的最大长度为15 * 4=60字节

6位标志位:

1. URG:非常指针是否有效;

2. ACK:确认号码是否有效;

3. PSH:敦促接收方APP应用立即从TCP缓冲器读取数据;

4. RST:对方请求重新建立连接; 带有RST标记的被称为复位信息块;

5、请求建立5. SYN:连接; 我们把有SYN标记的称为同步信息段;

6. FIN:通知对方,本终端关闭。 我们把拥有FIN标记称为结束信息段;

16位窗口大小:接收缓冲区的可用空间

16比特校验和:如果发送侧填充、CRC校验和接收侧校验失败,则可能是数据有问题。 这里的检查和不仅包括TCP报头,还包括TCP数据部分;

16比特紧急指针:识别哪个部分的数据是紧急数据;

特长

基于连接性、可靠性和字节流的传输层通信协议

1 )面向连接:使用TCP协议进行通信的双方必须在开始读取和写入数据之前建立连接。 TCP连接是全双工的。 也就是说,双方的数据读写可以通过一个连接进行。 数据交换完成后,通信双方必须断开连接以释放资源。 由于这样的TCP协议是一对一的连接,因此在基于广播和多播(目标为多个主机地址)的APP应用中无法使用TCP服务。 无连接协议的UDP非常适合广播和组播。

TCP建立连接时握手3次,切断时挥手4次

d220d2bb2c1495c900d2c2982179358?from=pc">

三次握手过程理解

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

四次挥手过程理解

1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。 2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。 3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。 4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。 5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。 6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了 这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

2)可靠性:tcp协议通过下列方式来提高可靠性:

1、应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。由TCP传递给I P的信息单位称为报文段或段

2、当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

3、当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。

4、TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。

5、既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。

6、既然I P数据报会发生重复,TCP的接收端必须丢弃重复的数据。

7、TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲

区溢出。

3)字节流:两个应用程序通过TCP连接交换8 bit字节构成的字节流。

另外,TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCII字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。

协议

HTTPHTTPSSSHTelnetFTPSMTP

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

【问题2】如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。