剖析tcp与udp及应用场景协议方案选择
什么是TCP和UDP
TCP和UDP是TCP/IP协议中的两个传输层协议,它们使用IP路由功能把数据包发送到目的地,从而为应用程序及应用层协议(包
括:HTTP、SMTP、SNMP、FTP和Telnet)提供网络服务。TCP提供的是面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、
不可靠的数据流传输。面向连接的协议在任何数据传输前就建立好了点到点的连接。ATM和帧中继是面向连接的协议,但它们工作在数据链路层,而不是在传输
层。普通的音频电话也是面向连接的。
可靠的传输协议可避免数据传输错误。其实现方式是:在构造数据包时在其中设置校验码,到达
目的地后再采用一定的算法重新计算校验码,通过比较二者,就可以找出被破坏了的数据。因为需要重发被破坏了的和已经丢失的数据,所以在需要重发数据时协议
必须能够使目的地给出源头的一个确认信号。有些数据包不一定按照顺序到达,所以协议必须能够探测出乱序的包,暂存起来,然后把它们按正确的次序送到应用层
中去。另外,协议还必须能够找出并丢弃重复发送的数据。一组定时器可以限制针对不同确认的等待时间,这样就可以开始重新发送或重新建立连接。
数据流传输协议不支持位传输。TCP不能在一个包内以字节或位为单位构造数据,它只负责传输未经构造的8位字符串。
非面向连接的传输协议在数据传输之前不建立连接,而是在每个中间节点对非面向连接的包和数据包进行路由。没有点到点的连接,非面向连接的协议,如
UDP,是不可靠的连接。当一个UDP数据包在网络中移动时,发送过程并不知道它是否到达了目的地,除非应用层已经确认了它已到达的事实。非面向连接的协
议也不能探测重复的和乱序的包。标准的专业术语用“不可靠”来描述UDP。在现代网络中,UDP并不易于导致传输失败,但是你也不能肯定地说它是可靠的。
TCP工作流程
现在让我们一起来看看TCP段的各个域,在IP包中它们紧跟在IP头部信息之后。第一个16位确
认了源端口,第二个16位确认了目的端口。端口的划分使IP主机之间可用单个的IP地址实现不同类型的并发连接。在绝大多数现代操作系统中,采用32位
IP地址和16位端口地址的组合来确认一个接口。源接口和目的接口的组合就定义了一个连接。有216或65536个可能的端口。最低的1024个端口是常
用的,它们是系统为特定的应用层协议所保留的默认设置。如:默认状态下,HTTP使用端口80,而POP3使用端口110。其它的应用可以使用编号更高的
端口。
在接下来的两个域中,序列号和确认号是TCP实现可靠连接的关键。当建立一个TCP连接时,发送方主机发出一个随机的初
始化序列号给初始化器,初始化器将其加1后送回确认域的起始器,这意味着下一个字节可以发送了。一旦数据开始流动,序列号和确认号将跟踪已发送了那些数
据,那些数据已被确认。因为每个域都是32位,总共可以有232个值,所以每个域的范围是:0~4294967295,当超过上限时回到0。
4位的偏移量代表TCP头部一共有多少个32位的信息。这个信息是必不可少的,因为有可选的头部区域,偏移量标识了头部的结束和数据的开始。
TCP的设计者保留了接下来的6位,以防万一将来要对其进行扩展。实际上,自从RFC793(传输控制协议)1981年发布以来,还没人有恰当的理由使用这些位,在这一点上,Jon Postel和他的同事一定是过分谨慎了。
随后的6位每个都是一个标志。若UNG标志位的值为1,意味着远在头部紧急指针区域的数据是有效的;若ACK标志位的值为1,则意味着确认号区域中的数
据是有效的。(注意:一个SYN包有一个有意义的序列号,但它的确认号是无意义的,因为它并不确认任何事件)PSH标志位使数据不必等待发送和等待接收。
RST标志位将断开一个连接。SYN(同步)标志位意味着序列号是有效的,FIN(结束)标志位将指出发送方已经发完了数据。
16位长的窗口区域表示了“滑动窗口”的大小,也就是告诉发送方它已经准备好接收多少个字的数据。TCP通过调整窗口的大小来控制数据的流量。一个值为0
的窗口意味着通告发送方:如果没有进一步的通知,接收器已满,不能再接收更多的数据了。大的窗口可以确保在任何给定的时间传输多达65536个未经确认的
字节,但是,当重发定时器超时且又没有得到接收确认时,窗口将减半,从而有效地降低传输速率。
16位的校验码区域保证了数据的完整性,保护了TCP头部和IP头部的各个区域。发送方计算校验值并把它插入这个区域,接收方根据收到的包重新计算该值并比较二者,如果它们是匹配的,则认为数据是完整无损的。
当设置紧急标志位时,紧急指针是一个16位的偏移量,它代表必须加快的最后一个字。选择区域可以容纳0或多个32位字,可扩展TCP的性能。大多数常用的选择区域支持大于65536字节的窗口,从而缩短了等待确认的时间,尤其是在高传输率时。
TCP的传输机构有多个定时器。当一个包发送时,重发定时器开始计数;当收到确认信号后,重发定时器停止计数。如果超过设定时间段还没有收到确认信号,
就重发该包。一个比较棘手的问题是如何设置该时间段。如果太长,当网络传输错误增加时将导致不必要的等待时间;如果太短,就会产生过多的重复包从而降低网
络的反应时间。现代TCP协议根据实际情况对重发定时器进行动态设定。
持续定时器对于避免死锁是必不可少的。如果网络收到了一
个大小为0的窗口确认并且丢失了随后的重发数据的确认,持续定时器将超时并发送一个探针。探针的回应将指出窗口的大小(也许仍为0)。保持定时器在本端没
有任何活动后,将检查在连接的另一端是否还有运行的进程。如果没有任何回应,该定时器将断开连接。
当断开一个连接时,断开连接定时器将包的最大生命期加倍。该定时器在连接断开之前确保流量最大。
不管重发过程执行得多么有效,很少的丢失包就能严重地降低TCP连接的流量。每个未收到的包或包的片段只会在重发定时器超时的时候才会丢失。在数据重发
时,接收过程一直在递送这些重发的数据,这样就使总体的数据传输陷于停顿,直到丢失的数据被取代为止。这些重发过程导致基于TCP的连接有时处于不稳定状
态。
TCP与UDP的选择
如果比较UDP包和TCP包的结构,很明显UDP包不具备TCP包复杂的可靠性与控制
机制。与TCP协议相同,UDP的源端口数和目的端口数也都支持一台主机上的多个应用。一个16位的UDP包包含了一个字节长的头部和数据的长度,校验码
域使其可以进行整体校验。(许多应用只支持UDP,如:多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。)
很明显,当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时,TCP协议是当然的选择。当强调传输性能而不是传输的完整性时,如:音频和
多媒体应用,UDP是最好的选择。在数据传输时间很短,以至于此前的连接过程成为整个流量主体的情况下,UDP也是一个好的选择,如:DNS交换。把SNMP建立在UDP上的部分原因是设计者认为当发生网络阻塞时,UDP较低的开销使其有更好的机会去传送管理数据。TCP丰富的功能有时会导致不可预料的性能低下,但是我们相信在不远的将来,TCP可靠的点对点连接将会用于绝大多数的网络应用。
剖析tcp与udp及应用场景协议方案选择的更多相关文章
- 常用传输层协议(tcp/ip+udp)与常用应用层协议简述(http)
一.计算机网络体系结构 二.TCP与UDP差异 1.TCP是面向连接的可靠传输,UDP是面向无连接的不可靠传输 面向连接表现在3次握手,4次挥手:可靠传输表现在未进行4次挥手时的差错重传,超时重传: ...
- [TCP/IP] 传输层-TCP和UDP的使用场景
传输层-TCP和UDP应用场景 TCP(传输控制协议) 需要将要传输的文件分段传输,建立会话,可靠传输,流量控制 UDP(用户报文协议) 一个数据包就能完成数据通信,不需要建立会话,不分段,不用流量控 ...
- 传输层协议TCP和UDP
本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...
- 一些重要的计算机网络协议(IP、TCP、UDP、HTTP)
一.计算机网络的发展历程 1.计算机网络发展 与其说计算机改变了世界,倒不如说是计算机网络改变了世界.彼时彼刻,你我都因网络而有了交集,岂非一种缘分? 计算机与网络发展大致经历如下过程:
- 【转】HTTP学习---TCP和UDP协议的区别与应用
[原文]https://www.toutiao.com/i6592813624689951239/ 概述 ⊙TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICM ...
- 面试:TCP和UDP协议
目录 TCP 协议 UDP协议 TCP和UDP的区别 TCP和UDP的使用场景 一 TCP协议 1.TCP的头部格式 理解TCP协议,首要的就是TCP协议的头部格式 · Source P ...
- c# tcp udp 的使用场景
之前用tcp实现了一个案例(远程协助),后来我考虑用udp去实现它,于是又研究了下udp,我发现理论上udp可以做到,但是有一些问题不知道会不会有瓶颈 我参照网上写了一个简单的示例如下 服务端接收.发 ...
- [转]VB Winsock 控件TCP与UDP连接实例
[-] 可能的用途 选择通讯协议 协议的设置 确定计算机的名称 TCP 连接初步 接受多个连接请求 UDP 初步 关于 Bind 方法 利用 WinSock 控件可以与远程计算机建立连接,并通过用 ...
- TCP、UDP、HTTP、SOCKET之间的区别
IP:网络层协议: TCP和UDP:传输层协议: HTTP:应用层协议: SOCKET:TCP/IP网络的API. TCP/IP代表传输控制协议/网际协议,指的是一系列协议. TCP和UDP使用IP协 ...
随机推荐
- wpf中的触发器详解 (转自 乂乂的日志 - 网易博客)
2010-03-24 16:19:07| 分类: WPF相关 | 标签: |字号大中小 订阅 wpf中的触发器详解 WPF/C# 2009-08-24 11:32:50 7.1.2 简单 ...
- NYOJ 720 DP+二分
项目安排 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个 ...
- c#在winform中用DataGridView实现分页效果
public partial class Form11 : Form { public Form11() { InitializeComponent(); } private int Inum = 1 ...
- VAE--就是AutoEncoder的编码输出服从正态分布
花式解释AutoEncoder与VAE 什么是自动编码器 自动编码器(AutoEncoder)最开始作为一种数据的压缩方法,其特点有: 1)跟数据相关程度很高,这意味着自动编码器只能压缩与训练数据相似 ...
- 改变Vim保存文件路径
1. vim 有个cd命令.用来更改当前文件夹.:cd sth进入sth文件夹.这样新文件保存之后就在当前文件夹.不过如果你打开一个已经保存的文件后然后更改当前文件夹是不会改变保存路径的.你必须为:w ...
- 201621123006 《Java程序设计》第7周学习总结
1. 本周学习总结 1.1 思维导图:Java图形界面总结 1.2 可选:使用常规方法总结其他上课内容. 窗体事件:一般做最外层容器 鼠标事件:按下.松开.单击 键盘事件:按下.释放 动作事件:不代表 ...
- New Concept English Two 13 31
$课文29 出租汽车 294. Captain Ben Fawcett has bought an unusual taxi and has begun a new service. 本.弗西特机长买 ...
- 利用python完成多个url状态码的检测
import re import requests import json from threading import Thread,Lock from concurrent.futures impo ...
- [转载]MySQL索引原理与慢查询优化
好文,以防丢失,故转之,另对排版做简单优化.原文地址:http://ourmysql.com/archives/1401 索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查"mys ...
- yaf 笔记(持续更新)
1.如果action不需要输出视图文件(如果ajax请求之类的),只需要在action里面加Yaf\DisPatcher::getInstance()->disableView(); 2.获取客 ...