- 网络应用的体系结构
- 网络进程间通信
- 网络应用对传输服务的需求
- Web应用
- Email应用
- DNS概述
- DNS服务
- 分布式层次式数据库
- DNS根域名服务器
- DNS查询示例
- DNS记录
- DNS协议与消息
- 练习
- 题1 DNS
- https://www.kicker.com.cn/index.html”,且该URL对应的IP地址在你的计算机上没有缓存;文件index.html引用了8个小图像。域名解析过程中,无等待的一次DNS解析请求与响应时间记为RTTd,HTTP请求传输Web对象过程的一次往返时间记为RTTh。请回答下列问题:">题2 假设你在浏览某网页时点击了一个超链接,URL为“https://www.kicker.com.cn/index.html”,且该URL对应的IP地址在你的计算机上没有缓存;文件index.html引用了8个小图像。域名解析过程中,无等待的一次DNS解析请求与响应时间记为RTTd,HTTP请求传输Web对象过程的一次往返时间记为RTTh。请回答下列问题:
- P2P应用:原理与文件分发
- SOCKET编程
- -- coding: utf-8 --
网络应用的体系结构
客户机/服务器结构

- 搜索引擎
- 因特网商务(亚马逊、e-bay和 阿里巴巴)
- 基于Web的电子邮件
-
纯P2P结构

流行的、流量密集型的应用
- 文件共享(如BitTorrent)
- 对等放协助下载加速器(如迅雷)
- 因特网电话
- 视频会议
混合结构

网络进程间通信
套接字: Socket
如何寻址进程?
应用层协议
应用层协议的内容

网络应用对传输服务的需求
Internet提供的传输服务
选择的网络应用的要求
练习
题1 网络概述

Web应用
Web与HTTP
HTTP协议

- 使用TCP传输服务
- 服务器在80端口等待客户的请求
- 浏览器发起到服务器的TCP连接(创建套接字Socket)
- 服务器接受来自浏览器的TCP连接
- 浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP消息
- 关闭TCP连接
无状态(stateless)
每个TCP连接最多允许传输一个对象
- HTTP 1.0版本使用非持久性连接
响应时间分析与建模
持久性HTTP
方法的类型


HTTP请求消息
HTTP响应消息
HTTP响应状态代码
Cookie技术
为什么需要Cookie?
Cookie技术
Cookie的组件
Cookie的作用
Web缓存/代理服务器技术
功能
为什么要发明这种技术?
Web缓存/代理服务器
Web缓存示例

- 解决方案1

- 解决方案2
条件性GET方法
练习
题1 Web应用

-
题2 HTTP协议

答案为CD;解析:一个网页嵌有10个图片,即对于非持续连接要产生10+1个TCP连接和请求,共11*2=22个RTT;对于无流水的持续连接,只需一次TCP连接,每个引用的对象耗时1个RTT,共2+10=12个RTT;对于有流水的持续连接,理想情况下收到所有的引用对象只需要耗时1个RTT,共2+1=3个RTT。
题3 Cookie和Web缓存

答案:AD;解析:Web缓存服务器通常放在离客户端比较近的地方
题4 关于WWW服务,以下哪种说法是错误的(D)
A.WWW服务采用的主要传输协议是HTTP
B.WWW服务以超文本方式组织网络多媒体信息
C.用户访问Web服务器可以使用统一的图形用户界面
D.用户访问Web服务器不需要知道服务器的URL地址
HTTP是WWW客户机和WWW服务器之间的应用层传输协议;页面采用超文本方式对信息进行组织。用户可以使用统一的图形用户界面访问Web服务器,但用户访问Web服务器的时候需要知道服务器的URL地址。题5 根据你在应用层、运输层中所学的知识,请介绍在HTTP中,为了提高传输效率,可以采取哪些有效的措施?
解:①并行连接:http允许客户端打开多条连接,并行地执行多个http的事务。②持久连接:建立一条持久化的连接,不需要每次都建立连接在中断。③管线化连接:允许在持久连接上可选地使用请求管道,即建立一个队列,将http事务请求放到队列中,一条一条发送而无需等待前面的响应结果。(流水线机制)
Email应用
Email应用的构成
SMTP协议
SMTP是因特网电子邮件的核心
SMTP交互示例
SMTP协议 vs HTTP协议?
Email消息格式
多媒体扩展
邮件访问协议
POP协议
IMAP协议
练习
题1 Email

用户代理允许用户阅读、回复、转发、保存和撰写报文。邮箱代理向邮件服务器发送报文,当另一方需要阅读报文时,用户代理再在邮件服务器中取得报文。
- 邮件服务器:
邮件服务器时电子邮件体系结构的核心,每个用户在某个邮件服务器上有一个邮箱。服务器运行相应的协议,完成用户邮件的转发、接收、存储邮件。用户也可通过服务器浏览相应的电子邮件。
网络中运行相应网络协议,负责发送和接收用户电子邮件的服务器。
a.邮件交换服务器:这个服务器运行SMTP协议,完成用户邮件的转发工作;
b.邮件接收服务器:这个服务器类型运行POP或IMAP协议,接收电子邮件并进行存储,用户通过这个服务器可以浏览相应的电子邮件.
- 简单的邮件传输协议smtp:
smtp是因特网电子邮件中主要的应用层协议,使用tcp可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件,主要用于系统之间的邮件信息传递,并提供有关来信的通知。
DNS概述
DNS服务
分布式层次式数据库
DNS根域名服务器
DNS查询示例
迭代查询
递归查询
例题
DNS记录
DNS协议与消息
练习
题1 DNS

-
题2 假设你在浏览某网页时点击了一个超链接,URL为“https://www.kicker.com.cn/index.html”,且该URL对应的IP地址在你的计算机上没有缓存;文件index.html引用了8个小图像。域名解析过程中,无等待的一次DNS解析请求与响应时间记为RTTd,HTTP请求传输Web对象过程的一次往返时间记为RTTh。请回答下列问题:
1)你的浏览器解析到URL对应的IP地址的最短时间是多少?最长时间是多少?
解:浏览器解析到URL对应的IP地址的最短时间是:在主机没有缓存的情况下,本地DNS服务器有该域名的IP地址缓存,则最短时间为 RTTd;在主机没有缓存,且使用递归查询的情况下,本地local DNS 服务器就会将该DNS请求发给Root DNS服务器,然后Root DNS服务器将DNS请求发给顶级域名服务器TLD,然后顶级域名服务器TLD将该DNS请求发给权威域名服务器,权威域名服务器找到DNS请求的IP地址后按原路一层一层返回请求,最长时间为 (4+1)RTTd = 5RTTd。
2)若浏览器没有配置并行TCP连接,则基于HTTP1.0获取URL链接Web页完整内容(包括引用的图像,下同)需要多长时间(不包括域名解析时间,下同)?
解:第一次建立TCP连接用掉一个RTTh,获取Html文件用掉一个RTTh;
因为是非持久连接,所以每次传输文件都要重新打开TCP连接,用掉一个RTTh,后面还有8个小图像,就需要打开8次TCP连接,同时有8次传输小图像所用8个RTTh,综上,共计:1RTTh+1RTTh+8RTTh+8RTTh=18RTTh。
3)若浏览器配置5个并行TCP连接,则基于HTTP1.0获取URL链接Web页完整内容需要多长时间?
解:一开始建立TCP连接,获得index.html文件2个RTTh。然后由图像地址信息,在2轮并行处理下完成8个图像的加载工作。22个RTTh。
答: 2 + 4 = 6 RTTh。(两轮是指:因为每次5个并行TCP连接,一共有8个小图像,第一次传输5个,第二次传输剩余的3个,所以为2轮。而每轮都要打开一次TCP连接用了1个RTTh,又同时传输图像用了一个RTTh,所以为2轮*2个RTTh=4RTTh,)
4)若浏览器没有配置并行TCP连接,则基于非流水模式的HTTP1.1获取URL链接Web页完整内容需要多长时间?基于流水模式的HTTP1.1获取URL链接Web页完整内容需要多长时间?
答: 无流水: 1RTTh(TCP持久连接)+ 1RTTh(1次html内容获取)+ 8RTTh(8个图像传输时间) = 10RTTh。有流水: 1RTTh(TCP持久连接)+ 1RTTh (1次html内容获取)+ 1RTTh(8个图像传输时间)= 3RTTh。P2P应用:原理与文件分发
客户机/服务器 vs. P2P
从一个服务器向N个节点分发一个文件需要多长时间?
客户机/服务器

我们可以看到,对足够大的N。客户-服务器分发的时间由NF/us确定。
P2P
客户机/服务器 vs. P2P: 例子
BitTorrent
集中式索引
集中式索引的问题
洪泛式查询: Query flooding
层次式覆盖网络
练习
题1 P2P

-
题2 考虑向N个对等方(用户)分发F=15Gb的一个文件。该服务器具有us=30Mbps的上传速率,每个对等方的下载速率di=2Mbps,上传速率为u。请分别针对客户-服务器分发模式和P2P分发模式两种情况,对于N=10、100和1000以及u=500kbps、1Mbps和2Mbps的每种组合,绘制最小分发时间图表。(注:k=10^3、M=10^6、G=10^9)
SOCKET编程
Socket API函数
socket
Socket面向TCP/IP的服务类型
Closesocket
bind
listen
connect
accept
send, sendto
recv, recvfrom
setsockopt, getsockopt
Socket API函数小结
关于网络字节顺序
Socket编程-客户端软件设计
解析服务器IP地址
解析服务器(熟知)端口号
解析协议号

练习
题1 socket编程

-
题2

-
题3

-
题4 编写一个socket通信程序,客户端获取服务端的日期时间,提交两端(客户端和服务器端)代码
echo_client.py: ```python
-- coding: utf-8 --
“”” Created on Mon Apr 6 22:37:47 2020
@author: wht990309 “”” ‘’’run echo_client.py —port=9090’’’ import socket import argparse
host=’localhost’
def echo_client(port):
#Create a TCP/IP socketsock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#Connect the socket to the serverserver_address=(host,port)print("Connecting to %s port % s" %server_address)sock.connect(server_address)#send datatry:message="Test message.This will be echoed"print("Sending %s" % message)sock.sendall(message.encode())#Look for the responsedata=sock.recv(2048)print(data)server_time=sock.recv(2048)print(server_time)except socket.error as e:print("Socket error: %s" %str(e))except Exception as e:print("Other exception: %s" %str(e))finally:print("Closing connection to the server")sock.close()
if name==’main‘: parser=argparse.ArgumentParser(description=’Socket Server Example’) parser.add_argument(‘—port’,action=”store”,dest=”port”,type=int,required=True) given_args=parser.parse_args() port=given_args.port echo_client(port)
echo_server.py:```python# -*- coding: utf-8 -*-"""Created on Fri Apr 3 11:49:36 2020@author: wht990309"""'''编写一个简单的回显客户端/服务器应用''''''run echo_server.py --port=9090'''import socketimport argparseimport timehost='localhost'data_payload=2048backlog=5def echo_server(port):'''A simple echo server'''#Create a TCP socketsock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)#Enable reuse address/portsock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)#Bind the socket to the portserver_address=(host,port)print("Starting up echo server on %s port %s" %server_address)sock.bind(server_address)#Listen to clients, backlog argument specifies the max no.of queued connectionssock.listen(backlog)while True:print("Waiting to receive message from client")'''accept()接受一个客户端的连接请求,并返回一个新的套接字'''client,address=sock.accept()data=client.recv(data_payload)if data:print("Data: %s" %data)client.send(data)print("sent %s bytes back to %s" %(data,address))'''格式化时间戳为标准格式''''''%y 两位数的年份表示(00-99)%Y 四位数的年份表示(000-9999)%m 月份(01-12)%d 月内中的一天(0-31)%H 24小时制小时数(0-23)%I 12小时制小时数(01-12)%M 分钟数(00=59)%S 秒(00-59)'''server_time='Server time:'+time.strftime('%Y.%m.%d %H:%M:%S',time.localtime(time.time()))client.send(server_time.encode())print("sent %s to %s" %(server_time,address))#end connectionclient.close()if __name__=='__main__':parse=argparse.ArgumentParser(description='Socket Server Example')parse.add_argument('--port',action="store",dest="port",type=int,required=True)given_args=parse.parse_args()port=given_args.portecho_server(port)













