【计算机网络学习】之TCP和UDP比较

IP数据报格式:

【计算机网络学习】之TCP和UDP比较_第1张图片

IP数据报是对传输层的分组,在ip层需要分组和重组。首部包含以下信息:ip协议的版本,首部的长度,总长度,上一层的服务类型,标识(同一片标识相同),然后用片偏移来重组,首部校验和,判断首部有没有错误。


UDP

udp并不提供可靠服务,无连接。首部简单,只有8个字节,对于上层报文不分片。


TCP

提供面向连接的方式,三次握手,四次挥手,保证数据的正确性有序性。首部较为复杂,会对上层的报文进行分片。

【计算机网络学习】之TCP和UDP比较_第2张图片

首部包含以下信息:源端口和目的端口。数据偏移,即在此报文段中数据是从哪里开始的。同时还要此报文段第一个数据的序号,确认号,希望收到的下一个字节的序号。还有一些标志位ACK,FIN等。


三次握手简介:

【计算机网络学习】之TCP和UDP比较_第3张图片

A首先向B发出连接请求报文段,SYN=1,同时选择一个初始序号seq=x.

B收到连接请求报文后,如同意建立连接则向A发送确认。携带如图中的字段。

A要给B发送确认。



三次挥手简介:

【计算机网络学习】之TCP和UDP比较_第4张图片

1.数据传输结束后,通信双方都可释放连接。现在A,B都处于ESTABLISHED状态。A先发送连接释放报文段,并停止在发送数据,主动关闭TCP连接。A把连接释放报文段首部离得FIN1,其序号seq=uu等于前面已发送的数据的最后一个字节的序号加1.这是A进入FIN-WAIT-1(终止等待1)状态,等待B的确认。TCP规定,FIN报文段即使不携带数据,也消耗一个序号。

       2.B收到连接释放报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,等于B前面已发送的数据的最后一个字节的序号加1.然后B进入CLOSE-WAIT(关闭等待)状态。至此A->B的连接就释放了,这时TCP连接处于半关闭(half-close)状态,即A已经没有数据要发送了,但B若发送数据,A仍然接收。

        3.A收到B的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。若B已经没有数据要发给A,其应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使FIN=1.假定B的序号是w(在半关闭状态B可能又发送了一些数据)。B还必须从夫上次已发送过的确认号ack=u+1。这时B进入LAST-ACK状态,等待A确认。

        4.A在收到B的连接释放报文段后,必须对此发出确认。在确认报文段中把ACK1,确认号ack=w+1,自己的序号为seq=u+1(前面发送的FIN报文段要消耗一个序号)。然后进入TIME-WAIT(时间等待)状态。现在TCP连接还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入到CLOSED状态。(MSLMaximum Segment Lifetime 最长报文段寿命)。

为什么在TIME-WAIT要等待呢?

     1.为了保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段可能丢失,因而使处在LAST-ACK状态的B收不到确认。B会超时重传FIN+ACK报文段,A就能在2MSL时间内收到这个重传的FIN+ACK报文段,接着A重传一次确认,重启计时器。最好,AB都正常进入到CLOSED状态。如果ATIME-WAIT状态不等待一段时间,而是再犯送完ACK报文后立即释放连接,那么就无法收到B重传的FIN+ACK报文段,因而也不会在发送一次确认报文。这样,B就无法按照正常步骤进入CLOSED状态。

     2.防止 已失效的连接请求报文出现在本连接中。


TCP和UDP的区别:

1TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

 

2TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5TCP首部开销20字节;UDP的首部开销小,只有8个字节

6TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道



你可能感兴趣的:(【计算机网络学习】之TCP和UDP比较)