计算机网络:应用层(一)

news/2024/7/5 1:59:19

在这里插入图片描述

  • 我最近开了几个专栏,诚信互三!
    ====> |||《算法专栏》::刷题教程来自网站《代码随想录》。|||
    ====> |||《C++专栏》::记录我学习C++的经历,看完你一定会有收获。|||
    ====> |||《Linux专栏》::记录我学习Linux的经历,看完你一定会有收获。|||
    ====> |||《C#专栏》::记录我复习C#的经历,深度理解查漏补缺,不定期更新。|||
    ====> |||《计算机网络专栏》::记录我学习计算机网络,看完你一定会有收获。|||

计算机网络:应用层(一)

  • 应用层要解决的问题
  • 如何解决这些问题
    • IP地址及端口初识
    • 应用层协议
    • socket初识(初次理解)
    • TCP/UDP要提供的服务
  • TCP/UDP初识

应用层要解决的问题

在之前的计网博客中,我们以及学习到了网络和基于ISO,TCP/IP的网络层状结构,其中我们了解到了应用层要解决的问题是两台主机之间进程与进程之间的通讯问题。

如何解决这些问题

  • 首先,要解决进程之间的通讯问题,我们首先需要知道我们要与那个主机进行通讯。
  • 其次就要解决我们要与该主机的那个进程进行通讯。
  • 在次我们还要解决双方通讯所要遵守的规则,及协议。

IP地址及端口初识

要解决第一个问题,我们可以借助IP地址和端口,我们知道,IP地址表识了某个网络,这样我们就可以定位到接收方的网络位置,而进程则需要端口号来确认一个主机上有多个进程,端口号是一个数字,来标识唯一的进程,这样我们就能定位到网络,同时定位到精确的进程了。

定位到网络并不能找到某一台主机,还需要MAC地址,而这部分不属于应用层的管辖,属于数据链路层。

http的默认端口号为80号。
在这里插入图片描述

应用层协议

所谓的协议是层与层之间传递信息的一个规则的集合,协议中包含了很多东西,入语法,语义,时序等,应用层的主要协议有http,https协议,https协议是http+ssl协议,TCP/UDP是明码发送的,所以https协议就是解决如何在TCP/UDP为上层提供的服务中保证安全性。
下图是http报文格式。
在这里插入图片描述

socket初识(初次理解)

在我们传输数据的时候,我们要确认一些东西,比如:我是谁,我的那个进程要发送信息,接收方是谁,接收方的那个进程要接收该信息。 再比如我需要运输层为应用层提供可靠传输还是非可靠传输(TCP/UDP)。 以及基于什么协议进行传输。
我们发现,如果每次发送消息/接收消息,我们都确认并发送一边 “我是谁,我的那个进程要发送信息,接收方是谁,接收方的那个进程要接收该信息。”这样的信息,首先会导致效率降低,并且对空间的利用也不够好,socket解决的这个问题。

  • socket是被操作系统维护的一个表格,在需要可靠传输时(TCP),这个表格中包含了本地IP地址本地端口号接收方IP地址接收方端口号。这四个信息,在发送的时候,将这4个信息集合到一个整形中,并为四元组,发送出去,接收方同时也维护一个表格,来接收该四元组信息。
  • 对于非可靠传输(UDP)socket维护的是一个二元组表格,该表格内存有本地IP地址本地端口号

通过socket,我们不用在发送多条信息,只需发送四元组/二元组,就能确定所有信息,同时对于TCP来说,只需要确定不同的接收方的端口号,就可以直接发送数据,这样就节约了时间,对于接收方也是如此,UDP只需要确定接收方的IP,和端口号,这样就将很多重复工作的时间节约了下来。

TCP/UDP要提供的服务

我们知道在计算机体系结构中,下层要为上层提供服务,TCP/UDP协议要为应用层提供基于运输层的可靠与否的服务。

TCP:可靠传输,基于TCP/IP协议。
UDP:非可靠传输。

它们互有优劣,选择什么服务需要由应用层的进程决定。
但是这两个协议都是明码传输的,这在某些情况下是十分危险的,要解决这个问题,需要应用层的协议ssl,ssl是一个库,它可以为数据提供安全的传输解决TCP/UDP无法安全传输的问题。

TCP/UDP初识

简单认识以下TCP/UDP协议。

TCP:是运输层提供可靠传输的协议,为了实现可靠传输基于TCP的运输层会做以下工作

  • 1.TCP协议会检测当前信道的吞吐量,如果过高则TCP协议会减少发送的数据,保证数据的精确度。
  • 2.在传输时,会保留副本,如果分组丢失了,则重发。
    还有很多保证可靠传输的方法,这次简单认识下

UDP:是运输层提供非可靠传输的协议,由于是非可靠传输,所以对以上的要求都不高,入分组丢失不会重发,也不会保存分组,不会检测吞吐量,运输层数据接收速度与发送速度几乎相等等等。

这两种传输友好有坏,TCP提供可靠传输,用时间换取了数据的准确度,UDP则不会这样做。
比如流媒体,网络游戏等需要UDP提供服务,电子邮件等则需要TCP提供服务。


http://lihuaxi.xjx100.cn/news/1886461.html

相关文章

Mac如何设置control+space切换上一中输入法

#设置方法# *搜索输入法 系统设置-搜索:输入法,并点击键盘快捷键 *点击输入法,勾选:选择上一个输入法,点击完成。

算法----K 和数对的最大数目

题目 给你一个整数数组 nums 和一个整数 k 。 每一步操作中,你需要从数组中选出和为 k 的两个整数,并将它们移出数组。 返回你可以对数组执行的最大操作数。 示例 1: 输入:nums [1,2,3,4], k 5 输出:2 解释&…

uniapp使用u-empty以及其相关属性

Uni-app 是一款基于 Vue.js 的跨平台开发框架,可以用于同时开发多个平台的应用程序。其中,u-empty 是 Uni-app 提供的一个组件,用于展示空状态的页面。 u-empty 组件有以下几个相关属性: image:设置空状态显示的图片。…

漏洞复现-泛微云桥 e-Bridge SQL注入(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

Log4j.xml配置说明

介绍 Log4j 2 是一款广泛使用的 Java 日志框架,它支持多种日志级别、异步日志、过滤器等功能,并且具有高性能和可扩展性。以下是 Log4j 2 的详细配置说明: 配置文件名称和存放位置:Log4j 2 的配置文件名可以是任意有效的文件名&a…

python在线读取传奇列表,并解析为需要的JSON格式

python在线读取传奇列表,并解析为需要的JSON格式,以下为传奇中使用的TXT列表格式, [Server] ; 使用“/”字符分开颜色,也可以不使用颜色,支持以前的旧格式,只有标题和服务器标题支持颜色 ; 标题/颜色代码(0-255)|服务器标题/颜色代码(0-255)|服务器名称|服务器IP|服务器端…

算法通关村第十七关 | 黄金挑战 | 跳跃游戏

1.跳跃游戏 原题:力扣55. 逐步判断下一步的覆盖范围,根据范围去推断是否能到达终点,不用计较每一步走到哪里。 public boolean canJump(int[] nums) {// 题目规定 nums 长度大于等于1if (nums.length 1) {return true;}int cover 0;// f…

【PTA刷题】 求子串(代码+详解)

【PTA刷题】 求子串(代码详解) 题目 请编写函数,求子串。 函数原型 char* StrMid(char *dst, const char *src, int idx, int len);说明:函数取源串 src 下标 idx 处开始的 len 个字符,保存到目的串 dst 中,函数值为 dst。若 len…