TCP协议与UDP协议

1.TCP协议

(1)TCP协议首部格式,三次握手,四次挥手,详情请见文章《当我们使用浏览器访问一个网页时,服务器与我们的主机内部,发生了什么?》第四部分扩展知识篇。

(2)连接管理

                在数据传输开始前,发送方会发送SYN,请求确认连接,如果服务器端未确认,则不可以进行数据通信,直接断开连接。当数据传输完成后,发送方会发送FIN请求终止连接。

(3)确认应答

                在TCP协议中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知,这个消息叫做确认应答(ACK)。TCP通过肯定的确认应答(ACK)实现可靠的数据传输。当发送端将数据发出去之后会等待接收端的确认应答。如果有确认应答,说明数据已经成功到达接收端。反之,则数据丢失的可能性很大。

(4)重传机制

       重传 超时

                再次发送数据包之前,等待确认应答的特定的时间间隔,如果超过特定时间间隔,未收到回复,则会再次发送数据包,等待确认应答。如果第二次也不应答,则下次发送时间呈指数倍上涨,如果多次重发都没有回复,则强制关闭连接。

 一般的Linux与Windows系统设置的超时时间间隔为6s(一般都是0.5s的整数倍)左右。       

 

        超时重传

                 重传机制中的一种,如果超过了超过了超时时间间隔并且无应答,或者数据包丢失,则会进行数据包重发。

 

        快速重传

                当收到三个相同的ACK报文时,会在重传超时过期之前,重传丢失的报文段。

                存在的问题:当触发重传机制时,是重传所有数据,还是重传之前的那个?

 

        SACK方法

                为了解决快速重传出现的问题,出现了SACK(Selective Acknowledgment  选择性确认)方法。

                工作机制:在TCP报文中的首部选项中,添加SACK。SACK缓存了所有了数据地图。当快速重传发生时,就可以清晰的知道哪些是应该重新发送的了。

(5)滑动窗口

                在TCP首部格式中的窗口,表示了接收方一次能接受多少来自发送发的数据包,是接受方系统专门开辟出来的一块缓存空间,保证了数据传输效率。

                为了避免在数据传输过程中,由于数据包往返时间过长,而导致的传输效率太低。TCP协议引进了窗口的概念。发送方主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据。如果按期收到确认应答,此时数据就可以从缓存区清除。即使在往返时间较长的情况下,它也不会降低网络通信的效率。

TCP协议通过滑动窗口解决了流量控制乱序重排

f2b2a55f1d29bba3c55d8c5f9974fcd5.jpeg

(6)流量控制

        TCP协议通过滑动窗口来进行流量控制,流量控制是为了控制发送方的发送速率。如果TCP首部的窗口设置为零,则代表接收方没有内存空间用于数据接受。

(7)拥塞控制

        拥塞控制主要是为了避免网络中出现大量的数据,从而导致路由器或链路过载。

        流量控制主要是为了让接收方能来得及接受。

        而拥塞控制主要是为了降低整个网络的拥塞程度。

 

        拥塞控制的四个算法:

        发送方需要维护一个叫cwnd()的状态变量。

        1.慢开始

                在数据第一次传输开始时,不会发送大量的数据,首先会让cwnd=1,确保网络通畅的情况下,才会在下次发送数据时,让cwnd=2,之后的每次发送,都会比上一次多一倍。

fef16235616b453aa6d79affeecbd760.png

 

        2.拥塞避免

                当慢开始进行时,每轮次都是上一轮的两倍,如果一直进行下去,之后的每次发送的数据量过于巨大,就必然会产生网络拥塞,为了避免其出现。我们定义了一个慢开始门限ssthreshcwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd加 1。如果出现了超时,则令 ssthresh = cwnd / 2,然后开始执行快恢复。

        3.快重传

                当发送发连续三次出现 来自接收方的确认,就会立即重传对方尚未收到的报文段。

ff31cd37cd0347989f44bad15931fb1b.png

 

        4.快恢复

                当快重传生效后,数据传输不会执行慢开始,而是会让ssthread = 当前CWND / 2 ,并让cwnd = ssthread,然后直接执行拥塞避免算法,每次传输数据,都在上次的cwnd基础上+1.

281efe6394af48148ff7aa6026289682.png

 

(8)TCP协议如何保证传输可靠性

  • 校验和:端对端的确认,如果在传输过程中,双方收到的检验和有任何差错,TCP就会拒绝确认此报文段。
  • 序列号:TCP将传输的每个字节都进行了编号,用于确认应答。
  • 超时重发:当第一次发送的数据包超过规定时间,没有得到回复,就会启动超时重发(重新·发送)。
  •  ACK:确认应答,只有ACK=1,发送方才会认为接收方收到数据。
  • 连接管理:TCP提供面向对象的连接管理,在发送数据之前,有确认的流程。
  • 流量控制:TCP使用的流量控制协议,就是滑动窗口协议,一方面控制数据传输流量,另一方面可以防止包丢失。
  • 窗口管理:TCP通过设置窗口的大小值,通过配合“滑动窗口”,实行并发机制。确保传输效率。
  • ARQ协议:分组发送,当确认发送后,在进行下一个组的发送。

 

2.UDP协议

        User Datagram tocal(用户数据协议),提供面向无连接的通信服务.在它收到应用程序发来的数据后,原封不动的发到网上。使用时需要充分考虑好上层协议,并制作相应的应用程序。

(1)UDP协议的场景

  1. 包含总量较少的通信(SMTP DNS等)。
  2. 视频,音频等多媒体通信(及时通信)。
  3. 广播通信。

(2)UDP协议的特点:

  • 面向报文传输,不保证交付,不堵塞,适合多媒体通信。
  • 支持一对一,一对多,多对一,多对多的交互通信。
  • UDP的首部只有8个字节。

(3)UDP协议的首部格式

 由数据字段与报文首部组成。 

e58f3b84f7ef753f3dcd5494aaef3d90.png

 

3.TCP协议与UDP协议的区别

类型特点
是否面向连接传输可靠性传输形式
TCP可靠字节流
UDP不可靠数据报文段

        UDP在传输数据的时候,不需要建立连接,接收方也不需要确认消息,数据传输速度快,主要用于网络即时通话,广播,直播等。

        TCP提供面向连接的服务,在传输数据的时候需要建立连接,数据传输后释放连接。它在数据传输是的可靠性上拥有数据重传,数据确认,流量控制,拥塞避免等。但是也增加许多性能开销,例如:超时重传,连接管理。流量控制,拥塞避免等。TCP一般用于文件传输,数据下载,收发邮件,远程登陆等。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#0000FF格子衫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值