IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【面向面试,只说重点】计算机网络知识点梳理,自顶向下 -> 正文阅读

[网络协议]【面向面试,只说重点】计算机网络知识点梳理,自顶向下

大家好!我是未来村村长,就是那个“请你跟我这样做,我就跟你这样做!”的村长👨?🌾!

||To Interview||

? 未来村村长正推出一系列【To Interview】文章,该系列文章重要是对Java开发面试内容的梳理,只关注面试重点。虽然CSDN上有很多关注面试的文章,但其整篇文章全部由面试题拼接而成,没有对知识进行很好的串联。

? ”天下苦八股文久矣?吾甚哀,若学而作苦,此门无缘,望去之。“

? 大多数文章都是从物理层向上讲到应用层不利于快速学习和理解,本篇文章从顶层应用层开始向下讲到网络层,利于快速掌握计网的重点知识。

一、计网概述

1、计算机网络基础概念

(1)计算机网络组成概念

  • 组成部分:硬件、软件、协议

  • 工作方式:边缘部分和核心部分

    • 边缘部分由用户直接使用的主机组成,用来通信和资源共享。
    • 核心部分由大量的网络和连接网络的路由器组成,为边缘部分提供连通性和交换服务

? img

(2)分布范围分类

按照分布范围可分为四类:

  • 广域网:长距离通信,覆盖几千千米的区域,因特网的核心部分。
  • 域域网:覆盖范围几十千米,多采用以太网技术。
  • 局域网:由微机或工作站连接,覆盖范围几十米到几千米。
  • 个人区域网:覆盖范围10m左右,电子设备用无线技术连接的网络。

(3)计算机网络交换技术

  • 电路交换网络:建立专用的通路,最开始使用的传统电话网络就是电路交换网络。建立连接(分配通信资源)、通话(一直占用通信资源)、释放连接(归还通信资源)
  • 报文交换网络:将用户数据加上相关辅助信息后,封装成报文,整个报文传到相应节点,全部储存再转发到下一个节点。
  • 分组交换网络:主流网络基本使用分组交换网络,把整块数据/信息分为多个数据段(相对于报文传输而言),数据段分开传输。在数据段前面加上首部后,成为一个分组。以分组为单位传输

img

(4)性能指标(专业术语)

  • 带宽:通信线路允许通过的信号频带范围,表示网络通信线路所能传送数据的能力
  • 时延:数据(报文或分组)从网络的一段传到另一端所用的总时间,由4部分组成,发送时延、传播时延、处理时延、排队时延
  • 吞吐量:单位时间内,通过某网络的数据量

2、计算机网络分层结构🌟

img

(1)OSI体系

? OSI体系结构,意为开放式系统互联。国际标准组织制定了OSI模型。这个模型把网络通信的工作分为7层,分别是物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。每一层负责一项具体的工作,然后把数据传送到下一层。【法律标准】

在这里插入图片描述

(2)TCP/IP体系🛵

? 将OSI结构的物理层和数据链路层合并成为网络接口层,去掉了会话层和表示层。在TCP/IP协议中的网络接口层并没有规定什么具体的内容,目的是为了允许任何形式的网络接口使用TCP/IP协议。

? 实际上TCP/IP协议只有三层:网际层、运输层、应用层。【事实标准】

在这里插入图片描述

(3)原理划分体系

? 结构相当于把TCP/IP协议中的网络接口层还原成数据链路层、物理层,网际层还原成网络层。一共分为应用层、运输层、网络层、数据链路层、物理层。

二、应用层

? 应用层解决通过应用进层的交互来实现特定网络应用的问题。

1、网络应用模型

(1)客户/服务器模型(C/S)

? 服务器是总是打开的主机,服务于许多来自其他客户机的主机请求。工作流程如下:

  • 服务器处于接收请求状态
  • 客户机发出服务请求,并等待接收结果
  • 服务器收到请求后,分析请求,进行处理,得到结果并返回客户机

img

(2)P2P模型

? P2P是各主机权力和义务平等,每个节点都有下载和上传功能,没有固定的客户和服务器划分。P2P模式虽然能减轻服务器的计算压力,但是容易造成网络拥堵,ISP(互联网服务提供商)不喜欢这样。

img

2、域名系统(DNS)

? 因特网使用的命名系统,用来把便于记忆的含有特定意义的主机名转换为便于及其处理的IP地址。

? 例:www.baidu.com的ip地址为182.61.200.6
在这里插入图片描述

(1)层次命名空间

  • 因特网采用层次树状结构命名方法,以www.baidu.com为例
  • www:三级域名
  • baidu:二级域名
  • .com:顶级域名

(2)域名服务器

? 域名到IP地址的解析是由运行在域名服务器上的程序完成的。因特网的域名系统是一个联机分布式的数据库系统,采用客户/服务器模型,一个服务器所管辖的范围是有限的,DNS采用了大量的域名服务器,以层次方式组织。主要由以下四类:

  • 根域名服务器:最高层次域名服务器,知道所有顶级域名服务器的IP地址,因特网有13个这样的服务器。
    • 其作用是管理顶级域,不能直接将带查询域名转换为IP地址
  • 顶级域名服务器:负责管理顶级域名服务器注册的所有二级域名,收到DNS查询请求时,会给出相应回答(IP地址或下一级服务器的IP地址)
  • 权限(授权)域名服务器:每台主机必须在授权(权限)域名服务器处登记,总能将其管辖的主机名转换为对应的IP地址(如大学的edu.cn),因为edu是特殊授权的,所以得通过权限域名服务器进行解析。
  • 本地域名服务器:当一台主机发出DNS请求时,请求报文发送给该主机的本地域名服务器,由本地域名服务器代替客户机进行域名解析的请求发送和相关结果接收。

(3)域名解析过程

? 域名解析,把域名映射成为IP地址,或把IP地址映射成域名的过程,前者正向解析,后者反向解析。

? 主机向本地域名服务器查询采用递归查询,本地域名服务器向根域名服务器查询采用迭代查询。

? 域名解析过程如下:

img

  • 客户机向本地域名服务器发出DNS请求报文
  • 本地域名服务器收到请求,查询本地缓存记录,若没有则向根域名服务器发送解析请求
  • 根域名服务器收到请求后,判断该域名所属于的顶级域名服务器,将该顶级域名服务器的IP地址返回给本地域名服务器
  • 本地域名服务器收到IP地址后,向顶级域名服务器发出解析请求报文
  • 顶级域名服务器收到请求后,将对应的授权域名服务器的IP地址返回给本地域名服务器
  • 本地域名服务器向授权域名服务器发送解析请求报文
  • 授权域名服务器将域名解析为IP地址后,返回结果给本地域名服务器
  • 本地域名服务器将结果保存到本地缓存,同时返回给客户机

?

3、文件传输协议(FTP)

? 文件传输协议(File Transfer Protocol)是因特网上使用最广泛的文件传输协议,FTP提供交互式访问。

? FTP采用客户/服务器的工作方式,使用TCP可靠传输服务,一个FTP服务器进程可同时为多个客户提供服务,由两大部分组成:一个主进程负责接收新的请求,若干从属进程负责处理单个请求。

? FTP服务器必须在整个会话期间保留用户的状态信息,其工作时使用两个并行的TCP连接,一个是控制连接(端口21),一个是数据连接(端口20)。控制连接在整个会话期间一直保持打开,用于传送FTP相关的控制命令,数据连接用于文件传输,每次文件传输时才建立,传输结束后就关闭

? FTP工作原理如下:

  • 打开控制端口【端口21】,使客户进程能够连接
  • 等待客户进程发送连接请求
  • 启动从属进程来处理客户进程发来的请求。主进程和从属进程并发执行,从属进程对客户进程的请求处理完毕后立即终止
  • 回到等待状态,继续接收其它客户进程的请求

4、电子邮件

? 电子邮件(E-mail)是因特网上最早流行的一种应用,并且仍是当今因特网上最重要、最实用的应用之一。其使用了 SMTP(简单邮件传输协议)或POP3(邮局协议)。

? 用户浏览器与邮件服务器之间的数据传输使用的是HTTP,邮件服务器之间传送邮件使用SMTP。

5、万维网(WWW)

? 万维网(World Wide Web)是一个资料空间,其使用链接的方式让用户能方便地从网上的一个站点访问另一个站点。万维网指的就是网络上无数的站点和网页集合。其内核由三个标准组成:

  • URL:统一资源定位符,负责标识万维网上的各种文档,并使每个文档在整个万维网的范围内有唯一标识符
    • 一般形式:协议://主机:端口/路径
  • HTTP:超文本传输协议,应用层协议,通过TCP连接进行可靠的传输,HTTP是万维网客户程序和服务器程序之间交互时必须遵守的协议
  • HTML:超文本标记语言,使用一些约定的标记对页面上的展示进行描述。

? 万维网以客户/服务器方式工作:

  • Web用户使用浏览器通过指定URL与Web服务器建立连接,并发送浏览请求
  • Web服务器把URL转换为文件路径,并返回信息给Web浏览器
  • 通信完成,关闭连接

6、HTTP??

? HTTP(超文本传输协议),定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。HTTP报文的每个字段都是ASCII码,以共有两类报文,一是客户向服务器发送的请求报文,二是服务器返回客户端的响应报文。

(1)HTTP请求和响应

① 报文结构
  • 起始行【请求行、状态行】:描述请求或响应的基本信息
  • 头部字段【请求头、响应头】:使用 key-value 形式更详细地说明报文
  • 空行:换行符
  • 消息正文【请求数据、响应数据】:实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。

请求报文:

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi

响应报文

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
② 状态码
分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

(2)HTTP请求方法

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

序号方法描述
1GET请求指定的页面信息,并返回实体主体。
2HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4PUT从客户端向服务器传送的数据取代指定的文档的内容。
5DELETE请求服务器删除指定的页面。
6CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7OPTIONS允许客户端查看服务器的性能。
8TRACE回显服务器收到的请求,主要用于测试或诊断。
9PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。

? ??GET和POST区别:

  1. get:请求参数是作为一个key/value对的序列(查询字符串)附加到URL上的。

    post:请求参数是在http标题的一个不同部分(名为entity body)传输的,这一部分用来传输表单信息,因此必须将Content-type设置为:application/x-www-form-urlencoded。

  2. GET:产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

    POST:POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200(返回数据)。

    都在第三次握手时进行第一次数据发送,GET发送一次,而Post在服务器响应100 Continue后再发送data

  3. post更安全,不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中。post发送的数据更大,能发送更多的数据类型。post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交)

(3)HTTP1.0→HTTP2.0

① HTTP0.9
  • 目的:用来传输体积很小的HTML文件。
  • 特点:只有请求行,没有请求头和请求体;没有返回头信息,只返回了数据;返回的文件内容是以ASCII字符流来传输的;
② HTTP1.0
  • 核心诉求:支持多种类型文件的下载。
  • 引入请求头(期望返回的文件类型、采用什么类型压缩、提供什么语言的文件、文件的具体编码)和响应头(压缩类型、返回文件类型)
  • 为了减轻服务器的压力,HTTP1.0中提供了cache机制,用来缓存已经下载过的数据。
  • 服务器需要统计客户端的具体信息,所以请求头中加入了用户代理的字段。
③ HTTP1.1
  • 增加长连接(减少了TCP连接的建立以及断开次数,减少了服务器压力);
  • 浏览器为每个域名最多同时维护6个TCP长链接
  • 出现队头阻塞的问题;
  • 提供虚拟主机的支持(请求头增加Host字段);
  • Chunk transfer 机制(对动态生成的内容进行了完美的支持);
  • 客户端的cookie、安全机制

缺陷:对带宽的利用率不理想。(带宽:每秒最大能发送或者接收的字节数)
原因:

  • TCP的慢启动;(通常TCP连接建立好了之后就会请求一些关键的资源文件,由于慢启动,推迟了页面首次渲染的时常)(慢启动是TCP为了减少网络阻塞的策略,不能改变)
  • 同时开启了多条TCP连接,这些连接会竞争固定的带宽。
  • 队头阻塞问题。(假如有的请求被阻塞了 5 秒,那么后续排队的请求都要延迟等待 5 秒,在这个等待的过程中,带宽、CPU 都被白白浪费了)(队头阻塞使得这些数据不能并行请求,所以队头阻塞是很不利于浏览器优化的)
④ HTTP2.0:一个域名只使用一个 TCP 长连接和消除队头阻塞问题(多路复用机制)
  • HTTP/2采用二进制格式而非文本格式

  • HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行

  • 使用报头压缩,HTTP/2降低了开销

  • HTTP/2让服务器可以将响应主动“推送”到客户端缓存中

(4)HTTPS

? HTTPS和HTTP的主要区别:

  • https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
  • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

? SSL/TLS协议的基本过程(TLS1.2):

  • 客户端向服务器端索要并验证公钥。
  • 双方协商生成"对话密钥"。
  • 双方采用"对话密钥"进行加密通信。

? 缺点:HTTPS协议握手阶段比较费时,连接缓存不如HTTP高效,会增加数据开销和功耗。SSL证书需要钱,功能越强大的证书费用越高,加密范围也比较有限。

(5)HTTP缓存

? 浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识,每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中。

? 浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中

缓存以共有三种类型:

  • 强制缓存:强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程。
    • 当浏览器向服务器发起请求时,服务器会将缓存规则放入HTTP响应报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是Expires和Cache-Control,其中Cache-Control优先级比Expires高。
  • 协商缓存:协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程

缓存存放:浏览器会在js和图片等文件解析执行后直接存入内存缓存中,那么当刷新页面时只需直接从内存缓存中读取(from memory cache);而css文件则会存入硬盘文件中,所以每次渲染页面都需要从硬盘读取缓存(from disk cache)。

(6)Session与Cookie

  • Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中。

  • Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

三、传输层??

? 传输层为应用层提供通信服务,属于面向通信的最高层,面向用户功能的最底层。传输层位于网络层之上,他为运行在不同主机的进程之间提供了逻辑通信,而网络层为主机提供逻辑通信。

1、基础概念

(1)传输层的功能

? 传输层的功能如下:

  • 提供应用进程之间的逻辑通信
  • 复用和分用:复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据,分用指接收方的传输层在剥去报文首部后都能把数据交付给对应的应用进程
  • 传输层要对收到的报文进行差错检测:传输层检测报文首部和数据部分,网络层只检测首部
  • 提供两种不同的传输协议:面向连接的TCP和无连接的UDP。TCP连接,网络不可靠但逻辑通信信道相当于一条双全工的可靠信道;UDP连接,逻辑信道不可靠。

(2)传输层寻址与端口号

① 端口

? 端口的作用:端口是应用程序数据传输的接口。让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将报文段中的数据向上通过端口交付给应用层相应的进程。

? 端口号:标识应用程序,长度为16bit,只具有本地意义。即端口号只标识本计算机应用层的各进程。端口号分为两类,服务端端口号和客户端端口号。

? 服务端端口号:分为熟知端口号和登记端口号。熟知端口号指派给TCP/IP最重要的一些应用程序,登记端口号必须在IANA登记防止重复使用。

? 客户端端口号:数值为49152~65535,只在用户进程运行才存在。

② 套接字

? IP地址用于标识区别不同的主机,端口号用来标识区别同一台主机中的不同应用进程。网络采用发送方和接收方的套接字组合来识别端点,即套接字是通信端点:

? 套接字 =(主机IP地址,端口号)

? 套接字唯一标识了网络中一台主机上的一个应用进程。

(3)无连接服务与面向连接服务

? TCP/IP协议族在IP层之上使用了两个传输协议:一是面向连接的传输控制协议TCP,采用TCP时传输层向上提供的是一条双全工的可靠逻辑信道。二是无连接的用户数据报协议UDP,传输层向上提供的是一条不可靠的逻辑信道。

?

TCP与UDP区别

? ① TCP

? TCP提供面向连接的服务,在传送数据前必须建立连接,数据传送结束后要释放连接。TCP不提供广播或组播服务。由于TCP提供面向连接的可靠传输服务,需要较多的开销,如确认、流量控制、计时器、连接管理等,使得协议数据单元的头部增大,且占用较多的处理机资源。

? ② UDP

? UDP是一个无连接非可靠的传输层协议,其在IP之上只提供两个附加服务:多路复用和对数据的错误检查。UDP在传送数据之前不需要先建立连接,远程主机的传输层收到UDP报文后,不需要给出确认。

2、UDP:无连接非可靠的传输层协议

(1)UDP的特点

  • 无需建立连接—快:DNS运行在UDP上,HTTP运行在TCP上。因为DNS需要快速找到相应的IP地址,而Web网页需要可靠的数据传输。
  • 无连接状态,分组首部开销小:TCP需要维护连接状态,而UDP不需要连接。UDP报文首部仅有8B的开销,而TCP有20B的首部开销
  • 应用层能更好的控制发送数据,没有拥塞控制:因此网络拥塞不会影响主机的发送速率,一些实时应用能容忍数据的部分丢失,就适合使用UDP。

(2)UDP首部

  • 源端口:需要对方回信时使用
  • 目的端口:目的端口号,终点交付时用到
  • 长度:UDP数据报的长度,最小为8(仅有首部时)
  • 校验和:检测UDP数据包在传输中是否有错

(3)UDP传输

? 当传输层从IP层收到UDP数据包时,就会根据首部中的目的端口,把UDP数据报通过相应的端口交给应用进程。如果接收方UDP发现目的端口号不正确,就会丢弃该报文,并返回“端口不可达”差错报文给发送方。

3、TCP:面向连接的可靠传输服务

(1)TCP协议特点

  • 面向连接的传输层协议
  • 每条TCP连接只能有两个端点,每条TCP只能是点对点的
  • TCP提供可靠的交付服务,保证数据传送无差错,不丢失,不重复且有序
  • TCP提供双全工通信,允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据

(2)TCP报文段

(只说明必要部分)

  • 源端口和目的端口字段:用于记录发送端端口号和目的端端口号。
  • 序号字段(seq):TCP面向字节流,所以TCP连接传送的数据流中,每个子节都编上一个序号,用seq表示起始序号。
  • 确认号字段(ack):期望收到对方的下一个报文数据的第一个子节的需要,若确认号为N,则表明N-1为止的所有数据已经正确收到。ack则为TCP报文段首部中“确认号字段”的具体数值。ack=x+1说明B希望A下次发来的报文段的第一个数据字节为序号=x+1的字节;ack=y+1说明A希望B下次发来的报文段的第一个数据字节为序号=y+1的字节。
  • 确认位ACK:只有当ACK=1时,确认号字段才有效,当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1。
  • 同步位SYN:SYN=1表示这是一个连接请求或连接接收报文
  • 终止位FIN:用来释放一个连接,FIN=1表明该报文段的发送方数据已经发送完毕,并要求释放连接

(3)TCP连接建立(三次握手)🔥

img

第一步【客户机→服务器】:客户机的TCP首先向服务器的TCP发送一个请求报文段,报文段不含应用层数据。该报文端的起始序号seq=x,同步位SYN=1表示该报文是连接请求。(seq=x,SYN=1,不含数据

第二步【服务器→客户机】:服务器的TCP收到连接请求报文后,若同意连接,则向客户机发回确认,并为该TCP连接分配TCP缓存和变量。在确认报文段中,SYN=1表示连接接收,ACK=1表示确认号字段生效,ack=x+1说明服务器收到序号为x的字段了,下次希望接收x+1的字段,seq=y表示该报文端的起始序号为seq。(SYN=1,ACK=1,seq=y,ack=y+1,不含数据

第三步【客户机→服务器】:当客户机收到确认字段后,还要向服务器给出确认,并且给该TCP连接分配缓存和变量。报文段的ACK=1表示确认号字段生效,seq=x+1表示序号字段为x+1(正如服务器希望的那样),ack=y+1表示确认号字段为y+1说明客户机希望服务器下次发来的报文段的第一个数据字节为序号=y+1的字节。(ACK=1,seq=x+1,ack=y+1,可含数据

为什么不是两次

? 如果只是两次,服务器不知道客户机是否能接收数据。当客户机断开连接后,服务器并不知道客户机已经不需要进行数据传输了,但是已经为该TCP连接分配了TCP缓存和变量,增加了无谓的开销。或者客户机第一次请求的报文因为网络原因滞留了,客户机又发送了一条,可能造成服务器又再次为其建立TCP连接。所以需要三次握手才能确认双方的接收与发送能力是否正常。

(4)TCP连接释放(四次挥手)🔥

img

第一步【客户机→服务器】:客户机向TCP连接发送连接释放报文段,并停止发送数据,主动关闭TCP连接,报文段中的FIN=1表示请求释放连接,seq=u(u=上一个传送序号字段+1),因为TCP是双全工的,所以该步骤只是客户机不能发送数据,而服务器可以发送数据。(FIN=1,seq=u)[客户端进入FIN-WAIT-1(终止等待1)状态]

第二步【服务器→客户机】:服务器收到报文端发出确认,确认号为ack=u+1,序号是seq=v,(u=上一个传送序号字段+1),ACK=1表示确认号字段有效。(ACK=1,seq=v,ack=u+1)[服务端就进入了CLOSE-WAIT(关闭等待)状态] [客户端就进入FIN-WAIT-2(终止等待2)状态]

第三步【服务器→客户机】:若服务器没有数据要发送,就通知TCP释放连接。(FIN=1,ACK=1,seq=w,ack=u+1)[服务器就进入了LAST-ACK(最后确认)状态]

第四步【客户机→服务器】:客户机收到释放报文端后,必须发出确认。(ACK=1,seq=u+1,ack=w+1)[客户端就进入了TIME-WAIT(时间等待)状态]

time_wait状态是第几次挥手之后

第四次挥手

time_wait持续多久?为什么?

? 2 MLS,因为第四次挥手时TCP连接还没有释放,必须经过2 MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。总是假定网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

? Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

为什么是四次

  • 关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。

  • 服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。

    当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

(5)TCP拥塞控制与流量控制

? 拥塞控制是指防止过多的数据注入网络,保证网络中的路由器和链路不至于过载。流量控制是消除发送方使接收方缓存区溢出的可能性,因此流量控制是速度匹配服务。

? 拥塞控制和流量控制的区别:拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、路由器等。而流量控制往往指点对点的通信量控制,即接收端控制发送端,流量控制所做的就是抑制发送端发送数据的速率,以便接收端来得及接收。

? 因特网定义了4个算法进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。

? 拥塞控制就是TCP协议要求发送方维护以下两个窗口

  1. 接收窗口rwnd:接收方根据目前接收缓存大小所许诺的最新窗口值,反映接收方的容量。由接收方根据其放在TCP报文的首部的窗口字段通知发送方。
  2. 拥塞窗口cwnd:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络的当前容量。

发送窗口的上限应该取接收窗口和拥塞窗口较小的一个。

四、网络层

? 网络层的主要任务是实现网络互连,进而实现数据包在网络之间的传输。我们只关注一些定义性的概念即可。

  • TCP/IP: TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,同时是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。 TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。

  • IP(IPv4、IPv6):相当于 OSI 参考模型中的第3层——网络层。网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点通信”。大致分为三大作用模块,它们是 IP 寻址、路由(最终节点为止的转发)以及 IP 分包与组包。

  • IP 地址分为四个级别,分别为A类、B类、C类、D类。它根据 IP 地址中从第 1 位到第 4 位的比特列对其网络标识和主机标识进行区分。

  • IPv6(IP version 6)是为了根本解决 IPv4 地址耗尽的问题而被标准化的网际协议。IPv4 的地址长度为 4 个 8 位字节,即 32 比特。而 IPv6 的地址长度则是原来的 4 倍,即 128 比特,一般写成 8 个 16 位字节。

  • IP 分包与组包

    • 每种数据链路的最大传输单元(MTU)都不尽相同,因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的 MTU 也就不同。
    • 任何一台主机都有必要对 IP 分片进行相应的处理。分片往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理。
    • 经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行。路由器虽然做分片但不会进行重组。

五、网络接口层(物理层&数据链路层)【略】

? TCP/IP协议实际上只有三层:网际层、运输层、应用层。

? 我们不关注网络接口层(数据链路层、物理层),所以该部分内容此处不作整理。

👨?🌾点个关注,在未来村不会迷路👩?🌾

参考

《王道考研——2021年计算机网络考研复习指导》

图源

部分源于网络,侵删

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 19:06:09  更:2022-03-30 19:09:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:53:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码