Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

网络编程(Socket编程)

$
0
0

Socket编程

Socket是连接应用程序与网络驱动程序的桥梁。

一、IP地址

IP地址是一个逻辑地址,英特网上的IP地址具有全球惟一性,由32位表示,4个字节,

常用点分十进制的格式表示,如:192.168.1.1

二、协议

为进行网络中的数据交换通信而建立的规则、标准或约定(=语义+语法+规则);

不同层具有各自不同的协议。

三、ISO/OSI七层参考模型

应用层 处理网络应用

表示层 数据表示

会话层 主机间通信

传输层 端到端的连接

网络层 寻址各最短路径

数据链路层 介质访问(接入)

物理层 二进制传输

从低到高各层的功能描述:

1、物理层

提供二进制传输,确定在通信信道上如何传输比特流。

2、数据链路层

提供介质访问,加强物理层的传输功能。

3、网络层

提供IP寻址各路由(网络层负责找出最佳的传输线路)

4、传输层

为源端主机到目的端主机提供可靠的数据传输服务,隔离网络的上下层协议

,使得网络应用与下层协议无关。

5、会话层

在两个相互通信的应用程序之间建立、组织各协调其相互之间的通信。

6、表示层

处理被传送数据的表示问题(即信息的语法和语义)

7、应用层

为用户的网络应用程序提供网络通信的服务。

四、对等层通信的实质(两个端机的相同层之间的通信)

1、对等层实体之间虚拟通信

2、同一个端机的下层向上层提供服务,实际通信是在两个端机的最底层之间完成的

常用协议:

应用层:

Telnet、FTP、HTTP、DNS、SMPT、POP3

传输层:

TCP、UDP 

网络层:

网际协议:IP

ICMP、IGMP

五、数据封装

端机在发送数据之前需要将数据打包,在接收数据的时候要拆封。

其中将数据打包的过程就叫封装。

封装:在数据前辈加上特定的协议头部。

如:利用TCP协议传送数据时,当数据到达传输层时,就会加上TCP协议表,当

该数据到达传输层时,就会加上TCP协议头,当该数据到达网络层时,在其前面

就会加上IP协议头。

OSI参考模型中,对等层协议之间交换的信息单元统称为协议数据单元(PDU Protocol

Data Unit)。

数据自上而下递交的过程实际上就是不断封装的过程,到达目的地后自下而上递交的过程

就是不断拆封的过程。

注:某一层只能识别由对等层封闭的“信封”,而对于被封装在“信封”内部的数据,仅仅

是拆封后将其交给上层。

六、TCP/IP模型

对应ISO/OSI

应用层 应用层、表示层、会话层

传输层 传输层

网络层 网络层

网络接口层 数据链路层、物理层

七、端口

为了标识通信实体中进行通信的进程(应用程序),TCP/IP协议提出了协议端口(

Protocol Port 简称端口)。

端口:是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。

应用程序通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被

相应的进程所接收,相应进程发给传输层的数据都通过该端口输出。

端口号:用来惟一标识端口的东东。

端口号与协议相关:使用不同协议的不同的网络应用程序,可以拥有相同的端口号。

端口号:16位二进制表示(0~2^16-1) 0~65535,1024以下的端口号保留给预定

义的服务。

注:我们在编写网络应用程序时,要为程序指定1024以上的端口号。

八、Socket(套接字)的引入

套接字存在于通信区域中,通信区域也叫地址族。

通信区域是一个抽象的概念,主要用将通过套接字通信的进程的共有特性综合在一起。

Socked通常只与同一区域的套接字交换数据。

注:Windows Socket只支持一个通信区域:网际域(AF_INET),这个域被使用

网际协议簇通信的进程使用。

九、网络字节顺序

不同的计算机存放多字节值的顺序不同,

有的机器在起始地址存放低位字节(低位先存)

有的机器在起始地址存放高位字节(高位先存)

基于Intel CPU的PC,采用的是低位先存。

为保证数据传输的正确性,在网络协议中需要指定网络字节顺序。TCP/IP协议使用

16位整数和32位整数的高位先存格式。

所以在网络中不同的主机间进行通信时,要统一采用网络字节顺序。

十、Windows Sockets的实现

Windows Sockets是Microsoft Windows的网络程序设计接口,通常以动态链接库的形

式提供使用,与协议无关并向下兼容,可以使用任何底层传输协议提供的通信能力。

套接字的类型

1、流式套接字(Sock_STREAM)

提供面向连接,可靠的数据传输服务,数据无差错,无重复的发送,且按发送顺序

接收(实际上是基于TCP协议实现的。)

2、数据报式套接字(Sock_DGRAM)

提供无连接服务(基于UDP协议实现的)

3、原始套接字(Sock_RAW)

十一、基于TCP(面向连接)的Socket的编程

基于TCP(面向连接)的Socket编程的服务器端程序流程:

1、创建套接字(Socket)

2、将套接字绑定到一个本地地址和端口上(bind)

3、将套接字设为监听模式,准备接收客户请求(Listen)

4、等待客户请求到来;发请求到来后,接受连接请求,返回一个新的对应于此次连接

的套接字(Accept)

5、用返回的套接字和客户端进行通信(Send/recv)

6、返回,等待另一客户请求

7、关闭套接字

基于TCP(面向连接)的Socket编程的客户端的程序流程:

1、创建套接字(Socket)

2、向服务器发出连接请示(Connect)

3、和服务器端进行通信(Send/recv)

4、关闭套接字

十二、基于UDP(面向无连接)的Socket编程

服务器端也叫接收端,接收端程序的编写:

1、创建套接字(Socket)

2、将套接字绑定到一个本地地址和端口(bind)

3、等待接收数据(recvfrom)

4、关闭套接字

客户端程序的编写

1、创建套接字(Socket)

2、向服务器发送数据(sendto)

3、关闭套接字

 

 


作者:xuxianmei 发表于2013-9-19 14:05:33 原文链接
阅读:20 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>