我是靠谱客的博主 无奈早晨,最近开发中收集的这篇文章主要介绍计算机网络自顶向下第六版学习整理一、计算机网络概述二、应用层,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

《计算机网络自顶向下》(第六版)学习整理

  • 一、计算机网络概述
    • 1.1总体概述及基本术语
    • 1.2网络边缘
    • 1.2.1 物理媒体
    • 1.3网络核心
      • 1.3.1 分组交换
      • 1.3.2 电路交换
    • 1.4 分组中的时延、丢包和吞吐量
      • 1.4.1 分组中的时延类型
      • 1.4.2 排队时延和丢包
      • 1.4.3端到端时延
        • 练:Traceroute命令使用
    • 1.5协议层次以及服务模型
      • 1.5.1协议分层
      • 1.5.2 封装
    • 1.6面对攻击的网络
  • 二、应用层
    • 2.1应用层协议原理
      • 2.1.1网络应用程序体系结构
      • 2.1.2 进程通信
      • 2.1.3可供应用程序使用的运输服务
      • 2.1.4因特网提供的运输服务
    • 2.2Web和HTTP
      • 2.2.1 HTTP概况
      • 2.2.2非持续连接和持续连接
      • 2.2.3 HTTP报文格式
        • 练:Windows10下开启telnet功能直接登录到某个Web服务器
      • 2.2.4 用户与服务器的交互:cookie
      • 2.2.5Web缓存
      • 2.2.6 条件GET方法
    • 2.3 文件传输协议:FTP
    • 2.4因特网中的电子邮件
      • 2.4.1 SMTP
      • 2.4.2 SMTP与HTTP的对比
      • 2.4.3 邮件访问协议
        • 练:windows命令行下:telnet访问163邮箱服务器和qq邮箱服务器发送邮件
    • 2.5DNS:因特网的目录服务
      • 2.5.1DNS提供的服务
      • 2.5.2DNS工作机理概述
      • 2.5.3 DNS记录和报文
        • 练:用nslookup向DNS服务器发送查询报文
    • 2.6 P2P应用
      • 2.6.1 P2P文件分发
    • 2.7 套接字编程
      • 2.7.1 UDP套接字编程
      • 2.7.2 TCP套接字编程
      • 套接字作业


一、计算机网络概述

1.1总体概述及基本术语

端系统|主机
所有接入因特网的设备例如(手机、平板、电视、电器)。

通信链路
连接端系统或主机的各种电缆、铜线、光纤和无线频谱

传输速率
不同的链路有不同的传输速率,单位是比特/秒(bps或者bit/s)

分组
当数据从一个端系统发送到其他端系统,发送端系统将数据分段并加上首部字节。由此形成的信息包叫分组

分组交换机
从一条通信链路接收分组,从一条通信链路转发该分组,这种设备叫分组交换机。最著名的两种类型是:路由器(常用于网络核心中)和链路层交换机(常用于接入网中)

路由器和链路层交换机的区别

转自CSDN博主 收信的加西亚
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liebao_han/article/details/52859814

路径
一个分组端系统经过通信链路分组交换机到达另一个端系统的这一条网络。

因特网服务提供商(ISP)
端系统通过ISP接入因特网,ISP包括线缆调制解调器、无线接入、DSL住宅接入和拨号调制解调器等。每一个ISP由多个分组交换机和多段通信链路组成。
多个因特网服务提供商(ISP)之间也是互联的。

TCP/IP协议
为了遵循一定的命名方法和地址习惯,因特网交换数据是需要协议进行的。主要的协议就是TCP和IP协议

分布式应用程序
社交网络、web冲浪、分布式游戏、电子邮件和远程注册 等应用程序称为分布式应用程序因为它们涉及多台端系统的数据交换。 应用程序运行在端系统上,而不是运行在分组交换机中。分组交换机只是处理数据交换的过程,并不关注数据来源 或 去向的应用程序。 端系统提供了API应用程序编程接口)为应用程序使用。(类似于因特网交换数据的协议)

1.2网络边缘

端系统和应用程序相当于处于网络的边缘,而网络的主体是由各种交换协议、交换机和通信链路构成

主机的分类
主机(端系统)分为客户(桌面PC、移动PC和智能手机)和服务器(相当于数据中心
提供搜索结果、储存和发布等:web页面、电子邮件、视频)

接入网
将端系统接入到边缘路由器的物理链路边缘路由器是从端系统到任何其他远程端系统之间接触的第一台路由器。
家庭接入::DSL、电缆、FTTH、拨号和卫星

1.2.1 物理媒体

网络传播的媒介主体:双绞铜线、同轴电缆、光纤、陆地无线电信道、卫星无线电信道

1.3网络核心

定义: 端系统的分组交换机和通信链路构成的网状网络。

1.3.1 分组交换

源端系统向目的端系统发送数据,源将数据分为一小块,称为分组。假设分组以最大速率通过通信链路。若需要传输L比特的数据。链路的最大速率为R比特/秒,则传输该分组的时间为 (L/R)秒

1. 储存转发传输
路由器接受分组的部分比特不能即刻发送,必须当该分组的所有比特全部接收才能向出链路转送该分组。

2.排队时延和分组丢失
到达的分组需要传输到某条链路,但是该链路正在忙于传输其他分组,该到达分组必须在输出缓存中等待 (排队时延)

因为缓存空间大小有限,分组到达可能发现缓存已经被别的等待传输的分组完全充满。此情况会发生分组丢失(丢包),到达的分组将被丢弃。

3.转发表和路由选择协议
每个端系统具有一个称为 IP地址 的地址。源主机要发送分组时,会在分组的首部包含目的地的IP地址。分组到达路由器后,会检查该分组目的地址的一部分并向相邻路由器转发该分组。

每台路由器具有一个转发表,用于将目的地址映射成输出链路。当分组到达路由器,路由器将检查该地址,并用目的地址搜索其转发表,以发现适当的出链路。

因特网具有路由选择协议用于自动设置转发表。例如,一个路由选择协议可以决定从每台路由器到每个目的地的最短路径,并使用这些最短路径结果来配置路由器中的转发表。

1.3.2 电路交换

通过网络链路和交换机交换数据的两种基本方法:电路交换和分组交换
在电路交换中,在端系统通信期间,预留了端系统间通信沿路径所需要的资源(缓存、链路传输速率)。

分组交换中这些资源则不是预留的。分组交换按需使用这些资源,其后果可能是造成排队延时甚至是丢包

传统的电话网络是电路交换的例子。即在发送信息前,该网络必须在双方建立一条连接。发送机和接收机之间的交换机都为该连接维护连接状态

1.电路交换网络中的复用

链路中的电路通过频分复用(FDM)或时分复用(TDM)

对于**FDM**,链路的频谱由跨越链路创建的所有连接共享,但是链路为每条连接区分了专用频段。在电话网络中这个频段通常具有4kHz的宽度。该频段的宽度称为**带宽**。即FDM的传输信息在某一频段上是连续的。

对于TDM ,如上图所示。时间被划分为几段帧,一帧中又划分出几个时隙,一个时隙可以传输该链接的数据。假设一帧中包含四个时隙,那么四个时隙将分别传输给四个不同的其他链路。 这导致了信息传递相对FDM并不是连续的,而是一帧中的某一个时隙传递了信息,而下一帧的某一个时隙传递了下一个信息。

以TDM来说 ,如果一个链路每秒传输8000帧,每个时隙由8个比特组成。则每条链路的传输速度为64kbps。

2.分组交换和电路交换的对比

电路交换和分组交换各有好处。 但是分组交换优于电路交换。

电路交换(主要用于电话交通)需要搭建,通信链路且通信链路空闲时,其他端系统的信息不可复用该链路。信息交换速度是电磁波的光速交换。

分组交换需要分组、储存等一系列操作,增加了响应时间,但是通信链路可复用。

当传输数据容量小于最高速率时,分组交换能提供最高速率,而电路交换只能提供固定带宽上的速率。

当传输数据大于最高速率时,分组交换会产生阻塞时延。但是电路交换限定了用户数量的同时还会产生阻塞时延。

当某一用户突然产生大量比特数据,而其他用户保持静默(即不产生分组)。这种情况下分组交换的优势就体现出来了。

电路交换不考虑需求,预先分配了传输链路的使用,这使得已分配而不需要的未使用时间被浪费了。

分组交换按需分配链路,使得这种传输能力以分组的形式被所有用户获得了。

1.4 分组中的时延、丢包和吞吐量

1.4.1 分组中的时延类型

结点处理时延、排队时延、传输时延和传播时延。这些时延的总和是结点总时延

1.处理时延 检查分组首部和决定将该分组导向何处所需要的时间等。

2.排队时延 (重点)在队列中,当分组在链路上等待传输时。

3.传输时延 (从路由器到链路起点) 路由器将分组推出去的时间。用L比特表示分组长度,R表示从队列推出比特的速率。传输时延是L/R。实际传输时延在毫秒到微秒级。

4.传播时延 (从路由器到另一路由器) 与两台机器的距离有关 ,传播速率取决于该链路的物理媒体。其速率等于或略小于光速。传播时延为毫秒量级。

1.4.2 排队时延和丢包

排队时延的大小取决于流量到达该队列的速率、链路的传输速率和到达流量的性质。
a表示分组到达队列的平均速率 分组/秒 pkt/sR是传输速率b/s,即从队列中推出比特的速率。假定所有分组都是L比特,假设比特到达队列的平均速率 是La b/sLa/R 比特通过队列的速度被称为流量强度。

当La/R>1,则比特到达队列的速度大于传出速度,如果队列可以无限增加。那么排队时延趋向无穷大。

当La/R≤1, 到达流量的性质影响排队时延。如果分组周期性到达,即每L/R秒到达分组,分组每次都进入空队列,不会有排队时延。如果以突发形式到达,每L/R秒同时到达N个分组。则后到达的分组有排队时延。第n个分组有(n-1)L/R秒的排队时延。

丢包
现实中链路前的队列只有有限的容量。随着流量强度接近于1,排队时延并不实际趋向无穷大,因为到达的分组会发现一个满的队列,路由器将丢弃该分组。

从端系统看,丢包现象是一个分组传输到网络核心,但丢失的分组却绝不会从网络发送到目的地。分组丢失的份额随流量强度的增加而增加。丢失的分组可能基于端到端的原则重传,以确保所有数据最终从源到目的地。

1.4.3端到端时延

假定源主机和目的主机之间有N-1台路由器。还要假设网路此时无阻塞(排队时延),每台路由器和源主机的处理时延是d1,路由器和源主机输出速率是R,每条链路传播时延是d2,L是分组长度,则端到端时延d3=N(d1+L/R+d2)(处理、推出、传播)

练:Traceroute命令使用

1.Traceroute 用于获取主机到目标主机之间的路由节点信息
命令:tracert+ip地址(windows系统下)

2.端系统、应用程序和其他时延

1.4.4计算机网络中的吞吐量
为了定义吞吐量,假设主机A到主机B跨越计算机网络传送大文件。则在任意瞬间的瞬时吞吐量是主机B 接收到该文件的速率 。如果文件有F比特组成,主机B接收F比特用去T秒则文件的平均吞吐量F/T bps在这里插入图片描述
服务器到交换机传输速度为Rs
交换机到主机传输速度为Rc

当Rs>Rc,则路由器可能积压比特,这是瓶颈链路。
当Rs<Rc,则服务器注入交换机的比特将顺利地“流动”。

1.5协议层次以及服务模型

1.5.1协议分层

网络设计者以分层的方式组织协议以及实现这些协议的网络硬件和软件。每种功能属于某一层,每层通过该层提供的执行某些动作或者直接用下层的服务来提供服务。

1.应用层
HTTP(提供Web文档的请求和传送) SMTP(提供电子邮件报文的传输) FTP(提供两个端系统之间的文件传送)
某些网络功能,将www.ietf.org这样的端系统名转换为32比特网络地址,借助了特定应用层协议即域名系统DNS 应用层协议分布在多个端系统上,一个端系统的应用层协议与另一个端系统中的应用程序交换带有信息的分组。位于应用层信息的分组称为报文

2.运输层
运输层在应用程序端点之间传送应用层报文。两个运输协议:TCP 和 UDP,利用其中任一个都能运输报文。

3.网络层
因特网的网络层分组称为数据报
IP协议,该协议定义了在数据报中各个字段一级端系统和路由器如何作用于这些字段。所有网络层的因特网组件必须运行IP协议。 因特网的网络层也包括决定路由的路由选择协议。运输层分组称为报文段。

通常把网络层简单地叫做IP层。

4.链路层
链路层提供的服务取决于应用于该链路的特定链路层协议。某些协议基于链路提供可靠传递,不同于传输层的TCP服务,TCP提供一个端系统到另一个端系统的交付,链路层包括以太网、WiFi和电缆接入网的DOCSIS协议。因为数据从源到目的地需要经过几条链路,一个数据报可能被沿途不同链路上的不同链路层协议处理。 所以网络层将受到来自每个不同的链路层协议的不同服务

链路层分组在本书中称为

5.物理层
这一层的协议与链路相关,并且进一步与该链路的实际传输媒体(双绞铜线、单模光纤)相关。
例如以太网有许多物理层协议:一个关于双绞铜线、一个关于同轴电缆,还有一个是关于光纤的。每种场合中跨越这些链路移动比特数据是以不同的方式进行的。

OSI七层模型
附加的两个层,表示层和会话层。
表示层的作用是使通信的应用程序能够解释交换数据的含义。这些服务包括数据压缩和数据加密以及数据描述(使得应用程序不用担心各台计算机中表示和存储的格式不同的问题)。
会话层提供了数据交换定界好同步功能,包括了检查点和恢复方案的方法。
这两层交由应用程序开发者解决。所以我们现在基本用五层模型

1.5.2 封装

主机要发送分组到另一个主机需要将比特数据添加五层的协议才能发送出去,但是在链路层交换机只需要用到两层协议就能将数据交换出去,路由器则是三层。这意味着路由器能实现第三层网络层的IP协议,但链路层交换机不能。尽管如此,链路层交换机不能识别IP协议但是能实现链路层协议,也就是以太网协议。 每一层,一个分组具有两种类型的字段:首部字段和有效荷载字段。有效荷载字段通常是来自上一层的分组。

1.6面对攻击的网络

病毒是一种需要某种形式的用户交互来感染用户设备的恶意软件。

蠕虫是无需任何明显用户交互就能进入设备的恶意软件。

拒绝服务攻击(Dos) Dos攻击使得网络、主机或其他基础设施部分不能由合法用户所使用。三种类型:

1.向目标主机发送大量分组,使得合法分组无法到达服务器

2.以适当的顺序发送多个制作精细的分组给一个易受攻击的操作系统,该主机可能会崩溃。

3.在目标主机创建大量TCP连接。主机可能因为这些连接陷入困境,并停止接受合法连接。

用于观察执行协议之间的报文的基本工具叫分组嗅探器 Wireshar(下载官网)是该书建议的免费的实验软件。

二、应用层

2.1应用层协议原理

2.1.1网络应用程序体系结构

应用程序体系结构:客户-服务器体系结构对等(P2P)体系结构

2.1.2 进程通信

在操作系统中,进行通信的实际上是进程。
本书主要放在跨过端系统之间的通信进程。

1.客户和服务器进程
每对通信进程,发起通信的进程被标识为客户,在回话开始时等待联系的进程是服务器

2.进程与网络计算机之间的接口
套接字:一个软件接口提供两个进程发送报文的“门”。
套接字是应用层与运输层之间的接口。因此套接字也称为应用程序和网络之间的应用程序编程接口(API)

应用层能控制套接字在应用层的一切,对于运输层仅限于:1.选择运输层协议;2.设定几个运输层参数,如最大缓存、最大报文长度等。

3.进程寻址
进程为了向另一台主机上运行的进程发送分组,接收进程需要一个地址。
需要定义两种信息:1.主机的地址;2.定义在目的主机中的接收进程的标识符(IP)。
在因特网中,主机由IP地址标识。IP:一个32比特的量能够唯一标识该主机。

发送进程还必须指定运行在主机上的接收进程,因为一台主机能运行许多网络应用,目的地端口号用于这个目的。

例如,Web服务用端口号80来标识。邮件服务器进程用端口号25来标识。

2.1.3可供应用程序使用的运输服务

根据应用程序需要的运输层协议,我们大致分类:是否可靠数据传输、吞吐量、定时和安全性。
1.可靠数据传输
由于分组在计算机可能因为缓存溢出等原因丢失,像电子邮件、Web文档传输和金融领域应用,应该提供保证分组能完全交付的协议,就称为可靠数据运输
当一个运输层协议提供不可靠数据传输,能容忍丢失的应用能够接受,例如交互式音频和视频,丢失的数据引起播放的小干扰。

2.吞吐量
有的应用程序,例如网络电话应用程序对语音以32kbps的速率编码,那么它也需要同等速率的运输层协议转发。但是有些弹性应用不要求吞吐量。

3.定时
能够提供保证实时应用的延迟限制的这种运输层协议需要协议具有定时功能。

4.安全性
运输层协议能够为应用提供一种或多种安全服务。这种服务将在发送和接收进程之间提供加密。

2.1.4因特网提供的运输服务

1.TCP服务
TCP服务模型包括 面向连接服务可靠数据传输服务

面向连接服务: 数据流动前,TCP服务让客户和服务器相互交换运输层控制信息,这一目的是为了提示客户和服务器,让他们为大量分组的到来做好准备
这条连接是双向的,当程序结束发送报文时,必须拆除该连接。

可靠数据传输服务: 通信进程依靠TCP服务流入流出数据,没有字节丢失和冗余。

拥塞控制机制:当发送方和接收方的网络出现拥塞时,TCP的拥塞控制机制会抑制发送进程

TCP和UDP都没有提供任何加密机制,所以因特网界已经研制了TCP的加强版本,称为安全套接字层(SSL)。SSL是TCP的加强版

2.UDP服务
UDP是一种轻量级运输协议。UDP在两个进程通信前没有握手过程,提供一种不可靠数据传输服务。也不包括拥塞控制机制。可以选择任何速率向下层(网络层)注入数据。

2.2Web和HTTP

2.2.1 HTTP概况

Web的应用层协议是超文本传输协议(HTTP)。
HTTP由两个程序实现:一个客户程序和一个服务器程序

Web术语
Web页面(也叫文档)是由对象组成的。一个对象是一个文件,比如一个HTML文件、一个JPEG图形、一个Java小程序或一个视频片段,且他们可以通过一个URL地址寻址。多数Web页面有一个HTML基本文件以及几个引用对象。

每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名

例如,URL:http://www.someSchool.edu/someDepart-ment/picture.gif
www.someSchool.edu 就是主机名
/someDepart-ment/picture.gif 就是路径名

Web浏览器(例如internet Explorer 和Firefox)实现了HTTP的客户端
Web服务器实现了HTTP的服务器端,用于储存Web对象,每个对象由URL寻址。流行的服务器(Apache和Microsoft Internet Information Server微软互联网信息服务器)

Web服务器总是打开的,具有一个固定的IP地址,HTTP服务器不保存客户的任何信息,是一个无状态协议。

2.2.2非持续连接和持续连接

1.采用非持续连接
HTTP客户进程发起TCP连接,HTTP服务器接收请求并检索请求对象,返回发送对象并通知结束TCP连接,待HTTP客户接收响应报文,TCP连接关闭。浏览器收到Web页面,不同浏览器以不同的方式解释该页面。
三次握手:
1.主机发起TCP连接(发送一个小TCP报文段)
2.服务器发出同意响应(回应一个小TCP报文段)
3.主机确认连接,并向TCP连接发送一个HTTP请求报文。
4.服务器传输文件给主机
总响应时间:两个信息往返时间+文件传输时间

2.采用持续连接
用单个持续TCP连接进行传送,一个完整的Web页面。

2.2.3 HTTP报文格式

1.HTTP请求报文

HTTP请求报文的第一行叫请求行,后继行叫首部行
请求行有三个字段:方法字段(GET、POST、HEAD、PUT和DELETE)、URL字段和HTTP版本字段。

Host: 请求的服务器地址。

Connection: 是否采用持续连接,close表示请求完成后断开TCP连接。

User-agent: 指明用户代理,即向服务器发送请求的浏览器类型。这里用的是Firefox浏览器。服务器根据不同的浏览器,为不同类型的用户代理实际发送相同对象的不同版本。

Accept-language:众多内容协商首部之一。(告诉服务器返回的语言版本)

2.HTTP响应报文

该响应报文分为三部分:初始状态行,6个首部行 ,data 实体体

状态行3个字段:协议版本字段、状态码和相应状态信息。

Connection:close 告诉客户,发送完报文关闭该TCP连接。

Date: 指示服务器产生并发送该响应报文的日期和时间。

Server: 该报文由一台Apache Web服务器产生,类似请求报文中的User-agent:

Last-Modified: 指示了对象创建或者最后修改的日期时间 。

Content-Length: 指示了被发送对象中的字节数。

Content-Type: 指示了实体体中的对象是HTML文本。

常见状态码和相关短语:
200 OK:请求成功,信息在返回的响应报文中。

301 Moved Permanently:请求被永久转移。新的URL定义在响应报文的Location:中

400 Bad Request:通用差错代码,该请求不能被服务器理解。

404 Not Found:被请求的文档不在服务器上。

505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本。

练:Windows10下开启telnet功能直接登录到某个Web服务器

控制面板->程序->程序和功能->启用或关闭Windows功能->启用Telnet Client

telnet -help 查看telnet指令
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:telnet建立http连接获取网页HTML内容
https://blog.csdn.net/tomatofly/article/details/5948446

2.2.4 用户与服务器的交互:cookie

Web服务器希望限制用户的访问或者将内容与用户身份联系起来,为此HTTP使用了cookie。

cookie常常能简化用户的因特网活动,但是结合cookie和用户提供的账户信息,Web站点可以知道许多有关用户的信息,对用户隐私造成侵害。

2.2.5Web缓存

Web缓存器也叫代理服务器
Web缓存器有自己的磁盘储存空间,并在储存空间中保存最近请求过的对象的副本。
在这里插入图片描述

部署Web缓存器的三个原因:

1.大大减少对客户请求的响应时间。

2.大大减少一个机构的接入链路到因特网的通信量。通过减少通信量,就不必急于增加带宽,降低了费用。

3.Web缓存器能从整体上减低服务器端的流量,从而改善了应用的性能。

2.2.6 条件GET方法

缓存器造成的一个新问题:放在缓存器中的对象副本可能是陈旧的。
解决:HTTP协议能够使用条件GET方法。

1.请求报文中使用GET方法。

2.请求报文中包含一个If-Modified-Since:首部行。

2.3 文件传输协议:FTP

HTTP和FTP都是文件传输协议,他们都运行在TCP上。

但是。FTP使用了两个并行的TCP连接来传输文件,一个是控制连接,一个是数据连接带外)。HTTP协议则是在传输文件的同一个TCP连接中发送请求和响应首部行的(带内)。

控制连接用于在两主机之间传输控制信息,如用户标识、口令以及“存放和获取”文件的命令。

数据连接用于实际发送一个文件。

用于控制的TCP连接贯穿整个会话期间,当用户需要传输一个文件,FTP则打开这个文件的数据连接,每次文件传输都需要建立一个新连接。FTP服务器必须把用户的会话信息跟踪控制,保留用户的状态。因此限制了FTP同时维持的会话总数。

2.4因特网中的电子邮件

3个主要组成部分:用户代理、邮件服务器和简单邮件传输协议(SMTP)

在这里插入图片描述
典型的邮件发送过程是:从发送方的用户代理开始,传输到发送方的邮件服务器,在传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。

SMTP是因特网电子邮件主要的应用层协议,它使用TCP可靠数据传输服务。像大多数应用层协议一样,SMTP同时运行在发送邮件服务器的客户端和运行在接收邮件服务器的服务器端。

2.4.1 SMTP

SMTP一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是这样。如果接收端服务器未开机,该报文会留在发送端并等待新的尝试。SMTP用的是持续连接,它可以通过同一个TCP连接发送前往同一个接收服务器的报文。

STMP要求每个报文使用7比特ASC码格式。

2.4.2 SMTP与HTTP的对比

相同点:
1.HTTP和SMTP都使用持续连接。

2.HTTP和SMTP都从一个服务器向另一个服务器传送文件。

不同点:
1.HTTP是拉协议,即用户使用HTTP从服务器上拉取已经预先存在Web服务器上的信息。

SMTP是推协议,即发送邮件服务器把文件推向接收服务器。特别是,TCP连接是由要发送该文件的机器发起。

2.SMTP要求每个报文使用7比特ASC码格式,HTTP数据不受这种限制。

3.如何处理一个既包含文本又包含图形的文档。HTTP把每个对象(文本或图形)封装到自己的HTTP响应报文。但是SMTP则把所有报文对象放在一个报文中。

2.4.3 邮件访问协议

在这里插入图片描述
POP3 第三版的邮局协议
IMAP因特网邮件访问协议
1.POP3
(取出邮件操作后删除)

POP3按照三个阶段工作:特许、事务处理以及更新。

**特许:**用户代理发送用户名和口令鉴别用户。

**事务处理阶段:**用户代理取回报文,对报文删除和标记以及获取邮件的统计信息等操作。

**更新阶段:**客户发出quit命令后,邮件服务器删除那些被标记为删除的报文(用户从服务器取出的邮件),并结束POP3会话。

练:windows命令行下:telnet访问163邮箱服务器和qq邮箱服务器发送邮件

在这里插入图片描述
在这里插入图片描述
1.先要在邮箱中设置开启POP3服务

2.用telnet指令和163邮箱的110端口获取联系
在这里插入图片描述
3.输入邮箱账户和POP3密码
在这里插入图片描述
2.IMAP

IMAP和POP有什么区别?

POP允许电子邮件客户端下载服务器上的邮件,但是您在电子邮件客户端的操作(如:移动邮件、标记已读等),这是不会反馈到服务器上的,比如:您通过电子邮件客户端收取了QQ邮箱中的3封邮件并移动到了其他文件夹,这些移动动作是不会反馈到服务器上的,也就是说,QQ邮箱服务器上的这些邮件是没有同时被移动的 。但是IMAP就不同了,电子邮件客户端的操作都会反馈到服务器上,您对邮件进行的操作(如:移动邮件、标记已读等),服务器上的邮件也会做相应的动作。也就是说,IMAP是“双向”的。

同时,IMAP可以只下载邮件的主题,只有当您真正需要的时候,才会下载邮件的所有内容。

3.基于Web的电子邮件
用户代理相当于普通浏览器,用户和他远程邮箱之间的通信通过HTTP进行。

2.5DNS:因特网的目录服务

2.5.1DNS提供的服务

识别主机有两种方式:通过主机名或者IP地址。
人们喜欢便于记忆的主机名标识方式,而路由器则喜欢定长的、有着层次结构的IP地址。
域名系统(DNS)能够进行主机名到IP地址转换的目录服务。

DNS是:
1.由一个分层的DNS服务器实现的分布式数据库。

2.一个使得主机能够查询分布式数据库的应用层协议。

DNS服务器通常是运行BIND软件的UNIX机器。

DNS协议运行在UDP上,使用53号端口。

DNS通常由其他应用层协议使用,包括HTTP、SMTP和FTP,将用户提供的主机名解析为IP地址。

主机名:www.someschool.edu

HTTP协议为了获得IP地址,做法如下:

1.同一台用户主机上运行DNS应用的客户端。

2.浏览器从URL中抽取主机名www.xx 并将主机名传给DNS应用的客户端。

3.DNS客户向DNS服务器发送一个包含主机名的请求

4.DNS客户收到报文,其中含有对应主机名的IP地址。

5.浏览器收到来自该DNS的IP地址,就向该IP地址的80端口的HTTP服务器进程发起TCP连接。

DNS服务器带来了额外时延,除了主机名到IP地址转换,DNS提供:
主机别名:主机别名比主机规范名更容易记忆。

邮件服务器别名

负载分配

2.5.2DNS工作机理概述

应用程序(浏览器或者邮件阅读器)需要将主机名转换位IP地址,这些程序将调用DNS客户端,调用函数向网络中的DNS发送报文,DNS报文使用UDP运输协议经端口53发送。经过延时,用户主机收到DNS报文并被调用到应用程序。

在这里插入图片描述
根、TLD和权威DNS服务器都处在该DNS服务器的层次结构中。还有一类重要的DNS,称为本地DNS服务器。当主机与某个ISP连接,ISP提供一台主机的IP地址,主机具有一台或多台本地DNS服务器的IP地址。

**DNS缓存:**当某DNS服务器接收一个DNS回答时,它能将该回答中的信息缓存在本地储存器中。

2.5.3 DNS记录和报文

DNS服务器会储存资源记录(RR),即主机名到IP地址的映射。
资源记录是包含了下列字段的四元组:
(Name,Value,Type,TTL)

TTL是该记录的生存时间

Type=A 则Name是主机名 Value是对应的IP地址

Type=NS 则Name是域名 Value是如何获得该域名中主机IP地址的权威DNS服务器的主机名。用来沿着查询链来路由DNS查询。

Type=CNAME 则Name是主机名,则Value是别名为Name的主机对应的规范主机名。

Type=MX 则Name是邮件服务器主机名,Value是别名为Name的主机对应的规范邮件服务器主机名。
在这里插入图片描述

练:用nslookup向DNS服务器发送查询报文

在这里插入图片描述

2.6 P2P应用

2.6.1 P2P文件分发

最为流行的P2P文件共享协议是BitTorrent

实际上P2P结构中,每个主机之间下载的是等长的文件块

当主机加入P2P中,先要向追踪器注册自己,追踪器将一定的对等方主机IP地址发送给端主机。
端主机和所有对等方主机创建并行的TCP连接。随着时间,有的对等方主机可能离开,其他对等方可能试图与端主机创建TCP连接。
端主机周期性地通过TCP连接询问所有与他连接的主机的块表。

2.7 套接字编程

2.7.1 UDP套接字编程

客户端

import socket
serverName ='192.168.1.100'
#服务器主机名或IP
serverPort=12000
#接收端口号
clientSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#创建套接字 IPv4底层,UDP运输层协议
message=input("Input lowercase sentence:")
#输入需要发送的消息
clientSocket.sendto(message.encode(),(serverName,serverPort))
#发送分组 将字符串转化为字节编码 并提供目的IP和端口号
modifiedMessage,serverAddress=clientSocket.recvfrom(2048)
#接收返回的信息分组,并将分组数据放到变量1中,源地址放到变量2中 2048为缓存长度
print(modifiedMessage.decode())
#打印出用户键入的变量,不过返回的是服务器返回的大写信息
clientSocket.close()
#关闭套接字

服务端

import socket
serverPort =12000
serverSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
serverSocket.bind(('',serverPort))
#将端口号12000 与服务器的套接字绑定分配在一起
#当任何人向该服务器的IP地址的端口
print("The server is ready to receive")
while True:
    message,clientAddress=serverSocket.recvfrom(2048)
    modifiedMessage=message.upper()
    serverSocket.sendto(modifiedMessage,clientAddress)

2.7.2 TCP套接字编程

服务端

import socket
serverSocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
serverSocket.bind(('127.0.0.1',8090))
serverSocket.listen(5)
#让服务器聆听来自客户的TCP连接请求 参数定义了连接的最大数
print('The server is ready to receive')
while True:
    connectionSocket,addr=serverSocket.accept()
    sentence=connectionSocket.recv(1024)
    uppermessage=sentence.decode().upper()
    connectionSocket.send(uppermessage.encode())
    connectionSocket.close()

客户端

import socket
clientSocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#底层IPv4,TCP连接
clientSocket.connect(('127.0.0.1',8090))
#客户向服务器发起TCP连接
message=input("Input the messages:")
clientSocket.send(message.encode())
#把消息放到TCP连接中
getmessage=clientSocket.recv(1024)
#等待接收服务器字节
print(getmessage.decode())
clientSocket.close()

在这里插入图片描述
ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。

解决方法: 由于python的shell只能同时运行一个程序,当我打开服务端,再打开客户端后,服务端就中断了,所以客户端的反应是被服务端拒绝了。后来发现上一个UDP套接字编程 客户端和服务端 用的是两个shell(分别是python3.6/3.7),当时就没发现这个问题,以后应该多补充操作系统的相关知识。

这个问题花了我快一天多时间!!!

由于书上用的是python2版本,pyhton3以后发送数据都需要先将数据加密成比特类型再发送。

套接字作业

1.Web服务器

import socket
from socket import*
serverSocket = socket(AF_INET, SOCK_STREAM) 
#Prepare a sever socket 
#Fill in start
serverSocket.bind(('',8080))
serverSocket.listen(1)
#Fill in end 
while True:     
#Establish the connection    
    print('Ready to serve...')     
    connectionSocket,addr =serverSocket.accept()#Fill in start
    #Fill in end
    try:         
        message = connectionSocket.recv(1024)  #Fill in start
        #Fill in end
        filename = message.split()[1]                          
        f = open(filename[1:])
        outputdata = f.read()#Fill in start
    #Fill in end
    #Send one HTTP header line into socket         
        #Fill in start
        header = ' HTTP/1.1 200 OKnConnection: closenConnent-Type: text/htmlnConnent-Length: %dnn' % (len(outputdata))
        connectionSocket.send(header.encode())
    #Fill in end    

    #Send the content of the requested file to the client
        for i in range(0, len(outputdata)):
            connectionSocket.send(outputdata[i].encode())
        connectionSocket.close()
    except IOError:
    #Send response message for file not found
    #Fill in start
        Eorrmessage="HTTP/1.1 404 Not Found"
        connectionSocket.send(Eorrmessage.encode())
    #Fill in end

    #Close client socket
    #Fill in start
        connectionSocket.close()
    #Fill in end             
serverSocket.close()


2.UDPping程序

在这里插入代码片

由于最近觉得自己在多线程方面还缺乏知识,先补一补操作系统。这篇学习整理只能先搁置一下了。

转载注明请注明出处

最后

以上就是无奈早晨为你收集整理的计算机网络自顶向下第六版学习整理一、计算机网络概述二、应用层的全部内容,希望文章能够帮你解决计算机网络自顶向下第六版学习整理一、计算机网络概述二、应用层所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部