• 计算机网络6_应用层


    1、大纲

    网络应用的体系结构

             客户机/服务器

             P2P

             混合结构

     

    网络应用的服务需求

             可靠性

             带宽

             时延

     

    Internet传输层服务模型

             TCP

             UDP

     

    特定网络应用及协议

             HTTP

             SMTP  POP  IMAP

             DNS

             P2P应用

     

    Socket编程

             TCP

             UDP

    ================================================================= 

    2、网络应用的体系结构

    客户机/服务器结构 C/S

    点对点结构 P2P

    混合结构 Hybrid

     

    2.1 客户机/服务器结构

             服务器:

                       7*24小时提供服务

                       永久性访问地址/域名

                       利用大量服务器实现可扩展性:并行/分布式技术

             客户机:

                       与服务器通信,使用服务器提供的服务

                       间歇性接入网络

                       可能使用动态IP地址

                       不会与其他客户直接通信

     

    2.2   纯P2P结构

             没有永远在线的服务器

             任意端系统/节点之间可以直接通讯

             节点间歇性接入网络

             节点可能改变IP地址

     

             优点:高度可伸缩

             缺点:难于管理

     

    2.3 混合结构

             Napster:文件传输使用P2P结构,文件的搜索采用C/S结构-集中式

    =================================================================

    3 网络应用进程通信

    进程:主机上运行的程序

    同一主机上运行的进程之间如何通信:

             进程间通信机制

             操作系统提供

    不同主机上运行的进程间如何通信

             消息交换

     

    客户机进程:发起通信的进程

    服务器进程:等待通信请求的进程

     

    3.1 Socket

    进程间的通信靠:套接字 Socket

    进程间通信利用socket发送/接收消息实现

    类似于寄信:

             发送方将消息送到门外邮箱

             发送方依赖(门外的)传输基础设施将消息传送到接收方所在主机,并送到接收方的门外。

             接收方从门外获取消息

    传输基础设施向进程提供API

             传输协议的选择

             参数的设置

     

    3.2 如何寻址进程

    不同主机上的进程间通信,那么每个进程必须拥有标识符

    如何寻址主机?-IP地址  但不足以定位进程,因为一台主机上有多个进程需要通信。

    端口号:Port number:为主机上每个需要通信的进程分配一个端口号。HTTP Server:80   Mail Server:25

    进程的标识符:

             IP地址+端口号

     

    3.3 应用层协议

             网络应用需遵循应用层协议

             公开协议:

                       由RFC定义

                       允许互操作

                       HTTP, SMTP……

             私有协议

                       多数P2P文件共享应用

     

             应用层协议的内容

                       消息的类型(TYPE)

                                请求消息

                                响应消息

                       消息的语法(Syntax)格式

                                消息中有哪些字段

                                每个字段如何描述

                       字段的语义

                                字段中信息的含义

                       规则

                                进程合适发送/响应消息

                                进程如何发送/响应消息

     

     

    3.4 网络应用的需求与传输层服务

             数据丢失/可靠性:

                       某些网络应用能偶容忍一定的数据丢失:网络电话

                       某些网络应用要求100%可靠的数据传输:文件传输,telnet

             时间/延迟

                       有些应用只有在时间延迟足够低时才“有效”

                       网络电话/网络游戏

             带宽

                       某些应用只有在带宽达到最低要求时才“有效”:网络视频

                       某些应用能够适应任何带宽-弹性应用:email

            

    3.5 Internet 提供的传输服务

             TCP服务

                       面向连接:客户机/服务器进程间需要建立连接

                       可靠的传输

                       流量控制:发送方不会发送速度过快,超过接收方的处理能力

                       拥塞控制:

                       不提供时间/延迟保障

                       不提供最小带宽保障

             UDP服务

                       无连接

                       不提供可靠的数据传输

                       不提供:可靠性保障,流量控制,拥塞控制,延迟保障,带宽保障

                       给用户极大的发挥空间。

    ==================================================================

    4、 Web 应用概述

    4.1Web与HTTP

             World Wide Web: Tim Berners-Lee

                       网页

                       网页互相链接

             网页(Web Page)包含多个对象(objects)

                       对象:HTML文件,JPEG图片,视频文件,动态脚本等

                       基本HTML文件:包含对其他对象引用的链接

             对象的寻址(Addressing)

                       URL (Uniform Resource Locator): 统一资源定位器

                       Scheme(协议)://host(主机):port(端口)/path(路径)

     

    4.2 HTTP协议概述:万维网遵循的协议

             超文本传输协议:Hyper Text Transfer Protocol

             C/S结构:

                       客户-Browser:请求,接收,展示Web对象

                       服务器-Web server:响应客户的请求,发送对象

     

    使用TCP传输服务:

             服务器在80端口等待客户的请求

             浏览器发起到服务器的TCP连接(创建套接字Socket)

             服务器接收来自浏览器的TCP连接

             浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP消息

             关闭TCP连接

     

    HTTP协议是无状态协议

                         服务器不维护任何有关客户端过去所发请求的信息

     

     

    HTTP连接的两种类型

                         非持久性连接:每个TCP连接最多允许传输一个对象

                         持久性连接:每个TCP连接允许传输多个对象

     

    响应时间分析与建模

                         RTT (Round Trip Time)

                                从客户端发送一个很小的数据包到服务器并返回所经历的时间。

                         响应时间(Response time)

                                发起、建立TCP连接:1个RTT

                                发送HTTP请求消息到HTTP响应消息的前几个字节到达:1个RTT

                                响应消息中所含的文件/对象传输时间

                                Total=2RTT+文件发送时间

     

    非持久性连接的问题:

                         每个对象都需要2个RTT

                         操作系统需要为每个TCP连接开销资源(overhead)

                         浏览器会怎么做?

                                打开多个并行TCP连接以获取网页所需对象

                                给服务器造成什么影响?很大负担

     

    持久性连接

                         发送响应后,服务器保持TCP连接的打开

                         后续的HTTP消息可以通过这个连接发送

     

    无流水的持久性连接

                         客户端只有收到前一个响应后才发送新的请求

                         每个被引用的对象耗时1个RTT

    带有流水机制的持久性连接

                         HTTP 1.1 的默认选项

                         客户端只要遇到一个引用对象就尽快发出请求

                         理想情况下,收到所有的引用对象只需耗时约1个RTT.

     

    4.3HTTP消息格式

    HTTP协议有两类消息:

                         请求消息(request)

                         响应消息 (response)

    请求消息:

                         ASCII 人直接可读

     

    上传输入的方法

                         POST方法:

                                网页经常需要填写表格

                                在请求消息的消息体中上传客户端的输入

                         URL方法:

                                使用GET方法

                                输入信息通过request行的URL字段上传

     

    方法的类型

                         HTTP/1.0

                                GET

                                POST

                                HEAD: 请Server不要将所请求的对象放入响应消息中

                         HTTP/1.1

                                GET POST HEAD

                                PUT: 将消息体中的文件上传到URL字段所指定的路径

                                DELETE: 删除URL字段所指定的文件

     

    响应消息:

                         HTTP响应状态代码:

                                响应消息的第一行

                                示例:   

                                         200 OK

                                         301 Moved Permanently

                                         400 Bad Request

                                         404 Not Found

                                         505 HTTP Version Not Supported

     

    4.4 Cookie技术

                         HTTP协议无状态

                         很多应用需要服务器掌握客户端的状态,如网上购物,如何实现?

                         Cookie技术:

                                某些网站为了辨别用户身份,进行session跟踪而储存在用户本地终端上的数据(通常经过加密)

                                RFC6265

                         Cookie的组件

                                HTTP响应消息的cookie头部行

                                HTTP请求消息的cookie头部行

                                保存在客户端主机上的cookie文件,由浏览器管理

                                Web服务端的后台数据库

                         Cookie能够用于:

                                身份认证

                                购物车

                                推荐

                                Web e-mail

                         Cookie问题:隐私问题

     

    Cookie能偶怎样被用于收集隐私?能够收集哪些隐私?你在上网的时候感觉到自己的隐私被严重侵犯吗?

     

    4.5 Web缓存技术/代理服务器技术    性能优化

    功能:能够在不访问服务器的前提下满足客户端的HTTP请求。

     

    为什么要发明这种技术?

                         缩短客户请求的响应时间

                         减少机构/组织的流量

                         在大范围内实现有效的内容分发

     

    Web缓存/代理服务器

                         用户设定浏览器通过缓存进行Web访问

                         浏览器向缓存/代理服务器发送所有的HTTP请求

                                如果所请求对象在缓存中,缓存返回对象

                                否则,缓存服务器向原始服务器发送HTTP请求,获取对象,然后返回给客户端并保存该对象

     

    缓存既充当客户端,也充当服务器

    一般由ISP架设

     

    条件性GET方法

                         目标:如果缓存有最新的版本,则不需要发送请求对象

                         缓存:在HTTP请求消息中声明所持有版本的日期; If-modified-since:<data>

                         服务器:如果缓存的版本是最新的,则响应消息中不包含对象  HTTP/1.0 304 Not Modified

     

    Web技术近年来的新进展,关键思想和技术?

    ================================================================ 

    5、Email应用

    5.1 Email应用的构成

                         Email应用的构成组件

                                邮件客户端

                                邮件服务器

                                SMTP协议(Simple Mail Transfer Protocol)

                         邮件客户端

                                读写Email消息

                                与服务器交互,收,发Email消息

                                Outlook, Foxmail, Thunderbird

                                Web客户端

                         邮件服务器

                                邮箱:存储发给该用户的Email

                                消息队列:存储等待发送的Email

                         SMTP协议

                                邮件服务器之间传递消息所使用的协议

                                客户端:发送消息的服务器

                                服务器:接收消息的服务器

     

    采用邮件服务器的好处:

                         客户端不能保证一直在线,当不在线时,他人无法发送邮件。反之亦然。

     SMTP协议:RFC 2821

                         使用TCP进行email消息的可靠传输

                         端口25

                         传输过程的三个阶段

                                握手

                                消息的传输

                                关闭

                         命令/响应交互模式

                                命令:ASCII文本

                                响应:状态代码和语句

                         Email消息只能包含7位ASCII代码:典型的异步应用

    SMTP交互示例:

    SMTP协议:

                         使用持久性连接

                         要求消息必须由7位ASCII码构成

                         SMTP服务器利用CRLF,CRLF确定消息的结束

    与HTTP对比:

                         HTTP: 拉式(pull)

                         SMTP: 推式(push)

                         都使用命令/响应交互模式

                         命令和状态代码都是ASCII码

                         HTTP: 每个对象封装在独立的响应消息中

                         SMTP: 多个对象在由多个部分构成的消息中发送

                        

    Email的演变过程,有哪些缺点和不足?

     

    5.2 Email消息格式与POP3协议

                         SMTP: email消息的传输/交换协议 --------服务器之间

                         RFC 822: 文本消息格式标准

                                头部行:To     From      Subject

                                消息体:消息本身    只能是ASCII字符

                         Email消息格式:多媒体扩展

                                MIME:多媒体邮件扩展RFC 2045,2046

                                         通过在邮件头部增加额外的行以声明MIME的内容类型

     

    邮件访问协议:从服务器获取邮件

                         POP:Post Office Protocol [RFC 1939]

                                认证授权和下载

                         IMAP:Internet Mail Access Protocol [RFC 1730]

                                更多功能

                                更加复杂

                                能够操纵服务器上存储的消息

                         HTTP: 163, QQ Mail等

     

    POP协议

                         认证过程

                                客户端命令 User Pass

                                服务器响应 +OK -ERR

                         事务阶段

                                List:列出消息数量

                                Retr: 用编号获取消息

                                Dele:删除消息

                                Quit

     

    POP协议: “下载并删除” 模式

    用户如果换了客户端软件,无法重读该邮件

    “下载并保持”模式:不同客户端都可以保留消息的拷贝

    POP3是无状态的

     

    IMAP协议:

                         所有消息统一保存在一个地方:服务器

                         允许用户利用文件夹组织消息

                         IMAP支持跨会话(Session)的用户状态

                                文件夹的名字

                                文件夹与消息ID之间的映射等

     

    IMAP与POP3的不同,并调研主流Email服务队IMAP协议的支持情况

    =================================================================

    6、 DNS应用   庞大而负责的网络应用,核心应用

    6.1Domain Name System 域名系统

    解决的是Internet上主机/路由器的识别问题

                         IP地址:一串数字

                         域名:日常上网用户使用的是域名

    问题:域名和IP地址之间如何映射

     

    域名解析系统DNS

                         多层命名服务器构成的分布式数据库

                         应用层协议:完成名字的解析

                                Internet核心功能,用应用层协议实现

                                网络边界复杂

    DNS服务

                         域名向IP地址的翻译

                         主机别名

                         邮件服务器别名

                         负载均衡:Web服务器

    问题:为什么不使用集中式的DNS?

                         单点失败问题

                         流量问题

                         距离问题

                         维护性问题

     

    DNS采用分布式层次式数据库

                         第一层:根DNS服务器

                         第二层:com    org   edu

                         第三层:

    客户端想要查询   www.amazon.com 的IP

                         客户端查询根服务器,找到com域名解析服务器

                         客户端查询com域名解析服务器,找到amazon.com域名解析服务器

                         客户端查询 amazon.com域名解析服务器,获得www.amazon.com的IP地址

     

    DNS根域名服务器

                         本地域名解析服务器无法解析域名时,访问根域名服务器

    根域名服务器

                         如果不知道映射,访问权威域名服务器

                         获得映射

                         向本地域名服务器返回映射

    全球有13个根域名服务器

     

    顶级域名服务器(TLD Top-level domain) 负责 com org net edu等

    权威域名服务器:组织的域名解析服务器,提供组织内部服务器的解析服务

                         组织负责维护

                         服务提供商负责维护

    本地域名解析服务器:

                         不严格属于层级体系

                         每个ISP有一个本地域名服务器

                                默认域名接卸服务器

                         当主机进行DNS查询时,查询被发送到本地域名服务器

                                作为代理(proxy),将查询转发给(层级式)域名解析服务器系统

     

    迭代查询

    递归查询

     

    DNS记录缓存和更新

                         只要域名解析服务器获得域名---IP映射 ,即缓存这一映射

                                一段时间过后,缓存条目失效(删除)

                                本地域名服务器一般会缓存顶级应服务器的映射

                                         因此根域名服务器不经常被访问

    记录更新与通知机制

     

    我国没有根域名服务器,是否会影响我国的网络安全,会有什么影响

                        

    6.2 DNS记录和消息格式

    DNS记录

                         资源记录(RR resource records)

                         RR format (name, value, type, ttl)

                         Type A

                                Name: 主机域名

                                Value: IP地址

                         Type =NS

                                Name:域(edu.cn)

                                Value:该域权威域名解析服务器的主机域名

                         Type= CNAME

                                Name:某一真实域名的别名

                                Value:真是域名

                         Type=MX

                                Value是与name相对应的邮件服务器

     

    DNS协议与消息

                         DNS协议:查询(query)和回复(reply消息)  ,消息格式相同

    消息头部:

                         Identification :16位查询编号,回复使用相同的编号

                         Flags:

                                查询或回复

                                期望递归

                                递归可用

                                权威回答

     

     DNS应用是使用TCP 还是UDP

    如何注册域名:在域名管理机构注册域名

     

    找出哪些在应用层实现的Internet核心服务,调研它们的协议、消息格式:

                         希望端系统很复杂,网络核心越简单越好~

    ================================================================= 

    7、 P2P应用

    7.1 P2P应用:原理与文件分发

    Peer-to-peer 架构

    没有服务器

    任意端系统之间直接通信

    节点阶段性接入Internet

    节点可能更换IP地址

     

    文件分发:客户机/服务器  vs  P2P

    BitTorrent

     

    获取chunk

    给定任一时刻,不同的节点持有文件的不同chunk集合

    节点(Alice)定期查询每个邻居所持有的chunk列表

    节点发送请求,请求获取缺失的chunk

    发送chunk:tit-for-tat

    Alice向4个邻居发送chunk,正在向其发送chunk,速率最快的4个

    每10秒重新评估top 4

    每30秒随机选择一个其他节点,向其发送chunk

     

    BitTorrent 技术对网络性能有哪些潜在的危害

     

    7.2 P2P应用_索引

    P2P系统的索引:信息到节点位置(IP地址+端口号)的映射

    文件共享(电驴)

    利用索引动态跟踪节点所共享的文件的位置

    节点需要告诉索引它拥有哪些文件

    节点搜索索引,从而获知能够得到哪些文件

    即时消息(QQ)

    索引负责将用户名映射到位置

    当用户开启IM应用时,需要通知索引它的位置

    节点检索索引,确定用户的IP地址

     

    集中式索引:

    内容和文件传输是分布式的

    但是内容定位是高度集中式的

    单点失效问题

    性能瓶颈

    版权问题

     

    洪泛式查询:

             完全分布式架构

             Gnutella采用这种架构

             每个节点对它共享的文件进行索引,且只对它共享的文件进行索引

             覆盖网络:Graph

             节点X与Y之间如果有TCP连接,那么构成一个边

             所有的活动节点和边构成覆盖网络

             边:虚拟链路

             节点一般邻居数少于10个

     

    查询消息通过已有的TCP连接发送

    节点转发查询消息

    如果查询命中,则利用反向路径发回查询节点

     

    层次式覆盖网络

             介于集中式索引和洪泛式查询之间的方法

             每个节点或者是一个超级节点,或者被分配一个超级节点

                       节点和超级节点间维持TCP连接

                       某些超级节点对之间维持TCP连接

             超级节点负责跟踪子节点的内容

     

    查阅Skype应用的相关资料,就其架构,协议,算法等撰写一篇调研报告。长度在5000字以上。

     

    ================================================================= 

    8、 Socket 套接字编程

    8.1开发自己的网络应用程序

    Socket编程----应用编程接口

    网络应用程序针对端系统:应用层-传输层-网络层-数据链路层-物理层

     

    数据链路层:直接网卡编程,硬件相关(大部分软件开发人员难以掌握)

    网络层:基于Packet Driver编程,屏蔽网卡细节,适用于所有网卡

             基于NDIS网络编程 Windows,

    基于LibPcap/WinPcap、Libnet、Libnids、Libicmp编程

     

    应用层-传输层之间: NetBIOS编程,Socket编程

    应用层:Web/RPC/中间件编程,在应用层之上开发网络应用程序

    网络应用程序设计手段

     

     

    应用编程接口API:

             应用层中的应用进程之间信息交互,基于应用层协议。

     传输层及以下是操作系统控制的。应用层处理完的数据交给下层。

    操作系统控制的传输层与应用进程控制的应用层之间的交互需要一个接口。起到应用进程与底层协议之间的桥梁作用。这样的接口叫做应用编程接口(API)。

             API:就是应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口。

     

    几种典型的应用编程接口:

             Berkeley UNIX操作系统定义了一种API,称为套接字接口,简称套接字

             微软公司在其操作系统中采用了套接字接口,形成了一个稍有不同的API,并称之为Windows Socket Interface,WINSOCK。

             AT&T 为其UNIX系统V定义了一种API,简写为TLI(Transport Layer Interface)。

     

    8.2 Socket API

             事实上的工业标准

             绝大多数操作系统都支持

             Internet网络应用最典型的API接口

             通信模型

                       客户/服务器(C/S)

             应用进程间通信的抽象机制

     

    给套接字以编号:即端口号(16位整数)

    标识通信端点(对外):

             IP地址 + 端口号(有时候也称为端点地址)

    操作系统/进程如何管理套接字(对内)

             套接字描述符(socket descriptor)

                       小整数

     

    Socket抽象:操作系统管理套接字

             类似于文件的抽象

             当应用进程创建套接字时,操作系统分配一个数据结构存储该套接字相关信息

             返回套接字描述符

     

    Socket描述符表(每个进程一个)----------Socket数据结构(存储套接字的相关信息)

    符表里每个进程有一个指针,指向socket数据结构

     

    地址结构:

             已定义结构sockaddr_in

             使用TCP/IP协议簇的网络应用程序声明端点地址变量时,使用结构sockaddr_in

     

     

    8.3 Socket API函数

    以WINSOCK为例

             WSAStartup   初始化windsock动态连接库

             WSACleanup  清除/终止socket库的使用

     

    应用层要通信,需要创建套接字。套接字架起了应用层和传输层之间的接口。

    传输层:TCP UDP

     

    Socket函数  创建Socket函数

             Sd=socket(protofamily, type, proto);

             创建套接字

             操作系统返回套接字描述符(sd)

             第一个参数(协议族)

             第二个参数(套接字类型)

             第三个参数(协议号)

     

    面向传输层套接字 流式 SOCK_STREAM 数据报SOCK_DGRAM

    面向网络层套接字 SOCK_RAW

     

    TCP给应用的服务:可靠、面向连接、字节流传输、点对点、

    UDP:不可靠、无连接、数据传输

     

     

    Closesocket

             关闭一个描述符为sd的套接字

             如果多个进程共享一个套接字,调用closesocket将套接字引用计数减1,减至0才关闭

             一个进程中的多线程对一个套接字的使用无计数

             返回值:

                       0 :成功

                       SOCKET_ERROR:失败

     

    bind 函数      为套接字设置地址信息

             int bind(sd,localaddr,addrlen);

    绑定套接字的本地端点地址:端点地址是IP地址+端口号

    参数:

             套接字描述符 sd

             端点地址:结构 sockaddr_in

    客户端程序一般不必调用bind函数

    服务器端:需要   熟知端口号

                       IP地址在服务器端如何设置

     

    Listen

             Int listen(sd,queuesize);

             置服务器端的流套接字处于监听状态

                       仅服务器端调用

                       仅用于面向连接的流套接字

             设置连接请求队列大小(queuesize)

             返回值:

                       0:成功

                       SOCKET_ERROR:失败

     

    Connect函数

             Connect(sd,saddr,saddrlen);

                       客户程序调用connect函数来使客户套接字(sd)与特定计算机的特定端口(saddr)的套接字(服务)进行连接

                       仅用于客户端

                       可用于TCP客户端也可用于UDP客户端

                                TCP客户端:建立TCP连接

                                UDP客户端:指定服务器端点地址

     

    Accept

             newsock=accept(sd,caddr,caddrlen);

             服务程序调用accept函数从处于监听状态的流套接字sd的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道。

                       仅用于TCP套接字

                       仅用于服务器

             利用新创建的套接字(newsock)与客户通信

     

    Connect 和 accept都是阻塞函数

    发送数据

    Send(sd,*buf,len,flags)

    Sendto(sd,*buf,len,flags,destaddr,addrlen)

    Send函数用于TCP套接字(客户与服务器)或调用了connect函数的UDP客户端套接字

    Sendto函数用于UDP服务器端套接字与未调用connect函数的UDP客户端套接字

     

    接受数据

    Recv(sd,*buffer,len,flags);

    Recvfrom(sd,*buf,len,flags,senderaddr,saddrlen);

     

    Setsockopt  用来设置套接字sd的选项参数

    Getsockopt 用于获取任意类型,任意状态套接口的选项当前值,并把结果存入optval中

                       获取套接字选项参数

     

    网络字节顺序

             作用类似于OSI模型的表示层

             TCP/IP定义lE 标准的用于协议头中的二进制整数表示:网络字节顺序

             某些Socket API函数的参数需要存储为网络字节顺序(IP地址、端口号等)

             可以实现本地字节顺序与网络字节顺序转换的函数

     

    网络应用的Socket API调用基本流程

     

     

    8.4Socket编程-客户端软件设计

    解析服务器IP地址

    客户端可能使用域名或IP地址标识服务器

    IP协议需要使用32位二进制IP地址

    需要将域名或IP地址转换为32位IP地址

    函数inet_addr() 实现点分十进制IP地址到32位IP地址转换

    函数gethostbyname()实现域名到32位IP地址转换

    返回一个指向结构hostent指针

    解析服务器(熟知)端口号

    客户端还可能使用服务名(如HTTP)标识服务器端口

    需要将服务名转换为熟知端口号

     

    解析协议号

    客户端可能使用协议名指定协议

    需要将协议名转换为协议号(如:6)

    函数getprotobyname()实现协议名到协议号的转换

    返回一个指向结构protoent的指针

     

    TCP客户端软件流程

    确定服务器IP地址与端口号

    创建套接字

    分配本地端点地址(IP地址+端口号)----系统自动完成

    连接服务器(套接字)

    遵循应用层协议进行通信

    关闭/释放连接

     

    UDP客户端软件流程

    确定服务器IP地址与端口号

    创建套接字

    分配本地端点地址(IP地址+端口号)

    指定服务器端点地址,构造UDP数据报

    遵循应用层协议进行通信

    关闭/释放套接字

     

    客户端软件的实现-connectsock()

     

    8.5 Socket 编程-服务器软件设计

    4种类型基本服务器

    循环无连接

    循环面向连接

    并发无连接

    并发面向连接

     

    循环无连接服务器基本流程

    创建套接字

    绑定端点地址(INADDR_ANY+端口号)

    反复接收来自客户端的请求

    遵循应用层协议,构造响应报文,发送给客户

     

    数据发送

    服务器端不能使用connect()函数

    获取客户端点地址

    调用recvfrom()函数接收数据时,自动提取

     

    循环面向连接服务器基本流程

    创建主套接字,并绑定熟知端口号;

    设置主套接字为被动监听模式,准备用于服务器;

    调用accept()函数接收下一个连接请求(通过主套接字),创建新套接字用于与该客户建立连接;

    遵循应用层协议,反复接收客户请求,构造并发送响应(通过新套接字);

    完成为特定客户服务后,关闭与该客户之间的连接,返回步骤3.

     

    并发无连接服务器基本流程

    主线程1:创建套接字,并绑定熟知端口号;

    主线程2:反复调用recvfrom()函数,接收下一个客户请求,并创建新线程处理该客户响应;

    子线程1:接收一个特定请求;

    子线程2:依据应用层协议构造响应报文,并调用sendto();

    子线程3:退出(一个子线程处理一个请求后即终止)。

     

    并发面向连接服务器基本流程

    主线程1:创建主套接字,并绑定熟知端口号;

    主线程2:设置主套接字为被动监听模式,准备用于服务器;

    主线程3:反复调用accept()函数接收下一个连接请求(通过主套接字),并创建一个新的子线程处理该客户响应;

    子线程1:接收一个客户的服务请求(通过新创建的套接字);

    子线程2:遵循应用层协议与特定客户进行交互;

    子线程3:关闭/释放连接并退出(线程终止)。

     

     

    服务器的实现(只是一种设计)

    设计一个底层过程隐藏底层代码

    passivesock()

    两个高层过程分别用于创建服务器端UDP套接字和TCP套接字(调用passivesock()函数):

    passiveUDP()

    passiveTCP()

    ======================================

    9、应用层协议

    利用网络的应用程序有很多。例如:Web浏览器、电子邮件、远程登录、文件传输、网络管理;

    以上应用程序正式基于应用协议建立起来的。

     

    应用的开发者只要关注选用哪种应用协议、如何开发即可,而不用担心应用中的数据以何种方式发送到目标主机。这也是得益于网络层的功劳。

     

    介绍几款经典的应用协议

    远程登录

      TELNET

      向主机发送文字命令,并在主机上执行。本地用户好像直接与远端主机的Shell相连似的。

      两大基本服务:仿真终端、协商选项机制。

      经常用来登录路由器或高性能交换机等网络设备来进行相应的设置;

      SSH:加密的远程登录系统

    文件传输

      FTP,使用两条TCP连接,一条用来控制,一条用于数据的传输。

    一般来说.用户联网的首要目的就是实现信息共享文件传输是信息共享非常重要的一个内容之一。

    基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议,这样用户就可以把自己的文件传送给别人,或者从其它的用户环境中获得文件。

    与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。

    使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可上传或下载文件。也就是说,要想同哪一台计算机传送文件,就必须具有哪一台计算机的适当授权。换言之,除非有用户ID和口令,否则便无法传送文件。这种情况违背了Internet的开放性,Internet上的FTP主机何止千万,不可能要求每个用户在每一台主机上都拥有帐号。匿名FTP就是为解决这个问题而产生的。

    匿名FTP是这样一种机制,用户可通过它连接到远程主机上,并从其下载文件,而无需成为其注册用户。系统管理员建立了一个特殊的用户ID,名为anonymous,Internet上的任何人在任何地方都可使用该用户ID。

    匿名FTP是Internet网上发布软件的常用方法。

    FTP软件种类、工作模式

     

    电子邮件

      提供电子邮件服务的协议叫做SMTP。期传输层使用了TCP协议。

     

    WWW:

     

    网络管理

  • 相关阅读:
    C语言寒假大作战01
    C语言|博客作业12-学期总结
    第一次作业
    C语言|博客作业11
    C语言|博客作业10
    Centos7上安装 sqlmap 所经历的坑
    软件工程1916|W(福州大学)_助教博客】助教总结
    软件工程1916|W(福州大学)_助教博客】个人总结作业(第12次)成绩公示
    团队作业第五次(第8次)—项目系统设计与数据库设计成绩排名
    需求分析课堂答辩问题汇总
  • 原文地址:https://www.cnblogs.com/grooovvve/p/12251964.html
Copyright © 2020-2023  润新知