什么是tcp协议
英文原义:transmission control protocol
中文释义:(rfc-793)传输控制协议
该协议主要用于在主机间建立一个虚拟连接,以实现高可靠性的数据包交换.ip协议可以进行ip数据包的分割和组装,但是通过ip协议并不能清楚地了解到数据包是否顺利地发送给目标计算机.而使用tcp协议就不同了,在该协议传输模式中在将数据包成功发送给目标计算机后,tcp会要求发送一个确认;如果在某个时限内没有收到确认,那么tcp将重新发送数据包.另外,在传输的过程中,如果接收到无序、丢失以及被破坏的数据包,tcp还可以负责恢复.
udp协议是英文userdatagramprotocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用.包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用udp协议.udp协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,udp仍然不失为一项非常实用和可行的网络传输层协议.
与我们所熟知的tcp(传输控制协议)协议一样,udp协议直接位于ip(网际协议)协议的顶层.根据osi(开放系统互连)参考模型,udp和tcp都属于传输层协议.
udp协议的主要作用是将网络数据流量压缩成数据报的形式.一个典型的数据报就是一个二进制数据的传输单位.每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据.
udp报头
udp报头由4个域组成,其中每个域各占用2个字节,具体如下:
源端口号
目标端口号
数据报长度
校验值
udp协议使用端口号为不同的应用保留其各自的数据传输通道.udp和tcp协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持.数据发送一方(可以是客户端或服务器端)将udp数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据.有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口.因为udp报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535.一般来说,大于49151的端口号都代表动态端口.
数据报的长度是指包括报头和数据部分在内的总的字节数.因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载).数据报的最大长度根据操作环境的不同而各异.从理论上说,包含报头在内的数据报的最大长度为65535字节.不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节.
udp协议使用报头中的校验值来保证数据的安全.校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算.如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此udp协议可以检测是否出错.这与tcp协议是不同的,后者要求必须具有校验值.
udpvs.tcp
udp和tcp协议的主要区别是两者在如何实现信息的可靠传递方面不同.tcp协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止.
与tcp不同,udp协议并不提供数据传送的保证机制.如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示.因此,通常人们把udp协议称为不可靠的传输协议.
相对于tcp协议,udp协议的另外一个不同之处在于如何接收突法性的多个数据报.不同于tcp,udp并不能确保数据的发送和接收顺序.例如,一个位于客户端的应用程序向服务器发出了以下4个数据报
d1
d22
d333
d4444
但是udp有可能按照以下顺序将所接收的数据提交到服务端的应用:
d333
d1
d4444
d22
事实上,udp协议的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情况下才有可能发生.
udp协议的应用
也许有的读者会问,既然udp是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下udp协议可能会变得非常有用.因为udp具有tcp所望尘莫及的速度优势.虽然tcp协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响.反观udp由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证.
此帖出自