Linux环境编程-网络编程(李).ppt
《Linux环境编程-网络编程(李).ppt》由会员分享,可在线阅读,更多相关《Linux环境编程-网络编程(李).ppt(66页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux网络编程网络编程2009-12计算机网络计算机网络计算机网络:把分布在不同地理位置上的,具有独立功能的多台计算机、终端及其附属设备,用通信设备和通信线路连接起来,再配以相应的网络软件,以实现计算机资源共享。LAN物理拓扑结构物理拓扑结构OSI 参考模型参考模型应用层展示层会话层传输层网络层数据链路层物理层应用层展示层会话层传输层网络层数据链路层物理层Network字节序字节序不同的处理器会使用不同的方式来解释多字节数字。32 bit 整数0 x01020304网络字节序就是指大端0101020203030404小端小端/小尾小尾大端大端/大尾大尾0404030302020101低地址
2、高地址OSI vs TCP/IP应用层表示层会话层传输层网络层数据链路层物理层应用层IPv4,IPv6网络介质层TCPUDPOSI模型TCP/IP模型通过路由器连接的两个网络通过路由器连接的两个网络FTP客户TCPIP以太网驱动程序FTP服务器TCPIP令牌环驱动程序令牌环以太网驱动程序令牌环驱动程序IPFTP协议TCP协议IP协议IP协议以太网客户服务器数据进入协议栈时的封装数据进入协议栈时的封装用户数据用户数据App头部用户数据TCP头部用户数据TCP头部IP头部用户数据TCP头部IP头部以太网头部以太网尾部以太网帧401500字节FTP客户TCPIP以太网驱动程序TCP段IP分组TCP/
3、IP协议族概貌协议族概貌tcpdumpmroutedpingtracerouteAppl.Appl.TCPUDPICMPIGMPIPv4BPFDLPI数据链路ARPRARPUDP:用户数据报协议用户数据报协议UDP提供无连接服务UDP缺乏可靠性支持,应用程序必须实现:确认、超时、重传、流控等UDP面向记录服务UDP数据报格式数据报格式源端口目的端口长度校验和数据01531struct udphdr u_int16_t source;u_int16_t dest;u_int16_t len;u_int16_t check;TCP:传输控制协议:传输控制协议TCP是面向连接的。TCP提供可靠性,实
4、现了丢失重传。RTT的估算。TCP通过给所发送数据的每一个段管理一个序列号进行排序。TCP提供流量控制和拥塞控制:通告窗口、拥塞窗口。TCP的连接是全双工的。TCP协议数据段格式协议数据段格式HLEN窗口序列号确认号源端口目的端口保留码位校验和紧急指针选项填充字节数据URGACKPSHRSTSYNFIN015317首部数据区TCP连接的建立连接的建立TCP连接的过程:n服务器必须准备好接受外来的连接。通过调用服务器必须准备好接受外来的连接。通过调用socket,bind,listensocket,bind,listen函数完成。称为被动打开。函数完成。称为被动打开。n客户通过调用客户通过调用c
5、onnectconnect进行主动打开。这引起客户进行主动打开。这引起客户TCPTCP发送一个发送一个SYNSYN分节,告诉服务器客户将在连分节,告诉服务器客户将在连接中发送的数据的初始序列号。接中发送的数据的初始序列号。n服务器必须确认客户的服务器必须确认客户的SYNSYN,同时自己也得发送,同时自己也得发送一个一个SYNSYN分节。服务器以单个分节向客户发送分节。服务器以单个分节向客户发送SYNSYN和对客户的和对客户的SYNSYN的的ACKACK。n客户必须确认服务器的客户必须确认服务器的SYNSYN。TCP三次握手三次握手客户服务器SocketConnect(阻塞)(主动打开)Sock
6、et,bind,listen(被动打开)SYN JSYN K,ack J+1ack K+1Accept返回Read阻塞Connect返回TCP连接终止连接终止TCPTCP一般用四个分节终止一个连接:一般用四个分节终止一个连接:n某个进程首先调用某个进程首先调用close,close,这一端的这一端的TCPTCP于是发送于是发送一个一个FINFIN分节,表示数据发送完毕。主动关闭。分节,表示数据发送完毕。主动关闭。n另一端称为被动关闭。另一端称为被动关闭。TCPTCP对接收的对接收的FINFIN分节进分节进行确认,并以文件结束标志传递给应用程序。行确认,并以文件结束标志传递给应用程序。n一段时间
7、后,接收到文件结束标志的应用程序一段时间后,接收到文件结束标志的应用程序调用调用closeclose,这也导致向对方发送一个,这也导致向对方发送一个FINFIN分节。分节。n接收到这个接收到这个FINFIN分节的原发送方分节的原发送方TCPTCP对它进行确对它进行确认。认。TCP连接关闭连接关闭客户服务器Close主动关闭被动关闭Read返回0FIN Mack N+1Closeack M+1FIN N网络中的几类地址网络中的几类地址物理地址:即MAC地址逻辑地址:即IP地址端口地址:区分同一台计算机上不同进程。域名地址:方便人类记忆,最终会转换成IP地址。物理地址物理地址48位:24位OUI,
8、24位由厂商分配平面地址,无结构全球唯一局部范围寻址存在于数据链路层IP地址地址IPIP地址标识着网络一个主机的位置。每个地址标识着网络一个主机的位置。每个IPIP地址都地址都是由是由3232位(或位(或128128位)组成,分成两部分:网络号、位)组成,分成两部分:网络号、主机号。主机号。全球唯一,寻址容易全球唯一,寻址容易两种表示形式:二进制(计算机内部)、点分十进两种表示形式:二进制(计算机内部)、点分十进制(便于记忆)制(便于记忆)IP地址分类地址分类0 NetID10110NetID1110Multicast AddressHostIDNetIDHostIDHostIDA AB BC
9、 CD D8 bits8 bits8 bits8 bits0127128191192223224239端口地址端口地址processprocessprocessprocessprocessprocessIP地址平面A A机机机机B B机机机机端口地址(端口地址(cont.)TCP和UDP使用16位的端口号(用无符号整型表示)为防止端口使用的混乱,将端口分为以下三类:n知名端口:知名端口:0102301023,由,由IANAIANA统一控制统一控制n注册的端口:注册的端口:102449151102449151,这些端口虽不由,这些端口虽不由IANAIANA控制,但控制,但IANAIANA登记这些
10、端口的使用登记这些端口的使用n动态或私有的端口:动态或私有的端口:49152655354915265535网络中通信双方网络中通信双方网络中通信双方由以下四元组唯一确定:n (本地(本地IPIP地址、本地端口号、远程地址、本地端口号、远程IPIP地址、远地址、远程端口号)程端口号)DNS:域名地址:域名地址层次名字空间便于记忆和使用计算机通信时无法使用域名地址解析:n名字到名字到IPIP地址的解析(地址的解析(gethostbynamegethostbyname)nIPIP地址到域名的解析(地址到域名的解析(gethostbyaddrgethostbyaddr)客户客户/服务器例子服务器例子W
11、WW服务服务互联网互联网无连接和面向连接的服务器无连接和面向连接的服务器UDP:无连接交互n n没有可靠保证没有可靠保证没有可靠保证没有可靠保证n n依赖下层系统保证依赖下层系统保证依赖下层系统保证依赖下层系统保证n n程序中应该有相应保障措施程序中应该有相应保障措施程序中应该有相应保障措施程序中应该有相应保障措施TCP:面向连接的交互n n提供传输可靠性提供传输可靠性提供传输可靠性提供传输可靠性n n程序要求简单程序要求简单程序要求简单程序要求简单选用UDP的情况n n下层系统可靠性(例如在局域网环境)下层系统可靠性(例如在局域网环境)下层系统可靠性(例如在局域网环境)下层系统可靠性(例如在
12、局域网环境)n n应用要求应用要求应用要求应用要求n n广播或者组播广播或者组播广播或者组播广播或者组播并发的概念并发的概念并发有真正的并发(并行:Parallelism)和表面上的并发(并发:Concurrency)(一般采用分时机制)并发模型并发模型并发模型并发模型并行模型并行模型并行模型并行模型网络中的并发网络中的并发单个网络各个机器之间许多成对进程好像独立使用网络资源(通道,机器等)一个计算机系统中存在并发(分时)一组机器上所有的客户之间存在并发互联网服务器中的并发服务器中的并发单个服务器必须并发处理多个传入请求并发服务器可以让多个远程用户同时使用服务,实现起来比较复杂其余部分主要介绍
13、术语和概念;涉及其它问题:算法,设计,运行规则等在后续各章介绍互联网客户软件的并发客户软件的并发要使客户软件并发执行,一般并不需要程序员为此特别花功夫。(因此现代操作系统一般允许用户并发地执行客户程序)操作系统的并发功能操作系统的并发功能多进程操作系统进程的概念:进程定义了一个计算的基本单元,它是一个执行某一个特定程序的实体,它拥有独立的地址空间、执行堆栈、文件描述符等。并发和异步并发和异步I/O某些OS允许单个线程控制并发的输入输出操作使用select询问操作系统I/O设备的情况例子:用户从用户从TCPTCP接收数据并且显示,还允许用户接收数据并且显示,还允许用户从键盘输入命令控制显示。从键
14、盘输入命令控制显示。两个输入:两个输入:TCP,TCP,键盘键盘总是等着一个输入,会阻塞总是等着一个输入,会阻塞使用使用selectselect询问输入是否就绪询问输入是否就绪什么是套接字什么是套接字TCP/IP协议存在于协议存在于OS中,网络服务通过中,网络服务通过OS提供提供在在OS中增加支持中增加支持TCP/IP的的系统调用系统调用Berkeley套接字套接字如如socket,connect,send,recv等等套接字套接字API来自来自UNIX系统系统Berkeley套接字套接字v ARPAARPA要求伯克利分校将要求伯克利分校将要求伯克利分校将要求伯克利分校将TCP/IPTCP/I
15、P移植到移植到移植到移植到UNIXUNIX中中中中v 需要创建一个接口,便于应用程序使用这个接需要创建一个接口,便于应用程序使用这个接需要创建一个接口,便于应用程序使用这个接需要创建一个接口,便于应用程序使用这个接口口口口 进行网络通信进行网络通信进行网络通信进行网络通信v 尽可能使用现有的系统调用尽可能使用现有的系统调用尽可能使用现有的系统调用尽可能使用现有的系统调用,同时添加新的系统同时添加新的系统同时添加新的系统同时添加新的系统调用支持调用支持调用支持调用支持TCP/IPTCP/IP。v这个系统被称为这个系统被称为这个系统被称为这个系统被称为BSD UNIX BSD UNIX 套接字,成
16、为事实套接字,成为事实套接字,成为事实套接字,成为事实上的标准上的标准上的标准上的标准指明一个协议接口考虑:接口是专门针对考虑:接口是专门针对TCP/IP,还是可以为还是可以为其它协议所用呢其它协议所用呢?方法一方法一方法一方法一:定义专门支持定义专门支持定义专门支持定义专门支持TCP/IPTCP/IPTCP/IPTCP/IP通信的一些函数通信的一些函数通信的一些函数通信的一些函数方法二方法二方法二方法二:定义支持一般网络通信的函数,用参数是定义支持一般网络通信的函数,用参数是定义支持一般网络通信的函数,用参数是定义支持一般网络通信的函数,用参数是TCP/IPTCP/IPTCP/IPTCP/I
17、P通信作为一种特例通信作为一种特例通信作为一种特例通信作为一种特例BerkeleyBerkeleyBerkeleyBerkeley套接字使用第二种办法,具有通用性,套接字使用第二种办法,具有通用性,套接字使用第二种办法,具有通用性,套接字使用第二种办法,具有通用性,TCP/IPTCP/IPTCP/IPTCP/IP是一个族是一个族是一个族是一个族PF_INETPF_INETPF_INETPF_INET使用服务的类型,而不是指定协议名使用服务的类型,而不是指定协议名使用服务的类型,而不是指定协议名使用服务的类型,而不是指定协议名争论:争论:通用性没有必要,使应用程序难以阅读通用性没有必要,使应用程
18、序难以阅读通用性没有必要,使应用程序难以阅读通用性没有必要,使应用程序难以阅读 通用性可以使程序员免于了解协议族的细节通用性可以使程序员免于了解协议族的细节通用性可以使程序员免于了解协议族的细节通用性可以使程序员免于了解协议族的细节套接字:描述符 OSOS将文件描述符实现为一个指针数组,指向一个内部将文件描述符实现为一个指针数组,指向一个内部将文件描述符实现为一个指针数组,指向一个内部将文件描述符实现为一个指针数组,指向一个内部的数据结构:进程描述符表的下标的数据结构:进程描述符表的下标的数据结构:进程描述符表的下标的数据结构:进程描述符表的下标 套接字和文件类似,每个活动套接字使用一个小整数
19、标套接字和文件类似,每个活动套接字使用一个小整数标套接字和文件类似,每个活动套接字使用一个小整数标套接字和文件类似,每个活动套接字使用一个小整数标识,进程的文件描述符和套接字描述符值不能相同识,进程的文件描述符和套接字描述符值不能相同识,进程的文件描述符和套接字描述符值不能相同识,进程的文件描述符和套接字描述符值不能相同 socketsocket函数:创建套接字描述符(不是函数:创建套接字描述符(不是函数:创建套接字描述符(不是函数:创建套接字描述符(不是openopen函数)函数)函数)函数)0:1:2:3:进程的文件描述符表进程的文件描述符表(一个进程一张)(一个进程一张)用于文件用于文件
20、0的内部数据结构的内部数据结构用于文件用于文件1的内部数据结构的内部数据结构用于文件用于文件2的内部数据结构的内部数据结构用于文件用于文件3的内部数据结构的内部数据结构针对套接字的系统数据结构调用调用socket将创建一个新的描述符条目将创建一个新的描述符条目结构的许多字段是其他的系统调用来填结构的许多字段是其他的系统调用来填0:1:2:3:4:描述符表描述符表(一个进程一张)(一个进程一张)family:PF_INETservice:SOCK_STREAMLocal IP:Remote IP:Local port:Remote port:主动套接字和被动套接字创建方式相同,使用方式不同创建方
21、式相同,使用方式不同等待传入连接的套接字等待传入连接的套接字被动被动,如服务,如服务器套接字器套接字发起连接的套接字发起连接的套接字主动主动,如客户套接,如客户套接字字指明端点地址:创建时不指定,使用时指指明端点地址:创建时不指定,使用时指明明TCP/IPTCP/IP需要指明协议端口号和需要指明协议端口号和需要指明协议端口号和需要指明协议端口号和IPIP地址地址地址地址TCP/IPTCP/IP协议族:协议族:协议族:协议族:PF_INETPF_INET套接字APIint socketint socket(int domain,int type,int protocol)(int domain,
22、int type,int protocol)功能:功能:功能:功能:创建一个新的套接字,返回套接字描述符创建一个新的套接字,返回套接字描述符创建一个新的套接字,返回套接字描述符创建一个新的套接字,返回套接字描述符参数说明:参数说明:参数说明:参数说明:udomain:域类型,指明使用的协议栈,如:域类型,指明使用的协议栈,如TCP/IP使用的是使用的是 PF_INETutype:指明需要的服务类型指明需要的服务类型,如如|SOCK_DGRAM:数据报服务,数据报服务,UDP协议协议|SOCK_STREAM:流服务,流服务,TCP协议协议uprotocol:一般都取一般都取0举例:举例:s=so
23、cket(PF_INET,SOCK_STREAM,0)套接字APIint connect(int sockfd,struct sockaddr*server_addr,int sockaddr_len)功能:功能:同远程服务器建立主动连接,成功时同远程服务器建立主动连接,成功时返回返回0,若连接失败返回,若连接失败返回1。参数说明:参数说明:sockfd:sockfd:套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字套接字描述符,指明创建连接的套接字server_addr:server_addr:指明远程端点:指明远程端点:指明远程端点:指
24、明远程端点:IPIP地址和端口号地址和端口号地址和端口号地址和端口号sockaddr_len:sockaddr_len:地址长度地址长度地址长度地址长度套接字APIstruct sockaddr sa_family_t sa_family;char sa_data14;struct sockaddr_in sa_family_t sin_family;in_port_t sin_port;struct in_addr sin_addr;typedef uint32_t in_addr_t;struct in_addr in_addr_t s_addr;套接字API int send(int s
25、ockfd,const void*data,int data_len,int send(int sockfd,const void*data,int data_len,unsigned int flags)unsigned int flags)功能功能功能功能在在在在TCPTCPTCPTCP连接上发送数据连接上发送数据连接上发送数据连接上发送数据,返回成功传送数据的长度,出错时返返回成功传送数据的长度,出错时返返回成功传送数据的长度,出错时返返回成功传送数据的长度,出错时返回回回回1 1 1 1。sendsendsendsend会将外发数据复制到会将外发数据复制到会将外发数据复制到会将外发数据
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 环境 编程 网络
限制150内