没有合适的资源?快使用搜索试试~ 我知道了~
socket编程原理[总结].pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 35 浏览量
2021-10-12
00:28:58
上传
评论
收藏 52KB PDF 举报
温馨提示
试读
36页
socket编程原理[总结].pdf
资源推荐
资源详情
资源评论
socket 编程原理 http://www.chinaunix.net 作者 :lhp1210?? 发表于: 2005-12-12 15:50:02
socket 编程原理 ?
socket 编程原理 ?
1?问题的引入 ?
UNIX系统的 I/O 命令集, 是从 Maltics 和早期系统中的命令演变出来的, 其模式为打开一读
/ 写一关闭(open-write-read-close )。在一个用户进程进行 I/O 操作时,它首先调用 “打开”
获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文
件或设备上进行 I/O 操作的进程。 然后这个用户进程多次调用 “读 / 写”以传输数据。 当所有
的传输操作完成后,用户进程关闭调用,通知操作系统已经完成了对某对象的使用。 ?
TCP/IP 协议被集成到 UNIX内核中时, 相当于在 UNIX系统引入了一种新型的 I/O 操作。 UNIX
用户进程与网络协议的交互作用比用户进程与传统的 I/O 设备相互作用复杂得多。首先,进
在多种,如何建立一种通用机制以支持多种协议?这些都是网络应用编程界面所要解决的问
题。 ?
在 UNIX系统中, 网络应用编程界面有两类: UNIX?BSD的套接字 ( socket )和 UNIX?System?V
的 TLI 。由于 Sun公司采用了支持 TCP/IP 的 UNIX?BSD操作系统, 使 TCP/IP 的应用有更大的
发展,其网络应用编程界面──套接字( socket )在网络软件中被广泛应用,至今已引进微
机操作系统 DOS和 Windows系统中,成为开发网络应用软件的强有力工具,本章将要详细讨
论这个问题。 ?
2?套接字编程基本概念 ?
?
2.1? 网间进程通信 ?
进程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两
个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,
如 UNIX?BSD中的管道( pipe )、命名管道(named?pipe)和软中断信号 (signal ),UNIX?system?V
的消息( message)、共享存储区( shared?memory)和信号量( semaphore) 等,但都仅限于用
在本机进程之间通信。网间进程通信要解决的是不同主机进程间的相互通信问题(可把同机
进程通信看作是其中的特例) 。为此, 首先要解决的是网间进程标识问题。 同一主机上, 不同
进程可用进程号( process?ID )唯一标识。但在网络环境下,各主机独立分配的进程号不能
唯一标识该进程。例如,主机 A 赋于某进程号 5,在 B机中也可以存在 5 号进程,因此, “5
号进程”这句话就没有意义了。 ?
其次,操作系统支持的网络协议众多,不同协议的工作方式不同,地址格式也不同。因此,
网间进程通信还要解决多重协议的识别问题。 ?
为了解决上述问题, TCP/IP 协议引入了下列几个概念。 ?
端口 ?
网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。 ?
按照 OSI 七层协议的描述, 传输层与网络层在功能上的最大区别是传输层提供进程通信能力。
从这个意义上讲,网络通信的最终地址就不仅仅是主机地址了,还包括可以描述进程的某种
标识符。为此, TCP/IP 协议提出了协议端口( protocol?port ,简称端口)的概念,用于标
识通信的进程。 ?
端口是一种抽象的软件结构 (包括一些数据结构和 I/O 缓冲区)。应用程序 (即进程) 通过系
统调用与某端口建立连接 ( binding )后,传输层传给该端口的数据都被相应进程所接收, 相
应进程发给传输层的数据都通过该端口输出。 在 TCP/IP 协议的实现中,
于一般的 I/O 操作,进程获取一个端口,相当于获取本地唯一的 I/O 文件,可以用一般的读
写原语访问之。 ?
类似于文件描述符, 每个端口都拥有一个叫端口号 (port?number )的整数型标识符, 用于区
别不同端口。 由于 TCP/IP 传输层的两个协议 TCP和 UDP是完全独立的两个软件模块, 因此各
自的端口号也相互独立,如 TCP有一个 255 号端口, UDP也可以有一个 255 号端口,二者并
不冲突。 ?
端口号的分配是一个重要问题。有两种基本分配方式:第一种叫全局分配,这是一种集中控
制方式,由一个公认的中央机构根据用户需要进行统一分配,并将结果公布于众。第二种是
本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作
系统返回一个本地唯一的端口号, 进程再通过合适的系统调用将自己与该端口号联系起来 (绑
扎)。TCP/IP 端口号的分配中综合了上述两种方式。 TCP/IP 将端口号分为两部分,少量的作
为保留端口,以全局方式分配给服务进程。因此,每一个标准服务器都拥有一个全局公认的
端口(即周知口, well-known?port )
为自由端口, 以本地方式进行分配。 TCP和 UDP均规定,小于 256 的端口号才能作保留端口。 ?
地址 ?
三级寻址: ?
1.? 某一主机可与多个网络相连,必须指定一特定网络地址; ?
2.? 网络上每一台主机应有其唯一的地址; ?
3.? 每一主机上的每一进程应有在该主机上的唯一标识符。 ?
通常主机地址由网络 ID 和主机 ID 组成,在 TCP/IP 协议中用 32 位整数值表示; TCP和 UDP
均使用 16 位端口号标识用户进程。 ?
网络字节顺序 ?
不同的计算机存放多字节值的顺序不同, 有的机器在起始地址存放低位字节 (低价先存) ,有
的存高位字节 (高价先存)。为保证数据的正确性, 在网络协议中须指定网络字节顺序。 TCP/IP
协议使用 16 位整数和 32 位整数的高价先存格式,它们均含在协议头文件中。 ?
连接 ?
外部表现出比无连接高的可靠性。 ?
半相关 ?
综上所述,网络中用一个三元组可以在全局唯一标志一个进程: ?
(协议,本地地址,本地端口号) ?
这样一个三元组,叫做一个半相关( half-association ),它指定连接的每半部分。 ?
全相关 ?
一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,
不可能通信的一端用 TCP协议,而另一端用 UDP协议。因此一个完整的网间通信需要一个五
元组来标识: ?
(协议,本地地址,本地端口号,远地地址,远地端口号) ?
这样一个五元组,叫做一个相关( association ),即两个协议相同的半相关才能组合成一个
合适的相关,或完全指定组成一连接。 ?
2.2? 服务方式 ?
“服务” 即网络中各层向紧邻
上层提供的一组操作。下层是服务提供者,上层是请求服务的用户。服务的表现形式是原语
(primitive ),如系统调用或库函数。系统调用是操作系统内核向网络应用程序或高层协议
提供的服务原语。网络中的 n 层总要向 n+1 层提供比 n-1 层更完备的服务,否则 n 层就没有
存在的价值。 ?
在 OSI 的术语中,网络层及其以下各层又称为通信子网,只提供点到点通信,没有程序或进
程的概念。而传输层实现的是“端到端”通信,引进网间进程通信概念,同时也要解决差错
控制,流量控制,数据排序(报文排序) ,连接管理等问题,为此提供不同的服务方式: ?
面向连接(虚电路)或无连接 ?
面向连接服务是电话系统服务模式的抽象,即每一次完整的数据传输都要经过建立连接,使
用连接,终止连接的过程。在数据传输过程中,各数据分组不携带目的地址,而使用连接号
(connect?ID )。本质上,连接是一个管道,收发数据不但顺序一致,而且内容相同。 TCP协
议提供面向连接的虚电路。 ?
无连接服务是邮政系统服务的抽象,每个分组都携带完整的目的地址,各分组在系统中独立
传送。无连接服务不能保证分组的先后顺序,不进行分组出错的恢复与重传,不保证传输的
可靠性。 UDP协议提供无连接的数据报服务。 ?
下面给出这两种服务的类型及应用中的例子: ?
服务类型 ?
服?务?
例?子?
面向连接 ?
可靠的报文流 ?
可靠的字节流 ?
不可靠的连接 ?
文件传输( FTP) ?
远程登录( Telnet )?
数字话音 ?
无连接 ?
不可靠的数据报 ?
有确认的数据报 ?
请求-应答 ?
电子邮件( E-mail )?
电子邮件中的挂号信 ?
网络数据库查询 ?
顺序 ?
在网络传输中,两个连续报文在端-端通信中可能经过不同路径,这样到达目的地时的顺序
可能会与发送时不同。 “顺序”是指接收数据顺序与发送数据顺序相同。 TCP协议提供这项服
务。 ?
差错控制 ?
保证应用程序接收的数据无差错的一种机制。检查差错的方法一般是采用检验“检查和
(Checksum)”的方法。而保证传送无差错的方法是双方采用确认应答技术。 TCP协议提供这
项服务。 ?
流控制 ?
在数据传输过程中控制数据传输速率的一种机制,以保证数据不被丢失。 TCP 协议提供这项
服务。 ?
字节流 ?
字节流方式指的是仅把传输中的报文看作是一个字节序列,不提供数据流的任何边界。 TCP
协议提供字节流服务。 ?
报文 ?
接收方要保存发送方的报文边界。 UDP协议提供报文服务。 ?
全双工 / 半双工 ?
端-端间数据同时以两个方向 / 一个方向传送。 ?
缓存 / 带外数据 ?
在字节流服务中,由于没有报文边界,用户进程在某一时刻可以读或写任意数量的字节。为
剩余35页未读,继续阅读
资源评论
czq131452007
- 粉丝: 2
- 资源: 12万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功