当前位置: 首页 > news >正文

计算机网络知识汇总

计算机网络

OSI七层模型和TCP/IP四层模型

在这里插入图片描述

每一层负责的职能都不同,如下:

  • 应用层: 负责给应用程序提供统一的接口;
  • 表示层:负责把数据转换成兼容另一个系统能识别的格式
  • 会话层:负责建立,管理和终止表示层实体之间的通信会话
  • 传输层:负责端到端的数据传输
  • 网络层:负责数据的路由,转发,分片
  • 数据链路层:负责数据的封帧和差错检测,以及MAC寻址
  • 物理层:负责在物理网络中传输数据帧

TCP/IP模型

在这里插入图片描述

  • 应用层支持HTTP,SMTP等最终用户进程
  • 传输层处理主机到主机的通信(TCP,UDP)
  • 网络层寻址和路由数据包(IP协议)
  • 链路层通过网络的物理电线,电缆或无线信道移动比特

TCP在传输层

IP在网络层

应用层

HTTP协议

应用层有哪些协议?

HTTP,HTTPS,CDN,DNS,FTP都是应用层协议

HTTP报文有哪些部分?

在这里插入图片描述

分请求报文和响应报文来说明

请求报文

  • 请求行:包含请求方法,请求目标(URL或URI)和HTTP协议版本
  • 请求头部:包含关于请求的附加信息,如Host,User-Agent,Content-Type等
  • 空行: 请求头部和请求体之间用空行分割
  • 请求体: 可选,包含请求的数据,通常用于POST请求等需要传输数据的情况

响应报文:

  • 状态行: 包含HTTP协议版本,状态码和状态信息
  • 响应头部: 包含关于响应的附加信息,如Content-Type,Content-Length等
  • 空行: 响应头部和响应体之间用空行分割
  • 响应体: 包含响应的数据,通常是服务器返回的HTML,JSON等内容
HTTP常用的方法

HTTP中最常用的方法是GET方法和POST方法,除此之外还有一些其他方法

GET一般用于获取/查询资源信息,而POST一般用于更新资源信息

在这里插入图片描述

GET和POST方法的区别
  • 使用GET方法可以收藏为书签,可以被缓存,参数保留在历史记录中;而POST方法这些都不行
  • 对数据长度的限制:GET方法对数据长度有限制,因为GET方法是在URL中添加数据,而URL的最大长度是2048;POST方法则是无限制的
  • 对数据类型的限制: GET方法只允许ASCII字符;POST方法无限制,也允许二进制数据
  • 安全性: GET方法的安全性能较差,因为发送的数据是URL的一部分,而POST方法传输数据的时候,请求数据可以放在请求正文里面
  • 可见性: GET方法数据在URL中,对所有人都是可见的;而POST方法数据不会显式在URL中
PUT和POST方法的区别?

PUT和POST方法都有更改指定URI的语意,但是POST如果执行多次,产生的效果是一样的;

PUT请求: 如果两个请求相同,第二个请求会把第一个请求覆盖掉;(所以PUT用来改资源)

POST请求: 后一个请求不会把第一个请求覆盖掉;(所以POST用来增资源)

状态码

在这里插入图片描述

常用的具体状态码有:

  • 200: 请求成功
  • 301: 永久重定向;302: 临时重定向
  • 404: 无法找到此页面;405: 请求的方法类型不支持;
  • 500: 服务器内部错误
Servlet
  • 什么是Servlet

    • Servlet是用来处理客户端请求并产生动态网页内容的Java类
  • Servlet的生命周期

    • 初始化–服务–销毁
      • init(): 在第一次创建Servlet时被调用,在Servlet生命周期,仅执行一次init()方法,负责初始化Servlet对象
      • service(): 每当请求一个HTTPServlet对象的时候,该对象的Service()方法就要调用,一般只重写doPost/doGET类似的方法
      • destroy(): 仅执行一次,在服务端停止且卸载Servlet的时候执行该方法,当Servlet对象退出生命周期的时候,负责释放占用的资源
  • Servlet和Tomcat是怎么工作的

    • WebClient向Servlet容器(Tomcat)发出Http请求;

    • Tomcat接收Web Client的请求;

    • Tomcat创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象里

    • Tomcat创建一个HttpResponse对象;

    • Tomcat调用HttpServlet对象的service方法,把HttpRequest对象和HttpResponse对象传给HttpServlet对象;

    • HTTPServlet调用HttpServletRequest对象的方法,获取Http请求信息;

    • HttpServlet调用HttpServletResponse对象的方法,生成响应数据;

    • Tomcat把HttpServlet的响应结果传给Web Client

Session和Cookie

  • Session指的是Web系统的会话,指用户登录以后,在退出之前都是一个会话.

    Session的作用就是:用户登录的时候,服务器保存用户的身份信息(Map<value, session>), 在之后访问敏感资源的时候,通过请求key = value, 服务端通过key对应到value,然后在map中获取到用户的身份信息

  • Cookie实际上就是一小段文本信息,原理是: 客户端本地保存用户的身份信息;

    使用场景: 登录页面内的多少天免登录/记住密码等

Cookie

HTTP协议是无状态的协议,一旦数据交换结束,客户端和服务器的连接就会关闭,HTTP协议对之前处理的事务没有记忆(比如用户A在逛淘宝,把一个东西加入了购物车,当他再次逛淘宝想把另外一个东西加入购物车的时候,服务器无法判断该放到哪个用户的购物车里);而Cookie就是为了弥补HTTP协议无状态这一不足出现的机制

Cookie通过给客户端们发一个通行证,每个人访问的时候都必须带上自己的通行证,这样颁发一个服务器就能从通行证上确认客户身份了

Cookie本质上就是一段文本信息.客户端请求服务器的时候,如果服务器需要记录该用户,就用response向客户端颁发一个Cookie.客户端会把Cookie保存起来,当再次访问请求这个服务器的时候,客户端把请求的URI和Cookie一起发给服务器,服务器检查Cookie,以此来辨别用户状态

Session

Session是服务器端使用的一种记录客户端状态的机制,在客户端访问服务器的时候,服务器会开辟一块内存空间,把客户端信息以某种形式(Session对象)记录在服务器上使用,存储结构为ConcurrentHashMap,再次访问的时候只需要从该Session中查找用户信息就行;

Session相比Cookie简单一些,但是也增加了服务器的存储压力;

如果说Cookie机制是通过颁发通行证,检查通行证来确认用户身份的话,那么Session就是通过给用户建立一个档案,查询档案来确认用户身份。

一般为了保证更高的存取速度,服务器把Session放在服务器内存中,每个用户都会有一个独立的Session;为了防止内存溢出,服务器会把长时间没有活跃的Session从内存中删除,这个长时间就是Session的超时时间

Session实现登录就是:用户登录的时候,服务器保存用户的身份信息(Map<value, session>),在之后访问敏感资源的时候,通过请求key = value,服务端通过key对应到value,然后在map中获取到用户的身份信息

Session和Cookie怎么联系起来

服务器第一次收到请求后,开辟一块Session空间(创建Session对象),同时生成一个Session id,并通过响应头中的Set-Cookie:JSESSIONID=xxxxxxx 命令,向客户端要求设置Cookie,客户端收到响应后,在本机客户端设置一个JSESSIONID=xxxxxxx的Cookie信息,这个Cookie的结束时间为这次会话结束;接下来客户端每次向同一个服务器发送请求的时候,请求头里都会带上该cookie信息,然后,服务器通过读取请求头中的Cookie信息,获取JSESSIONID的值,得到本次请求的Session id

注意:服务器只会在第一次客户端请求的响应中,在响应头上加上Set-Cookie: JSESSIONID=xxxxxxx 信息,接下来同一个会话的响应中,不再添加;而客户端必须在每次请求头中带上Cookie:JSESSIONID=xxxxxxx 信息

HTTP和HTTPS

HTTP协议运行在TCP上,使用明文传输,客户端和服务端都无法验证对方的身份;

HTTPS是身披着SSL外壳的HTTP,运行在SSL上,SSL运行于TCP上,是添加了加密和认证机制的HTTP

HTTP协议的特点
  • 支持服务器/客户端模式
  • 简单快捷: 客户端向服务器发送请求时,只需要传输请求方法和路径
  • 灵活: HTTP允许传输任意类型的数据对象
  • 无连接: 无连接的含义是每次连接只能处理一个请求.服务器处理完客户端的请求,并收到客户端的响应之后,就断开连接
  • 无状态: 无状态指协议本身对事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,必须重传,这会导致每次连接传输的数据增大,但如果服务器不需要先前的信息时,它的应答就很快
HTTP和HTTPS的区别
  • HTTP是以http://开头的;而HTTPS是以https://开头的
  • HTTP是不安全的,信息是明文传输的;HTTPS是安全的,具有安全性的SSL加密传输
  • HTTP标准端口是80;HTTPS标准端口是443
  • 在OSI模型中,HTTP工作于应用层,HTTPS工作于传输层
  • HTTP无需加密,无需证书;HTTPS对传输的数据需要进行加密,也需要认证证书,会消耗更多的CPU资源

传输层

什么是五元组

源IP,源端口号,目的IP,目的端口号,协议号

怎么查看某个端口

  • 在Windows中: netstat -ano | findstr “想要查询的端口号”
  • 在Linux中: netstat -anp | grep “想要查询的端口号”

UDP协议

在这里插入图片描述

特点:

  • 无连接: 在传输之前不需要建立连接,知道IP和端口号就直接传输
  • 不可靠: 没有确认应答和重传机制,如果发生网络故障等原因导致该段数据无法发送到对方,UDP也不会给应用层返回任何错误信息;
  • 面向数据报: 不能灵活地控制读写数据的次数和数量(应用层交给UDP多长的数据报文,UDP就原样发送,既不会拆分也不会合并)
  • 缓冲区: UDP具有接收缓冲区,没有发送缓冲区(如果缓冲区满了,再到达的UDP数据就会被丢弃)
  • UDP能够传输的数据最大长度是有限的,不能超过64k

TCP协议

在这里插入图片描述

TCP是如何保证可靠性的
  • 协议头中的校验和和序列号
  • 确认应答机制: 发送数据包携带序号,响应的数据包携带确认序号,发送端可以知道哪些数据被接收到了
  • 超时重传机制: 如果主机A在一定时间里(单次传输的最大时间*2), 没有收到主机B发来的确认数据包,就会进行重发
  • 连接管理机制: 正常情况下,TCP要经过三次握手才能建立连接和四次挥手才能断开连接
  • 流量控制: 接收端接收能力有限(如果发送的太快,导致接收端缓存区被塞满,就会产生丢包), 需要告知发送端发送数据的大小,通过窗口大小字段来设置
  • 拥塞控制: 发送端在不清楚网络状况的情况下,不会贸然发送大量的数据包,因为可能会导致网络拥堵
TCP是如何提高性能的
  • 滑动窗口:滑动窗口就是无需等待应答而可以发送数据的最大值
    • 接收端响应: ACK的下一个序号是多少,取决于接收到的连续数据包的最大序号,也决定了发送端下一次数据包要发送的内容
    • 发送端: 窗口下滑的依赖条件是: 接收到的ACK数据包;ACK数据包中下一个序号的最大值作为窗口滑动的起始位置
    • 滑动窗口也是实现流量控制的一种机制: 滑动窗口的大小意味着对方还有多大缓冲区可以用于接收数据,发送端可以根据滑动窗口的大小来确认应该发送多少数据
  • 延迟应答: 接收端收到数据包后,不用马上返回ACK, 而是等待一段时间, 让进程有一段时间可以处理缓冲区的数据,这样返回的ACK数据包中,窗口大小的字段可以设置的更大,然后导致接收端流量控制机制产生影响,滑动窗口的大小也就可以设置的更大;
  • 捎带应答:有些数据包是可以合并的,如ACK和自己要发送的数据包,多次网络传输数据合并在一起,就会提高效率
三次握手

在这里插入图片描述

TCP为什么需要三次握手建立连接?
  • 三次握手才可以阻止重复历史连接的初始化(主要原因)
  • 三次握手才可以同步双方的初始序列号
  • 三次握手才可以避免资源浪费
四次挥手

在这里插入图片描述

TCP的拥塞控制机制

在这里插入图片描述

发送端在不清楚网络状况的情况下,贸然发送大量数据,可能导致网络拥塞,TCP引入了慢启动等机制,来处理这种问题:

  • 慢启动: 一开始只发送少量数据,探测一下网络拥塞程度,然后逐渐增大传输的数据,拥塞窗口也就会从小到大指数增长
  • 拥塞避免: 当拥塞窗口达到慢启动的阈值时,使用拥塞算法让拥塞窗口缓慢增加,不再指数增加,而是加法增大(每经过一个往返就把窗口大小+1),这样拥塞窗口就会按照线性规律缓慢增加
  • 快重传与快恢复: 快速恢复丢失的数据包
  • TCP开始启动的时候,慢启动的阈值等于窗口的最大值;超时重发的时候,慢启动的阈值会变为拥塞窗口最大值的一般,同时拥塞窗口置回1;
TCP与UDP的区别
  • TCP是面向连接的,UDP无连接
  • TCP是可靠的,UDP不可靠
  • TCP只支持点对点的通信;UDP支持一对一,一对多,多对多通信
  • TCP是面向字节流的;UDP是面向报文的
  • TCP首部开销大,20个字节;UDP只有8个字节
  • TCP可以保证传输的数据顺序,UDP不能保证
UDP怎么实现可靠

如果要是用UDP实现可靠,那就必须要解决两个问题: 丢包和包的顺序问题;在应用层实现

  1. 给数据包进行编号,按照包的顺序进行接收并存储
  2. 接收端收到数据包后,发送确认信息给发送端,发送端接收到确认数据后再继续发送下一个包;如果接收端接收到的数据包编号不是预期的编号,则要求发送端重新发送

已经实现了UDP可靠传输的协议:

  1. RUDP: 可靠数据报传输协议
  2. RTP: 实时传输协议,为数据提供了具有实时性的端对端传送服务
  3. UDT: 互联网传输协议,主要目的是支持高速广域网上的海量数据传输

在浏览器地址栏输入URL后,按下回车之后会经历哪些流程

  • 浏览器向DNS服务器请求解析该URL中的域名和对应的IP地址
  • 解析出IP地址后,根据该IP地址和默认端口号80,和服务器建立TCP连接,发起三次握手
  • 连接建立完成后,浏览器向服务器发送HTTP请求
  • 服务器对请求做出响应,并把对应的响应结果返回给浏览器
  • 释放TCP连接
  • 浏览器根据其请求得到的资源渲染页面,最终向用户呈现一个完整的页面

网络层

IP协议

在这里插入图片描述

网段划分

A类: 0.0.0.0到127.255.255.255

B类:128.0.0.0到191.255.255.255

C类: 192.0.0.0到223.255.255.255

D类: 224.0.0.0到239.255.255.255

E类: 240.0.0.0到255.255.255.255

ABC为私有地址,不能连上Internet的IP,主要用于局域网内主机联机

除了私有地址和特殊地址外,都是公网地址

IP地址和MAC地址

MAC: 网卡绑定的,在网卡出厂的时候就确定了,不能更改,代表物理地址

IP: 逻辑地址,代表网络上的某台设备;(由四位数字组成,网络号(前三位) + 主机号(第四位), 每一位都是0~255的数字)

IP地址描述的是路途总体的起点和终点,MAC地址描述的是路途上一个区间的起点和终点

网络设备发送数据的时候,需要知道MAC地址才能发送

数据的封装和分用

在这里插入图片描述

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)

其他各种协议

  • ARP协议:建立主机IP地址和MAC地址之间的关系,在网络通信时,利用ARP可以通过IP地址和端口号获取到MAC地址
  • DNS域名协议(基于UDP的应用层协议):把域名映射为IP地址
  • NAT/NAPT技术: NAT技术可以将私网转化为公网IP,NAPT则是将私网IP和端口号都转化为公网IP+port

DNS协议

DNS中的递归查询和迭代查询
  • 递归查询: 一般主机和本地DNS服务器之间就属于递归查询,就是当主机所询问的域名本地DNS服务器不知道时,本地DNS服务器就会以DNS客户的身份向其他域名服务器发出查询请求,直到得到结果并转交给主机
  • 迭代查询: 一般DNS服务器之间属于迭代查询,就是加入DNS服务器A不能响应DNS服务器B的请求,那他会告诉DNS服务器B,下一步应该去找哪个DNS服务器,然后让其进行后续的查询
域名的解析过程(A查abc.com)
  1. 主机A先向本地服务器进行递归查询
  2. 本地服务器采用迭代查询,向一个根域名旧服务器查询
  3. 根域名服务器告诉本地服务器,我这里查不到,然后发给他下一步应该查询的顶级域名服务器的IP地址
  4. 本地域名服务器再去顶级域名服务器查询
  5. 顶级域名服务器告诉本地域名服务器,我这里也查不到,然后发给他下一步应该查询的权限域名服务器的IP地址
  6. 本地域名服务器向权限域名服务器查询
  7. 权限域名服务器告诉本地服务器所查询域名对应的IP
  8. 本地域名服务器最后再把查询结果告诉主机A

在这里插入图片描述

相关文章:

  • 【水印】水印识别的算法方案思考
  • 机器学习的一百个概念(5)数据增强
  • 习题2.2
  • 06-02-自考数据结构(20331)- 查找技术-动态查找知识点
  • C#: 输入(Console.ReadLine())和输出(Console.WriteLine())
  • Java-拼图小游戏跟学笔记
  • 前端各种for 循环
  • 算法:二维单调队列-P2216 [HAOI2007] 理想的正方形题解
  • 作文笔记16 点面结合
  • Trae AI 使用 APIkey 配置 Anthropic Claude BaseURL , gpt-4o,deepseek等大模型代理指南
  • c#使用forms实现屏幕截图
  • 在MFC中使用Qt(六):深入了解QMfcApp
  • flutter框架中文文档,android智能手机编程答案
  • 第十一章 VGA显示图片(还不会)
  • pod之间访问不通怎么排查?
  • 音视频开发---常用工具
  • JAVASE(十二)常用类(一)Object类
  • 【STM32】GPIO输入(按键)
  • 如何实现高性能的在线 PDF 预览
  • 【新人系列】Golang 入门(十):错误处理详解 - 上
  • 加载wordpress外部文件路径/下载优化大师
  • 城乡建设管理局的网站/海会网络做的网站怎么做优化
  • wordpress做购物网站/学新媒体运营最好的培训学校
  • 如何建立一个网站论坛/企业查询宝
  • 局域网内服务器做网站/上海网络推广联盟
  • 网站建设 软件有哪些/推广网