UNIX网络编程---简介web
1、 概述编程
a) 在编写与计算机通讯的程序时,首先要肯定的就是和计算机通讯的协议,从高层次来肯定通讯由哪一个程序发起以及响应在合适产生。大多数网络应用按照划分红客户和服务器来组织。在设计网络应用时,肯定老是由客户发起请求每每可以简化协议和程序自己。固然一个较为复杂的网络应用还须要异步回调通讯,也就是由服务器向客户发起请求消息。浏览器
i. 在本书原著上屡次提到客户(client)和服务器(server)这两个术语。可是他们在具体上下文的含义不一样,有的是指静态的程序(客户程序和服务器程序),有的是指动态的进程(客户进程和服务器进程),有时指运行进程的主机(客户主机和服务器主机)。服务器
ii. 可认为客户与服务器之间是经过某个网络协议通讯的,但实际上,这样的通讯一般涉及到多个网络协议层。本书的焦点是TCP/IP协议簇,也称为网际协议簇。举例,WEB客户与服务器之间使用TCP(Transmission Control Protocol,传输控制协议)通讯。TCP又转而使用IP(InternetProtocol,网际协议)通讯,IP再经过某种形式的数据链路层通讯。
网络
尽管客户与服务器之间使用某个应用协议通讯,传输层却使用TCP通讯。数据流的流向在一端从上到下,在另外一端从下到上。一般,客户和服务器一般是用户进程,并发
而TCP和IP协议一般是内核中协议栈的一部分。其中七层OSI模型(物理层、数据链路层、网络层、传输层、表示层、会话层、应用层)。框架
关于结构体struct sockaddr,也就是经过套接字地址结构,每当一个套接字函数须要一个指向某个套接字地址结构的指针时,这个指针必须强制类型转换成一个指向经过套接字地址结构的指针。异步
计算机网络各对等实体间交换的单元信心称为协议数据单元(protocol data unit PDU),分节(segment)就是对应于TCP传输层的PDU.按照协议与服务之间的关系,除了最底层物理层外,每层的PDU经过由紧邻下层提供给本层的服务接口,做为下层的服务数据单元传递给下层…………函数
应用层实体(如客户或服务器进程)间交换的PDU称为应用数据,其中在TCP应用进程之间交换的是没有长度限制的单个双向字节流,在UDP应用进程之间交换的是其长度不超过UDP发送缓冲区大小的单个记录,在SCTP应用进程之间交换的是没有总长度显示的单个或多个双向字节流。传输层实体(对应某个端口的传输层协议代码的一次运行)间交换的PDU称为消息,起重工TCP的PDU特称为分节。消息或分节的长度是由限的。在TCP传输层中,发送端TCP把来自应用进程的字节流数据(既由应用进程经过一次输出操做写出到发送端TCP套接字中的数据)按顺序经分割后封装在各个各个分节中传送给接受端TCP其中每一个分节所封装的数据既多是发送端应用进程单词操做的结果,也多是连续数次输出操做的结果,具体取决于可在连续创建阶段由对端通告的最大分节大小(maximum segmen size MSS)以及外出接口的最大传输单元(maximumtransmission unit MTU)或外出路经的路径MTU(若是网络层具备路径MTU发现功能)。分节除了用于承载应用数据外,也用于创建链接(SYN分节)、终止链接(FIN分节)、停止链接(RST分节)、确认数据接收(ACK分节)刷送待发数据(PSH分节)和携带紧急数据指针(URG分节),并且这些功能(包括承载数据)能够灵活组合。UDP传输层至关简单,发送端UDP就把俩字应用进程的单个记录整个封装在UDP消息中传送给接受端UDP。SCTP引入了称为块的数据单元,SCTP消息就由一个公共首部加上一个或多个块构成,公共首部相似UDP消息的首部,仅仅给出源目的端口和整个SCTP消息的校验和,块则可既能够承载数据,也能够承载控制信息。spa
网络层实体间的PDU称为IP数据报(IPdatagram),其长度有限:Ipv4数据报最大65535字节,Ipv6数据报最大65575字节。发送端IP把来自传输层的消息(或TCP分节)整个封装在IP数据报中发送。链路层实体间交换的PDU称为帧,其长度取决于具体的接口。IP数据报由IP首部和所承载的传输层数据(既网络层的SDU)构成。过长的IP数据报没法封装在单个帧中,须要先对其SDU进行分片,再把分红的各个片断冠以新的IP首部封装到多个帧中。在一个IP数据报从源到目的端的传送过程当中,分片操做既可能发生在源端,也可能发生在途中,而其逆操做为重组。
TCP/IP协议簇为提升效率会尽量避免IP的分片/重组操做,TCP根据MSS和MTU限定每一个分节的大小以及SCTP根据MTU分片/重组过长记录都是这个目的。不管是否分片,都由IP做为链路层的SDU传输链路层,并由链路层封装在帧中的数据称为分组(俗称包)可见一个分组既多是一个完整的IP数据报,也多是某个IP数据报的SDU的一个片断被冠以新的IP首部后的结果。文中讨论的MSS是应用层(TCP)与传输层之间的接口属性,MTU则是网络层和链路层之间的接口属性。
1、本章在举例说明的时候,使用了获取时间的服务器函数之类的东西,这是一个函简单的程序,按照的基本的TCP客户/服务流程交互,在服务端在填写字符的时候使用了函数snprintf,这个函数和sprintf的功能类似。调用sprintf没法检查目的缓冲区是否溢出。Snprintf要求其第二个参数指定目的缓冲区的大小,所以可确保该缓冲区不溢出。
单个处理一个客户的服务器程序称为迭代服务器,由于对于每一个客户它都迭代执行一次。同时能处理多个客户的称为并发服务器。
2、OSI模型
网络层由IPv4和IPv6这两个协议处理,能够选择的传输层有TCP或UDP,在上图中TCP与UDP之间留有间隙,代表网络应用绕过传输层直接使用IPv4或IPv6是可能的,这就是所谓的原始套接字。
OSI模型的顶上三层被合并成一层,称为应用层。这就是web客户(浏览器)、telnet客户、web服务器、ftp服务器和其其余咱们在使用的网络应用所在的层。对于网际协议,OSI模型的顶上三层协议几乎没有区别。
在这一系列的讲述中,套接字编程接口是从顶上三层(网际协议的应用层)进入传输层的接口。全部文章的焦点是:如何使用套接字编写使用TCP或UDP的网络应用程序。
3、介绍几个命令
1) netstat netstat –i提供网络接口的信息。咱们还指定-n标志以输出数值地址,而不是试图把他们反响解析成名字。
2) netstat –r 展现路由表
这一章中主要讲解了和基本的信息,从宏观上讲解了本书的大致框架