chap4socket网络通信

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Linux系统编程第4章Socket网络编程戴瑾daijin.njujl@gmail.com南大金陵学院信息科学与工程系2目录网络编程协议基础Socket基本编程技术Socket高级编程技术3OSI模型与TCP/IP协议栈网络编程协议基础4OSI七层协议功能物理层面向物理传输媒体,屏蔽媒体的不同主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的模数转换与数模转换)。这一层的数据叫做比特。链路层面向一条链路,成帧和无差错传输主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。网络层分配地址、面向多条链路、路由和流量控制要将从下层接收到的数据进行IP地址(例192.168.0.1)的封装与解封装。在这一层工作的设备是路由器,常把这一层的数据叫做数据包。传输层面向两台主机通信,处理可靠传输细节,无差错、无失序传输定义了一些传输数据的协议和端口号(等),如:TCP(传输控制协议),UDP(用户数据报协议)。主要是将从下层接收的数据进行分段进行传输,到达目的地址后在进行重组。会话层面向一次会话,协调双方的交互、同步主要在你的系统之间发起会话或或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)表示层面向通信内容的表示,大家认同的描述方式主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等))应用层面向建立在通信基础上的应用,为应用提供通信服务,主要是一些终端的应用,比如说FTP(各种文件下载),WEB(IE浏览),QQ之类的(你就把它理解成我们在电脑屏幕上可以看到的东西.就是终端应用)网络编程协议基础5TCP协议特点面向连接的可靠传输端到端、建立/断开连接正确、顺序传送数据协议关注问题IP数据报的丢失、重复、失序、延迟发送和接收速度的匹配系统重启动,一方连接信息丢失网络拥塞网络编程协议基础6UDP协议特点无连接不需要在通信前建立连接不使用控制报文传输开销低面向报文不将报文分割,也不合并UDP报文大小直接影响网络利用率过小造成报头比率过大过大造成MTU分片尽力而为、任意交互一对一、一对多、多对一和多对多网络编程协议基础7网络服务的标识TCP/UDP端口号作为服务器程序标识服务器启动时,首先在本地主机注册所使用的TCP/UDP端口号客户通过与服务器指定的TCP端口建立连接(或直接向服务器指定的UDP端口发送信息)来访问特定服务运行服务器程序的主机收到信息后,将其转交给注册该端口的服务器程序处理网络编程协议基础8客户/服务器交互模型服务器程序被动等待请求并做出响应客户程序主动向服务器发出服务请求网络编程协议基础9客户/服务器程序特性对比网络编程协议基础10服务器请求处理流程—循环服务器方案系统资源要求不高在处理一个请求时其他请求必须等待主要针对于面向无连接的客户/服务器模型网络编程协议基础11服务器请求处理流程—并发服务器方案系统资源要求较高实时性和灵活性是该方案的最大特点主要针对于面向连接的客户/服务器模型网络编程协议基础12Linux的网络分层结构BSDSocket是通用接口,支持各种网络工作形式INETSocket支持包括TCP/IP协议在内的Internet地址族网络应用BSDSocket层INETSocket层TCPUDPIPPPPSLIPSocketARP用户数据界面接口界面协议分层网络驱动网络编程协议基础13目录网络通信协议基础Socket基本编程技术Socket高级编程技术14socket基本概念Socket接口是应用程序与TCP/IP协议栈的接口定义一组函数/例程,支持TCP/IP网络应用程序开发与数据通信相关的系统调用是read()/write()是一种文件描述符一个套接字描述一个通信连接的一端两个通信程序中各自有一个套接字来描述自己的Socket不是TCP/IP标准的组成部分,但已成为事实上的工业标准UNIX系列系统提供SocketWindows系列、Macintosh系列、Solaris等亦提供网络编程协议基础15Socket端到端通信的形式形式(IP,PORT)网络进程标识协议,本地地址,本地端口网间通信标识协议,本地地址,本地端口,远程地址,远程端口端口分类公认端口:从0到1023小于256的端口作为保留端口注册端口:端口号从1024到49151.动态和/或私有端口:从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。Socket基本编程技术16基本socketAPIsocket()创建一个新的Socketclose()关闭一个Socketbind()将服务器(IP,Port)赋予Socketlisten()等待到来的客户连接请求(TCP)accept()接受客户连接请求并建立连接(TCP)connect()向服务器发出连接请求send()/recv()发送/接收数据Socket基本编程技术17字节顺序字节顺序大端模式(bigendian):高字节放到高地址上小端模式(littleendian):高字节放到低地址上主机字节顺序(HBO,HostByteOrder)不同的机器HBO不相同,与CPU设计有关Motorola68k系列,HBO与NBO相同Intelx86系列,HBO与NBO相反网络字节顺序(NBO,NetworkByteOrder)使用统一的字节顺序,避免兼容性问题解决兼容性问题途径往网络上发送前:转换成网络字节序从网络接收数据:转换成主机字节序Socket基本编程技术18字节顺序转换函数头文件#includenetinet/in.h函数原型uint32_thtonl(uint32_thostlong);把32位值从主机字节序转换成网络字节序uint16_thtons(uint16_thostshort);把16位值从主机字节序转换成网络字节序uint32_tntohl(uint32_thostlong);把32位值从网络字节序转换成主机字节序uint16_tntohs(uint16_thostshort);把16位值从网络字节序转换成主机字节序说明h代表host,n代表networks代表short,l代表longSocket基本编程技术19socket()函数功能创建一个套接字#includesys/socket.h函数原型intsocket(intdomain,inttype,intprotocol);参数说明domain:通信协议族,即地址族type:套接字类型protocol:通信协议常设置为0,由内核根据指定的类型和协议族使用默认的协议返回值成功时,返回一个大于等于0的文件描述符失败时,返回一个小于0的值Socket基本编程技术20Linux支持的协议和地址族地址协议协议描述AF_UNIXPF_UNIXUnix域AF_INETPF_INETTCP/IP(V4)AF_INET6PF_INET6TCP/IP(V6)AF_AX25PF_AX25业余无线电使用的AX.25AF_IPXPF_IPXNovell的IPXAF_APPLETALKPF_APPLETALKAppleTalkDDSAF_NETROMPF_NETROM业余无线电使用的NetRomSocket基本编程技术21套接字类型流套接字(SOCK_STREAM)可靠的、面向连接的通信使用TCP协议数据报套接字(SOCK_DGRAM)无连接服务使用UDP协议原始套接字(SOCK_RAW)允许对底层协议(如IP、ICMP)直接访问Socket基本编程技术22socket()函数代码框架intmain(){……intsockfd;if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror(“socket”);exit(1);}……}Socket基本编程技术23套接字选项函数原型intgetsockopt(intsockfd,intlevel,intoptname,void*optval,socklen_t*optlen)intsetsockopt(intsockfd,intlevel,intoptname,constvoid*optval,socklen_t*optlen)功能控制套接字行为,如修改缓冲区大小、传输方式等参数说明level:指定控制套接字的层次SOL_SOCKET:通用套接字选项IPPROTO_IP:IP选项IPPROTO_TCP:TCP选项optname:指定控制方式(选项名称)optval:获得/设置套接字选项值Socket基本编程技术24SOL_SOCKET参数选项SO_BROADCAST允许发送广播数据intSO_DEBUG允许调试intSO_DONTROUTE不查找路由intSO_ERROR获得套接字错误intSO_KEEPALIVE保持连接intSO_LINGER延迟关闭连接structlingerSO_OOBINLINE带外数据放入正常数据流intSO_RCVBUF接收缓冲区大小intSO_SNDBUF发送缓冲区大小intSO_RCVLOWAT接收缓冲区下限intSO_SNDLOWAT发送缓冲区下限intSO_RCVTIMEO接收超时structtimevalSO_SNDTIMEO发送超时structtimevalSO_REUSERADDR允许重用本地地址和端口intSO_TYPE获得套接字类型intSO_BSDCOMPAT与BSD系统兼容intSocket基本编程技术25IPPROTO_IP与IPPRO_TCP参数选项IPPROTO_IPIP_HDRINCL在数据包中包含IP首部IP_OPTINOSIP首部选项IP_TOS服务类型IP_TTL生存时间IPPRO_TCPTCP_MAXSEGTCP最大数据段的大小TCP_NODELAY不使用Nagle算法Socket基本编程技术26套接字选项示例更改发送/接收缓冲区大小接收缓冲区intnRecvBuf=32*1024;//设置为32Ksetsockopt(s,SOL_SOCKET,SO_RCVBUF,(constvoid*)&nRecvBuf,sizeof(int));发送缓冲区intnSendBuf=32*1024;//设置为32Ksetsockopt(s,SOL_SOCKET,SO_SNDBUF,(constvoid*)&nSendBuf,sizeof(int));说明对于客户,SO_RCVBUF选项必须在connect之前设置对于服务器,SO_RCVBUF选项必须在listen前设置Socket基本编程技术27bind()函数功能将套接字地址与所创建的套接字号联系起来客户端如果只想使用connect(),则无须使用该函数#includesys/socket.h函数原型intbind(intsockfd,structsockaddr*my_addr,socklen_taddrlen);参数说明sockfd:调用socket返回的文件描述符my_addr:保存地址信息(IP地址和端口)addrlen:设置为sizeof(structsockaddr)返回值成功时,返回0失败时,返回-1Socket基本编程技术28sockaddr结构

1 / 93
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功