5.9网络协议

ops/2024/9/19 14:05:33/ 标签: 网络协议, 网络

由网卡发送数据通过网线进行发送,当网卡接收到信号以后将数据传给内核数据区,然后由操作系统交给相应的进程。

将数据进行发送的时候需要借助于网线实现,这个时候会出现当传输的数据比较远的时候就借助于中继器将信号进行再生扩大,当多个机器需要交流的时候就使用集线器多个点连接(星型),但是数据不能隔离会出现a给b的数据会发给每一个点数据就非常多,所以使用网桥隔离一片区域,使得数据不要发送超出这样的一片区域。后来使用更高级的硬件设备:交换机:网桥+集线器

当然当进行长距离的数据传输的时候,还需要借助于路由器进行转发。

网络协议>网络协议为什么要分层是因为需要规定每个步骤的条件和要求,可以更好的提高效率!每一层只需要关注自己的事情,应用层只需要知道自己是借助于qq发送一个文本信息,对面的应用层也是知道自己的qq发来了一个文本信息。

用户不能进到服务器中,用户端发送请求,服务器端在相应的ip端口监听接收请求分析请求并且返回相应的信息。

采用多层的方式,例如说是在网络层添加相应的ip头部,路由器每到一个节点就会拆来查看相应的IP地址内容,因为ip地址是按照地区进行划分的,会大致向目的地发。

传输层以及上面的层是端到端的层次就是在逻辑上从这个用户到另外一个用户,只需要在一端进行解析,然后再另外一端进行解析,中间部分都是不会解析的当作01数据。

unix系统底层默认实现tcp/ip实现,cc++程序员主要是关注应用层的协议。

应用层:http,dns,ftp,smtp 传输层:tcp,udp 网络层:ip 

应用层可以自定义新协议,只要保证交流的两端进行数据的交流按照自己认同的方式进行交流就可以。c++程序员有一定的概率会自己写自己的协议。

网络就是获取资源:

资源在哪个地方:URL 资源怎么在网络中进行传输: HTTP  论文的格式:HTML

URL也就是一般说的网址链接。域名-----》ip,如果没有找到响应的的域名对应的ip就找dns的服务器解析。

域名只是和ip对应,但是不包含端口号。

在发送信息的时候将论文以HTML形式发送,通过http协议包装进行发送。其中包括http协议:

请求行,请求头(消息头),空行,正文。

用户发送http请求信息(其实主要是看头部的信息),服务器发送http响应信息

https常用的端口是443端口,http端口是80端口。有时候可能是指明的那就找指明的端口服务。

请求行包含的内容:请求方式, 请求资源, 请求协议

请求方式:主要有GET和POST两种方式,大多数请求是GET,GET常用于获取数据,POST是用于服务器提交数据

还有其他的请求方法,有很多细分的标准方式,但大多都是用get和post涵盖。

服务器不管是谁发的,只看发来的数据是否是符合协议标准。

get请求一般把参数放在资源路径之后,post请求放在请求正文中

语法也可以get参数放在正文,post请求放在路径之后,不符合常理。

所以说登录密码等等都是通过post请求

确定是get还是post请求就是看如果是获取数据就是get,如果是提交数据就是post。一般都是既会提交数据又要获取数据,这个时候就是哪个是主要的点。

一般时候都是获取信息,但是当收藏文章或者放购物车的时候是提交信息。

请求资源中的路径只是一个标记,并不是在目标服务器真的有这样的一个目录。

请求协议

http1.1和http1.0 :http1.1链接以后不要断开,等多次的信息发送完以后才断开,如果是在短时间内频繁发送多次请求性能更好。

在进行发送数据以前需要先进行三次握手和四次挥手使得在链接以前进行握手确认,进行四次挥手确认断开链接。

请求头的信息是客户端给服务器看的。

accept: 大类型/小类型:vedio/mp4 text/txt   权重 q=...

采用直接输入网址发起http请求没有reffer,通过在一个网站中进行跳转到另外一个网页这个时候会携带reffer带的就是原来网页的路径。

http协议是非常灵活的但是tcp,udp不灵活。http中可以有不合实际的信息。

访问一个网站首先是先返回一个html代码,解析代码发现有图片然后就去发起请求然后拿图片以及图片的相关的信息,如果刷新的时候将图片的相关信息发送过去,如果图片的信息没有改变,就不会再返回图片,而是要求用户端从内存中加载。

cookie是一个机器的标识,IP会变化但是cookie发送给服务器的时候,服务器就知道是你。

 post用于指向要访问的目标服务器上的虚拟主机,虽然不同的域名指向相同的ip但还有post可以指明在同一个服务器上的不同虚拟主机。

响应信息和请求信息格式差不多。

响应行最重要的状态码:例如http协议404响应报文的状态段。状态码分为五个段,几百段就是几开头,每个段都有自己的功能。200段表示正常访问,300表示我没有资源但我知道资源在哪,400段状态码表示没有这个资源但服务器是在的。500段(505,507)服务器内部出现错误,一定代码有问题。

因为http协议可以自己写所以可能会出现很多自己不认识的字段。

抓包

抓包可以确定是发送端接收还是接收端抓包有问题,参数对不对,信息对不对等等。

通过分析http一个请求,获取关键信息就叫做抓包

首先检查URL  协议http, 资源路径,参数

请求方式:GET or POST

看看有没有响应,响应状态码参数,响应是不是相关的数据,头部信息一般意义不大

这些如果没有问题很可能是自己的代码有问题。

https:相比于http更安全,因为https是加密的,所以说抓包也是看不懂的。

证书,对称加密,非对称加密。

买证书可以去相应的服务器验证是否安全;对称加密:知道怎么加密就知道怎么解密;

非对称加密:公钥-》加密-》密文,密文-》私钥-》明文。这个过程是不可逆的,所以说即使获得公钥也不能解密。

往往对称加密的效率比较高,所以说一般也是用对称加密来实现。

服务器在现实中几乎没有发起请求的,需要服务器提供数据就是用GET请求

传输层:主要讨论tcp和udp这两个协议

相较于应用层会学习以及自己也可以定义属于自己的协议,但是传输层学习的协议是比较少的,主要是tcp和udp。传输层的头部(固定部分20字节)每个位都有准确的定义,不能随意。

在发送信息的时候是在传输层+端口,在IP层+ip

结合上面的信息,http是在传输层是借助于tcp协议的,这就是在传输的时候需要先进行三次握手,完成以后需要进行四次挥手(前两次挥手表示客户与服务器断开连接,后两次表示服务器与客户端断开链接)。

tcp连接是一个可靠的面向连接的全双工的连接

可靠:三四握手挥手,每次发送信息都有确认信息(可能是累计确认),超时重传快速重传。

确认:可能不会每一个都确认是累计确认,接收窗口中没有按照顺序到达对于中断未到的一段进行反复请求当请求到三次的时候就进行重发。

udp是一个不可靠的连接,是直接放到网络,效率比较高,现在的正确传输率在90%以上。

传输层在理论上是端到端的,但是在现实中并不是端到端的,就是因为局域网的存在会进行nat的转换,所以会对于端口号ip都进行修改。

当确认位ACK为0的时候ack确认号是没有意义的。

注意数据比较大的时候,会进行切片发送,并且不是会对于每一片都确认,会进行累计确认的方式,放到缓冲区中。在窗口中收集到了足够的数据的时候,就向上传送。

往往在进行tcp传输的时候,不常用到超时重传但是会用到累计快速重传的方式。因为当一直没有收到其中中断的一段的时候,就不断请求该段,当请求超过三次的时候,就重发。

在客户端和服务器端使用2msl,就是会等待可能出现收不到的情况。谁先挥手谁先等timewait时间

udp并不会在传输层进行切片,因为不能进行拼接,所以最终的切片任务交给网络层。

按照理论来说,传输层是端到端的,所以说网络层的交换机路由器等等设备在理论上不能查看tcp和udp头部信息。而ip头部是可以被这些设备打开查看的。

ip分为ipv4和ipv6。ipv4分为abcd类地址,有4个字节32位bit

ipv4不够用------》使用ipv6.  局域网使得ipv4可以一直存在,足够使用。

局域网向公网ip进行转换,通过net协议。局域网ip地址:10.x.x.x, 172.16.x.x - 172.31.x.x, 192.168.x.x - 192.168.x.x

买的云服务器往往给的是公网ip

当tcp向下传的时候往往向下传的是已经分好片的,所以不需要在网络层进行分片,但是udp是没有进行分号片,所以需要在网络层进行分片,通过标识位来确定属于同一块。通过片偏移来确认在该块的哪一个位置。

DHCP服务器是用来分配局域网内的ip,即使不变化硬件,也会变化网络,因为DHCP会有时间限制。ICMP追踪在网络上的传输情况。

ping ip 看自己能否和这个设备连接上了吗?很重要,如果不能ping通那么根本就没有连接成功。

以太网IEEE802.3定义以太网的标准。解决直连的设备之间的通信。在数据链路层。以太网帧添加的目的地址和源地址都是mac地址,后面还有crc检验字段。在每个硬件设备之间进行传输的过程中不断修改。其实前面还有前导码。

ARP协议当知道一个ip地址但是不知道MAC地址,以太网帧的目的地址写全1,通过ip网关知道是发给自己的回复附上自己的MAC地址。

会有一个对外的ip(大概率是一个局域网ip),操作系统需要发送数据的时候就是借助于网卡

一开始是输入域名,通过域名解析DNS获取相应的ip地址。然后进行三次握手和四次挥手,注意因为是在局域网中,所以会进行ip和端口号的修改通过NAT协议。

重点理解

应用层---》传输层---》网络

传输层:确定自己和对方的端口号

网络层:确定自己和对方的IP地址

重要的内容:

应用层主要需要学习的内容是http协议

请求信息包含四个部分:请求行, 请求头,空行, 正文

请求行:请求方式,请求资源, 请求协议

请求方式GET用于获取数据,POST用于提交数据

抓包, 关注重点 , URL域名(ip+端口)看是否发对地方,协议(是否使用正确的协议)

查看状态码,如果500段那么是服务器代码出现问题。查看返回值。

http和https的区别:

https更加安全,会有证书保证安全。还有加密,包含对称加密和非对称加密

传输层主要需要学习的内容是tcp和udp协议

tcp和udp区别:

tcp可靠,udp不可靠

tcp连接机制:三次握手和四次挥手,还有超时重传,累计确认,快速重传的方式。

tcp和udp头部都含端口号,考察头部信息不多。


http://www.ppmy.cn/ops/41475.html

相关文章

图文详解JUC:Wait与Sleep的区别与细节

目录 一.Wait() 二.Sleep() 三.总结Wait()与Sleep()的区别 一.Wait() 在Java中,wait() 方法是 Object类中的一个方法,用于线程间的协作。当一个线程调用wait() 方法时,它会释放对象的锁并进入等待状态,直到其他线程调用相同对…

GPT-4o API 全新版本发布:提升性能,增加性价比

5月13日,OpenAI 发布了全新ChatGPT模型 GPT-4o,它在响应速度和多媒体理解上都有显著提升。在这篇文章中,我们将介绍 GPT-4o 的主要特点及其 API 集成方式。 什么是 GPT-4o? GPT-4o 是 OpenAI 于5月13日发布的最新多模态 AI 模型…

软件3班20240513

java.util.PropertyResourceBundle4554617c package com.yanyu;import java.sql.*; import java.util.ResourceBundle;public class JDBCTest01 {public static void main(String[] args) throws SQLException { // 获取属性配置文件ResourceBundle bundle Res…

SpringMVC 注解详解

SpringMVC 注解详解 1. 引言 SpringMVC 是 Spring 框架中的 Web 层解决方案,它通过注解的方式来简化 MVC 模式的实现。本篇将详细介绍 SpringMVC 中常用的注解及其用法。 2. SpringMVC 注解分类 SpringMVC 的注解主要分为以下几类: 2.1 核心注解 C…

qt 麒麟系统 connot find /usr/local/lib

目录 解决方法: 后来又报错: cannot find -lopencv_world3.4.6 connot find /usr/local/lib 解决方法: LIBS -L/usr/local/lib -lopencv_world3.4.6QMAKE_LFLAGS -Wl,-rpath,/usr/local/lib 后来又报错: cannot find -lopencv…

软件测试面试78问

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、问:你在测试中发现了一个bug,但是开发经理认为这不是一个bug&#xf…

Pycharm所有快捷键的使用

1.编辑 快捷键作用Ctrl Space基本的代码完成(类、方法、属性)Ctrl Alt Space快速导入任意类Ctrl Shift Enter语句完成Ctrl P参数信息(在方法中调用参数)Ctrl Q快速查看文档Shift F1外部文档Ctrl 鼠标简介Ctrl F1显示错…

从零开始详解OpenCV条形码区域分割

前言 在识别二维码之前,首先要划分出二维码的区域,在本篇文章中将从零开始实现二维码分割的功能,并详细介绍用到的方法。 我们需要处理的图像如下: 完整代码 首先我们先放出完整代码,然后根据整个分割流程介绍用到…

[自动化]pyautogui的使用

目录 环境 包的版本 前置知识 鼠标控制函数 屏幕与鼠标位置 size() position() OnScreen() 鼠标移动 moveTo() move() 鼠标拖动 dragTo() drag() mouseDown()按下鼠标 mouseUp()松开鼠标 鼠标滚动 scroll() 键盘控制函数 write() press() keyDown()和keyU…

wireshark_概念

ARP (Address Resolution Protocol)协议,即地址解析协议。该协议的功能就是将IP地址解析成MAC地址。 混杂模式 抓取经过网卡的所有数据包,包括发往本网卡和非发往本网卡的。 非混杂模式 只抓取目标地址是本网卡的数据包,对于发往…

前端 JS 经典:CommonJs 规范

1. Node 环境介绍 CommonJs 简称 CMJ,CMJ 的模块标准,必须在 node 的环境中才支持。在浏览器中用,是不行的。 查看电脑是否安装 node,通过打开终端,运行 node -v 查看是否返回 node 版本。返回则已安装。 CMJ 在 no…

数据结构之----树

树 结点拥有的子树数量称为结点的度 树中结点的最大层次称为树的深度或高度 如果将树中结点的各子树看成从左至右是有次序的,不能互换的,则称该树为有序树,否则称无序树 森林是m棵互不相交的树的集合 树的存储结构 1,双亲表示法…

【JVM】调优工具

这里简单介绍一下各种调优用到的工具 一,环境准备 首先我们需要准备好Java环境,和win上的jdk环境(图形化界面如jconsole只有jdk中有)。 有这样一个类Prolem,每个线程都会带来100个垃圾对象,线程new完100…

用Rust打印杨辉三角

一、杨辉三角是什么? 杨辉三角是一个著名的数学图形,它展示了二项式系数的排列方式。 杨辉三角是一种将二项式系数以三角形阵列排列的数学图形,具有丰富的历史和数学意义。 杨辉三角的历史起源可以追溯到中国南宋时期,由数学家杨辉…

leetcode刷题——设计循环链表

题目要求我们设计循环队列,其特点是容量固定,队列循环,如图所示: 这里的队列我们以链表队列举例,对于循环,只需要把尾节点的指针指向头节点。重点是队列的容量固定:如何确定队列是否已满和空&am…

Kaggle赛题总结:Enefit - Predict Energy Behavior of Prosumers

文章目录 比赛介绍赛题任务评估指标数据集描述优胜方案第1名第6名第7名第10名第13名内容分享冠军tricktrick应用获胜方案里对trick的应用模型特征工程在线学习小结

AI视频教程下载:用ChatGPT制作 YouTube视频的指南

课程大纲: 面向 YouTuber 的 ChatGPT YouTube关键词研究 YouTube标题 YouTube缩略图 YouTube社区帖子 组织您的 YouTube 视频 本课程将通过两个不同领域的YouTube视频,展示如何使用Chat GPT来创建关键词、标题、缩略图、描述和社区帖子。 关键词研…

C++中调用python函数(VS2017+WIN10+Anaconda虚拟环境)

1.利用VS创建C空项目 step1 文件——新建——项目 step2 Visual C—— Windows桌面——Windows桌面向导 step3 选择空项目 step4 源文件——新建项——添加 step5 Visual C——C文件(.cpp) 2.配置环境 Step1. 更换成Release与X64 Step2. 打开项目属性&…

react18封装公共请求函数

如果里面要处理比如token过期,跳转登录这种情况的话,官方又说组件外不允许使用Hooks函数,这里可以这样做 使用redux 并新建一个store/index.ts import { configureStore, combineReducers } from reduxjs/toolkit import counterRouter fro…

Spring Boot进阶 - Starter原理

Spring Boot Starter的原理主要是为了简化Spring应用的配置和初始化过程,让开发者能够快速启动并运行应用,而不需要手动配置大量的XML或Java配置类。下面是Spring Boot Starter的核心工作原理: 自动配置(Auto-Configuration&#…