lec1网络编程基础

上传人:小** 文档编号:57409867 上传时间:2018-10-21 格式:PPT 页数:68 大小:2.06MB
返回 下载 相关 举报
lec1网络编程基础_第1页
第1页 / 共68页
lec1网络编程基础_第2页
第2页 / 共68页
lec1网络编程基础_第3页
第3页 / 共68页
lec1网络编程基础_第4页
第4页 / 共68页
lec1网络编程基础_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《lec1网络编程基础》由会员分享,可在线阅读,更多相关《lec1网络编程基础(68页珍藏版)》请在金锄头文库上搜索。

1、网络安全编程技术,2/65,课程主要内容,网络编程基础 安全编码 网络安全应用编程 数据包的捕获 端口扫描 主机扫描 防火墙 CryptoAPI编程 基于网络协议的信息隐藏编程,3/65,参考教材,1. 网络安全编程技术与实例,刘文涛,机械工业出版社,2008 2.计算机网络应用软件编程技术,吴英,机械工业出版社,2010 3.网络安全编程与实践,陈卓等,国防工业出版社,2008,4/65,第一讲:网络编程基础,主要内容: TCP/IP协议基础 Socket编程基础,5/65,1. TCP/IP协议族分层,应用层,各种应用程序: Telnet、FTP、WWW、SMTP 负责处理特定的应用程序细

2、节,运输层 (传输层),网络层 (互联网层),链路层 (数据连路层/网络接口层),TCP和UDP 为两台主机上的应用程序提供端到端的通信,IP、ICMP和IGMP 处理分组在网络中的活动,操作系统中的设备驱动程序、计算机中对应的网络接口卡 处理与电缆的物理接口细节,6/65,TCP/IP协议族中不同层次的协议,用户进程,用户进程,用户进程,用户进程,TCP,UDP,ICMP,IP,IGMP,ARP,硬件接口,RARP,应用层,传输层,网络层,网络接口层,媒体,7/65,数据进入协议栈时的封装过程,6 6 2 20 20 4,目的地址,源地址,类型,CRC,应用数据,IP首部,TCP首部,应用数

3、据,TCP首部,用户数据,以太网帧,461500字节,IP数据报,TCP段,应用程序,TCP,IP,以太网 驱动程序,以太网,以太网首部,以太网 尾部,8/65,以太网数据帧的分用过程,Telnet,FTP,SMTP,SNMP,TFTP,TCP,UDP,ICMP,IP,以太网驱动程序,以太网硬件,23,21,25,161,69,6,17,1,0800H,0806H,0835H,根据以太网头部中 的帧类型进行分用,根据IP头部中的 协议值进行分用,根据TCP或UDP 头部中的端口 号进行分用,9/65,Application,TCP/UDP,IP,Network Access,Applicati

4、on,TCP/UDP,IP,Network Access,使 用 下 层 提 供 的 服 务,提 供 上 层 一 些 服 务,10/65,无连接通信,不同物理网络之间存在差异 通信能力、分组长度、延时 允许IP报文从不同路径达到目的地 路由器为每个IP报文独立选路 IP通信不保证可靠性,但灵活性增加 多种网络都能满足的通信方式 允许多种选路策略(如可靠性、容量、延时) 结合应用考虑实际通信策略,11/65,运输层协议和网络层协议的主要区别,应用进程,应用进程,IP 协议的作用范围 (提供主机之间的逻辑通信),TCP 和 UDP 协议的作用范围 (提供进程之间的逻辑通信),因 特 网,12/65

5、,1.2 UDP概述,UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和可选的差错检测的功能。 虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。 发送数据之前不需要建立连接 UDP 的主机不需要维持复杂的连接状态表。 UDP 用户数据报只有8个字节的首部开销。 网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。,13/65,1.3 TCP概述,高层的许多应用需要 传输大量的数据 可靠的通信服务 无法容忍IP 或 UDP提供的无可靠性保证的服务 各种应用无法保证完全一致的可靠性方法 TCP 面向连接的 可靠的 字节流方

6、式 FTP、SMTP、Telnet,14/65,同一系统中不同进程间进行通信时,通过系统分配的进程号(Process ID)就可以惟一标识一个进程。也就是说,要通信的进程只要知道对方的进程号就可以进行通信。而网络情况下进程间的通信问题就要复杂得多,不能只简单地用进程号来标识不同的进程,因为各主机都独立地分配其进程号。 为了惟一地标识网络中通信的一个进程(即通信的某一方),就要使用一个如下的三元组:(协议,本地IP地址,本地端口号),1.4 网络应用程序的标识问题,15/65,该怎样完整地表示网络中进行通信的两个进程,或一个通信流?(协议,本地地址,本地端口号,远地地址,远地端口号),网络应用程

7、序的标识问题(续),16/65,2.1 Socket编程的提出,站在应用程序实现的角度,应用程序如何方便地使用协议栈软件进行通信呢?如果能在应用程序与协议栈软件之间提供一个软件接口,就可以方便客户与服务器软件的编程。套接字应用程序编程接口是网络应用程序通过网络协议栈进行通信时所使用的接口,即应用程序与协议栈软件之间的接口,简称套接字编程接口(Socket API)。它定义了应用程序与协议栈软件进行交互时可以使用的一组操作,决定了应用程序使用协议栈的方式、应用程序所能实现的功能、以及开发具有这些功能的程序的难度。,17/65,Socket编程的起源,加州大学伯克利(Berkley)分校开发并推广

8、了一个包括TCP/IP互联协议的UNIX,称为BSD UNIX(Berkeley Software Distribution UNIX)操作系统,套接字编程接口是这个操作系统的一个部分。后来的许多操作系统并没有另外搞一套其它的编程接口,而是选择了对于套接字编程接口的支持。由于这个套接字规范最早是由Berkeley大学开发的,一般将它称为Berkeley Sockets规范。,18/65,Winsock规范的核心内容是符合Berkeley Socket风格的库函数,但为了使程序员能充分利用Windows消息驱动机制进行编程,又定义开发了一组针对Windows的扩展库函数(本门课程基本忽略该扩展)

9、。 Windows Sockets规范中针对Windows的扩展部分,为应用程序开发者提供了开发Windows应用软件的功能,它有利于程序员写出更加高效的程序。另外,除了WSAStartup( )和WSACleanup( )两个函数外,其他Windows扩展函数的使用不是强制性的。,Windows Sockets,19/65,2.2 什么是套接字(SOCKET),套接口是对网络中不同主机上应用进程之间进行双向通信的端点的抽象,一个套接口就是网络上进程通信的一端,提供了应用层进程利用网络协议栈交换数据的机制。,电插座与电话插座的作用,20/65,应用进程、套接口、网络协议栈及操作系统的关系,21

10、/65,从实现的角度来讲,非常复杂。套接字是一个复杂的软件机构,包含了一定的数据结构,包含许多选项,由操作系统内核管理。从使用的角度来讲,非常简单。对于套接字的操作形成了一种网络应用程序的编程接口(API)。把这一套操作套接字的编程接口函数称作套接字编程接口,套接字是它的操作对象。 总之,套接字是网络通信的基石。,什么是套接字(SOCKET),22/65,为了满足不同的通信程序对通信质量和性能的要求,一般的网络系统提供了三种不同类型的套接口,以供用户在设计网络应用程序时根据不同的要求来选择。这三种套接口分别是:(1) 流式套接口(SOCK_STREAM) 。(2) 数据报套接口(SOCK_DG

11、RAM) 。(3) 原始套接口(SOCK_RAW) 。,2.3 Socket的分类,23/65,数据报套接字基于UDP协议,24/65,流式套接字基于TCP协议,25/65,(3)原始式套接字(RAW SOCKET),原始式套接字允许对较低层次的协议,如IP、ICMP直接访问,可用于检验新的协议的实现,一般的程序员很少使用。,26/65,2.4 使用确定的IP地址和传输层端口号,往往在生成套接字的描述符后,要将套接字与计算机上的特定的IP地址和传输层端口号相关联,这个过程称为绑定。一个套接口要使用一个确定的三元组网络地址信息,才能使它在网络中唯一地被标识。,27/65,2.2.4 套接字使用的

12、数据类型和相关的问题在套接字编程接口中,专门定义了三种结构型的数据类型,用来存储协议相关的网络地址,在套接字编程接口的函数调用中要用到它们。,三种表示套接字地址的结构,28/65,(1) Sockaddr 结构,sockaddr结构,针对各种通信域的套接字,存储它们的地址信息。 struct sockaddr unsigned short sa_family; / 地址家族char sa_data14; / 协议地址 ,29/65,专门针对Internet通信域,存储套接字相关的网络地址信息,例如IP地址,传输层端口号等信息。 struct sockaddr_in short int sin_

13、family; / 地址族unsigned short sin_port; / 端口号struct in_addr sin_addr; / IP 地址unsigned char sin_zero8; / 全为0 struct sockaddr真的很一般吗?,(2) sockaddr_in结构,30/65,in_addr结构,专门用来存储 IP地址。Struct in_addr unsigned long s_addrl; ,(3) in_addr结构,Socket 描述符,Socket(无符号整数),32/65,2.5 Socket编程的一些基本函数,字节顺序转换函数 Ip地址转换函数,33/

14、65,在具体计算机中的多字节数据的存储顺序,称为本机字节顺序。多字节数据在网络协议报头中的存储顺序,称为网络字节顺序。 网络应用程序要在不同的计算机中运行,本机字节顺序是不同的,但是,网络字节顺序是一定的。 所以,应用程序在编程的时候,在把IP地址和端口号装入套接字的时候,应当把它们从本机字节顺序转换为网络字节顺序;相反,在本机输出时,应将它们从网络字节顺序转换为本机字节顺序。,(1)本机字节顺序和网络字节顺序,34/65,htons() 短整数本机顺序转换为网络顺序,用于端口号。 htonl() 长整数本机顺序转换为网络顺序,用于IP地址。 ntohs() 短整数网络顺序转换为本机顺序,用于

15、端口号。 ntohl() 长整数网络顺序转化为本机顺序,用于IP地址。这四个函数将被转换的数值作为函数的参数,函数返回值是转换后的结果。,字节顺序转换的四个函数,35/65,在因特网中,IP地址常常用点分十进制的表示方法,但在套接字中,IP地址是无符号的长整型数,套接字编程接口设置了两个函数,专门用于两种形式的IP地址的转换。,(2)点分十进制的IP地址的转换,unsigned long inet_addr( const char* cp)入口参数cp:点分十进制形式的IP地址返回值: 网络字节顺序的IP地址char* inet_ntoa(struct in_addr in),36/65,(3)Winsock库的加载和停止,如果用户在没有正确加载Winsock DLL(ws2_32.dll)的情况下使用了其他的Winsock API函数,则被调用的函数返回WSANOTINITIALISED错误信息,代码为10093。 该函数在程序中的基本使用方法如下:#include/其他代码WORD wVersionRequested;WSADATA wsaData;wVersionRequested=MAKEWORD(2,2);if(WSAStartup(wVersionRequested,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 宣传企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号