一、网络协议和常用的网络工具

news2024/11/23 11:26:03

文章目录

        • 1.计算机概论
          • 1.1 计算机网络是什么?
          • 1.2 计算机网络的层次结构
        • 2.TCP/IP详解
          • 2.1 TCP/IP协议族
          • 2.2 网络传输中的数据
          • 2.3 网路通信中的地址和端口号
          • 2.4 TCP三次握手建立连接
          • 2.5 TCP四次挥手建立连接
        • 3.网络工具Wireshark和tcpdump
        • 4.一次完整的Http请求过程

1.计算机概论

1.1 计算机网络是什么?

利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递的系统。

主要的网络有哪些?

  1. 局域网
  2. 城域网
  3. 广域网
1.2 计算机网络的层次结构
  • 应用层(Http协议)
    • 应用层 作用:为应用程序提供服务
    • 表示层 作用:数据格式转换、数据加密
    • 会话层 作用:建立、管理和维护回话
  • 传输层(TCP)
    • 传输层 作用:建立、管理和维护端对端的连接
  • 网络层(IP)
    • 网络层 作用:IP选址及路由选择
  • 链路层(网卡、驱动程序)
    • 链路层 作用:提供介质访问和链路管理
    • 物理层 作用:物理传输

OSI参考模型分为7层,而TCP/IP模型分为4

各层之间的关系:
每一个抽象层建立在低一层提供的服务之上,并且为高一层提供服务。

2.TCP/IP详解

2.1 TCP/IP协议族

全称:Transmission Control Protocol/Internet Protocol
概念:中文名为传输控制协议/英特网互联协议,是Internet最基本的协议、Internet国际互联网络协议,由网络层的IP协议和传输层的TCP协议组成。协议采用了4层的层次结构。然后在很多情况下,它是利用IP进行通信时所必须用到的协议群的统称。

TCP/IP概念层模型功能TCP/IP协议族
应用层文件传输、电子邮件、文件服务、虚拟终端HTTPFTPDNS、Talnet、TFTP、SNMP、
传输层提供端对端的接口TCPUDP
网络层为数据包选择路由IP、ICMP、RIP、OSFP、BGP、IGMP
链路层以二进制数据形式在物理媒体上传输数据ISO2110IEEE802、IEEE802.2
2.2 网络传输中的数据
  • 包:是全能性术语;
  • 帧:用于表示数据链路层中包的单位;
  • 片:是IP中数据的单位;
  • 段:则表示TCP数据流中的信息;
  • 消息:是指应用协议中数据的单位。

从一个应用程序A,传递数据给另外一个应用程序B,会经历如下步骤:

  • 程序A
    • 应用层,发送数据给程序B
    • 传输层,打包TCP包头部信息,得到数据+TCP包首部
    • 网络层,打包IP包头部信息,打包得到数据+TCP包首部+IP包首部
    • 数据链路层,打包以太网头部信息,得到数据+TCP包首部+IP包首部+以太网包首部
    • 物理层,将数据以二进制形式传递给另外一个应用程序
  • 程序B
    • 物理层,接收到程序A传递过来的二进制数据
    • 数据链路层,拆包以太网包首部,得到数据+TCP包首部+IP包首部
    • 网络层,拆包IP包首部,得到数据+TCP包首部
    • 传输层,拆包TCP包首部,得到数据
    • 应用层,得到程序A发送的数据

TCP、UDP和IP

  • TCP:
    • 面向连接的、可靠的流协议
  • UDP:
    • 面向无连接的通讯协议
    • 使用场景:QQ、视频直播、音频直播,允许丢包的场景
  • IP:
    • 在源地址和目的地址之间传送的数据包

扩展知识:
移动通信中的4G、5G在哪一层?
答案:在数据链路层。

2.3 网路通信中的地址和端口号

MAC地址:(链路层)
也可以称为物理地址、局域网地址、以太网地址;MAC地址是写在物理设备内部的。

IP地址:(网络层)
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

端口号:(传输层)
用来识别同一台计算机中通信的不同应用程序。因此,它也被称为程序地址。

TCP:(传输层)
面向连接的可靠的协议。
特征:

  • 面向连接
    • 3次握手
  • 可靠性
    • 超时重传和应答确认
  • RTT(往返延时,Round-Trip Time)和TTO(重传超时,Transmission TimeOut)
    • 协调好一个超时重传的时间
  • 数据排序
    • 保证接收到的数据片顺序正确
  • 流量控制
    • 通过发送方与接收方进行协商,利用了滑动窗口的作用,实现不会因为发送端发送过于频繁或者数据量过大,导致接收端不能及时处理。
  • 全双工
    • 发送端发送数据的同时可以作为接收端接收数据,接收端接收数据的同时也可以作为发送端发送数据。
2.4 TCP三次握手建立连接

建立一个TCP连接时,需要客户端与服务端总共发送3个包以确认连接的建立。

  • 第一次握手
    • 客户端请求建立连接
  • 第二次握手
    • 服务器应答客户端,并请求建立连接
  • 第三次握手
    • 客户端针对服务端的请求确认应答

为什么需要3次握手?
TCP是面向连接的,所以需要双方都确认连接的建立。

TCP三次握手详细流程:

  1. 客户端向服务端发送建立连接的数据包
    SYN=1,seq=10086
    客户端进入SYN_SENT状态
  2. 服务端接收到客户端发送的数据包,并向客户端发送建立连接的数据包
    ACK=1,ack=10087;SYN=1,seq=12345
    服务端进入SYN_RCVD状态
  3. 客户端接收到服务端发送的数据包,并向服务端发送响应的数据包
    ACK=1,ack=12346
    客户端进入ESTABLISHED状态,表示客户端知晓与服务端已建立连接;
    服务端在接收到客户端发送来的数据包后,也进入到ESTABLISHED状态,表示服务端知晓与客户端建立连接。

至此,客户端与服务端通过发送3次数据包建立起连接,数据包也可以是从服务端开始发送,不过通常情况下是由客户端开始向服务端发送数据包。

扩展知识:
① SYN(synchronous建立连接)
② ACK(acknowledgement确认)
③ PSH(push传送)
④ FIN(finish结束)
⑤ RST(reset重置)
⑥ URG(urgent紧急)

三次握手流程图如下:
在这里插入图片描述

TCP3次握手的漏洞-SYN洪泛攻击
定义:
通过网络服务所在的端口发送大量伪造原地址的攻击报文,发送到服务器,造成服务端上的半开连接队列被占满,从而阻止其他用户进行访问。

原理:
攻击者客户端利用伪造的IP地址向服务端发出请求(第一次握手),而服务端的响应(第二次握手)的报文将永远发送不到真实的客户端,服务端在等待客户端的第三次握手(永远都不会有),服务端在等待这种半开的连接过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。

解决方案:

  • 无效的连接监控释放
  • 延缓TCB分配方法
  • 防火墙
2.5 TCP四次挥手建立连接

定义
断开一个TCP连接,需要客户端与服务端总共发送4个包来确认连接的断开。

过程

  • 第一次挥手,客户端发送关闭请求
  • 第二次挥手,服务端响应客户端关闭请求
  • 第三次挥手,服务端发送关闭请求
  • 第四次挥手,客户端发送关闭确认请求

为什么需要四次挥手?
TCP是全双工(即客户端与服务端可以相互发送和接收请求),所以需要双方都确认关闭连接。

为什么需要TIME_WAITING状态而不是直接是CLOSED状态,并且需要2分钟左右才变成CLOSED状态?

  1. 如果当前应用程序占用的端口号没有TIME_WAITING状态,直接进入CLOSED状态,可能存在服务端还有数据包没有向客户端发送完成的情况,如果此时应用程序直接进入CLOSED状态,别的应用程序便可以申请当前应用程序的端口号,且会接收到服务端本应该发送给关闭的应用程序的数据包。
  2. 如果客户端没有TIME_WATING状态,而是直接进入到CLOSED状态,服务端给客户端发送了数据包后,客户端没有发送数据包响应服务端,间隔一段时间后,服务端会重新给客户端发送数据包,而此时客户端已经关闭了。

TCP四次挥手详细流程:

  1. 客户端向服务端发送断开连接的数据包
    FIN=1,seq=520
    客户端进入FIN_WAIT_1状态

  2. 服务端接收到客户端发送来的数据包,服务端向客户端发送响应的数据包
    ACK=1,ack=521 我感觉这里应该是ack而不是seq
    服务端进入CLOSE_WAIT状态
    客户端收到服务端发送来的数据包,客户端进入FIN_WAIT_2状态

  3. 服务端再次向客户端发送断开连接的数据包
    FIN=1,seq=1314
    服务端进入CLOSE状态
    客户端接收到服务端发送来的数据包,客户端进入TIME_WAITING状态

  4. 客户端向服务端发送相应数据包
    ACK=1,ack=1315
    客户端间隔2分钟左右进入CLOSED状态(2*MSL)
    服务端接收到客户端发送来的数据包后进入CLOSED状态

3.网络工具Wireshark和tcpdump

可以通过第三方工具来查看TCP三次握手和四次分手的具体细节。

4.一次完整的Http请求过程

  1. 首先进行DNS域名解析(可以通过本地浏览器缓存、操作系统缓存和DNS服务器进行解析)
  2. 三次握手建立TCP连接
  3. 客户端发起Http请求(重复使用)
  4. 服务器响应Http请求(重复使用)
  5. 客户端解析Html代码,并请求Html代码中的资源(重复使用)
  6. 客户端渲染展示的内容(重复使用)
  7. 关闭TCP连接

DNS劫持和Http劫持
DNS劫持就是在我们通过域名访问进行域名解析的时候,通过入侵我们的路由器或者是劫持DNS服务器,将我们访问的域名对应的ip地址进行篡改后返回,使得我们访问了一个不正确的ip地址。

Http劫持就是当我们在通过Http的域名进行访问的时候,直接对Http域名进行劫持从而导致访问一个错误的网站,或者是对返回的内容进行恶意修改等,比如:插入广告的js代码,导致访问的网站出现广告,目前很多运营商就是通过这种方式对我们访问的网站插入广告。
解决方式:

  • 采用Https的域名,因为Https的域名会对请求和响应的报文进行加密,使得不容易对内容进行篡改
  • 对请求的url进行加密处理,但是无法解决对响应的数据插入js代码产生广告。

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

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

相关文章

Live Demo精彩大放送,演绎openGauss技术创新

技术是开源社区的根基,创新是推动技术发展的源动力。openGauss开源三周年,携手开发者、社区伙伴、用户,持续聚焦内核竞争力、用户场景架构创新、完善周边生态工具。5月26日,openGauss Developer Day 2023 主论坛现场,1…

自定义包含天时分的时长选择器组件

场景:项目是reactantd 实现的。如果传感器超过3天4小时没有上报数据,则认为设备已经坏了,需要发出告警。 3天4小时这是由用户在前端页面输入的,因此需要有一个时长选择器。antd 原生的TimePicker 组件只能实现选择 时、分、秒&…

(Qt)day4

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QDebug> #include <QMainWindow> #include <QMessageBox> #include <QTimer> //定时器类头文件 #include <QTime> //时间类的头文件 #include <QTimerEvent> //定时器…

k8s的service资源类型有ClusterIP、Nodeport、ExternalName、LoadBalancer、Headless(None)

1. ClusterIP 是什么 ClusterIP 是在所有节点内生成一个虚拟IP&#xff0c;为一组pod提供统一的接入点&#xff0c;当service存在时&#xff0c;它的IP地址和端口不会发生改变&#xff0c;客户端通过service的ip和端口建立连接&#xff0c;由service将连接路由到该服务的任意一…

基于深度学习的人脸识别与检测方案

一、项目介绍前言 人脸识别作为一种生物特征识别技术&#xff0c;具有非侵扰性、非接触性、友好性和便捷性等优点。人脸识别通用的流程主要包括人脸检测、人脸裁剪、人脸校正、特征提取和人脸识别。人脸检测是从获取的图像中去除干扰&#xff0c;提取人脸信息&#xff0c;获取人…

使用ASM在Android中进行字节码注入

目录 使用方法 1.编译使用插件 这里自定义了一个插件用来对字节码进行操作 首先我们需要找到这个Gradle任务&#xff0c;双击进行编译打包 打包成功后会生成如下目录 然后我们需要在项目的gradle文件中进行引用 然后在application的model下的gradle中应用插件 2.使用ASM清…

【裸机开发】中断系统(二)—— Reset 中断服务函数(汇编实现)

目录 一、Reset 中断服务函数的实现步骤 二、汇编实现 Reset 中断服务函数 1、禁止/打开全局中断 2、设置SP指针 3、清除 .bss 段 4、完整 Reset 中断服务函数 一、Reset 中断服务函数的实现步骤 实现 Reset 中断服务函数的基本步骤如下&#xff1a; 设置各个模式下的S…

发布Android Lib 到 MavenCentral

新建 Sonatype 项目 注册账号&#xff1a; https://issues.sonatype.org/secure/Signup!default.jspa 这里注册不需要什么验证码&#xff0c;很简单。 创建问题 点击新建&#xff1a; 概要&#xff1a;自定义&#xff0c;写项目名称即可。 GroupId&#xff1a;如果是git…

C语音:打印整数二进制的奇数位和偶数位

题目&#xff1a; 获取一个整数二进制序列中所有的偶数位和奇数位&#xff0c;分别打印出二进制序列 思路&#xff1a; 总体思路&#xff1a; &#xff08;一&#xff09;. 输入数据 &#xff08;二&#xff09;. 打印奇数位&#xff1a; 使用 for循环 循环产生 1~32 之间的偶…

2023年5月 青少年软件编程(图形化) 等级考试试卷(一级)

青少年软件编程&#xff08;图形化&#xff09; 等级考试试卷&#xff08;一级&#xff09;2023.6 一、 单选题(共 25 题&#xff0c; 共 50 分) 1.看图找规律&#xff0c; 请问下图红框中是&#xff1f; &#xff08; &#xff09; A. B. C. D. 标准答案&#xff1a; D 试题解…

centos系统把.net6 web api部署到docker

为了搞定docker是怎么部署的&#xff0c;做个笔记 前提条件准备一个core项目,使用vs自带的docker打包假如你选择docker支持的时候不小心安装了Docker Desktop&#xff1b;还可以简单的先部署到本地docker中发布到centosdocker常用命令 前提条件 一台centos 8.0 版本以上的linu…

软件测试的7年,我秃了,也变强了...

当前就业环境&#xff0c;裁员、失业消息满天飞&#xff0c;好像能有一份工作就不错了&#xff0c;更别说高薪。其实这只是一方面。另一方面&#xff0c;各大企业依然求贤若渴&#xff0c;高技术人才依然紧缺&#xff0c;只要技术过硬&#xff0c;拿个年包50w不是问题。 人生格…

i.MX RT1010跨界MCU(MCUXpresso IDE上手体验)

MCUXpresso IDE是专为NXP半导体的基于ARM Cortex-M内核的MCU芯片开发而设计的&#xff0c;其优势主要体现在以下几个方面&#xff1a; MCUXpresso IDE集成了MCUXpresso SDK&#xff0c;这是NXP提供的一个软件开发套件&#xff0c;包含了底层驱动、中间件以及大量的示例代码和应…

Charles Windows10使用 证书安装 过期重设 证书加入到受信任根目录 配置访问WhatsApp

普通教程文档 抓包神器 Charles 使用教程详解 - 知乎 界面选项详细讲解 Charles的功能介绍与使用教程&#xff0c;一学就会&#xff0c;不信就来试试&#xff1f; 疑难杂症 由于CA 根证书不在“受信任的根证书颁发机构”存储区中&#xff0c;所以它不受信任 1、winr 运行…

SandQuant停止运营,免费获取A股数据

亲爱的各位朋友们&#xff1a; SandQuant即日起不再对外提供任何服务&#xff0c;为了感恩曾经支持过我们的客户朋友&#xff0c;现免费提供所有A股数据&#xff08;数据非常庞大&#xff0c;请酌情下载&#xff09;&#xff0c;请通过链接自取。 请关注我们获取链接&#xff…

产品不可或缺的文档——帮助文档

在互联网时代&#xff0c;产品的更新迭代速度越来越快&#xff0c;产品功能也越来越复杂&#xff0c;为了让用户能够更好地理解和使用产品&#xff0c;帮助文档逐渐成为了产品不可或缺的一部分。本文将从帮助文档的作用、设计原则、撰写技巧等方面探讨帮助文档的重要性及如何编…

【AI面试】损失函数(Loss),定义、考虑因素,和怎么来的

神经网络学习的方式,就是不断的试错。知道了错误,然后沿着错误的反方向(梯度方向)不断的优化,就能够不断的缩小与真实世界的差异。 此时,如何评价正确答案与错误答案,错误的有多么的离谱,就需要一个评价指标。这时候,损失和损失函数就运用而生。 开始之前,我们先做…

MySQL数据库——初步安装与数据表结构数据管理

MySQL数据库——初步安装与数据表结构数据管理 一、数据库的基本概念1.数据库基本常识2.数据库系统发展史 二、数据库的分类1.关系数据库&#xff08;SQL&#xff09;2.非关系数据库&#xff08;NO SQL&#xff09; 三、mysql的数据类型1.常用的数据库类型2.char与varchar的区别…

ijkplayer 支持srt协议 rtmp协议编译步骤

写在前面 ffafaf这个编译真的太垃圾了 一堆毛病 感受下webrtc 傻瓜式编译 环境首先必须ndk 是android-ndk-r15c 或者 android-ndk-r14b ubuntu 系统随便22或者20&#xff0c;18都行 有个非常重要的点python必须是2.7 不然你会看到一大堆报错 高版本的ubuntu默认都是python3…

回溯算法基本思想及其实现

文章目录 基本思想回溯算法的递归框架组合问题组合总和组合去重子集全排列 基本思想 回溯算法是一种递归算法&#xff0c;它试图通过尝试不同的选择&#xff0c;解决一个问题。它的基本思想是从可能的决策开始搜索&#xff0c;如果发现这条路往下走不能得到有效的解答&#xf…