编程网络基础知识点小结

来源:互联网 发布:上海沧澜网络可信吗 编辑:程序博客网 时间:2024/05/18 10:19

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;

基础的几个数据结构差不多就这几个,熟练掌握是网络编程的基础。

今天就写到这,下回再补充。

0 0