理解面向连接和无连接协议之间的区别

网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。

面向连接和无连接指的都是协议。也就是说,这些术语指的并不是无理介质本身,而是用来说明如何在物理介质上传输数据。面向连接和无连接协议可以,而且通常也确实会共享一条物理介质。

它们的本质区别在于,对无连接协议来说,每个分组的处理信息都独立于所有其他分组,而对面向连接的协议来说,协议实现则维护了与后继分组有关的状态信息。

无连接协议中的分组被称为数据报(datagram),每个分组都是独立寻址。

面向连接的协议则维护了分组之间的状态,使用这种协议的应用程序通常都会进行长时间的对话。记住这些状态,协议就可以提供可靠的传输。

典型的面向连接协议有三个阶段。第一阶段,在对等实体间建立连接。接下来是数据传输阶段,在这个阶段中,数据在对等实体间传输。最后,当对等实体完成数据传输时,连接被拆除。

连接为我们维护的状态中包含了这些地址。我们只要发送数据就行了,不需要考虑寻址或其他与协议相关的数据。

使用无连接协议可以很方便地支持一对多和多对一通信,而面向连接协议通常都需要多个独立的连接才能做到。但更重要的是,无连接协议 是构建面向连接协议 的基础。

TCP和UDP都是建立在IP之上的。因此,IP是构建整个TCP/IP协议族的基础。但IP提供的是一种尽力而为的、不可靠的无连接服务。它接收来自其上层的分组,将它们封装在一个IP分组中,根据路由为分组选择正确的硬件接口,从这个接口将分组发送出去。一旦将分组发送出去了,IP就不在关心这个分组了。

IP可以运行在任何能够承载分组的网络上。

TCP的分组被称为段(segment), 是放在IP数据报中发送的,因此,根本无法假定这些分组会抵达目的地,更不用说保证分组无损坏且已原来的顺序到达了。为了提供可靠性,TCP向基本的IP服务添加了三项功能。首先,它为TCP段中的数据提供了校验和。这样有助于确保抵达目的地的数据在传输过程中不会被网络损坏。第二,它为每个字节分配了一个序列号,这样,如果数据抵达目的地时真的错序了,接受端也能够按照恰当的顺序将其重装起来。第三,TPC提供了一种确认-重传机制,以确保最终每个端都会被传送出去。

TCP连接的每一端都维护了一个接受窗口(receive window),接受窗口就是可以从对等实体接受的数据序列号范围。除了接受窗口之外,每个TCP还维护了一个发送窗口(send window),发送窗口被划分为两部分:已发送还未被确认的字节,以及可以发送但还未发送的字节。

RTO(Retransmission Timeout) 超时重传。

UDP只向底层IP协议中添加了两项功能。首先,它提供了一个可选的校验和来检测数据的损坏情况。尽管IP也有校验和,但它只对IP分组首部进行计算。UDP向    IP添加的第二项特性就是端口的概念。

应用程序可以通过显式的bind调用来设置这个端口,也可以有操作系统为其选择。分组到达时,内核会搜索器套接字列表,查找一个与分组中的协议、地址、和端口号相匹配的套接字。如果找到了匹配的套接字,就由指定的协议来处理数据,并将这些数据提供给所有打开了匹配套接字的应用程序。

转载于:https://www.cnblogs.com/run-to-success/archive/2011/08/30/2159981.html

理解面向连接和无连接协议之间的区别相关推荐

  1. Linux网络编程——连接和面向连接的协议之间没有区别

    网络编程中最重要的概念就是连接取向(connection-oriented)和无连接(connectionless)协议.虽然本质.两者之间的区别是不难理解,编程的人来说,却是个非常easy混淆的问题 ...

  2. Http、Socket和WebService协议之间的区别

    1 数据传输方式 1.1 socket传输的定义和其特点     所谓socket通常也称作"套接字",实现服务器和客户端之间的物理连接,并进行数据传输,主要有udp和tcp两个协 ...

  3. protocol学习笔记001---RPC和HTTP协议之间的区别_与各自优势

    很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单 ...

  4. [license]MIT,BSD,Apache几种开源协议之间的区别

  5. tcp协议和udp协议区别_TCP和UDP协议有什么区别?

    tcp协议和udp协议区别 TCP and UDP are two protocols that are part of the transport layer in a TCP/IP model o ...

  6. “throw”和“throw ex”之间有区别吗?

    有些帖子询问这两者之间的区别是什么. (为什么我还要提这个...) 但我的问题是不同的,我称之为"抛出ex"在另一个错误的神像处理方法. public class Program ...

  7. IPv4与IPv6之间的区别

    IPv4和IPv6是是目前使用的两种Internet协议版本,IPv4和IPv6协议之间存在各种差异,包括它们的功能,但关键的一点是它生成的地址(地址空间)的数量的区别.下面我们就来具体的给大家介绍I ...

  8. ui和ux的区别_UX和UI之间的区别

    ui和ux的区别 Here you will learn about UX vs UI i.e. difference between UX and UI. 在这里,您将了解UX vs UI,即UX和 ...

  9. java null empty_null和empty(“”)Java String之间的区别

    23 个答案: 答案 0 :(得分:201) ""是一个实际的字符串,虽然是空字符串. 但是, null表示String变量指向任何内容. a==b返回false,因为" ...

最新文章

  1. java 数组 题_(第22讲)java数组的一些编程题
  2. 【ASP.NET 进阶】验证码的实现
  3. Quartz在Spring中动态设置cronExpression
  4. HubSpot company数据在UI上的展示和通过API方式进行获取
  5. Python 开发者在迁移到 Go(lang) 时需要知道哪些事?
  6. maven添加sqlserver的jdbc驱动包
  7. linux home目录重装,Linux/centos 卸载重装
  8. java 并发线程池的理解和使用
  9. iOS开发之UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
  10. 原生JavaScript实现幻灯片效果
  11. tomcat加载出现找不到web
  12. 低无代码开发平台正在逐渐打破原有软件开发模式
  13. Loongson2f_龙芯逸珑8089A_扩容硬盘安装debian8(sd卡扩容)
  14. 贪吃蛇小游戏(基于Python)
  15. 【转】京东商城思维导图
  16. 12306网站火车票抢票详细攻略(gohome抢票程序)
  17. 投屏索尼电视显示访问服务器,索尼电视投屏如何设置 苹果手机投屏索尼电视...
  18. 【C语言】动态申请空间
  19. SonarQube的安装部署过程中踩过的坑
  20. SEO优化方案及SEO操作流程-邹川

热门文章

  1. javascript --- 变量污染全局作用域问题解决方案
  2. javascript --- 非交互、交互、协作、任务
  3. ES6-4/5 解构赋值、函数默认值、数组解构、对象解构
  4. 使用glew和glad 新建窗口
  5. MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析...
  6. 创建自己的共用js库
  7. 转载:成功应用ERP的思路和方法分析
  8. 学习笔记(42):Python实战编程-pyinstaller程序打包
  9. oracle使用loop将增加十天,使用loop循环操作DML语句
  10. 阿里MySQL读写一致_阿里面试题:如何保证缓存与数据库的双写一致性?