没有合适的资源?快使用搜索试试~ 我知道了~
网络编程入门参考资料
资源详情
资源评论
资源推荐
socket 基础知识
进程通信的概念最初来源于单机系统,由于每个进程都在各自的地址范围内运行,为了保证两个相互通信
的进程之间既不互相干扰,又协调一致的工作,操作系统为进程通信提供了相应设施,如 UNIX BSD 中的管
道(pipe),有名管道(named pipe)和软中断信号(singal),UNIX system V 的消息(message)、共享
存储区(shared memory)和信号量(semaphore)等,但都局限于用在本机进程之间通信。网间进程通
信要解决的是不同主机进程间的通信问题(可把同机进程通信看作其中的特例)。为此,首先要解决的是
网间进程标识问题。同一主机上,不同进程可以用进程号(pid)唯一标识。但在网络环境下,各主机独立
分配的进程号不能唯一标识该进程。例如主机 A 赋予某进程号 5,在 B 主机也可以存在 5 号进程,因此 5
号进程这句话就没有意义了。其次,操作系统支持的网络协议众多,不同协议的工作方式不同,地址格式
也不同。因此,网间进程通信还要解决多重协议的识别问题。为了解决上述问题,TCP/IP 协议引入了下
列几个概念。
端口
网络中可以被命名和寻址的通信端口是操作系统可分配的一种资源。按照 OSI 七层协议的描述,传
输层与网络层最大的区别是传输层提供进程通信能力。从这个意义上讲,网络通信的最终地址就不仅是主
机地址了,还包括可以描述进程的某种标识。为此 TCP/IP 协议提出了协议端口的概念,用于标识通信的
进程。
端口是一种抽象的软件结构,包括一些数据结构和 I/O 缓冲区。应用程序即进程通过系统调用与某
端口建立连接(binding)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数
据都从该端口输出。在 TCP/IP 协议的实现中,端口操作类似于一般的 I/O 操作,进程获取一个端口,相
当于获取本地唯一的 I/O 文件,可以用一般的读写原语访问。
类似于文件描述符,每个端口都拥有一个叫端口号的整数描述符,以区别不同端口。由于 TCP/IP 传
输层的两个协议 TCP 和 UDP 是两个完全独立的软件模块,因此各自的端口号也相互独立。如 TCP 有一个
255 号端口,UDP 也可以有一个 255 号端口,两者并不冲突。
端口号的分配是一个重要问题,有两种基本分配方式:第一种叫全局分配这是一种集中分配方式,
由一个公认的中央机构根据用户需要尽行统一分配,并将结果公布于众,第二种是本地分配,又称动态连
接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回本地唯一的端口号,进程再
通过合适的系统调用,将自己和该端口连接起来(绑定)。TCP/IP 端口号的分配综合了两种方式。TCP/
IP 将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。因此,每一个标准服务器都
拥有一个全局公认的端口叫周知口,即使在不同的机器上,其端口号也相同。剩余的为自由端口,以本地
方式进行分配。TCP 和 UDP 规定,小于 256 的端口才能
作为保留端口。
地址
网络通信中的两个进程分别在两个不同的机器上。在互连网络中,两台机器可以位于不同的网络,
这些网络通过网际互连设备(网关,网桥,路由器)连接。因此需要三级寻址。
1。某一主机与多个网络相连,必须指定一特定网络地址;
2。网络上美一台主机应有其唯一的地址;
3。美一主机上的每一进程应有在该主机上的唯一标识。
主机地址就是 IP 啦,不必多说。进程唯一标识符是十六位整数端口号。网络字节顺序不同的计算机
存放多字节值的顺序不同,有的机器在起始地址存放低位字节,有的则相反。为保证数据的正确性,在网
络协议中需指定网络字节顺序。TCP/IP 协议使用 16 位整数和 32 位整数的高价先存格式,他们均含在协
议的头文件中。
连接
两个进程间的通信链路称为连接。连接在内部表现为一些缓冲区和一组协议机制,在外部表现出比
无连接高的可靠性。
半相关
综上所述,网络中用一个三元组可以在全局中唯一标是一个进程:
(协议,本机地址,本地端口号)
这样一个三元组,叫做一个半相关,他指定连接的每半部分。
全相关
一个完整的网间进程通信需要有两个进程组成,并且只能使用同一种高层协议。也就是说 TCP 和
UDP 没法通信。因此一个完整的网间进程通信需要一个五元组来标识:
(协议,本机地址,本地端口号,远地地址,远地端口号)
这样一个五元组叫做一个全相关。
客户机/服务器模式
在 TCP/IP 网络应用中,通信的两个进程相互作用的主要模式是客户机/服务器模式,即客户端向服务器
发出请求,服务器接收到请求后提供相应的服务客户机/服务器模式的建立基于以下两点:首先,建立网络的
起因是网络中软、硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,
资源较少的客户请求服务这一非对等作用。其次,网间进程通信完全是异步的,相互通信的进程间既不存
在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立一种联系,为二者的数据
交换提供同步,这就是基于客户机/服务器模式的 TCP/IP。
客户机/服务器模式在操作过程中采取的是主动请求方式:
首先服务器方要启动,并根据请求提供相应服务:
1。打开一通信通道并告知本地主机,它愿意在某一公认地址端口上(周知口,如 http 为 80)接受客
户请求。
2。等待客户请求到达该端口。
3。接收到重复服务请求,处理该请求并发送应答信号。接收并发服务请求,要激活一新进程来处
理这个客户请求。新进程处理此客户请求,并不需要对其他请求做出应答。服务完成后,关闭此新进程与
客户的通信链路,并终止。
4。返回第二步,等待另外的客户请求
5。关闭服务器。
客户方:
1。打开一通信通道,并连接到服务器所在主机的特定端口。
2。向服务器发出服务请求报文,等待并接收应答;继续提出请求。
3。请求结束后关闭通信通道并终止。
从上面的描述过程可知:
1。客户与服务器进程的作用是非对称的。因此编码不同。
2。服务进程一般是先于客户请求启动的。只要系统运行,该进程一直存在,直到正常终止或者强
迫终止。
套接字 SOCKET 和 perl 的 socket 编程
在 UNIX 世界中,网络应用编程界面有两类:BSD 的套接字 SOCKET 和 SYSTEM V 的 TLI.由于 Sun
公司采用了支持 TCP/IP 的 BSD 系统,TCP/IP 的应用有了更大发展其网络应用编程界面 Socket 在网络编
程中已成为标准。并且也早已经进入了 MS 的世界。
TCP/IP 的 Socket 提供下列三种类型的套接字
1。流式套接字(SOCKET_STREAM)
提供了一个面向连接,可靠的数据传输服务,数据无差错,无重复的发送且按发送顺序接收。内设
流量控制,避免数据流超限;数据被看作是字节流,无长度限制。FTP 协议即采用流式套接字。
2。数据报式套接字(SOCKET_DGRAM)
提供了一个无连接服务。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并
且接收顺序无序。网络文件系统 NFS 使用数据报式套接字。
3。原始式套接字(SOCKET_RAW)
该接口允许对较低层次协议,如 IP、ICMP 直接访问。常用于检验新的协议实现或访问现有服务中
配置的新设备。
基本套接字调用
创建套接字--socket();
绑定本机端口--bind();
建立连接--connect(),accept();
侦听端口--listen();
数据传输--send(),recv();
输入/输出多路复用--select();
关闭套接字--closesocket();
剩余10页未读,继续阅读
Janlex2008
- 粉丝: 7
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- flowable-designer-5.22.0.zip
- threadmanager.cpp
- 腾讯云小程序 - 一站式开发与部署平台
- 基于JSP+Java+Servlet采用MVC模式开发的购物网站+源码(毕业设计&课程设计&项目开发)
- fastgestures安装包,模拟mac的触控板收拾,两指代表右击, 三指拖拽
- 基于组态王的升降式横移立体车库控制系统+源码(毕业设计&课程设计&项目开发)
- 基于python+Django和协同过滤算法的电影推荐系统+源码(毕业设计&课程设计&项目开发)
- 环境配置 vscode+jupyter
- 项目全部代码,还包含使用到的图片
- 项目全部代码,还包含使用到的图片
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0