编程网络基础知识点小结
来源:互联网 发布:上海沧澜网络可信吗 编辑:程序博客网 时间: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;
基础的几个数据结构差不多就这几个,熟练掌握是网络编程的基础。
今天就写到这,下回再补充。
- 编程网络基础知识点小结
- 网络编程基础知识点
- 网络编程基础小结
- 黑马程序员_Java编程基础知识点小结
- Java基础之网络编程知识点总结
- Java基础之网络编程知识点总结
- JavaSE基础网络编程的小结
- mysql 基础知识点小结
- 网络基础知识点
- 基础知识点总结:网络
- java基础面试知识点小结
- Python基础字符串知识点小结
- 网络编程知识点
- 网络编程知识点总结
- Linux网络编程知识点
- Android网络编程知识点
- 网络编程面试知识点
- 网络编程知识点梳理
- 黑马程序员---Java中的集合(一)
- js的鼠标事件整理-------Day47
- C++语言笔记系列之十——静态成员
- Ubuntu下搭建FTP服务器
- java编程之路每天进步一点点之2014年6月24日
- 编程网络基础知识点小结
- 一天一个小工具---文件拷贝
- “locktype”enum type 类型重定义问题的解决
- 裸辞后之找工作篇
- 【C/C++】static 的思考
- 黑马程序员--java银行业务调度系统
- android系统架构图及各层介绍
- PHP __CLASS__
- 赋值操作符