博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tcp可靠Udp不可靠原理
阅读量:5905 次
发布时间:2019-06-19

本文共 861 字,大约阅读时间需要 2 分钟。

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的数据传输是不可靠的。

 

转载于:https://www.cnblogs.com/ZhenhaoYu/p/9346335.html

你可能感兴趣的文章
java实现解析二进制文件(字符串、图片)
查看>>
python 第一课
查看>>
Intellij IDEA使用总结
查看>>
linux比较两个文件的不同(6/21)
查看>>
win7开始菜单中找不到“运行”命令的解决办法
查看>>
基于cookie使用过滤器实现客户每次访问自登陆一次
查看>>
Mybatis Interceptor 拦截器原理 源码分析
查看>>
git使用ssh密钥和https两种认证方式汇总(转)
查看>>
程序员必读书单(转)
查看>>
20160302 读后感
查看>>
[C语言] 数据结构-衡量算法的标准
查看>>
python 字符串截取
查看>>
JeeSite开发(二)——JeeSite4主子表实例
查看>>
SAP 自学 转载
查看>>
为你下一个项目准备的 50 个 Bootstrap 插件
查看>>
awk之NF的妙用
查看>>
70个经典的 Shell 脚本面试问题
查看>>
Vim
查看>>
Linux菜鸟——搭建虚拟机环境
查看>>
【Visual C++】Windows GDI贴图闪烁解决方法
查看>>