理解面向连接和无连接协议之间的区别
理解面向连接和无连接协议之间的区别
网络编程中最基本的概念就是面向连接(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
理解面向连接和无连接协议之间的区别相关推荐
- Linux网络编程——连接和面向连接的协议之间没有区别
网络编程中最重要的概念就是连接取向(connection-oriented)和无连接(connectionless)协议.虽然本质.两者之间的区别是不难理解,编程的人来说,却是个非常easy混淆的问题 ...
- Http、Socket和WebService协议之间的区别
1 数据传输方式 1.1 socket传输的定义和其特点 所谓socket通常也称作"套接字",实现服务器和客户端之间的物理连接,并进行数据传输,主要有udp和tcp两个协 ...
- protocol学习笔记001---RPC和HTTP协议之间的区别_与各自优势
很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单 ...
- [license]MIT,BSD,Apache几种开源协议之间的区别
- 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 ...
- “throw”和“throw ex”之间有区别吗?
有些帖子询问这两者之间的区别是什么. (为什么我还要提这个...) 但我的问题是不同的,我称之为"抛出ex"在另一个错误的神像处理方法. public class Program ...
- IPv4与IPv6之间的区别
IPv4和IPv6是是目前使用的两种Internet协议版本,IPv4和IPv6协议之间存在各种差异,包括它们的功能,但关键的一点是它生成的地址(地址空间)的数量的区别.下面我们就来具体的给大家介绍I ...
- 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和 ...
- java null empty_null和empty(“”)Java String之间的区别
23 个答案: 答案 0 :(得分:201) ""是一个实际的字符串,虽然是空字符串. 但是, null表示String变量指向任何内容. a==b返回false,因为" ...
最新文章
- java 数组 题_(第22讲)java数组的一些编程题
- 【ASP.NET 进阶】验证码的实现
- Quartz在Spring中动态设置cronExpression
- HubSpot company数据在UI上的展示和通过API方式进行获取
- Python 开发者在迁移到 Go(lang) 时需要知道哪些事?
- maven添加sqlserver的jdbc驱动包
- linux home目录重装,Linux/centos 卸载重装
- java 并发线程池的理解和使用
- iOS开发之UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
- 原生JavaScript实现幻灯片效果
- tomcat加载出现找不到web
- 低无代码开发平台正在逐渐打破原有软件开发模式
- Loongson2f_龙芯逸珑8089A_扩容硬盘安装debian8(sd卡扩容)
- 贪吃蛇小游戏(基于Python)
- 【转】京东商城思维导图
- 12306网站火车票抢票详细攻略(gohome抢票程序)
- 投屏索尼电视显示访问服务器,索尼电视投屏如何设置 苹果手机投屏索尼电视...
- 【C语言】动态申请空间
- SonarQube的安装部署过程中踩过的坑
- SEO优化方案及SEO操作流程-邹川
热门文章
- javascript --- 变量污染全局作用域问题解决方案
- javascript --- 非交互、交互、协作、任务
- ES6-4/5 解构赋值、函数默认值、数组解构、对象解构
- 使用glew和glad 新建窗口
- MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析...
- 创建自己的共用js库
- 转载:成功应用ERP的思路和方法分析
- 学习笔记(42):Python实战编程-pyinstaller程序打包
- oracle使用loop将增加十天,使用loop循环操作DML语句
- 阿里MySQL读写一致_阿里面试题:如何保证缓存与数据库的双写一致性?