共计 11797 个字符,预计需要花费 30 分钟才能阅读完成。
第一节 计算机网络利用体系结构
- 从体系结构角度能够分为:客户 / 服务器(C/S)构造 , 纯 P2P(Peer to Peer)构造 和混合结构 3 种类型。
一,客户 / 服务器(C/S)构造网络应用
- C/S构造的网络应用是最典型,最根本的网络应用。
- 网络应用的通信单方分为服务器程序和客户程序,服务器程序须要先运行,做好通信的筹备,客户程序后运行,被动申请与服务器进行通信。
- C/S网络应用最次要的特色是通信只在客户与服务器之间进行,客户与客户之间不进行间接通信。
- 在 C/S 通信过程中,被动发动通信的一方就是客户,被动承受通信的一方就是服务器。
二,纯 P2P 构造网络应用
- 在文件散发,文件共享,视频流服务等利用中,P2P利用体现出优越的性能,如 Gnutella,BitTorent 等。
- 在纯 P2P 网络应用中,没有始终在运行的传统服务器,所有通信都是在对等的通信方之间间接进行,通信单方没有传统意义上的客户与服务器之分,“位置”对等。
- P2P利用中的每个对等端都同时具备 C/S 利用的客户与服务器的特色,是一个服务器与客户的结合体。事实上,P2P利用中的对等端软件包含服务器软件与客户端软件。
- 在 P2P 利用中,对等端都是动静退出或来到利用,新退出的对等端须要晓得有那些对等端在线,在线对等端的地址以及在线对等端提供的服务等,这是 P2P 利用须要解决的关键问题之一。对于纯 P2P 利用,因为没有核心服务器,所以解决这些问题就更为艰难。
三,混合结构网络应用
- 混合结构网络 利用将 C/S 与P2P利用相结合,既有核心服务器的存在,又有对等端(客户)间的间接通信。
- 在混合结构网络应用中,存在客户(即对等端)与服务器之间的传统 C/S 构造的通信,也存在客户之间间接通信。
- 通常每个客户通过 C/S 形式向服务器注册本人的网络地址,申明可共享的资源或可提供的服务,并通过核心服务器发现其余在线的客户,检索其余客户能够共享的资源等信息。
第二节 网络应用通信基本原理
- 网络应用的根本通信过程就是运行在不同主机上的利用过程间以 C/S 形式进行的通信。在 C/S 构造的网络应用中,服务器端运行的是服务器过程,被动地期待客户申请服务;客户端运行的是客户过程,被动发动通信,申请服务器过程提供服务。利用过程间遵循应用层协定替换应用层报文M。
- 应用层协定定义了利用过程间替换的报文类型,报文形成局部具体含意以及替换时序等内容,即语法,语义和时序等协定三要素内容。从应用层角度来看,利用过程之间遵循应用层协定就能够间接实现端到端的报文 M 的替换,然而,本质通信过程并非如此。无论是服务器过程还是客户过程,当其遵循应用层协定组织好应用层报文后,须要通过层间接口(如利用编程接口 API)将报文传递给相邻的传输层,申请传输层协定提供的端到端传输服务。
- 典型的网络应用编程接口是 套接字(Socket)。应用程序能够通过创立套接字实现与底层协定接口,并能够进一步通过套接字实现利用过程与底层协定之间的报文交换。因而,套接字是每个利用过程与其余利用过程进行网络通信时,真正收发报文的通道。
- 一个利用过程能够创立多个套接字与同一个或不同的传输层协定进行接口。对于一个传输层协定,须要为与其接口的每一个套接字调配一个编号,标识该套接字,该编号称为 端口号(port number)。
- 通常服务器过程套接字会调配特定的端口号,而客户过程的套接字会绑定一个随机的惟一端口号。尤其是标准化利用,规范为不同的服务器调配了不同的默认端口号,Web 服务器的默认端口为 80,这部分端口号称为 熟知端口号(well-known port munber)。每个利用过程通过一个或多个套接字与传输层协定进行接口,通过过程运行的主机 IP 地址以及其套接字所绑定的端口号能够标识利用过程。
第三节 域名零碎(DNS)
- DNS(Domain Name System)是一个重要的根底利用,因为任何一个须要应用域名进行通信的网络应用,在利用通信之前首先须要申请 DNS 利用,将域名映射为 IP 地址。实现将域名映射为IP 地址的过程,称为 域名解析。
- DNS为了实现域名解析,须要建设分布式数据库,存储网络中域名与 IP 地址的映射关系数据,这些数据库存储在域名服务器上,域名服务器依据用户的申请提供域名解析服务。
一,层次化域名空间
-
因特网采纳了档次树状构造的命名办法,任何一个连贯在因特网上的主机或路由器,都能够有一个惟一的层次结构的域名。
- == 国家顶级域名nTLD==:cn 标识中国,us 示意美国,uk 示意英国等。
- == 通用顶级域名gTLD==:最早的顶级域名是 com(公司和企业),net(网络服务机构),org(非盈利组织),edu(专用的教育机构),gov(专用的政府部门),mil(专用的军事部门),int(国内组织)。
- == 根底构造域名(infrastructure domain)==:这种顶级域名只有一个,即 arpa,用于反向域名解析,因而又称为 反向域名。
二,域名服务器
- 一个服务器所负责管辖的(或有权限的)范畴叫做区(zone)。
- 每个区设置相应的权威域名服务器,用来保留该区中的所有主机的域名到 IP 地址的映射。
- 域名服务器依据其次要保留的域名信息以及在域名解析过程中的作用等,能够分为 根域名服务器 , 顶级域名服务器 , 权威域名服务器 , 两头域名服务器 4 类。
- 任何一台主机在网络地址配置时,都会配置一个域名服务器作为默认域名服务器,这样这台主机任何时候须要进行域名查问,都会将域名查问申请发送给该服务器;该服务器如果保留了被查问域名的信息,则间接做出响应,如果没有,则代理服务器查问其余域名服务器,直到查问到后果,最初将查问后果发送给查问主机。这个默认域名服务器通常称为本地域名服务器。是主机进行域名查问过程中首先被查问的域名服务器。
- 根域名服务器是最重要的域名服务器。寰球互联网中部署了无限的几个根域名服务器,每个根域名服务器都晓得所有的顶级域名服务器的域名和 IP 地址。不论是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只有本人无奈解析,就首先求助于根域名服务器。== 在因特网中共有 13 个不同 IP 地址的根域名服务器,名字是用一个英文字母名,从 a 始终到 m ==。
- 顶级域名服务器,即 TLD 服务器,负责管理在该顶级域名服务器注册的所有二级域名。顶级域名服务器的名称对应一个域名的最初一个名字,是对一个行业的命名,或对一个区域的命名。
-
权威域名服务器,负责一个区的域名服务器,保留该区中的所有主机的域名到 IP 地址的映射。
- 任何一个领有域名的主机,其域名与 IP 地址的映射关系等信息都存储在所在网络的权威域名服务器上。
- 在档次域名构造中,有时还存在一些既不是根域名服务器,又不是顶级域名服务器,也不是权威域名服务器的域名服务器,这些域名服务器通常称为 两头域名服务器。
三,域名解析过程
- 域名解析分为 递归解析 和迭代解析。
- 提供递归查问服务的域名服务器,能够代替查问主机或其余域名服务器,进行进一步的域名查问,并将最终解析后果发送给查问主机或服务器。
- 提供迭代查问的服务器,不会代替查问主机或其余域名服务器,进行进一步的查问,只是将下一步要查问的服务器告知查问主机或服务器。
- 通常本地域名服务器都提供递归查问服务。主机在进行域名查问时,本地域名服务器如果没有被查问域名的信息,则代理主机查问根域名服务器或其余服务器,直到失去被查问域名的 IP 地址,最初将解析后果发送给主机。
- 提供迭代查问服务的域名服务器不会代理客户的查问申请,而是将最终后果或者下一步要查问的域名服务器间接响应给查问客户。根域名服务器通常只提供迭代查问服务,当根域名服务器收到本地域名服务器的迭代查问申请报文时,要么给出所要查问的 IP 地址,要么在响应报文中通知本地域名服务器下一步该当查问哪一个域名服务器,本地域名服务器则持续查问下一个域名服务器,直到查问到被查问域名主机的权威域名服务器。
-
无论是递归解析还是迭代解析,只有本地域名服务器不能间接响应解析后果,则都须要从根域名服务器开始查问。会重大影响查问响应工夫和查问效率,解决办法:
- 域名服务器减少缓存机制:即在为客户做出响应的同时,每个域名服务器会将在域名解析过程中解析到的后果存储到域名数据库中,当再次收到雷同域名信息的查问申请时,便能够利用缓存的信息间接做查问响应,从而缩短域名查问的工夫。
第四节 万维网利用
一,HTTP
1,HTTP 连贯
-
HTTP基于传输层的 TCP 传输报文。浏览器在向服务器发送申请之前,首先须要建设 TCP 连贯,而后能力发送 HTTP 申请报文,并接管 HTTP 响应报文。依据 HTTP 在应用 TCP 连贯的策略不同,能够分为 非长久连贯的 HTTP和 长久连贯的 HTTP。
-
非长久连贯 是指 HTTP 客户与 HTTP 服务器建设 TCP 连贯后,通过该连贯发送 HTTP 申请报文,接管 HTTP 响应报文,而后断开连接。HTTP/1.0默认应用非长久连贯,每次申请传输一个对象都须要新建设一个 TCP 连贯。
-
为了进步或改善 HTTP 的性能,须要对 HTTP/1.0 的这种默认的非长久连贯应用形式进行优化,典型的优化技术包含两种。
- 并行连贯,通过建设多条并行的 TCP 连贯,并向发送 HTTP 申请和并行接管 HTTP 响应。并行连贯并不一定总能减小提早,放慢网页加载速度,并行连贯会减少客户端主机的资源开销,零碎通常对同时建设的并行 TCP 连接数有限度。
- 长久连贯,重用已建设的 TCP 连贯发送新的 HTTP 申请和接管 HTTP 响应,从而打消新建 TCP 连贯的工夫开销。
-
-
长久连贯 又分为两种工作形式:非流水形式长久连贯 和流水形式长久连贯。
- 非流水形式长久连贯 :也称为非管道形式长久连贯,客户端在通过长久连贯收到前一个响应报文后,能力收回对下一个对象的申请报文。。与非长久连贯相比,间断申请多个对象时,只需建设一次TCP 连贯,这样,每获取一个对象只需一个 RTT 工夫。
- 流水形式长久连贯 :也称为管道形式长久连贯,客户端在通过长久连贯收到前一个对象的响应报文之前,间断顺次发送对后续对象的申请报文,而后再通过该连贯顺次接管服务器发回的响应报文。应用流水形式长久连贯时,获取一个对象均匀工夫远小于 1 个RTT 工夫,如果疏忽对象传输工夫,间断申请的多个对象只需 1 个 RTT 工夫。
- HTTP/1.1默认状况下应用流水形式长久连贯。HTTP/1.1的长久连贯默认是激活的。如果心愿完结长久连贯,能够在报文中显式地增加 connection: close 首部行。
-
-
HTTP/1.1应用长久连贯的次要束缚与规定
- 如果客户端不冀望在连贯上发送其余申请,则应该在最初一条申请报文中蕴含 connection:close 首部行。
- 如果客户端在收到的响应报文中蕴含 connection:close 首部行,则客户端不能再在这条连贯上发送更多的申请。
- 每个长久连贯只实用于一跳传输,HTTP/1.1代理必须可能别离治理与客户端和服务器的长久连贯。
- HTTP/1.1代理服务器不应该与 HTTP/1.0 客户端建设长久连贯。
二,Cookie
- HTTP服务器在向客户发送被申请的文件后,不保留任何对于该客户的状态信息,因为 HTTP 服务器并不保留对于客户的任何信息,所以 HTTP 被称为 无状态协定(stateless protocol)。
- Cookie中文名称为小型文本文件,指某些网站为了分别用户身份,进行会话跟踪而存储在用户本地终端上的数据。
-
Cookie由服务器端生成,发送给 User-Agent(个别是浏览器),浏览器会将Cookie 的key/value保留到某个目录下的文本文件内,下次申请同一网站时就发送该 Cookie 给服务器,Cookie次要包含 4 局部内容。
- HTTP响应报文中的 Cookie 头行:Set-Cookie。通过 Set-Cookie,发送通常不超过4KB 的Cookie信息,包含为其用户调配的ID,用户对网站的拜访偏好等。
- 用户浏览器在本地存储,保护和治理的 Cookie 文件。包含网站的域,门路,内容,有效期和平安 5 个字段。
- HTTP申请报文中的 Cookie 头行:Cookie。当用户向曾经拜访过且曾经取得 Cookie 信息的网站发送 HTTP 申请报文时,浏览器会自动检索本地的 Cookie 文件,并在每个申请报文中通过 Cookie 头行,携带上网站为该用户调配的 Cookie 信息。
- 网站在后盾数据库中存储,保护 Cookie 信息,包含已调配给用户 ID,每个 ID 用户在本网站的拜访特色等。
-
Cookie常见的用处
- 网站利用 Cookie 的 ID 来精确统计网站的理论拜访人数,新访问者和反复访问者的人数比照,访问者的拜访频率等数据。
- 网站利用 Cookie 限度某些特定用户的拜访。
- 网站能够存储用户拜访过程中的操作习惯和偏好,对不同的用户提供不同的服务。
- 记录用户登录网站应用的用户名,明码等信息,当用户屡次登录时,毋庸每次都从键盘输入。
- 电商利用 Cookie 能够实现“购物车”性能。
第五节 Internet 电子邮件
一,电子邮件系统构造
- 电子邮件系统次要包含 邮件服务器 , 简略邮件传输协定 (SMTP), 用户代理 和邮件读取协定 等。
- 邮件服务器 的性能是发送和接管邮件,同时还要向发信人报告邮件传送的状况,是电子邮件体系结构的外围。
- 邮件服务器保护治理一个外出邮件队列,队列中暂存注册用户期待向外发送的邮件(发送基于SMTP)。
- 当发送邮件时,邮件服务器首先从收件人邮箱地址中解析出接管邮件服务器的域名或 IP,而后将邮件发送给邮件服务器,邮件服务器将接管到的邮件寄存到用户的邮箱中。
- 用户代理(User Agent)是电子邮件利用的客户端软件,为用户提供应用电子邮件的接口。用户代理的次要性能是反对用户撰写,显示,解决和收发邮件,为用户浏览,回复,转发,保留和撰写邮件等提供编辑与操作环境。
- 邮件服务器之间发送和接管邮件时依照客户 / 服务器形式工作。实现邮件服务器间发送邮件的利用层层协定是 SMTP,用户代理向注册邮件服务器发送邮件时,通常也是基于 SMTP。从客户 / 服务器通信形式来看,一个邮件服务器即能够看作客户,又能够看作服务器。一个邮件服务器通常至多蕴含两个过程(或线程): 邮件发送过程 (mail sender)和 邮件接管过程 (mail receiver)。邮件接管过程实现SMTP 的服务器端,通常绑定端口号25。
-
邮件的发送与接管过程
- 用户 A 首先利用用户代理撰写邮件,而后基于 SMTP 将邮件发送到其注册的邮件服务器 A 的外出邮件队列中,期待邮件服务器发送。
- 邮件服务器 A 从队列中取出用户 A 的邮件,基于 SMTP 发送给邮件服务器 B。
- 邮件服务器 B 将邮件寄存到用户 B 的邮箱中。
- 在某个时刻,用户 B 利用用户代理连贯邮件服务器 B 上运行的邮件读取服务,基于邮件读取协定,将其邮箱中的邮件传输到本地,或者对邮箱中的邮件进行浏览,挪动等操作。
二,SMTP
- SMTP是 Internet 电子邮件中外围应用层协定,实现邮件服务器之间或用户代理到邮件服务器之间的邮件传输。SMTP应用传输层 TCP 实现牢靠数据传输。
-
SMTP邮件发送过程
- SMTP客户端首先申请与服务器端的 25 号端口建设 TCP 连贯,连贯一旦建设,便开始进行 SMTP 应用层交互,实现邮件的发送。
- 当 TCP 建设胜利后,SMTP通过 3 个阶段的应用层交互实现邮件的传输,别离是握手阶段,邮件传输阶段和敞开阶段。
- 握手阶段:彼此申明本人的身份。
- 邮件传输阶段:客户端首先向服务器端通告邮件发送者与邮件接收者的邮箱地址,而后开始邮件数据的传输。
- 敞开阶段:申明邮件传输完结,并敞开 TCP 连贯。
-
SMTP特点
- SMTP只能传送 7 位 ASCII 码文本内容,包含 SMTP 命令,应答音讯以及邮件内容。因而,SMTP 不能间接传送可执行文件或其余的二进制对象(如:图像,声音,视频等),包含许多其余非英语国家的文字(如:中文,俄文等),在通过 SMTP 传送这类内容时,必须将这些内容转换为 7 位的 ASCII 码文字模式。
- SMTP传送的邮件内容不能蕴含“CRLF.CRLF”,因为该信息用于标识邮件内容的完结,如果邮件内容中蕴含该信息,则 SMTP 在传输时,须要进行本义。
- SMTP是“推动”协定。当客户端有邮件发送给服务器时,客户被动与服务器(25 号端口)申请建设 TCP 连贯,而后将邮件“推送”给服务器。
- SMTP应用 TCP 连贯是长久的。
三,邮件读取协定
- 目前 Internet 邮件系统中比拟风行的邮件读取协定有第三版的邮局协定(Post Office Protocol-Version 3,POP3),互联网邮件拜访协定 (Internet Mail Access Protocol,IMAP)和HTTP,其中HTTP 被用作 Web Mail 零碎中的邮件读取协定。
1,POP3
- POP3是一个简略的邮件读取协定,为了保障读取邮件过程的可靠性,POP3协定应用传输层TCP。
- POP3客户端运行在用户代理中,POP3服务器运行在邮件服务器上,端口号为110。
-
POP3交互过程分为 3 个阶段
- 受权(Authorization):用户代理须要向服务器发送用户名和口令(以明文模式),服务器甄别用户身份,受权用户拜访邮箱。因为用户名和口令是明文传输的,所以安全性并不高。受权阶段次要有两个命令:user<user name> 和 pass<password>,别离向服务器发送用户名和口令。
- 事务处理 :用户代理向服务器发送POP3 命令,实现邮件读取,为邮件做删除标记,勾销邮件删除标记以及获取邮件的统计信息等操作。
- 更新 :客户收回了quit 命令,完结 POP3 会话,服务器删除哪些被标记为删除的邮件。
2,IMAP
- IMAP服务器将每个邮件与一个文件夹进行关联,当邮件第一次达到服务器时,与收件人的 INBOX 文件夹相关联。通过IMAP,收件人能够在服务器上创立新的文件夹,并能够对邮件进行挪动,查问,浏览,删除等操作。
- IMAP的一个重要特色是容许用户代理只读取邮件的局部内容。(当用户代理拜访 IMAP 服务器的网络带宽比拟低,或者想先看以下邮件主题再决定是否要下载整个邮件时,此个性十分有用)。
3,HTTP
- 当应用基于 Web 的邮件时,HTTP便被用于邮件的读取,此时 HTTP 也作为邮件读取协定应用。基于 Web 的电子邮件简称 Web 邮件(Web Mail)。
- Web邮件的长处之一是用户代理就是一般的 Web 浏览器。
- Web邮件与一般电子邮件系统的次要区别在于用户代理与邮件服务器之间的邮件收发不同,而邮件服务器与其余邮件服务器之间的发送和接管过程并没有区别,依然应用SMTP。
第六节 FTP
- 文件传输协定(File Transfer Protocol,FTP)是在互联网的两个主机间实现文件互传的网络应用,其应用层协定也称为FTP。
- FTP能够缩小或打消在不同操作系统下解决文件的不兼容性,屏蔽各计算机系统的细节,适宜在网络中任意异构计算机之间传送文件。
- FTP采纳 C/S 形式实现客户与服务器之间的双向文件传输。
- FTP的客户与服务器之间的交互以及文件传输过程均应用 TCP 的牢靠传输服务。
- 用户通过 FTP 用户代理应用 FTP 利用,用户代理通过 FTP 客户与 FTP 服务器进行交互。
- FTP的服务器过程由 两个大部分组成 : 一部分为主过程 ,负责接管新的客户申请; 另一部分为若干个隶属过程 ,负责解决单个客户申请,与具体客户进行交互。FTP 服务器能够同时为多个客户过程提供服务。
- 用户在应用 FTP 服务时,首先客户过程须要申请与 FTP 服务器的 21 号端口建设一条 TCP 连贯,称为 管制连贯 ,而后开始FTP 会话。FTP会话之初,用户须要通过管制连贯向 FTP 服务器发送用户名和口令,进行零碎登录,通过服务器的受权后,客户才能够通过其余命令与服务器交互,包含申请将本地文件系统中的一个或者多个文件上传到近程文件系统,或者申请将服务器文件系统中的文件下载到本地。
-
FTP特点
- FTP的一个显著特点就是在传输文件时,须要建设一个数据连贯,专门用于文件传输,文件传输完结后,数据连贯即敞开。
-
FTP利用应用两个“并行 ”的TCP 连贯:管制连贯 和数据连贯。
- 管制连贯 在整个会话期间始终放弃关上,是长久的,FTP客户收回的传送申请通过管制连贯发送给服务器端的管制过程的端口(21),但管制连贯不用来传送文件,理论用于传输文件的是数据连贯,用来连贯客户端和服务器端的数据传送过程。
- 数据传送 过程理论实现文件的传送,在传送结束后敞开数据传送连贯,数据连贯是长期的,非长久的。服务器过程用本人传送数据的端口(20)与客户过程所提供的端口号建设数据连贯。
- 管制连贯 用于在客户与服务器之间传输管制信息,如用户标识,口令,扭转近程目录,上传文件,下载文件等命令。
- 数据连贯 用于理论传送文件内容
- 因为 FTP 专门应用一个独立的管制连贯传输管制信息,与传输文件信息进行拆散,所以将 FTP 的这种管制信息的传送形式称为 带外管制 (out-of-band control)。与之对应,哪些命令,数据都是通过一个TCP 连贯传输的应用层协定称为 带内管制(int-band control)协定。
- FTP服务器必须在整个会话期间保留用户的状态,即 FTP 是有状态 的(stateful)协定。
第七节 P2P 利用
- P2P体系的网络应用对服务器的依赖很小,甚至对于纯 P2P 来说,整个利用简直不依赖某个集中服务器,利用都是动静的在对等方之间进行。
- 在 P2P 利用中,对等方随时可能退出利用,也随时可能来到利用,具备很强的利用规模伸缩性。
- P2P利用的对等方通常并不属于服务提供商,而是用户管制的桌面计算机或笔记本电脑等。
- P2P利用充沛汇集利用了端系统的计算能力以及网络传输带宽,代表了全新的网络应用架构与理念。
第八节 Socket 编程根底
-
网络应用过程能够创立 3 种 类型的Socket:
- 数据报类型套接字 SOCK_DGRAM:面向传输层UDP 接口。
- 流式套接字 SOCK_STREAM:面向传输层TCP 接口。
-
原始套接字 SOCK_RAW:面向网络层协定(如IP,ICMP 等)接口。
- 原始套接字的创立有权限限度,如,在 Linux 操作系统中,须要 root 权限的用户能力创立原始套接字。通过原始套接字,利用过程能够实现一些非凡的权限,如收发 ICMP 报文等。
-
罕用 Socket API 函数
-
int socket(int family,int type,int protocol);
-
性能:
- 创立套接字。
-
参数:
- family为协定族,通常取值为 PF_INET 或AF_INET示意面向 IPv4 协定栈;
- type为套接字类型,取值SOCK_STREAM,SOCK_DGRAM,SOCK_RAW, 别离为流式套接字,数据报套接字,原始套接字
- protocol为协定,其中取值 IPPROTO_TCP,IPPROTO_UDP 别离示意 TCP 协定和 UDP 协定。
-
返回:
- 胜利,返回非负整数,为套接字描述符。
- 失败,返回 -1 或SOCKET_ERROR。
-
阐明:
- 创立指定类型的套接字。
-
-
int close(int sockfd);
-
性能:
- 敞开一个描述符为 sockfd 的套接字。
-
返回
- 胜利,返回0。
- 失败,返回-1。
-
阐明:
- 如果多个过程共享一个套接字,调用 close() 将套接字援用计数减 1,减至 0 才敞开套接字;一个过程中的多线程对一个套接字的应用不存在计数,如果过程中的某个线程调用 close() 将一个套接字敞开,该过程中的其余线程也将不能拜访该套接字了。
-
-
int bind(int sockfd,const struct sockaddr*myaddr,socklent_t addrlen);
-
性能:
- 绑定套接字的本地端点地址。
-
参数:
- sockfd为本地套接字的描述符。
- myaddr为构造 sockaddr_in 指针,本地端点地址(蕴含 IP 地址和端口号)。
- addrlen为端点地址长度。
-
返回:
- 胜利,返回0。
- 失败,返回-1。
-
阐明:
- 服务器程序须要调用该函数,为服务器套接字绑定特定端口号;客户程序个别不用调用该函数,操作系统会主动为客户套接字绑定端口号。
-
-
int listen(int sockfd,int backlog);
-
性能:
- 置服务器端的流(TCP)套接字 sockfd 为监听状态。
-
参数:
- sockfd为本地(服务器)套接字的描述符。
- backlog为连贯申请队列大小。
-
返回:
- 胜利,返回0。
- 失败,返回-1。
-
阐明:
- 该函数只用于服务器端,且仅用于面向连贯的流套接字,即 TCP 服务器套接字。
-
-
int connect(int sockfd,const struct sockaddr*servaddr,socklen_t addrlen);
-
性能:
- 将客户套接字 sockfd 与服务器连贯。程序调用 connect 函数来使客户套接字(sd)与特定计算机的特定端口(saddr)的套接字(服务)进行连贯。
-
参数:
- sockfd为本地套接字(客户)的描述符。
- servaddr为指向构造 sockaddr_in 的指针,存储服务器端点地址。
-
返回:
- 胜利,返回0。
- 失败,返回-1。
-
阐明:
- 该函数仅用于客户端;不仅能够用于 TCP 客户端也能够用于 UDP 客户端;对于 TCP 客户端,该函数真正建设与服务器的 TCP 连贯,对于 UDP 客户端,只是指定服务器端点地址。
-
-
int accept(int sockfd,struct sockaddr*cliaddr,socklen_t addrlen);
-
性能:
- 从监听状态的流套接字 sockfd 的客户连贯申请队列中,取出排在最前的一个客户申请,并且创立一个新的套接字来与客户套接字建设 TCP 连贯。
-
参数:
- sockfd为本地(服务器)流套接字的描述符。
- servaddr为指向构造 sockaddr_in 的指针,用于存储客户端点地址。
-
返回:
- 胜利,返回非负整数,为新建与客户连贯的套接字描述符。
- 失败,返回-1。
-
阐明:
- 该函数仅用于服务器端 TCP 套接字,真正与客户连贯的是新创建的套接字,即该函数返回的套接字描述符所标识的套接字。
-
-
ssize_t send(int sockfd,const void*buff,size_t nbytes,int flags);
-
性能:
- 发送数据。
-
参数:
- sockfd为本地套接字描述符。
- buff指向存储待发送数据的缓存指针。
- nbytes为数据长度。
- flags为管制比特,通常取 0。
-
返回:
- 胜利,返回发送的字节数。
- 失败,返回-1。
-
阐明:
- TCP套接字(客户与服务器)调用 send() 函数发送数据。
- send()函数也能够用于调用了 connect() 函数的客户端 UDP 套接字。
-
-
ssize_t sendto(int sockfd,const void*buff,size_t nbytes,int flags,const struct sockaddr*to,socklen_t addrlen);
-
性能:
- 发送数据
-
参数:
- sockfd为本地套接字描述符;
- buff为指向存储待发发送数据的缓存指针。
- nbytes为数据长度。
- flags为管制比特,通常取0。
- to为远端(数据接收端)端点地址构造指针。
-
返回:
- 胜利,返回发送的字节数。
- 失败,返回 -1。
-
阐明:
- sendto()函数用于 UDP 服务器端套接字或未调用 connect() 函数的 UDP 客户端套接字。
-
-
ssize_t recv(int sockfd,void*buff,size_t nbytes,int flags);
-
性能:
- 接收数据。
-
参数:
- sockfd为本地套接字描述符。
- buff为指向存储接收数据的缓存指针。
- nbytes为缓存长度。
- flags为管制比特,通常取 0。
-
返回
- 胜利,返回接管到的字节数。
- 失败,返回-1.
-
阐明:
- recv()函数用于从 TCP 套接字接收数据。
- recv()函数也能够用于从调用了 connect() 函数的 UDP 客户端套接字接管服务器发来的数据。
-
-
ssize_t recvfrom(int sockfd,const void*buff,size_t nbytes,int flags,struct sockaddr*from,socklen_t addrlen);
-
性能:
- 接收数据
-
参数:
- sockfd为本地套接字描述符。
- buff为指向存储接收数据的缓存指针。
- nbytes为缓存长度。
- flags为管制比特,通常取 0。
- from为存储远端(数据发送端)端点地址构造的指针。
-
返回:
- 胜利,返回接管到的字节数。
- 失败,返回-1。
-
阐明:
- recvfrom()函数用于从 UDP 服务器端套接字或未调用 connect() 函数的 UDP 客户端套接字接收数据。
-
-
int setsockopt(int sockfd,int level,int optname,const void*optval,socklen_taddrlen);
-
性能:
- 设置套接字选项。
-
参数:
- sockfd为本地套接字描述符。
- level为选项级。
- optname为选项名。
- optval为存储选项值。
-
返回:
- 胜利,返回0。
- 失败,返回-1。
-
int getsockopt(int sockfd,int level,int optname,void*optval,socklen_t addrlen);
-
-
性能:
- 读取套接字选项。
-
参数:
- optval用于寄存选项读取值。
-
返回:
- 胜利,返回0。
- 失败,返回-1。
-
阐明:
- getsockopt()函数用于获取任意类型,任意状态套接口的选项以后值,并把后果存入optval。
-
- TCP提供面向连贯,牢靠的字节流传输服务,抉择应用 TCP 的网络应用程序,毋庸解决数据失落等问题,从而使得利用程序设计绝对简略。
- UDP提供无连贯,不牢靠的数据报传输服务,抉择应用 UDP 的网络应用程序,不能依附 UDP 实现牢靠数据传输。