诶呀。。。。。。好久没有回来写博客了,发现自己的老毛病已经犯了,三天打鱼两天晒网,今天就再次把网拿出来晒晒吧。。。。。。(ps. 因为发现一个好软件,所以写博客就不那么勤了,但是绳命不息,学习不止,小马也一直在学习,只是把笔记记在了另一个地方,哦,对了,那个软件叫做印象笔记,看到这篇文章的可以试试哈,非常不错)
大三的课程,突然发现是那么水,今天刚刚结束了网络编程这一门课,虽然下来以后还是和什么都没学一样,但是这也不怪老师,这样的课就是多写代码才可以,另外我觉得这门课其实还是非常实用的,所以就打算在博客上面总结一下,顺便和看到的童鞋们一起再学习一下。废话少说,正题开始!
首先,网络编程是什么?
网络应用开发
Web服务器和浏览器,即时通信,远程监控,
FTP服务器和客户端等
Socket编程等
网络安全开发
防火墙、IDS、协议分析系统、信息内容过滤等
数据包捕获和截断(过滤),构造数据包等
其中Web开发是不算在网络编程里面的。(当然这个知不知道是无所谓的。。。。。。)
针对协议层次
链路帧( 以太网帧、PPP帧、ARP/RARP等)
网络层报文(IP、ICMP、IGMP)
传输层报文(TCP、UDP)
数据链路级的编程主要涉及以下这几个方面
直接网卡编程
物理层和数据链路层的主要功能一般由网卡来完成,大多网卡上都有微处理器,用以确定何时发送及何时从网络上接收数据,并负责执行802.3规定的规程(构成帧,计算FCS,编译码等)。
优点: ①灵活,用户可直接控制网卡;②速度快。缺点: ①编程困难;对编程人员要求高。②通用性差。
③要清楚网卡内部详细结构。基于NDIS(网络驱动接口规范)的网络编程
NDIS是微软和3COM合作开发的网络驱动接口规范,是Windows操作系统中开发网卡驱动程序和网络协议必须遵守的设计框架。NDIS在Windows网络编程中占有重要地位。NDIS向上支持多种网络协议,向下支持不同厂家生产的多种网卡。它提供一个完备的NDIS库(Library)。 但库中所提供的各个函数都工作在核心模式(0级)下,用户程序(3级)不能直接操作,需借助其他编程接口
BPF
BPF:Berkeley Packet Filte,即BSD分组过滤器,最早在BSD UNIX系统内核实现,是BSD系统在TCP/IP软件实现时所提供的一个编程接口。4.4BSD以及源自Berkeley的许多其他实现都支持BPF。通过该接口,外部程序可获取到本机的数据链路层的数据;也可设置过滤器,获得过滤后的数据报。 DLPI:DatalinkProvider Interface,即数据链路提供者接口。
SVR4通过DLPI提供数据链路访问。
由AT&T设计的独立于协议的访问数据链路层所提供的服务接口。 SOCK_PACKET和PF_PACKET
Linux的数据链路层接收分组方法。
较旧的方法是创建类型为SOCK_PACKET的套接口。该方法可用面宽,不过缺乏灵活性。
较新的方法是创建协议族为PF_PACKET的套接口,这个方法引入了更多的过滤和性能特性。 Libcap:与实现无关的访问操作系统所提供的分组捕获机制的分组捕获函数库。
Libcap目前支持源自Berkeley内核中的BPF、Solaris 2.x和HP-UX中的DLPI、SunOS 4.1.x中的NIT、linux的SOCK_PACKET套接口和PF_PACKET套接口以及其他若干操作系统。
Libpcap的Windows版本: Winpcap。网络编程
Libnet:分组构造与输出函数库
函数库提供构造任意协议的分组并输出到网络的接口。它以实现无关的方式提供原始套接口访问方式和数据链路访问方式。
网络层或传输层(IP/TCP/UDP)网络编程:即是我们的重点学习的socket套接字了。