文章中所有图片均来自中科大郑烇教授在b站发布的——“中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程”

第二章(应用层)

传输层向应用层提供服务的形式原语是socket api

应用层原理:


可以通过socket接口来创造各种各样的协议

网络应用是在端系统上的,通过客户端和服务器之间的通信来完成交互

网络架构:


网络的架构类型主要分为cs架构和p2p架构

服务器持续监听某一个端口,等待客户端的连接
存在问题:

  • 可扩展性差,虽然自身的服务器虽然可以升级,但是集中式的服务导致了到客户端的数据流量大,网络线路的扩展是比较难的,当用户到了一定程度会出现服务能力断崖式的下降
  • 可靠性差,服务器宕机应用就不能运行了


每一个结点既作为客户端,又作为服务端,在一个会话中可能是客户端但是在另一个会话中可能就是服务端,提供服务的结点的数量不断增加,服务能力可以维持在一个较为平衡的程度
存在问题:

  • 每个结点只有在上线时才提供服务,这给管理带来了问题


Napster:一个唱片分发系统,当一个结点上线,给服务器发送上线通知并告知自己可以共享的音乐,当另一个结点想要去请求某种音乐,就可以向服务器发送请求,服务器告知哪个结点又这种资源,客户端只需要使用Napster协议就可以向对应的结点请求资源了。
这种方式属于cs和p2p的混合模式

socket:


网络实现的就是两个网络进程之间的通信,也就是需要在操作系统的网络协议栈的支持下,遵守网络规范实现通信,为了完成网络通信需要解决下面几个问题

使用ip来标识主机,使用TCP或UDP端口号来标识具体某个服务,这样通过一个ip地址和一个tcp/udp端口号就可以唯一标识一台主机上的一个网络服务

应用层使用传输层的服务需要提供什么东西:传输的数据,具体那个一应用传的(端口和ip),具体发送到哪个用户(端口和ip)


可以将TCP socket看成一个句柄,TCP socket可以看成一个四元组,里面主要的信息包括自身ip,自身端口,对方ip,对方端口,这样不需要每次向下层提供地址标识了,只需要知道一个句柄就可以 (这里我之前有个误区,之前一直以为只有到了网络层才会获得自身ip地址,其实这种想法是错误的,socket携带ip地址,并将其交给网络层封装)
UDP socket看成两元组,主要是自身ip和自身端口
四元组和二元组的主要区别就是,是否与对方建立连接

socket对应的就是会话的关系,也就是说在一个端口上,可以有多个socket来标识这个进程和不同主机进程之间的通信,只需要使用不同的socket就行了

upd的socket不需要建立连接,udp的socket只是来标识一个应用,而不是会话,因为udp的socket只标识了自身ip和自身端口,所以对端的ip和端口可以再定义,所以我们可以使用这个socket来与多个ip和端口的组合通信
udp传输层需要的东西:数据,udp socket,对方的端口和ip

套接字也就是一个在本地具有意义的数字,tcp socket标识的就是一个自生进程和对方进程的会话关系,udp socket标识的就是一个自身的进程,通过再提供对方的ip和端口就可以和它通信了


协议主要是通过调用传输层的api来构建的

应用层需要传输层给其提供相应自己需求的功能,比如有些应用对于可靠性传输要求高,有些对于可靠性传输要求不高,可以根据这个来选取不同的传输层协议

传输层主要是两种协议,tcp和udp协议,这两种协议分别提供可靠和不可靠的传输服务,但是udp相比tcp也并不是没有存在的必要


udp提供的不可靠传输服务可以使用在视频,音频等对于可靠性要求较低的数据传输服务中,这样没有tcp为了可靠性的重传,能更好的保障服务的流畅度

SSL:作为应用层存在,应用通过使用SSL的库来完成加密服务

WEB和HTTP:


所有网络上的对象都可以使用url的形式来标识
如果在url中没有用户名和口令就是匿名访问
当我们访问网络,就是通过主页面不断的访问指向的对象来构成页面的


文本和文本直接有指向关系


服务器监听在80号端口,存在一个守候socket,当一个客户端和服务器建立连接就新建连接socket来作为会话标识
当客户端收到html,就会画出页面,同时请求其中包含的url
http为无状态协议:客户端请求服务器,当客户端收到资源,连接就关闭了,这样便于管理,但是这样也导致了当我们登陆后,请求另一个页面,这是否服务器需要判断我们是否登陆了还需要再一次让我们登陆


在http1.0中,一次tcp连接只有一次http请求,然后服务器发出回应,再断开连接
在http1.1中,一个tcp连接可以,客户端可以决定是否要关闭tcp连接,这样就可以做到多次请求



这样非持续的连接,每次请求都需要使用2RTT时间来建立连接,这对于效率的影响是很大的


持久化的http可以保证在每次客户端发送请求时,携带一个字段说明,当服务器完成这一次会话是否需要断开连接,connection字段:是否获得对象后服务器关闭连接
同时http1.1中还引进了流水线模式:

  • 非流水线:客户端只有收到上一个请求才发出下一个新请求
  • 流水方式:多个请求同时发出 http1.1版本的默认方式


head主要是搜索引擎使用,html头部通常有页面的描述信息,可以用来建立索引
get方式后面没有东西了,但是post方式在后面还有载荷信息
不需要ip和端口因为已经封装到了socket连接中

是否不同的提交方式,参数存放的位置不同

因为tcp协议的特性,不区分应用层报文之间的边界,所以这里的长度字段用来定位,也就是content-length

cookies:


http协议是无状态的协议,当请求一个对象,就直接发送给对方,不需要考虑之前是否对方请求过,这样优点就是维护简单,但是如今我们的网络的发展迅速,当我们首先访问一个网页,首先要判断的就是这个用户是否登陆,这样,如果没有一个合适的机制来保证登陆,那我们在访问每一个需要登陆的页面之前就需要就行一次登陆
cookie获得过程:

  • 客户端第一次请求服务器,不携带 cookie
  • 服务器返回一个cookie,并且在数据库中记录
  • 客户端收到cookie,保存到操作系统中,以后的请求都带上cookie来标识自己身份
  • 服务器可以通过cookie来关联客户端的信息


    cookie带来了很多的隐私问题,长时间的登陆就会包含客户端的很多相关信息

web缓存服务器:


web缓存服务器对于客户端,服务器和网络带宽都有好处


proxy对于客户端来说是服务器,对于服务器来说是客户端

总延时=局域网内延时+接入网络延时(local到isp)+互联网内延时
局域网的带宽为1gbps,15个请求包含的数据量为
在局域网中的时延较低,因为流量强度小,在互联网的时延是确定的为2s,则在接入网络的延时成了关键,因为1s包含的流量为1.5Mb,而网络的链路为1.5Mbps,这就导致了流量强度约等于0.99
计算在接入网络的排队时间 I为流量强度,L/R为一个分组的传输时间

这样排队时间接进与无限大
导致接入网络的时间达到了分钟级别

使用安装缓存结点的方式来解决这个问题

只需要算出在命中和不命中时的加权平均值就可以得到一次访问需要的平均时延了,因为有一部分内容可以在缓存中获得,所以大大降低了排队需要的时间,所以时延大大降低
缓存的风险:
源主机端内容变了,但是本地缓存没有变,http存在conditional get方式,当服务器收到这个,会将修改的内容传输给缓存。
当proxy第一个获得服务器回应,会收到一个时间字段,服务器缓存下来,当有客户需要访问这个页面,但是缓存不确定是否内容修改,可以发出conditional get方式,只需要一个头部,来给服务器确定内容是否修改,当修改了才将内容传回

FTP:


FTP的控制和数据传输的连接是分开的
数据传输是通过服务器对客户端建立端口为20的连接
FTP是有状态的连接,因为服务器需要维护客户端当前处于哪个目录下

EMail:(两推一拉)


用户代理:客户使用来作为发送邮件的软件
其中浏览器就是http协议的客户端代理,FTP软件就是FTP协议的客户端代理

邮件服务器:守候在25号端口的服务器
用户代理配置好邮件服务器的ip地址和端口号(smtp),通过邮件服务器轮流发送用户的邮件到指定服务器(smtp),邮件服务器收到邮件将其放入指定用户的邮箱中
用户当登陆邮箱,通过对应的邮件获取协议,从自己的邮箱中获得邮件pop3,http等等

上图为不同邮件服务器之间的通信,报文的信息需要在7位ascii码范围之内

http一个报文中,最多只有一个对象(url代表的信息)

报文中携带MIME协议,使用base64编码,将不在可见字符范围之内的字节,编码成在可见字符范围之内的字符,因为有一些网络设备将不可见字符作为控制信息,这样如果协议中存在不可见字符,就很可能导致设备出故障,所以就行base64编码,可以防止不可见字符的出现。

DNS:


给应用层应用提供的解析协议,想要完成这个功能需要回答下面三个问题

首先使用一台设备来集中解决全球所有的域名,这是不可行的,因为存在单点故障和带宽问题


使用udp因为dns是事务性的应用,可以以此来提高速度
dns还提供了服务器别名到规范名字的对应关系,别名就是具体某一台主机的名字,规范名字就是可以共用访问的名字,这样就可以实现负载均衡

使用层次化命名的方式,将将一个主机的标识划分为若干个域,这样可以大大减少重名

分布的方式,这样提供了比较可靠的域名解析


域名可以分为两类,一类就是域的域名,这标识的是一个范围,还有具体一台主机的域名,这个标识的就是具体的某一台主机

域名中的主机可以在物理上不在一起,只是逻辑上在一个域中

每个区域维护本区域的权威名字信息

权威名字服务器就是某一台主机直接链入的域,比如在ai.cs.yele.edu这个域中,就存在一台权威名字服务器,存储robot这台主机的域名和ip之间的对应关系,当然子啊cs.yele.edu中可能也存在权威名字服务器,来存放cs域中主机和ip的对应关系

到了ttl就删除资源,当ttl值为一个无限大,这个就是这个域下的主机,也就是说,当ttl值无限大,那么这台dns就是这个主机的权威名字服务器,当ttl值较小,表示这个资源是学习过来的,到了固定事件就会删除


本地dns主要起查询功能,当应用需要dns服务就可以向其发起查询

递归查询的方式主要是,当应用需要dns服务,发送到本地dns,本地dns发送到根dns,根dns通过dns数据库中的ns(对应域的权威名字服务器)表项查找到对应域,发送dns,一路查询到主机。
www.ustc.edu.cn 当一个local name server没有该域名的信息,可以先去cn的name server 然后到edu的name server 递归下去再返回

根主机只返回对应域的权威dns服务器,然后由本地dns再进行查询

id号保证了流水线方式的查询

新增一个域,增加了两条资源记录 NX(域和域名字服务器)和A类型(域名字服务器和ip)

大多数的local name server都维护了顶级域名到二级域名的对应关系,这样当我们访问local name server可以直接去找到二级域名的name server 而不一定要到顶级域中去查找

P2P应用:


可靠性,可拓展性高


cs的时间下限
在公式中可以体现到,当N不断增加,F/dmin的值可以忽略不记,所以NF/us成为瓶颈

解释:服务器上载一份F/us 最慢的客户端下载一份 F/us 一共需要的文件数为NF 可使用p2p,每个结点将自身的拥有的资源利用自身带宽上载 NF/(us+Σni) 随着N的增加Σni不断增加,这样就可以保证网络整体的
负担瓶颈不在服务器上

非结构化p2p:两个p结点存在的邻居关系,构成覆盖网,无序覆盖,任意建立,非结构化存在三种建立模式集中式,完全分布式,混合体;关于结构化的p2p此处没有记录

集中式


查询资源的工作主要是在一个服务结点完成
存在问题:

传输过程:

完全分布式:

完全分布式:没有中心服务器,每一个结点overlay多个结点,查询工作是向邻居发送查询,然后邻居又向其他邻居发送查询,拥有资源目录的结点通过反向的方式返回
存在问题:
但是泛洪查询存在加深网络负载的情况,可以通过ttl方式来防止
overlay网络的建立:
在客户端安装的时候,存在配置文件,存在多个活跃结点,随机挑选一些结点进行ping,当该结点收到ping首先给出回复,根据协议构建overlay,当一个结点退出,可以通过在ping的方式挑选其他结点


当一个结点需要资源,就向邻居结点发送查询,当邻居结点没有,也向其邻居结点发送请求

混合体:

混合体:每个结点要不是组员,要不就是组长,组长和组长之间的关系就是gnutella,组员和组长之间关系是napster,当组长查不到需要资源,会像其他组长发送请求

查询细节:
组长通过组员发来的描述匹配最高匹配度文件,组长将描述返回,组员通过描述的hash值来请求资源

案例:



将资源按照256kB切成若干小块,每个小块对应一个bitmap,这样每个主机就有自己的资源拥有的映射关系,定期的在小组内泛洪bitmap,就可以知道自己需要的资源可以在那里找到。
当一个新结点加入,bitmap为空,当bitmap到达了4,就进行稀缺资源的请求,这样就可以保证网内的拥有稀缺块结点的增加,当稀缺资源得到了,新结点的被请求数增加了,而网络中的另一个策略是对于对自己提供优质服务的结点同样优先提供优质服务,这样新结点因为拥有稀缺资源,可以提供给其他结点服务,这样就可以得到其他结点的优质服务。
当一个结点拥有文件的全部,它就是种子,其他为吸血鬼
当自己拥有稀缺资源:前两个周期通过挑选上一个周期给自己提供了优质服务的结点给他们优先服务,第三个周期通过随机挑选的方式,可能在之后可以得到他们的优质服务。这就是优化疏通方式

客户端通过带外方式得到种子,在种子中得到tracer server信息,然后和tracer server连接,得到正在进行该资源分享的小组列表,加入到小组中,进行资源分享

CDN:


视频业务取代图片成为杀手级应用带来了问题:

  • 如何向那么多的用户提供服务
  • 异构的客户端,对于不同的客户端有不同的需求(不同的分辨率,不同的终端设备)


视频的编码大小主要取决于空间冗余度和时间冗余度,可就是一张图片的空间上的类似程度 和 两张图片的类似程度

流化服务就是边下边播:主机通过接收到缓冲区中,然后从缓冲区中拿出数据播放,能极大减少等待时间

在http上的动态自适应流化服务,通过告示文件提供不同码率,不同段的url地址,客户端通过自身的需求,自身的带宽状况来请求不同块

可以解决不同客户端,不同网络情况下,给予不同资源的问题
当服务器向同时向多个客户端提供服务,这时候瓶颈成了中间链路和服务器自身,这是靠服务器自身的不断优化想要提高服务质量是不够的,且网络中重复的流量较多,对于链路带宽浪费大。对于这个问题主要有以下两种方案

cdn运营商在全球部署cdn服务器(cache),然后互联网内容提供商通过购买cdn运营商的服务,将内容部署到cdn服务器上,以此来提高自身的服务质量,也叫内容加速服务
用户来访问icp,通过域名解析重定向到最近的cdn缓存结点
enter deep:部署在里用户近的地方,也就是local isp
bring home:部署在上层的isp关键结点附近,离不同的关键isp都比较近

用户请求到告示文件,然后向不同的cdn请求视频,到跳数较少的系欸但请求服务,主要是通过让内容靠近用户
所以在使用cdn的情况下也存在下面几个问题:

从最近的cdn获得资源无疑是最好的方式
当网络出现阻塞可以往第二近的结点发送请求

DNS的重定向实现CDN选择:


客户端从服务器页面上获得url,需要解析url的解析

向local dns要求解析url

local dns向服务器权威dns要求解析,服务器返回一个CDN的权威dns地址


向CDN的权威dns要求解析,根据CDN的选择策略决定将哪一个CDN地址返回

客户端得到CDN地址,连接,获得资源

例子:

TCP套接字编程:







sin_family:表示使用tcp/ip还是其他协议

sin_zero:使用来对齐,比ip协议长的地址表示方式可以使用这个结构


h_name:主机域名

h_aliases:主机别名

过程:

服务器:creat welcome:服务器在端口上有一个welcome socket,

服务器:bind:和本地的ip和端口绑定

服务器:con socket=accept(welcome socket):这样,当建立的连接返回一个accept返回一个值,然后con socket再去做其他事情,当没有建立,就阻塞在那里

客户端:创造一个client socket 自动可以进行bind

客户端:socket connect与服务器,进入阻塞,当完成连接建立,解除阻塞

服务器:accept返回一个新的connection socket连接,可以通过这个socket进行通信,同时使用fork函数,给这个socket来提供一个进程进行服务,多个socket可以同时绑定在一个自身ip和端口上

UDP socket:

只和本地的ip和端口捆绑

发报文:我的socket值,发送给谁,内容

收报文:发送方的ip和端口,内容是什么

服务器创建socket 并绑定

readsocket(udp socket),当收到东西就解除阻塞,不需要建立连接,直接接收处理发送

计算机网络——第二章(应用层)相关推荐

  1. [计算机网络]第二章——应用层

    文章目录 [计算机网络]第二章--应用层 概述 一.应用层协议原理 1.网络应用程序体系结构 客户-服务器体系结构C/S P2P(对等)体系结构 混合C/S加P2P的体系结构 2.进程通信 客户和服务 ...

  2. 哈工大计算机网络第二章——应用层复习

    目录 1. 网络应用程序体系结构 2. 进程通信 3. 应用需求与传输层服务 4. Web与HTTP 5. Email应用 6. FTP 7. DNS 8. P2P应用 1. 网络应用程序体系结构 客 ...

  3. 计算机网络总结:第二章 应用层

    第二章 应用层 2.1 应用层协议原理 2.1.1 网络应用程序体系结构 主流体系结构:客户-服务器体系结构,对等(P2P)体系结构 –客户-服务器体系结构:有一个总是打开的主机称为服务器,它服务于来 ...

  4. 计算机网络 自顶向下方法 第二章 应用层

    计算机网络 自顶向下方法 第二章 应用层  分类:计算机网络-笔记(2)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 第二章 应用层 Tags: 计算机网络 2.1 应用 ...

  5. 《计算机网络 自顶向下方法》笔记 第二章 应用层

    第二章 应用层 2.1 应用层协议原理 网络应用是计算机网络存在的理由. 研发网络应用程序的核心是写出能够运行在不同端系统和通过网络彼此通信的程序,当研发新应用程序时,需要编写将在多台端系统上运行的软 ...

  6. 计算机网络第二章习题

    计算机网络第二章习题 习题对应课本:Computer Networks (Fifth Edition) - Andrew S. Tanenbaum 2.A noiseless 8-kHz channe ...

  7. 第二章计算机网络答案,计算机网络第二章作业参考答案

    计算机网络第二章作业参考答案 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 2. A noiseless 8-kHz channel ...

  8. 王道考研2019版计算机网络第二章--物理层

    语雀笔记链接: 王道考研2019版计算机网络第二章--物理层 (yuque.com)https://www.yuque.com/xiaojinchunchun/bxuuke/guce8z#EjOI8 ...

  9. 计算机网络第二章 物理层练习题(中文带答案解析)

    前言 本习题是中文版习题,为便于复习. 知识点都在上一篇复习文章计算机网络第二章 物理层复习中 码分多址的计算在最后的问答题中,包括已知最后收到的码片序列求各站的数据发送情况和已知各站的数据发送情况求 ...

  10. 【计算机网络】南航计算机网络第二章 物理层

    文章目录 计算机网络第二章 物理层 2.1 物理层的基本概念 2.2 数据通信的基础知识 (1)数据通信系统的模型 (2)通信双方信息交互的三种方式 (3)调制 (4)常见编码方式 (5)基本的带通调 ...

最新文章

  1. 云视频会议的“多、快、好、省”(下)
  2. java jtextfield设置不可见_java – JPanel设置为不可见,除默认值之外的组合框选择将其设置为可见,但组件丢失...
  3. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)
  4. web安全认证机制知多少
  5. word2010画布复制混乱
  6. log4net配置文件样本
  7. C#编程(七十六)----------使用指针实现基于栈的高性能数组
  8. 分治算法——在真币中找出伪币
  9. Depth Map Prediction from a Single Image using a Multi-Scale Deep Network
  10. 二维码制作软件生成二维码时的参数设置
  11. RF中截屏设置及关键字说明
  12. 4种基站相关概念——宏基站、微基站、皮基站、飞基站
  13. Android 常用图标尺寸及设计规范汇总
  14. INCA车载ECU工具软件简介
  15. 省钱兄霸王餐源码uniapp前端
  16. 蓝凌OA SSRF+JNDI远程命令执行
  17. 本科课程【虚拟现实引擎Unity3D】实验3 - 烘焙光影贴图与动画应用
  18. 机器人之Cartographer
  19. 短信验证码被盗刷了怎么办?
  20. HFSS构建天线对称阵子

热门文章

  1. Linux修改用户名
  2. STM32F103定时器解码PT2262
  3. Java 图片处理 给原有图片填充颜色满足需求大小 背景透明
  4. 数据库表的设计什么时候可以存在冗余?
  5. 指纹识别实战——基于TensorFlow实现(文末送书)
  6. Vue使用ElementUI的Table组件表头与内容不对齐问题
  7. 更改用户自己的FTP密码
  8. 陶陶摘苹果(升级版)
  9. Chatbot 架构
  10. 基于matlab的神经网络实践