June 24,2014
最近在上课时接触到了网络基础到一些知识,以前学过所以总结分享一下~!
说到网络就不得不说那几层东西了,OSI参考模型是给网络分了七层。从上到下分别是应用层,表示层,会话层, 传输层,网络层,链路层,物理层。当然我们现在使用的网络协议TCP/IP实现了其中的五层——去掉了表示层和会话层。每一层上都有自己的协议,他们对自己的上层封装接口提供服务,他们也需要自己下层的服务。不如比较常用的应用层的协议HTTP,FTP,SMTP……传输层协议TCP,UDP……网络层的著名协议IP,IGMP………链路层的作用非常重要,在不是交换类得网络里(也就是不是用交换机原理连接的网络里)他抓取经过本地的包取出包中的目的地和自己的MAC地址比较,如果匹配就萃取提交网络层…关于物理层就没什么了,他靠一些介质来传递信号……
在有了这些基础知识后,要想进行网络编程还要了解一些网络程序结构比如C/S模式,P2P模式。当然还要了解套接字,一个进程要和网络上的另一个进程进行通信,就要经过他们的套接字转给下层网络。
下面就来说一下WINDOWS下的网络编程基础。开发工具VC++IDE。windows下的套接字为WINSOCK。
WINSOCK中SOCKADDR_IN 结构体用来指定IP和端口号。其定义如下
struct sockaddr_in {
short sin_family ;// 地址家族(指定地址格式)AF_INET
u_short sin_port;//端口号
struct in_addr sin_addr ; //IP地址
char size_zero[8];//空字节要设为0
};
其中结构体sockaddr定义为
struct sockaddr{
u_short sa_family; //指定了使用的地址家族
char sa_data[4];//
};
这里只是点一下,这个和上面的是不同的WINSOCK版本里储存IP,port的不同结构。
对于SOCKADDR_IN 结构体中的in_addr(主要作用描述IP表示形式) 结构体的定义如下
struct in_addr
{
union {
struct{u_char s_b1,s_b2,s_b3,s_b4}S_un_b; //以四个u_char 形式描述
struct{u_short s_w1,s_w2}S_un_w;
u_long S_addr;
}S_un;
};
介绍一些很重要的各层需要的结构体
1 。ICMP(网间控制报文协议)每个ICMP都在IP封包中所以他是靠IP寻址的
typedef struct icmp_hdr
{
unsigned char icmp_type;//消息类型
unsigned char icmp_code;//代码
unsigned short icmp_checksum;//校验和
unsigned short icmp_id;//用来唯一标示此请求的ID号,通常设为进程ID
unsigned short icmp_sequence;//序列号
unsigned long icmp_timestamp;//时间戳
}ICMP_HDR,*PICMP_HDR;
下面是大名鼎鼎的IP包含头 结构体
typedef struct _IPHEADER
{
UCHAR ipversion;//版本号 头长度 个4位
UCHAR IPTOS;//服务类型
USHORT iplength;//封包的总长度
USHORT ipID;//用来唯一标示每一个封包
USHORT IPFLAG;//标志
UCHAR TTL;//生存时间 就是TTL
UCHAR ipprotocol;//协议 可以是TCP UDP
USHORT ipchecksum;//校验和
ULONG ipsource;//源IP地址
ULONG ipdestination;//目标IP地址
}IP_HEADER,*PIP_HEADER;
基础的几个数据结构差不多就这几个,熟练掌握是网络编程的基础。
今天就写到这,下回再补充。