计网笔记4-应用层

本文深入解析应用层协议,包括HTTP、FTP、DNS的工作原理,DHCP的动态IP分配机制,以及FTP、TELNET、RDP的功能特性。探讨HTTP与HTTPS的区别,HTTP1.0与HTTP1.1的改进,和URI与URL的概念区别。

4 应用层

HTTP,FTP,DNS

HTTP=tcp+80

4.1 域名系统DNS

DNS服务作用:负责解析域名,将域名解析成IP

域名解析的过程:一个DNS服务器解析所有域名明显是不科学的,所以实际上,域名解析由其顶级域名,二级三级域名依次往下分发任务。
在这里插入图片描述
主机访问网站时解析域名的过程(www.baidu.com

  • 找缓存
  • 找本机的hosts文件
  • 根据设置的DNS服务器(可设置多个,选择一个就行),访问本地域名服务器,并提交自己的域名给DNS服务器,
  • 服务器首先检查这个域名本地的缓存中是否有
    • 若是缓存中有,直接找到ip地址返回
    • 否则,就寻找一个根域名服务器的地址,并对其发起请求
  • 根域名服务器发现是.com下的顶级域名,于是给你返回负责这个域的服务器
  • 然后又向这个服务器发送请求,此服务器依照提交的域名依次往下(他的子节点中)找对应二级域名负责的服务器,每次返回对应子节点的地址,本地再如此一直访问返回的地址,直到找到负责此域名的节点,返回对应域名的地址后,本地进行缓冲,并成功访问

4.2 动态主机配置协议DHCP

  • 静态IP地址:如机房里面固定的主机,可静态分配IP地址,方便管理。
  • 动态IP地址:到处移动的笔记本就不适合静态分配IP地址,这时候要动态分配IP地址,而动态分配就需要使用DHCP协议。

本网段熙DHCP客户端请求IP地址的过程:
DHCP客户端:设置自动获得IP地址的主机

  • DHCP客户端并不知道当前网段下的DHCP服务器在哪,于是通过发送广播的方式来获得IP地址
  • 网段内的DHCP服务器可能有多个,每个收到广播请求的DHCP服务器都会从自己的IP地址池里面拿出一个IP地址给发送请求的DHCP客户端
  • DHCP客户端可能收到多个DHCP服务器发回来的IP地址,但DHCP客户端只使用一个(发包给DHCP服务器确认),其他的退回给相应的DHCP服务器(没收到确认消息的),这些DHCP服务器又把IP地址放回自己的IP地址池中。收到确认消息的DHCP这个时候再把IP地址,子网掩码,网关等发给DHCP客户端。

跨网段地址分配
没有必要每个网段下都设置一个DHCP服务器(浪费),一般是多个网段下设置一个,所以需要能够进行跨网段分配地址。

  • DHCP服务器需要创建多个作用域(管理多少个网段就创建多少个作用域)
  • 主机请求分配IP地址
    • 需要进行跨网段分配地址的网段,需要在默认路由器处配置对应DHCP服务器的位置,当这个路由器收到某个主机的广播要求动态分配IP地址的时候,就转发这条消息给其配置的DHCP服务器。
    • DHCP本网段下的主机直接广播就能被DHCP服务器收到
  • DHCP服务器收到请求分配IP地址的请求
    • DHCP服务器收到某个路由器发送请求,要求分配IP地址,查询这个路由器的网段,然后在自己对应这个网段的作用域上分配一个IP地址给发送消息的路由器,路由器再转发给本网段下发送广播的主机。
    • DHCP服务器如果收到的是广播消息,就知道是本网段下的主机发起的IP地址分配请求,在本网段对应的作用域下寻找一个IP地址分配给主机即可。

4.3 文件传输协议FTP(File Transfer Protocol)

使用TCP协议连接FTP客户端与FTP服务器端
21端口:控制连接,发送FTP命令信息(连接命令等)
20端口:数据连接,用于上传,下载数据

建立连接有主动服务和被动服务器

  • 主动服务:
    • FTP客户端主动请求FTP服务器端发送数据(FTP请求发到21端口),并告诉服务器自己使用的什么端口侦听
    • FTP服务器端以20为源端口,主动向FTP客户端发送数据(以客户端的告诉自己的端口为目的端口)
  • 被动服务
    • FTP客户端请求与FTP服务器端建立连接,发送到服务器的21端口
    • FTP服务器端自己新开一个端口为源端口X,并告诉客户端自己开了端口X,等待客户端与自己建立连接

FTP服务器端如果有防火墙,需要在防火墙上开21和20端口,使用主动模式进行数据连接(如果使用被动,需要再防火墙上开很多洞)

4.4 远程终端协议TELNET

远程调试网络设备,默认使用23端口。

远程连接后,可知远程终端执行命令,或测试远程端口是否打开了

4.5 远程桌面协议RDP

远程连接到服务器进行管理,类似telnet,但这是可以使用工具,进行图形化界面进行管理的。

使用3389端口。

4.6 超文本传输协议HTTP(Hyper Text Transfer Protocol)

超文本:指向其他文档的链接的文本

万维网WWW(World Wide Web):提供分布式的服务,使得通过一个网站能够链接到其他IP下的网站,每个网站都带有其他网站的链接,根据用户的需要进行跳转。

http://www.baidu.com 就表示使用HTTP协议来访问

HTTP协议用来访问网站,一个服务器下可能有多个网站,不同的网站通过使用不同的端口,不同IP,不同的主机头区分。HTTP是面向事务的,保证了万维网可以可靠的交换文件(文件,声音,图像等各种多媒体文件),每个网点下都有一个服务器进程,它不断的监听TCP的端口80,以便发现有用户发起建立连接请求,TCP连接建立后,返回用户请求的页面作为响,再到最后释放TCP。而用户与服务器之间的请求余响应的交互就需要遵守一定的规则,这个规则与格式就是超文本传输协议HTTP。

注:http不仅能传送超文本跳转所必需的信息,也传送任何可从互联网上得到的信息(文本,超文本,声音,图像等)

HTTP报文格式

请求报文:
在这里插入图片描述

开始行叫请求行

  • 方法:是面向对象技术中使用的专门名词。所谓“方法”就是对所请求的对象进行的操作,因此这些方法实际上也就是一些命令。因此,请求报文的类型是由它所采用的方法决定的。
  • URL:是所请求的资源的 URL。
  • 版本:是 HTTP 的版本。

首部行:记录浏览器,服务器或报文主体的一些信息
实体主体:一般不用这个字段

响应报文:
在这里插入图片描述
开始行是状态行,状态行包括三项内容,即 HTTP 的版本,状态码,以及解释状态码的简单短语。

  • http状态码
    • 1xx 表示通知信息的,如请求收到了或正在进行处理。
    • 2xx 表示成功,如接受或知道了。
    • 3xx 表示重定向,表示要完成请求还必须采取进一步的行动。
    • 4xx 表示客户的差错,如请求中有错误的语法或不能完成。
    • 5xx 表示服务器的差错,如服务器失效无法完成请求。

Http是无状态的

也就是说,当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个”老用户“。
可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。

Http与Https的区别:
HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头
HTTP 是不安全的,而 HTTPS 是安全的
HTTP 标准端口是80 ,而 HTTPS 的标准端口是443
在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层
HTTP 无法加密,而HTTPS 对传输的数据进行加密
HTTP无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书

URI和URL的区别
URI:统一资源标识符,用来唯一的标识一个资源。URI包含了URL(www.baidu.com
URL:统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。(http://www.baidu.com , ftp://www.baidu.com

HTTP1.0和HTTP1.1的一些区别
HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:

  • 缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

  • 带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

  • 错误通知的管理,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

  • Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

  • 长连接,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。(HTTP1.0中每次发送请求,都会通过使用TCP三次握手建立连接,并在第三次握手时发送请求,然后服务器端返回客户端需要的信息后就立即关闭了连接,这样每次请求都需要花费两个TTL的时间,且每次访问都需要建立新的连接并分配资源,造成了时间和服务器端资源的浪费)

用户点击 URL http://www.tsinghua.edu.cn/chn/yxsz/index.htm后所发生的事件
(1) 浏览器分析超链指向页面的 URL。
(2) 浏览器向 DNS 请求解析 www.tsinghua.edu.cn 的 IP 地址。
(3) 域名系统 DNS 解析出清华大学服务器的 IP 地址。
(4) 浏览器与服务器建立 TCP 连接。
(5) 浏览器发出取文件命令:GET /chn/yxsz/index.htm。
(6) 服务器给出响应,把文件 index.htm 发给浏览器。
(7) TCP 连接释放。
(8) 浏览器显示“清华大学院系设置”文件 index.htm 中的所有文本。

### 算机组成原理笔记 #### 1. 算机系统的构成 算机系统由硬件和软件两大部分组成。硬件部分遵循冯·诺依曼架构,其基本组成部分包括输入设备、输出设备、存储器、运算器以及控制器[^1]。 #### 2. 硬件的基本组件及其作用 - **输入设备**:用于接收外部信息并将其转换成算机可以处理的形式。 - **输出设备**:负责将内部数据转化为人类能够理解的信息形式展示出来。 - **存储器**:分为内存(RAM)与外存两种类型;前者速度快但断电即失,后者容量大且持久保存资料。 - **运算器**:执行各种算术逻辑操作的核心单元。 - **控制器**:协调各部件工作流程的关键装置,它通过发出控制信号来指挥其他部件完成特定任务。 #### 3. 软件分类概述 软件被划分为两大类别——系统软件和应用软件: - **系统软件**:主要包括操作系统、驱动程序等底层支持工具,它们为用户提供了一个友好的交互界面,并管理着整个算环境下的资源分配和服务提供机制。 - **应用软件**:指那些面向具体业务需求的应用程序包,比如办公套件、图形设工具或是游戏娱乐类产品等。 #### 4. 编程语言级别划分 编程语言按照抽象程度的不同可分为三类: - **机器语言**:最接近于实际物理电路层面的语言表达方式; - **汇编语言**:一种低级别的符号化表示方法,便于程序员理解和编写复杂算法的同时保持较高的运行效率; - **高级语言**:更加贴近自然语言表述习惯的一种高层次开发手段,具有良好的跨平台兼容性和易读性特点。 #### 5. 多级层次结构解析 算机系统存在多个不同层次的实现模型,自底向上依次为硬联逻辑级、微程序级、传统机器级、操作系统级、汇编语言级、高级语言级直至最高层的应用语言级。每一层都构建在其下一层之上,从而形成了一个完整的软硬件协同工作的生态系统。 #### 6. CPU 和主存之间的连接关系 为了提高访问速度,通常会在CPU附近设置一个小规模却非常快速的记忆区域称为Cache缓存。当处理器请求某个地址的数据时,会先查询该位置是否存在于Cache之中;如果命中则直接从中取出所需内容返回给CPU;反之,则需进一步向更慢速但也更大容量的主要储存介质发起检索请求。此外,MAR (Memory Address Register)用来暂存即将访问的目标地址,而MDR (Memory Data Register)则是临时存放从指定地点读取出来的数值或者是准备写入的新值[^4]。 ```python # Python伪代码模拟简单的CPU与主存交互过程 class Memory: def __init__(self, size=1024): self.memory = [None]*size def read(self, address): return self.memory[address] def write(self, address, value): self.memory[address] = value class CPU: def __init__(self, memory): self.mar = None # 地址寄存器 MAR self.mdr = None # 数据寄存器 MDR self.pc = 0 # 程序数器 PC self.ir = "" # 指令寄存器 IR self.memory = memory def fetch_instruction(self): instruction_address = self.pc self.mar = instruction_address self.mdr = self.memory.read(instruction_address) self.ir = self.mdr self.pc += 1 cpu_instance = CPU(Memory()) cpu_instance.fetch_instruction() print(f"Fetched Instruction: {cpu_instance.ir}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值