TCP与GDP的区别,TCP的3次握手和4次挥手

1 篇文章 0 订阅
0 篇文章 0 订阅

UDP

发送方 UDP对应用程序交下来的报文,在添加首部后就向下交付 IP层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。应用层交给 UDP多长的报文,UDP就照样发送,即一次发送一个报文。接收方 UDP对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。

应用程序必须选择合适大小的报文。

tcp与udp的区别

1.面向连接     TCP面向连接,udp是无连接的,即发送数据之前是不需要建立连接的         

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

3.传输方式     TCP面向字节流,实际是TCP把数据看成一连串无结构的字节流,UDP是面向报文的,UDP没有拥塞控制。

4.连接关系     TCP连接是点对点的,UDP支持一对一,一对多,多对一,多对多的交互通信。

5.首部占用空间     TCP首部开销20字节,UDP8个字节。

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

7.应用场景      TCP适用于少量数据,UDP适用于大量数据。

信道传输:

1.单工  只能一个方向传输

2.半双工   可以双向,但是在某一时间内只能单向传输

3.全双工   可以随时双向传输

 

为什么UDP比TCP快

因为TCP中连接需要三次握手,断开连接需要四次握手,传输过程中还有拥塞控制,控制流量等机制。

为什么TCP比UDP可靠

TCP是面向有连接的,建立连接之后才发送数据;而UDP则不管对方存不存在都会发送数据。
TCP有确认机制,接收端每收到一个正确包都会回应给发送端。超时或者数据包不完整的话发送端会重传。UDP没有。因此可能丢包。


什么时候使用TCP

当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

例如日常生活中使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输

什么时候使用UDP

当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。

比如日常生活中使用UDP协议的应用如下: QQ语音 QQ视频 TFTP

TCP无边界,UDP有边界

TCP无边界:客户端分多次发送数据给服务器,若服务器的缓冲区够大,那么服务器端会在客户端发送完之后一次性接收过来,所以是无边界的。

UDP有边界:客户端每发送一次,服务器端就会接收一次,也就是说发送多少次就会接收多少次,因此是有边界的

 

TCP三次握手以及四次挥手用到的字段
 1、序列号seq
  占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生,给字节编上序号后,就给每一个报文段指派一个序号,序列号seq就是这个报文段中的第一个字节的数据编号。
  2、确认号ack
  占4个字节,期待收到对方下一个报文段的第一个数据字节的序号,序列号表示报文段携带数据的第一个字节的编号,而确认号指的是期望接受到下一个字节的编号,因此当前报文段最后一个字节的编号+1即是确认号。
 3、确认ACK
  占1个比特位,仅当ACK=1,确认号字段才有效。ACK=0,确认号无效。
 4、同步SYN
  连接建立时用于同步序号。当SYN=1,ACK=0表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使用SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接收报文,SYN这个标志位只有在TCP建立连接才会被置为1,握手完成后SYN标志位被置为0。
  5、终止FIN
  用来释放一个连接。

 

三次握手   ( 这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。)

第一次握手:Client将标志位置为1,随机产生一个seq=J,并将改数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

第二次握手:Server收到数据包后将标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个seq=K,并将数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确将标志位ACK置为1,ack=K+1,并将数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client和Server之间可以进行传输数据。

image

四次挥手

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态

第二次挥手:Server收到FIN后,发送一个ACK到Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。image

数据拥塞

在某段时间,如果对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要发生变化,这种情况叫数据拥塞

拥塞控制:防止过多的数据注入到网络当中,这样可以使网络中的路由器或链路不致过载。(通过拥塞窗口处理网络拥塞现象的一种机制)

        a.前提:网络能够承受现有的网络负荷。

        b.拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低1网络传输性能有关的所有因素。

        c.与流量控制的区别:流量控制往往是指点对点通信量的控制,是个端到端的问题。流量控制所要做的就是控制发送端发送数据的速率,以便使接收端来得及接收。

        d.代价:需要获得网络内部流量分布的信息。在实施拥塞控制之前,还需要在结点之间交换信息和各种命令,以便选择控制的策略和实施控制。这样就产生了额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用,使得网络资源能更好的实现共享。

3.拥塞控制的几种方法

慢开始    

当主机开始发送数据时,如果立即将大量数据字节注入到网络,那么就有可能因为不清楚当前网络的负荷情况而引起网络阻塞。所以,最好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚发送报文段时,先把拥塞窗口cwnd设置为一个最大报文段MSS的数值。而在每收到一个新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。(慢开始当中的“慢”并不是指cwnd的增长速率慢,而是在TCP开始发送报文段时先设置cwnd = 1,使得发送方在开始时只发送一一个报文段)

当rwnd足够大的时候,为了防止拥塞窗口cwnd的增长引起网络阻塞,还需要另外一个变量------慢开始门限ssthresh.

   1.当cwnd < ssthresh时,使用上述慢启动算法;

   2.当cwnd >ssthresh时,停止使用慢启动算法,改用拥塞避免算法;

局限性

    1.需要获得网络内部流量分布的信息,浪费可用的网络容量,额外开销;

    2.估算合理的ssthresh值并不容易,可能耗时较长; 

拥塞避免   

1.算法思路:让拥塞窗口cwnd缓慢的增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口cwnd按线性规律缓慢的增长,比慢开始算法的拥塞窗口增长速率缓慢的多

无论是慢启动算法还是拥塞避免算法,只要判断网络出现拥塞,就要把慢启动开始门限(ssthresh)设置为发送窗口的一半(>=2),cwnd设置为1,然后再使用慢启动算法,这样做的目的能迅速的减少网络当中的数据传输,使发生拥塞的路由器能够把队列中堆积的分组处理完毕。拥塞窗口是按照线性的规律增长

2.控制过程:

(1)TCP连接初始化,将拥塞窗口cwnd设置为1个报文段,即cwnd = 1;

(2)执行慢开始算法,cwnd按指数规律增长,知道cwnd == ssthresh时,开始执行拥塞避免算法,cwnd开始按照线性规律增长;

(3)当网络发生拥塞,把ssthresh值更新为拥塞前ssthresh值的一半,cwnd重新设置为1,再按照2执行;

    

快重传        

一条TCP连接有时会因为等待重传计时的超时而空闲较长时间,慢开始和拥塞避免无法解决这类问题,因此提出了快重传和快恢复的拥塞控制方法。快重传算法要求首先接收方收到一个失序的报文段后立刻发出重复确认,而不要等待自己发送数据时才进行捎带确认。

快恢复  

1.当发送方连续收到三个重复确认时,执行“乘法减小”算法,慢启动门限减半,为了预防网络发生阻塞

2.由于发送方现在认为网络很可能没有发生阻塞,因此现在不执行慢启动算法,而是把cwnd值设置为慢启动门限减半后的值,然后开始执行拥塞避免算法,拥塞窗口cwnd值线性增大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值