一、TCP/IP协议与OSI参考模型的对应关系
二、TCP/IP协议通信模型
三、IP地址、端口号、字节序
1、IP地址
IP地址是Internet中主机的标识
l Internet中的主机要与别的机器通信必须具有一个IP地址
l 一个IP地址为32位(IPV4),或者128(IPV6)
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 端口号一般由IANA(Internet Assigned Numbers Authority)管理
众所周知端口:1------1023,1------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系列,HBO与NBO是一致的
Intel X86系列,HBO与NBO不一致
四、Socket编程接口
1、为什么需要Socket
l 普通的I/O操作过程:打开文件->读/写文件->关闭文件
l TCP/IP协议被集成到操作系统的内核中,引入了新型的”I/O”操作
进行网络操作的两个进程在不同的机器上,如果连接?
网络协议具有多样性,如果进行统一的操作
l 需要一种通用的网络编程接口:Socket
2、什么是Socket
l 独立于具体协议的网络编程接口
l 在ISO模型中,主要位于会话层和传输层之间
l BSD Socket(伯克利套接字)是通过标准的Unix文件描述符和其它程序通讯的一个方法,目前已经被广泛移植到各个平台。
3、Socket类型
l 流式套接字(SOCK_STREAM)
提供了一个面向连接、可靠的数据传输服务。数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
l 数据报套接字(SOCK_DGRAM)
提供无连接服务。数据包以独立数据包的形式被发磅,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
l 原始套接字(SOCK_RAW)
可以对较低层协议,如IP,ICMP直接访问。
4、Socket的位置
5、半相关
网络中用一个三元组可以在全局唯一标志一个进程:
(协议,本地地址,本地端口号)
6、全相关
一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。
一个完整的网间通信需要一个五元组来标识:
(协议,本地地址,本地端口号,远程地址,远程端口号)
五、应用程序的基本网络接口
l 由操作系统提供;
l 进程的通信端点
l 一个socket的信息含义
协议类型
本地地址
本地端口号
远端地址
远端端口号
1、Client和Server执行模式
2、Socket常用函数介绍
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 设置套接口的工作方式