王道计算机网络学习笔记(5)——传输层和应用层

前言

文章中的内容来自B站王道考研计算机网络课程,想要完整学习的可以到B站官方看完整版。

五:传输层

5.1:传输层基本概述

传输层的功能:

1传输层提供进程和进程之间的逻辑通信

2复用和分用

微信和QQ都使用传输层的协议进行发送数据(复用);其他主机通过微信和QQ给我发送信息时也是通过传输层的协议,但是最后数据会分别发送到微信和QQ对应的进程(分用)。

3:传输层对收到的报文进行差错检测

4:传输层的两个协议(TCP/UDP

TCP:可靠、面向连接、时延大、适合大文件

UDP:不可靠、无连接、时延小、适合小文件

 

传输层的端口

端口是传输层用来标识主机中的应用进程,端口号长度为16位,能表示65536个不同的端口号

 

5.2:UDP协议 

主要特点:

无连接、不可靠、面向报文适合一次性传输少量数据、无拥塞控制适合很多实时应用、首部开销小只需要8BTCP首部需要20B。

 

UDP首部格式

UDP长度:首部+数据字段

UDP校验

IP数据报格式和协议种类

 使用伪首部来校验UDP、伪首部数据格式(只在接受双方进行校验时才出现,不会进行传递)

5.3.1:TCP协议特点和TCP报文段格式

TCP协议特点

面向连接、TCP连接只能是点对点、可靠有序不丢不重、全双工通信(有发送缓存和接收缓存)、面向字节流(流:流入到进程或从进程流出的字节序列)

TCP报文段首部格式

IP数据报格式、协议种类

UDP首部

TCP首部

序号、确认号、数据偏移

6个控制位

紧急位URGurgent):发送紧急数据,不用在缓存里排队

确认位ACKacknowledgement):在连接建立后所有传送的报文段都必须把ACK置为1

推送位PSHpush):接收方尽快交付接收应用进程,不再等到缓存填满再向上交付

复位RSTreset):标明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接

同步位SYNsynchronous):表明是一个连接请求/连接接受报文

终止位FINfinish):表明次报文段发送方数据已发完,要求释放连接

窗口:指的是发送本报文段的一方的接收窗口,即现在允许对方发送的数据量

检验和:检验首部和数据,检验时要加上12B的伪首部,第四个字段是6

紧急指针:当URG = 1时有效,指出本报文段中紧急数据的字节数

5.3.2:TCP的连接管理

TCP连接传输的三个阶段(连接建立、数据传送、连接释放)

TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器

TCP连接:

TCP的释放:

 

5.3.3:TCP的可靠传输

可靠:保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的

TCP首部数据结构

TCP实现可靠传输的机制(校验、序号、确认、重传)

序号:

确认:

 

超时重传

重传时间:TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)

冗余ACK、快速重传

5.3.4:TCP流量控制

数据链路层讲过的三种流量控制方式

TCP首部数据格式

发送方的发送窗口取决于接收窗口rwnd拥塞窗口cwnd的最小值

当接收方给发送方发送一个rwnd = 0的报文段,过了一段时间接收方想给发送方重新发送一个rwnd != 0的报文段但是在中途丢失了,这时发送端的窗口长度还是为0就可能会造成操作系统死锁的现象(接收方想要发送方发数据,但是发送方有一直在等接收方重新调整自己的发送窗口长度)

TCP协议会为每一个连接设有一个计时器

5.3.5:TCP的拥塞控制

出现拥塞的条件

拥塞控制和流量控制的区别

拥塞情况不知道是哪几台主机发送过多造成的,发送方很多数据迟迟到不了接收方;而流量控制是一个点到点的过程,发送方发送速度过快而接收方的接收缓存不够。

拥塞控制的四种算法(慢开始、拥塞避免、快重传、快恢复)

两个假定:

接收窗口和拥塞窗口:

慢开始和拥塞避免(造成网络拥塞之后,初始值重设为1,门限值变原来的一半)

快重传和快恢复

六:应用层

6.1:网络应用模型

应用层对应用程序的通信提供服务

常见端口号:

两种网络应用模型

C/S模型

P2P模型

6.2:域名解析系统DNS

DNS将域名转换成IP地址

 域名:

 顶级域名:

 二级域名:

 域名服务器:(根域名服务器、顶级域名服务器、权限域名服务器、本地域名服务器)

域名解析过程(递归查询和迭代查询)

递归查询:叫别人找最后返回给本地域名服务器

迭代查询:本地域名服务器自己一层层地找

6.3:文件传输协议FTP(要和SFTP区分开、SFTP是基于SSH,端口号是22)

常见应用程序端口号

FTP工作原理

FTP、SFTP和SSH是三种不同的协议,其关系如下:

1:FTP是一种标准的网络协议,用于在客户端和服务器之间传输文件。

2:SFTP是一种基于SSH协议的加密协议,用于在客户端和服务器之间传输文件,可以保证传输的安全性。

3:SSH是一种安全协议,用于在客户端和服务器之间进行加密通信,可以保证通信的安全性。

在Linux系统下,可以通过以下方式使用这三种协议:

1:FTP:使用命令行工具如ftp或ncftp,或者使用GUI工具如FileZilla等。:

2:SFTP:同样可以使用命令行工具如sftp或psftp,或者使用GUI工具如FileZilla等。需要注意的是,SFTP需要在服务器上配置SSH服务。

3:SSH:使用命令行工具如ssh或putty等进行远程登录或执行命令。

6.4.1:电子邮件

组成结构(SMTP发、POP3收)

 

邮局协议POP3

 

网际报文存取协议IMAP

基于万维网的电子邮件(HTTP和SMTP相组合)

6.5:万维网和http协议

域名

万维网WWW(world wide web),是无数个网络站点和网页的集合

统一资源定位符URL可以唯一标识资源(文字、视频、音频)

超文本传输协议http

Cookie

非持久连接、持久连接

 HTTP的报文结构

 

 HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议。它使用TCP/IP作为传输协议,通过客户端和服务器之间的请求和响应来进行通信。 

1. 请求行:包含请求方法、请求的URL和HTTP协议的版本。例如:GET /index.html HTTP/1.1

2. 请求头:包含一些附加的信息,如请求的主机、用户代理、内容类型等。每个头字段都以键值对的形式出现,用冒号分隔。例如:Host: www.example.com

3. 空行:请求头和请求体之间需要有一个空行。

4. 请求体:可选的,用于传输请求的数据,如表单数据、文件等。

5. 响应行:包含响应的状态码和状态消息。例如:HTTP/1.1 200 OK

6. 响应头:与请求头类似,包含一些附加的信息,如服务器类型、内容长度、响应时间等。

7. 空行:响应头和响应体之间需要有一个空行。

8. 响应体:包含服务器返回的数据,如HTML页面、图片、JSON数据等。

以上是HTTP协议的基本数据格式,不同的请求和响应可能会有不同的头字段和数据内容 

总结

以上是本文的全部内容,非常感谢你能看到这。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/2439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言ggplot2——柱形图

BMIread.table(/Users/zhangzhishuai/Downloads/33 lesson33 ggplot2散点图(一)/33_ggplot2/BMI.txt, header T,row.names 1,sep \t) library(ggplot2) BMI$namerownames(BMI) ggplot(BMI,aes(xname,yheight)) geom_bar(stat identity # identity:数…

Vue3基础知识

文章目录 第一章 vue3 安装1.1安装1.2开启服务器1.3 使用图形化界面1.4 Vite1.5 vue3项目打包1.6 vue3 创建项目1.6.1 vue create命令1.6.2 创建一个项目 第二章 vue3 基础2.1 vue3 的目录结构2.2 vue3 的起步2.2.2 data 选项2,2.3 methods 2.3 Vue3 指令2.4 vue3 模板语法2.4.…

【NLP】使用BERT构建一个情绪分析模型

一、说明 在本教程中,我们将深入挖掘BERT,一个著名的基于“transformer”的模型,并提供一个动手示例来微调用于情绪分析的基本BERT模型。本文提供了有关给定主题的信息摘要。本文属于应用性文章,不应该被视为原创研究。本文中包含的信息和代码可能会受到各种在线文…

vue3和tauri直接下载Binary 数组的二进制文件内容到本地

通过发送url请求,直接获取到一个文件的Binary 数组内容,然后通过tauri的api:writeBinaryFile保存文件到本地电脑。 发送请求的时候,要加上响应类型:responseType: ResponseType.Binary 然后等返回的响应内容&#xf…

Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么

目录 Chat GPT是什么 初学者怎么使用Chat GPT 使用Chat GPT需要注意什么 一些简单的prompt示例 Chat GPT是什么 Chat GPT是由OpenAI开发的一种大型语言模型,它基于GPT(Generative Pre-trained Transformer)架构。GPT是一种基于深度学习的…

应对突发流量,如何快速为自建 K8s 添加云上弹性能力

作者:庄宇 以 Kubernetes 为代表的容器技术带来的是一种应用交付模式的变革,其正迅速成为全世界数据中心的统一 API。 为了保证业务持续稳定、用户访问不中断,高可用、高弹性等能力是应用架构设计不变的追求,多集群架构天然具备…

AJAX基础教程

1、引言 就是异步刷新,AJAX要和XMLHttpRequest对象、JavaScript/DOM、CSS、XML一起使用 2、XMLHttpRequest对象 XMLHttpRequest对象,异步的与服务器交换数据,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新…

【无标题】

Linux下不能连接ppa.launchpad.net的问题(中科大软件源) 警告:操作前请先做好备份。 1. 替换ppa源成中科大源 每个ppa都会在/etc/apt/sources.list.d/目录下创建一个list文件,修改: vi /etc/apt/sources.list.d/ubuntu-toolch…

JAVA找BUG之OOM

大家好哇,我是梦辛工作室的灵,在最近的工作中,又遇到了一个bug,系统运行一段时间后就会频繁OOM,然后直接假死或退出,一度折磨着我,后面不停的翻日志查GC,最后才终于确认位置&#xf…

UNI-APP开发中遇到的坑

UNI-APP开发中遇到的坑 一、页面无法回退二、列表页面下拉刷新不显示数据 一、页面无法回退 在页面中我们一般会在顶部左侧放置一个返回按钮&#xff0c;用户点击返回按钮则关闭当前页面&#xff0c;返回上一层页面。 <uni-nav-bar left-icon"back" title"添…

Python爬虫——urllib_ajax请求的post请求

爬取肯德基官网的门店位置信息&#xff08;现在已经进不去了&#xff0c;所以现在返回的全是-1000&#xff09;&#xff1a; import urllib.request import urllib.parsedef create_request(page):base_url http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?opcnamehea…

使用 uiautomator2+pytest+allure 进行 Android 的 UI 自动化测试

目录 前言&#xff1a; 介绍 pytest uiautomator2 allure 环境搭建 pytest uiautomator2 allure pytest 插件 实例 初始化 driver fixture 机制 数据共享 测试类 参数化 指定顺序 运行指定级别 重试 hook 函数 断言 运行 运行某个文件夹下的用例 运行某…

【软件测试面试】腾讯数据平台笔试题-接口-自动化-数据库

数据库题 答案&#xff1a; Python编程题 答案&#xff1a; 接口参数化题 答案&#xff1a; 接口自动化题 答案&#xff1a; 以下是我收集到的比较好的学习教程资源&#xff0c;虽然不是什么很值钱的东西&#xff0c;如果你刚好需要&#xff0c;可以评论区&#…

高斯误差线性单元激活ReLU以外的神经网络

高斯误差线性单位&#xff08;GELU&#xff09;激活函数由加州大学伯克利分校的Dan Hendrycks和芝加哥丰田技术研究所的Kevin Gimpel于2018年引入。激活函数是触发神经元输出的“开关”&#xff0c;随着网络的深入&#xff0c;其重要性也随之增加。最近几周&#xff0c;机器学习…

create database创建数据库失败

瀚高数据库 目录 环境 症状 问题原因 解决方案 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.7 症状 1、执行如下sql语句创建数据库报错。 create database printcdburn with encodingUTF8 OWNERprintcdburn LC_COLLATEzh_CN.UTF-…

github 最简单的使用步骤(个人学习记录~)

github 使用步骤&#xff1a; (11条消息) github新手用法详解&#xff08;建议收藏&#xff01;&#xff01;&#xff01;&#xff09;_github详解_怪 咖的博客-CSDN博客 1.获取ssh密钥 打开输入&#xff1a;ssh-keygen -t rsa -C “git账号” 输入之后一路Enter&#xff08…

谈谈VPN是什么、类型、使用场景、工作原理

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 前言 本文将讲解VPN是什么、以及它的类型、使用场景、工作原理。 目录 一、VPN是什么&#xff1f; 二、VPN的类型 1、站点对站点VPN 2、…

单例模式(java)

目录 概述 结构 代码实现 饿汉式&#xff08;静态变量&#xff09; 饿汉式&#xff08;静态代码块&#xff09; 懒汉式&#xff08;双重检查方式&#xff09; 概述 单例模式&#xff08;Singleton Pattern&#xff09;是 Java 中最简单的设计模式之一。这种类型的设计模式…

labview 弹窗(子vi)

如果你遇到了需要在主vi运行时需要弹窗某个窗口(或者称为子vi,子画面)&#xff0c;而且要主画面和子画面能独立运行各自的循环程序&#xff0c;本文能给你帮助。 本文的精髓在于: wait until Donefalse,表示子VI运行的同时&#xff0c;主vi也继续运行后面的代码&#xff0c;主…

win10下解决git报错 Permission denied(publickey)

今天在csdn的GitCode新建了一个项目&#xff0c;然后在windows下git clone时出现错误 gitgitcode.net: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 完整…