TCP的三次握手,四次挥手

1.1 网络编程概述

  • 计算机网络

    是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统

  • 网络编程

    在网络通信协议下,不同计算机上运行的程序,可以进行数据传输

1.2 网络编程三要素

  • IP地址

    要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号。也就是设备的标识

  • 端口

    网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程序,那么在网络通信时,如何区分这些应用程序呢?如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的应用程序了。也就是应用程序的标识

  • 协议

    通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。常见的协议有UDP协议和TCP协议

协议

TCP协议

TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。

TCP连接要解决的问题:
  • 通信双方知道对方的存在;

  • 要允许双方协商一些参数,如最大窗口值;

  • 能够对运输实体资源进行分配,如缓存大小;

三次握手(建立连接)

  • TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠

    第一次握手,客户端向服务器端发出连接请求,等待服务器确认

    第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求

    第三次握手,客户端再次向服务器端发送确认信息,确认连接

  • 完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛。例如上传文件、下载文件、浏览网页等

注意:其中SYN = 1表示是建立连接的标志,服务器端SYN = 1, ACK = 1表示确认收到请求,seq为随机生成的序号,用来标识从TCP源端向目的端发送的字节流。TCP规定SYN=1的报文段不携带数据,但仍要消耗一个序列号,故下次请求时客户端发送请求时seq要比上一次+1(服务器端亦同理);TCP规定如果普通报文段不携带数据,则不消耗序号。ACK用于确认收到了请求,ack = seq + 1表示接收到了对方的数据。

在建立连接前双方都属于关闭状态,没有连接关系。客户端主动打开并发送请求,同时服务器端打开监听状态,监听请求。

四次挥手(释放连接)

  • 客户端传输完毕需要断开连接,客户端向服务器发送连接释放报文段(FIN = 1,序号seq = u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1状态,等待服务端的确认。

  • 服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE-WAIT关闭等待状态,此时的TCP处于半关闭状态,客户端到服务器的连接释放。而客户端收到服务器的确认后,进入FIN-WAIT-2状态,等待服务器发出的连接释放报文段

  • 当服务器数据传输完毕后,服务器发出连接释放报文段(FIN = 1,ACK = 1,序号seq = w,确认号ack=u+1),服务器进入LAST-ACK(最后确认)状态,等待客户端的最后确认

  • 客户端收到服务器的连接释放报文段后,对此发出确认报文段(ACK = 1,seq=u+1,ack=w+1),客户端进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSE状态

    FIN=1表示释放连接请求

1.为什么建立连接需要三次握手?二次握手不行吗?

答:二次握手不行。如果客户端发送一个建立连接请求(第一个请求)给服务器,但是这个请求在网络中滞留很久,此时又引发了该报文段的超时重传(第二个请求),假设这个超时重传的报文段(第二个请求)被服务器正常的接收了,服务器给客户端发送一个连接确认报文段,进入连接已建立状态,客户端收到后,也进入连接已建立状态,然后TCP连接建立完毕,可数据传输,然后释放连接,双方都关闭连接。之后,在网络中滞留的建立连接请求(第一个请求)又到了服务器,服务器以为是客户端重新向其请求建立连接,服务器又进入连接已建立状态,又给客户端发确认报文,但是客户端不予理睬,但服务器会等待客户端发送数据,这就浪费了服务器占主机的资源。

总之,采用三次握手,而不是二次握手,是为了防止已经失效的连接请求报文段又传送到了服务器端,因而导致错误。

2.为什么客户端发送最后一个确认报文段后,还要等待2MSL才进入关闭状态?

答:服务器向客户端发送连接释放报文段后进入最后确认状态,客户端收到后,向服务器发送普通的确认报文段,并进入关闭状态。然而,该确认报文段丢失了,服务器没收到,会导致服务器对连接释放报文段进行超时重传,但重传的报文段是到达已经关闭的客户端,无法接收,所以服务器会一直重传,并处于最后确认状态,无法关闭。 参考:【计算机网络】TCP建立连接、释放连接的三次握手和四次挥手_建立连接三个阶段-CSDN博客

UDP协议

  • 用户数据报协议(User Datagram Protocol)

  • UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。

  • 由于使用UDP协议消耗系统资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输

  • 例如视频会议通常采用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议

UDP三种通讯方式

  • 单播

    单播用于两个主机之间的端对端通信

  • 组播

    组播用于对一组特定的主机进行通信

  • 广播

    广播用于一个主机对整个局域网上所有主机上的数据通信

UDP和TCP的对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值