网络编程——TCP与UDP的区别,TCP的连接过程

TCP/IP协议模型位于传输层,只要有TCP,UDP协议组成

TCP:面向连接的,可靠的,字节流服务,TCP服务器必须给每个连接分配资源

UDP:无连接,不可靠的,数据报服务,UDP不需要给每个连接分配资源

面向连接

面向连接:在真正通讯之前,必须先建立一条通讯线路,必须先完成连接

TCP完成连接的过程:

    建立连接:三次握手

    断开连接:四次挥手

(这里借鉴谢希仁第五版计算机网络5.9.1)

三次握手

为什么不是两次握手

   为什么A还要再发送一次确认呢?这主要是为了防止已失效的连接请求报文段突然有传送到了B,因而产生错误。

   所谓“已失效的连接请求报文段”是这样产生的,考虑一种正常的情况,A发出连接请求,但因连接请求报文丢失未收到确定。于是A在重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接。A共发送了两个请求报文段,其中第一个丢失,第二个到达了B。没有“已失效的连接请求报文段”。

   先假定出现一种异常情况,即A发出的第一个连接请求并没有丢失,而是在某个网络节点滞留了,以致延误到连接释放以后的某个时间才达到B。本来这是一个早已失效的报文段。但是B收到此失效的连接请求报文段后,误认为是A重新又发出了一次新的连接请求,于是就像A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确定,新的连接就建立了。

   由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发出新的数据。但B确认为新的连接运输连接已经建立了,并一直等待A发来数据。B的许多资源就白白浪费了。

   采用三次握手的办法可以防止上述现象的发生。例如在刚刚的情况下,A不会向B的确认发出确定。B由于收不到确认,就知道A并没有要求建立连接。

四次挥手

字节流   &   数据报

那么,什么是字节流,发送端发送的次数,与接收端接受的次数没有关系,接收端接受数据时,不会截断数据,丢弃部分数据

什么是数据报,数据报就是发送和接受次数是相等的,接收端一次未把UDP报文段中的数据读取完成,则剩下的数据被丢弃

可靠性

TCP可靠性

1.数据必须能够到达对端                     超时重传    &    确认机制

2.报文段不重复、不乱序                     32位的序号

3.数据不失真                                       TCP报头      16位的冗余校验码(TCP头部&数据)

4.拥塞控制和滑动窗口                         保证数据传输中的最小的丢包率

猜你喜欢

转载自blog.csdn.net/weixin_42736024/article/details/84581362