C/C++网络通讯编程(二)


一、TCP/IP协议与OSI参考模型的对应关系

 

 

二、TCP/IP协议通信模型

 

 

三、IP地址、端口号、字节序

1IP地址

IP地址Internet中主机的标识

l Internet的主机要与别的机器通信必须具有一个IP地址

l 一个IP地址为32(IPV4,或者128IPV6

l 每个数据包都必须携带目的IP地址和源IP地址,路由器依靠信息为数据包选择路由

l 特殊的IP地址:广播地址、多播地址

表示形式:常用点分十进制形式,如192.168.202.123,最后都会转换一个32的整数

IP地址分级:A   ,       B,             C,                        D,E

子网掩码:255.0.0.0  255.255.0.0   255.255.255.0                 备用

2端口号

l 为了区分一台主机接收到的数据包应用递交给哪个进程来进行处理,使用端口号

l TCP端口号与UDP端口号独立

l 端口号一般由IANAInternet Assigned Numbers Authority)管理

众所周知端口:1------10231------255之间为大部分众所周知端口,256------1023端口通常由UNIX占用

注册端口:1024------49151

动态或私有端口:49151------65535

3字节序

l 大尾端(Big-Endian):字节的高位在内存中放在存储单元的起始位置

       

l 小尾端(Little-Endian):与大尾端正好相反

l 网络字节序(NBO,Network Byte Order:使用统一的字节顺序,避免兼容性问题

l 主机字节序(HBO,Host Byte Order)

不同的机器HBO是不一样的,这与CPU的设计有关

 Motorola 68k系列HBONBO是一致的

 Intel X86系列,HBONBO不一致

四、Socket编程接口

1为什么需要Socket

l 普通的I/O操作过程:打开文件->/写文件->关闭文件

l TCP/IP协议被集成到操作系统的内核中,引入了新型的I/O”操作

进行网络操作的两个进程在不同的机器上,如果连接?

网络协议具有多样性,如果进行统一的操作

l 需要一种通用的网络编程接口:Socket

2什么是Socket

l 独立于具体协议的网络编程接口

l 在ISO模型中,主要位于会话层和传输层之间

l BSD Socket(克利套接字)是通过标准的Unix文件描述符和其它程序通讯的一个方法,目前已经被广泛移植到各个平台。

3Socket类型

l 流式套接字(SOCK_STREAM)

提供了一个面向连接、可靠的数据传输服务。数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。

l 数据报套接字(SOCK_DGRAM)

提供无连接服务。数据包以独立数据包的形式被发磅,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。

l 原始套接字(SOCK_RAW)

可以对较低层协议,如IP,ICMP直接访问。

4Socket位置

 

 

5、半相关

网络中用一个三元组可以在全局唯一标志一个进程:

(协议,本地地址,本地端口号)

6全相关

一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。

一个完整的网间通信需要一个五元组来标识:

(协议,本地地址,本地端口号,远程地址,远程端口号)

五、应用程序的基本网络接口

l 由操作系统提供;

l 进程的通信端点

l 一个socket信息含义

协议类型

本地地址

本地端口号

远端地址

远端端口号

1ClientServer执行模式

 

 

2Socket常用函数介绍

l 基本函数------网络连接函数

n socket   创建套接字

n bind     绑定本机端口

n conncet  建立连接

n listen    监听端口

n accept   接受连接

n recv,recvfrom  数据接收

n send,sendto    数据发送

n close,shutdown 关闭套接字

l 基本函数------转换函数

n IP地址转换函数 

u inet_addr()  点分十进制数表示的IP地址转换为网络字节序的IP地址 192.168.0.1

u inet_ntoa()  网络字节序的IP地址转换为点分十进制数表示的IP地址 

n 字节排序函数

u htonl  4字节主机字节序转换为网络字节序

u ntohl  4字节网络字节序转换为主机字节序

u htons  2字节主机字节序转换为网络字节序

u ntohs  2字节网络字节序转换为主机字节序

l 基本函数------网络信息检索函数

n gethostname             获得主机名

n getpeername             获得与套接口相连的远程协议地址

n getsockname             获得套接口本地协议地址

n gethostbyname           根据主机名取得主机信息

n gethostbyaddr            根据主机地址取得主机信息

n getprotobynumber        根据协议名取得主机协议信息

n getservbyname           根据服务名取得相关的服务信息

n getservbyprot            根据端口号取得相关服务信息

n getsockopt/setsockopt     获取/设置一个套接口选项

n ioctlsocket               设置套接口的工作方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值