UDP和TCP(1)

1.UDP协议

UDP协议是传输层的一个不可靠的协议。之前看过物理层、连接层、网络层的协议。Vamei大神的比喻很好,说UDP是IP协议在传输层的傀儡,之所以存在的必要时IP协议不包括端口号,而UDP和TCP都是包括端口号。

端口号是应用程序的资源,不同的应用程序可以占用不同的端口号。程序运行时,操作系统内核从不同端口号获取的消息就提供给占用相应端口号的程序处理。

Vamei大神把网络协议比喻成协议森林我觉得很恰当。连接层协议如以太网、WiFi、ARP协议比喻为树根;IP协议比喻成树干;UDP或TCP等传输层协议比喻为树枝,应用层协议如HTTP比喻成树叶。

数据产生时是从上到下一层一层封装,而解析时是从下到上一层一层拆封。至于每一层封装的格式就是协议的格式,主要包括协议头和数据。

另外大名鼎鼎的soket就是交给内核封装数据的应用。我们在使用soket编写程序时只用提供IP、端口和数据等参数即可。

2.TCP协议

TCP和UDP最大的不同就是TCP是负责任的传输协议。UDP发送数据是以数据报的形式发送,TCP发送数据的方式是流方式。

数据报模式就是数据发送过去,接收端接收数据报。如果属于同一发送端发送的数据报的一部分,则接收端读取、等待接收到全部数据后排序识别。

流模式大多数都把它比喻成自来水管或蓄水池。意思是数据按顺序进行收发,这样就很严格了。这就可以提到段“segment”的概念。假设TCP数据量很大,可以划分为好多段进行传输。那么发送过程为:第一段---->ACK---->第二段---->ACK。ACK是接收端接收到第一段发的确认信息,并要求发送第二段。如果没有收到ACK那么就会重发这一段。所以这是通信双方的严格规定,只有收到才进行下一步,否则就重发。这样是很严格,是很规范,是很容易理解,但却很影响效率。因为一次处理一段就会有大量时间网络处于空闲期。这种单线的工作方式虽然可靠,但是工作效率不高。我们为什么不可以一次发多个段呢?

是,我们可以一次发多个段。但是这些段到达的顺序我们就无法保证了。TCP采用了滑窗的方法解决这个问题。滑窗有几个注意点:

a.滑窗是数据段从头到尾滑的

b.滑窗是有大小的,通常可以容纳几个数据段

c.在发送端的滑窗内的数据段可以同时发送,也可以不按顺序的接受返回的ACK,但是只有滑窗左侧第一个接收到ACK后,滑窗才向右滑动。(那么滑窗左侧的都是按顺序接收到ACK的段,右侧就是还未发送的段)

d.接收端的滑窗可以接收滑窗内的相关段,但是只有滑窗内最左的段接收后,滑窗才会向右移动。

注:滑窗的提出是为了提高TCP的传输效率,我这样简单的描述只是感官上是这样,滑窗是也可以动态变化的。另外接收端接收数据是存放到缓冲区中(蓄水池)。

UDP是面向无连接的,而TCP是面向连接的。接下来就要讲述TCP的连接和终止连接。TCP连接时通常称为三次握手,而终止连接时分为4次握手。

TCP分为头和数据,其中头包括端口号和序号。其中序号的起始值是随机分配的,因为如果选用确定的容易接收到伪TCP段。而建立连接时需要把自己的序号告诉对方。这牵涉到两个段SYN段和ACK段。SYN段就是发送自己的序号,ACK段就是收到确认。连接过程就如下:

A端发送SYN段---->

B端回复ACK段,但同时将ACK段附在B端发送的SYN段---->

A端回复ACK段---->

TCP终止连接分为四步,用到的段为FIN和ACK段。

A端终止连接FIN----->

B端发送ACK段----->

B端终止连接FIN---->

A端发送ACK段---->

为什么步骤二和三不合并?因为关闭连接是一套。而之前连接时整体时一套。TCP连接是双向连接,即A发送数据给B,B发送数据给A。这是两个连接。允许单向连接意味着可以A终止连接而B保持连接。那么只用执行第一、第二步即可。连接时因为在传输过程中要相互发所以A建立连接,B也必须建立连接,进而中间整合一步。而当A觉得我没什么发的,就可以擅自终止自己单方向的连接了。

时间: 2024-11-06 22:18:07

UDP和TCP(1)的相关文章

Java之网络编程UDP和TCP

注*部分转来的 第1章 网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式.传输速率.传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换. 网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协

JAVA基础学习day24--Socket基础一UDP与TCP的基本使用

一.网络模型 1.1.OIS参考模型 1.2.TCP/IP参考模型 1.3.网络通讯要素 IP地址:IPV4/IPV6 端口号:0-65535,一般0-1024,都被系统占用,mysql:3306,oracle:1521 传输协议:TCP/UDP 二.类 InetAddress 2.1.InetAddress 主机对象 IP 地址是 IP 使用的 32 位或 128 位无符号数字,它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的 2.2.示例 import java.net.*;

UDP与TCP数据包的延迟探测系统

最近需要测试Akamai的几个节点对数据包加速加速效果,下面是win32上面的一个udp.tcp ping的探测程序. 程序参考了http://www.tenouk.com/Winsock/Winsock2example9.html中的代码. 下面是系统的原理图: 由于udp的特殊性,采用在应用层添加seq的方案,保证回包的准确性(经过测试发现,nmap项目的nping探测器由于没有进行回包准确性的验证,导致最后的统计数据错误,朋友们应该注意). 而tcp本身就是一种数据流而已,它的机制导致了粘

基于Socket的UDP和TCP编程介绍

一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(streamsocket)的一种. UDP:用户数据报协议.UDP是一种无连接协议.UDP套接口是数据报套接口(datagram socket)的一种. 二.TCP和UDP介绍 1)基本TCP客户—服务器程序设计基本框架 说明:(三路握手)         1.客户端发

UDP和TCP的比较

当客户端需要请求数据库服务器上的某些数据时,它至少需要三个数据报来建立TCP连接,三个数据报礼发送和确认少量数据,三个用来关闭连接.然而,如果使用UDP的话,仅仅需要发出两个数据报就能达到相同的效果.UDP不需要客户端建立和关闭与服务器的连接.客户端只是将数据放到数据报中并发给服务器.服务器构造出应答,并将应答数据放到去往客户端的数据报中,然后再发送给客户端.尽管对于简单实事务来说,这种数据传输方式与TCP相比,既快又有效,但UDP不能处理数据报丢失.UDP允许应用于远程计算机特定端口上的服务联

UDP和TCP的区别(转)

TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信!TCP/IP协议是一个协议簇.里面包括很多协议的.UDP只是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了.TCP/IP协议集包括应用层,传输层,网络层,网络访问层.其中应用层包括:超文本传输协议(HTTP):万维网的基本协议.   文件传输(TFT

【iOS与EV3混合机器人编程系列之四】iOS_WiFi_EV3_Library 剖析之中的一个:WiFi UDP和TCP

在上一篇文章中.我们通过编写EV3 Port Viewer项目实现了iOS监測EV3的实时端口数据. 程序最核心的部分就是我们的开源码库iOS_WiFi_EV3_Library. 那么,在本文中,我们将具体介绍我们这个库的编写.为了完毕这个库,本人參考了网上许多资料,主要包括EV3的源码,win版本号的代码库以及Monobrick相关以及网上的各种资料,在此就不一一列举了. 因为水平有限,本代码库还存在各种问题,望使用的读者见谅. 大家也能够在这个基础之上自己进行改造完好. 为了具体说明代码库的

DNS同时占用UDP和TCP端口53——传输数据超过512时候用tcp,DNS服务器可以配置仅支持UDP查询包

DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况下使用这两种协议. 先简单介绍下TCP与UDP.     TCP是一种面向连接的协议,提供可靠的数据传输,一般服务质量要求比较高的情况,使用这个协议.UDP---用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务. TCP与UDP的区别:     UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同.TC

移动端IM系统的协议选型:UDP还是TCP?

1.前言 对于有过网络编程经验的开发者来说,使用何种数据传输层协议来实现数据的通信,是个非常基础的问题,它涉及到你的第一行代码该如何编写. 从PC时代的IM开始,IM开发者就在为数据传输协议的选型争论不休(比如:<为什么QQ用的是UDP协议而不是TCP协议?>这样的问题,隔一段时间就能在社区里看到).到了移动互联网时代,鉴于移动网络的不可靠性等特点,再加上手机的省电策略.流量压缩等,为这个问题的回答增了更多的不确定因素. 对于有选择困难证的人来说,基于以上因素,加上UDP和TCP协议的本质差异

计算机网络读书笔记-----UDP vs TCP

UDP: UDP用户数据报协议在IP数据报服务上只增加了分用复用和差错检测的功能. UDP是不具有可靠性的数据报协议. UDP的特点: UDP是无连接的: UDP不保证可靠交付,即尽最大努力交付 UDP是面向报文的: 发送方的UDP对应用程序交下来的报文,在添加首部后就直接交付给IP层.对应用层交下来的报文,既不拆分也不合并,而是保留这些报文的边界. 对IP层交上来的UDP数据报,在去除首部后就直接交给上层的应用进程,所以说UDP数据报一次交付一个完整的报文.如图所示: UDP没有拥塞控制. 所