目录

对比两种写协议的不同:

1.在连接方式上

 2.在传播方式上

 3.在报文传输上

 4.在给上层提供的服务上

 5.协议首部的对比

TCP三次握手与四次挥手 

TCP三次握手

 TCP四次挥手

用户数据报协议UDP(User Datagram Protocol)、传输控制协议TCP(Transmission Control Protocol)是TCP/IP体系结构运输层中的两个重要协议。

运输层主要作用是实现端对端的连接,实现进程之间逻辑上的直接通信。

对比两种写协议的不同:

1.在连接方式上

UDP是无连接的通信方式

TCP是通过著名的**“三次握手”建立连接,“四次挥手”释放连接**。

 2.在传播方式上

UDP由于不建立连接,支持多播和广播 TCP由于每次通信需要建立基于TCP连接的可靠信道,且每次只能建立一条连接,因此只支持单播

 3.在报文传输上

UDP协议中,对于应用层传输下来的报文不进行处理,保留报文的边界。在给报文加上UDP首部,进行发送。UDP接收方首部接收到UDP数据后,去除其首部,交付给应用层。所以,UDP是针对报文为单位进行处理的,也就是UDP是面向应用报文的。

在TCP发送方:

TCP协议会把应用进程交付下来的数据块(报文)看作是一连串无结构的字节流(TCP并不知道这些子节含义),将他们编号,并存储在自己的发送缓存中,TCP再根据发送策略,提取一定量的字节,加上TCP首部,构建成TCP报文进行发送。 对于接收方,同时进行两件事: 从所接受到的TCP报文段中,取出数据载荷部分并存储在接收缓存中,同时将接收缓存中的一些字节交付给应用进程。

所以,TCP是面向字节的。

 4.在给上层提供的服务上

UDP提供的是不可靠服务: 对于发送的UDP数据报,接收方在检测到其误码后直接丢弃,不做其他操作。对于发送方发送过程中出现分组丢失,也不做处理。因此其传输数据是不一定能使接收方全部收到数据,因此是不可靠服务。

TCP提供的是可靠服务: 由于TCP字传输过程中需要建立连接,通过建立的可靠信道进行传输,因此不会出现传输差错,也就是误码、丢失、乱序、重复。因此可以保证发送端发送的数据接收端一定可以收到,是可靠传输。

 5.协议首部的对比

由于UDP不提供可靠传输的服务,因此其首部只需要在网际层的基础上添加区分端口的子节,其首部比较简单。 在TCP中,需要提供可靠传输、流量控制、拥塞控制等服务,首部比较复杂,字段比较多。

TCP三次握手与四次挥手 

TCP三次握手

        三次握手解决的问题:

使TCP双方都能确知对方的存在使TCP双方能够协商一些参数(如窗口最大值、是否使用窗口扩大选项和时间戳选项和服务质量等等)使TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配

        三次握手建立的过程:

在打算建立TCP连接时,客户端向TCP服务器进程发送TCP连接请求报文段,并进入同步已发送状态TCP服务器进程收到客户端发送的TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态TCP客户进程收到TCP连接请求确认报文段后,还要向TCP服务器进程发送一个普通的TCP确认报文段,并进入连接已连接状态

         第三次握手是否多余:

不多余,假如是两次握手。服务端接收到客户端发出的请求报文就会认为要请求建立新的连接,并且进入连接状态,但是客户端此时可能并没有发出建立连接的请求,该报文是由于某种情况迟到的请求,因此不会去向B端发送数据,服务端没有收到数据就会一直等待。这样子会造成服务端白白浪费掉很多资源。

 TCP四次挥手

四次挥手过程:

TCP客户进程会发送TCP连接释放报文段,并进入终止等待1状态TCP服务器进程会发送一个普通的TCP确认报文段并且进入关闭等待状态。期间通信进入半关闭状态,只能服务端到客户端单向发送数据。剩余数据传输完成,TCP服务器进程会发送TCP连接释放报文段并进入最后确认状态。TCP客户端针对第三次挥手的报文段发送普通的TCP确认报文段,之后进入时间等待状态。此时TCP服务器进程收到该报文段后就进入关闭状态,而TCP客户进程还要经过2MSL后才能进入关闭状态。

 等待2MSL个时间后才关闭?,是否有必要?

若客户端发送完最后一次报文后,也就是第四次挥手后就直接进入关闭状态,此时若第四次挥手报文丢失,会导致服务器的超时重传。 因为此时客户端又已经关闭,导致不接受该报文,因此服务器会一直不断重传,并一直处于最后确认状态无法进入关闭状态。所以客户端等待关闭是为了接收服务端的超时重传。

结论:TCP客户进程在发送完最后一个TCP确认报文段后,在经过2MSL时长,就可以使本次连接持续时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的TCP连接中,不会出现旧连接中的报文段。

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: