您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > TCP+IP+Socket网络编程
USTCNICTCP/IPSocket网络编程Version:2007-12-15赫卫卿deane@mail.ustc.edu.cn2007-12-152020/3/17TCP/IPSocket网络编程2/83内容大纲•Internet与TCP/IP协议•TCP/IP协议体系结构与OSI模型•Socket编程接口–WindowsSocket–LinuxSocket•TCP/IP网络程序框架与示例2020/3/17TCP/IPSocket网络编程3/83Internet与TCP/IP协议第一节Internet与TCP/IP协议2020/3/17TCP/IPSocket网络编程4/83Internet的历史•Internet-“冷战”的产物–1957年10月和11月,前苏联先后有两颗“Sputnik”卫星上天–1958年美国总统艾森豪威尔向美国国会提出建立DARPA(DefenseAdvancedResearchProjectAgency),即国防部高级研究计划署,简称ARPA–1968年6月DARPA提出“资源共享计算机网络”(ResourceSharingComputerNetworks),目的在于让DARPA的所有电脑互连起来,这个网络就叫做ARPAnet,即“阿帕网”,是Interne的最早雏形2020/3/17TCP/IPSocket网络编程5/83网络互联促成了TCP/IP协议的产生•早期的ARPAnet使用网络控制协议(NetworkControlProtocol,NCP),不能互联不同类型的计算机和不同类型的操作系统,没有纠错功能•1973年由Kahn和VintonCerf两人合作为ARPAnet开发了新的互联协议。•1974年12月两人正式发表第一份TCP协议详细说明,但此协议有信包丢失时不能得到有效的纠正2020/3/17TCP/IPSocket网络编程6/83网络互联促成了TCP/IP协议的产生•TCP协议分成了两个不同的协议:–用来检测网络传输中差错的传输控制协议TCP–专门负责对不同网络进行互联的互联网协议IP•从此TCP/IP协议诞生•1983年ARPAnet上停止使用NCP,互联网上的主机全部使用TCP/IP协议,TCP/IP协议成为Internet中的“世界语”2020/3/17TCP/IPSocket网络编程7/83Internet与TCP/IP协议第二节TCP/IP协议体系结构与OSI模型2020/3/17TCP/IPSocket网络编程8/83网络的体系结构•网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。•每层实现不同的功能,其内部实现方法对外部其他层次来说透明,每层向上层提供服务,也可以使用下层提供的服务•网络体系结构即指网络的层次结构和每层所使用协议的集合•两类非常重要的体系结构:OSI与TCP/IP2020/3/17TCP/IPSocket网络编程9/83OSI开放系统互联模型•OSI模型相关的协议已经很少使用,但模型本身非常通用•共有七层应用层数据链路层网络层传输层会话层表示层物理层高层低层2020/3/17TCP/IPSocket网络编程10/83TCP/IP协议族的体系结构•TCP/IP协议是Internet事实上的工业标准。•一共有四层应用层(Telnet、FTP、HTTP、DNS、SMTP等)网络接口和物理层(以太网、令牌环网、FDDI等)网络层(IP、ICMP和IGMP)传输层(TCP和UDP)2020/3/17TCP/IPSocket网络编程11/83TCP/IP协议与OSI参考模型的对应关系应用层物理层数据链路层网络层传输层会话层表示层应用层网络层网络接口与物理层传输层OSI模型TCP/IP协议Telnet、、FTP等TCP与UDPIP、ICMP和IGMP网卡驱动物理接口2020/3/17TCP/IPSocket网络编程12/83TCP/IP协议通信模型客户方FTP程序TCP协议IP协议以太网驱动程序主机A客户方FTP程序TCP协议IP协议以太网驱动程序主机BIP协议以太网驱动程序令牌环网驱动程序路由器AIP协议令牌环网驱动程序以太网驱动程序路由器B以太网以太网令牌环网2020/3/17TCP/IPSocket网络编程13/83数据的封装与传递过程客户数据主机A应用层数据包客户数据FTP头客户数据FTP头TCP头客户数据FTP头TCP头IP头客户数据FTP头TCP头IP头以太网头CRC路由器接收以太网数据帧并根据目标IP地址转发到令牌环网接口客户数据主机B客户数据FTP头客户数据FTP头TCP头客户数据FTP头TCP头IP头客户数据FTP头TCP头IP头令牌网头CRCTCP段IP数据报IP数据报TCP段应用层数据包以太网数据帧令牌环网数据帧发送端数据封装过程接收端数据解封过程2020/3/17TCP/IPSocket网络编程14/83一些基本概念•IP地址•端口号•字节序2020/3/17TCP/IPSocket网络编程15/83IP地址•IP地址是Internet中主机的标识–Internet中的主机要与别的机器通信必须具有一个IP地址–一个IP地址为32位(IPV4),或者128位(IPV6)–每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由–特殊的IP地址:广播地址、多播地址•表示形式:常用点分形式,如202.38.64.10,最后都会转换为一个32位的整数。•IP地址分级•子网掩码2020/3/17TCP/IPSocket网络编程16/83端口号•为了区分一台主机接收到的数据包应该递交给哪个进程来进行处理,使用端口号•TCP端口号与UDP端口号独立•端口号一般由IANA(InternetAssignedNumbersAuthority)管理–众所周知端口:1~1023,1~255之间为大部分众所周知端口,256~1023端口通常由UNIX占用–注册端口:1024~49151–动态或私有端口:49151~655352020/3/17TCP/IPSocket网络编程17/83端到端通信数据包投递过程应用程序应用程序应用程序应用程序TCPUDPICMPIPARPRARP以太网网络接口层以太网由传输层报头中的端口字段标识由IP数据报头中的上层协议字段标识由以太网帧类型字段标识2020/3/17TCP/IPSocket网络编程18/83一个比喻•如果把IP数据包的投递过程看成是给远方的一位朋友寄一封信,那么•IP地址就是这位朋友的所在位置,如安徽合肥中国科大计算系(依靠此信息进行路由)•端口号就是这位朋友的名字(依靠这个信息最终把这封信交付给这位收信者)2020/3/17TCP/IPSocket网络编程19/83字节序•大尾端(Big-Endian):字节的高位在内存中放在存储单元的起始位置•小尾端(Little-Endian):与大尾端相反0000101010010111000011111000100000001010100101110000111110001000MemoryAA+1A+2A+32020/3/17TCP/IPSocket网络编程20/83字节序•网络字节序(NBO,NetworkByteOrder)–使用统一的字节顺序,避免兼容性问题•主机字节序(HBO,HostByteOrder)–不同的机器HBO是不一样的,这与CPU的设计有关–Motorola68K系列,HBO与NBO是一致的–IntelX86系列,HBO与NBO不一致2020/3/17TCP/IPSocket网络编程21/83Internet与TCP/IP协议第三节Socket编程接口2020/3/17TCP/IPSocket网络编程22/83内容•Socket简介–WindowsSocket–LinuxSocket•Socket常用函数介绍•TCP/IP网络程序框架与实例•通信方式–阻塞–非阻塞2020/3/17TCP/IPSocket网络编程23/83为什么需要Socket•普通的I/O操作过程–打开文件->读/写操作->关闭文件•TCP/IP协议被集成到操作系统的内核中,引入了新型的“I/O”操作–进行网络操作的两个进程在不同的机器上,如何连接?–网络协议具有多样性,如何进行统一的操作•需要一种通用的网络编程接口:Socket2020/3/17TCP/IPSocket网络编程24/83什么是Socket•独立于具体协议的网络编程接口•在ISO模型中,主要位于会话层和传输层之间•BSDSocket(伯克利套接字)是通过标准的UNIX文件描述符和其它程序通讯的一个方法,目前已经被广泛移植到各个平台。2020/3/17TCP/IPSocket网络编程25/83Socket类型•流式套接字(SOCK_STREAM)–提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。•数据报套接字(SOCK_DGRAM)–提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。•原始套接字(SOCK_RAW)–可以对较低层次协议,如IP、ICMP直接访问。2020/3/17TCP/IPSocket网络编程26/83Socket的位置应用层程序IP数据链路层与物理层TCPUDP流套接字接口数据报套接字接口原始套接字接口2020/3/17TCP/IPSocket网络编程27/83两类系统中使用的Socket•不同操作系统中的Socket–WindowsSocket(Winsock)–LinuxSocket(BSDSocket)2020/3/17TCP/IPSocket网络编程28/83WindowsSocket•简称Winsock,是在Windows环境下使用的一套网络编程规范,基于4.3BSD的BSDSocketAPI制定–1991年Winsock1.1,16位,由WINSOCK.DLL支持,主要用在Windows95中–1997年Winsock2.2版,32位,由WSOCK32.DLL支持,主要用在Windows98及以后的版本中–已经成为Windows环境下网络编程的事实标准•三类函数–与BSDSocket相兼容的基本函数–与BSDSocket相兼容的网络信息检索函数–Windows专用扩展函数2020/3/17TCP/IPSocket网络编程29/83LinuxSocket•基本上就是BSDSocket•需要使用的头文件–数据类型:#includesys/types.h–函数定义:#includesys/socket.h2020/3/17TCP/IPSocket网络编程30/83Socket常用函数介绍•基本函数•网络信息检索函数2020/3/17TCP/IPSocket网络编程31/83基本函数•网络连接函数–socket创建套接字–bind绑定本机端口–connect建立连接–listen监听端口–accept接受连接–recv,recvfrom数据接收–send,sendto数据发送–close,shutdown关闭套接字2020/3/17TCP/IPSocket网络编程32/83基本函数•转换函数–IP地址转换函数•inet_addr()点分十进制数表示的IP地址转换为网络字节序的IP地址•inet_ntoa()网络字节序的IP地址转换为点分十进制数表示的IP地址–字节排序函数•htonl4字节主机字节序转换为网络字节序•ntohl4字节网络字节序转换为主机字节序•htons2字节主机字节序转换为网络字节序•ntohs2字节网络字节序转换为主机字节序2020/3/17TCP/IPSocket网络编程33/83网络信息检索函数•网络信息检索函数–gethostname获得主机名–getpeername获得与套接口相连的远程协议地址–getsockn
本文标题:TCP+IP+Socket网络编程
链接地址:https://www.777doc.com/doc-4376572 .html