码迷,mamicode.com
首页 > 其他好文 > 详细

Tcp可靠Udp不可靠原理

时间:2018-07-21 17:00:41      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:class   方法   而在   title   应用程序   存在   就会   应用程序调用   tle   

1. Socket缓冲区

应用程序通过调用send, read方法向网络上发送应用数据,该过程中由于应用程序调用send/write的速度同网络介质发送数据的速度存在差异,所以,应用通过socket发往

网络上的的数据会先被缓存,即socket发送缓冲区,等待网络空闲时再发送出去。同样,socket从网络上接受到的数据,也会被缓存,即socket接受缓冲区,等待应用程序把数

据从中读出。其中,应用程序调用send发送数据,是将数据拷贝到socket的内核发送缓冲区中,然后send便会返回,即send返回后,数据并不一定发送到目的地去了,send

仅仅是把数据拷贝到socket的内核发送缓冲区。

 

2. TCP可靠数据传输原理

每个Tcp socket在内核中都有一个发送缓冲区和一个接受缓冲区。tcp协议要求对端在接受到tcp数据报之后,要对其序号进行ACK,只有当接受到一个tcp数据报的ACK之后,才

可以把这个tcp数据报从socket的发送缓冲区清除,另外tcp还有一个流量控制功能,tcp的socket接受缓冲区接受到网络上来的数据缓存起来后,如果应用程序一直没有读取,

socket接受缓冲区满了之后,发生的动作是:通知对端TCP协议中的窗口关闭,这便是滑动窗口的实现,保证TCP socket接受缓冲区不会溢出,因为对方不允许发送超过所通

知窗口大小的数据, 这就是TCP的流量控制,如果对方无视窗口大小而发出了超过窗口大小的数据,则接收方TCP将丢弃它。这两点保证了tcp是可靠传输的。

 

3. UDP不可靠数据传输原理

UDP只有一个socket接受缓冲区,没有socket发送缓冲区,即只要有数据就发,不管对方是否可以正确接受。而在对方的socket接受缓冲区满了之后,新来的数据报无法进入到

socket接受缓冲区,此数据报就会被丢弃,udp是没有流量控制的,故UDP的数据传输是不可靠的。

 

Tcp可靠Udp不可靠原理

标签:class   方法   而在   title   应用程序   存在   就会   应用程序调用   tle   

原文地址:https://www.cnblogs.com/ZhenhaoYu/p/9346335.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!