linux高级编程(网络)

数据的封包和拆包

封包:

  1. 应用层数据(例如HTTP请求)被传递给传输层。
  2. 传输层(TCP)在数据前添加TCP头部(包含端口号、序列号等)。
  3. 网络层(IP)在TCP段前添加IP头部(包含源IP地址、目的IP地址等)。
  4. 链路层在IP包前添加链路层头部和尾部(例如以太网帧头)。

拆包:

  1. 链路层从以太网帧中提取IP包。
  2. 网络层从IP包中提取TCP段。
  3. 传输层从TCP段中提取数据,
  4. 应用层使用数据。

--> 帧:

位于链路层(OSI七层模型),是链路层传递的基本单元(不一定最小)

其中包含:帧的长度,源MAC地址,目的MAC地址(MAC地址也称物理地址,硬件地址,全球唯一)其装的数据,以及各种校验位

其数据段最多能存放1500字节,最少要保证其一帧有64字节数据(也就是说数据段+其他段不够64字节时,会添加填充字节来时该帧大小达到64字节,填充字节不包含有效信息)

-->管道

用于IPC(进程间通信),最大大小可自定义,其最小大小为4k(称为1页,不管设置多小,系统会补全到至少1页,且大于1页时,会设置为1页的整数倍(n*4k))

-->套接字缓冲区

一般为4kb,与ubuntu中文件缓冲区一致,输入缓冲区为1kb

www(万维网)

    一个大型的,交互式的信息储藏空间,万维网利用网页之间的链接将不同网站的网页链接成一张逻辑上的信息网,从而用户可以方便的从internet上的一个站点去访问另一个站点 。其中站点由一个或多个处于不同地理位置的源服务器(数据的来源)托管。

URL:标识万维网文档

HTTP:应用层协议,用于实现链接

HTML:使用超链接,将标签与资源链接起来,显示给用户

统一资源定位器URL(uniform resource locator )

      统一资源定位符 URL 是用来表示从互联网上得到的资源位置和访问这些资源的方法,其实际上是资源的地址(“资源” 是指在互联网上可以被访问的任何对象,包括文件目录、文件、文档、图形、声音等,以及与互联网相连的任何形式的数据。)

URL的一般形式一般由以下四个部分组成:

<协议>://<主机>:<端口号>/<路径>

主机指的的是主机在因特网上的域名,端口号和路径可省略

使用http的URL:

     一般形式:http://<主机>:<端口号>/<路径>

     http的默认端口号为80,通常可省略(https:http的加密版本,默认端口号为443),如果省略其路径项,URL就指到了某个主页:

1.一个www服务器最高级别的页面

2.可以连接到与本组织相关的其他站点

清华大学主页:

http://www.tsinghua.edu.cn

路径指向的从属界面:

http://www.tsinghua.edu.cn/chn/yxsz/index.htm

超文本传输协议http

操作过程:

        HTTP是Web通信的基础,它定义了客户端和服务器之间如何请求和响应资源。

         HTTP 规定在 HTTP 客户与 HTTP 服务器之间的每次交互,都由一个 ASCII 码串构成的请求和一个类似的通用互联网扩充,即 “类 MIME(MIME-like)” 的响应组成。(如Content-Type: text/html; charset=UTF-8,这告诉浏览器响应的内容类型是HTML,并且应该使用UTF-8字符集,类型+填充值)HTTP 报文通常都使用 TCP 连接传送。(包含三次握手,4次挥手)

http访问目标过程:

(1)浏览器分析链接指向页面的URL。
(2)浏览器向DNS请求解析www.tsinghua.edu.cn 的IP地址。
(3)域名系统DNS解析出清华大学服务器的IP地址为166.111.4.100。
(4)浏览器与服务器建立TCP连接(在服务器端IP地址是166.111.4.100,端口是80)
(5)浏览器发出取文件命令:GET /chn/yxsz/index.htm。
(6)服务器www.tsinghua.edu.cn 给出响应,把文件index.htm 发送给浏览器。
(7)释放TCP连接。
(8)浏览器显示“清华大学院系设置”文件index.htm中的所有文本。

分析URL->尝试连接->取文件->释放连接->显示

HTTP本身是无连接的(不需要建立http的连接,实际上用的是tcp的连接)

HTTP协议是无状态的(服务器不会记录用户数据,每次访问的数据都与第一次相同)

http1.0

      首先,建立一个http链接需要2倍RTT(往返时间),也就是3次握手(最后一次握手发送http请求报文),加一次服务器返回数据,在http1.0中每请求一次文档,就要产生一次TCP连接,这样会大大增加服务器的负担

http1.1

     使用了持续连接来改善这个问题,所谓持续连接就是与服务器取得连接后的一段时间仍然在该线路上发送请求报文与数据。

-->流水线方式与非流水线方式

流水线方式:客户在收到前一个响应后才能发出下一个请求。这比非持续连接要用去两倍 RTT 的开销,节省了建立 TCP 连接所需的一个 RTT 时间。但是,在发送完一个对象后,其TCP连接就处于空闲状态,浪费了服务器资源

流水线方式:客户在收到 HTTP 的响应报文之前就能够接着发送新的请求报文。减少了TCP连接中的空闲时间,提高了效率

http报文结构

其中,请求报文的开始行应该以get开始,以版本号结束,如:HTTP/1.1

请求报文示例:

3种常见的错误:

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

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

相关文章

C#Winform窗体中嵌入exe文件

1&#xff0c;效果以嵌入Modbus Slave为例&#xff1a; 2&#xff0c;代码&#xff1a; public partial class Form1 : Form{//设置嵌入exe的常量private const int nIndex -16;private const int dwNewLong 0x10000000;Process m_AppProcess;public Form1(){InitializeCompo…

VIM模式之间的切换

命令行界面下&#xff0c;常用的文本编辑器是 VI / VIM(VI增强版)&#xff0c;VI 是 Linux 最通用的文本编辑器&#xff0c;VIM相较于VI&#xff0c;提供了代码高亮等功能&#xff0c;两者用法完全兼容&#xff1b; 1. 进入 VIM 工作界面 vim 文件名 2. 进入编辑模式 三种方…

ENSP中OSPF配置

题目 划分网段&#xff0c;配置ip OSPF配置按照区域划分&#xff0c;这个网段也要按照区域个数划分&#xff0c;如这一题&#xff0c;分成两个区域&#xff0c;所以将192.168.1.0/24划分先为两个网段&#xff0c;然后在具体的划分区域中的网段。 以交换机为中心的三条线属于一…

[Qt] Qt Creator中,新建QT文件时选择界面模版下的各选项

在Qt Creator中&#xff0c;新建文件时选择界面模版下的各选项具有特定的意义&#xff0c;这些选项主要帮助开发者根据项目需求快速生成不同类型的文件。以下是对这些选项的详细解释&#xff1a; 0. Qt Item Model 意义&#xff1a;列表模型是Qt中用于表示和操作数据的强大抽…

Android 使用 Debug.startMethodTracing 分析方法耗时

参考 Generate Trace Logs by Instrumenting Your App 官网提供了 trace 工具来分析方法耗时。 生成 trace 文件 package com.test.luodemo.trace;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.os.Debug; import android.uti…

js vue table单元格合并

实现效果 关键代码 <table classtable table-bordered><thead><tr><th>检测项目</th><th>详细说明</th><th>检测结果</th><th>检测说明</th></tr></thead><tbody><tr ng-repeatrow in…

【car】深入浅出学习机械燃油车知识、结构、原理、维修、保养、改装、编程

汽车的五大总成通常是指发动机、变速器、前后桥、车架和悬挂系统。 发动机&#xff1a;是汽车的动力来源&#xff0c;负责将燃料的化学能转化为机械能&#xff0c;驱动汽车行驶。常见的发动机类型有内燃机&#xff08;如汽油发动机、柴油发动机&#xff09;和电动机&#xff0…

ant design pro多页签功能

效果&#xff1a; 原理&#xff1a; 1、所有需要页签页面&#xff0c;都需要一个共同父组件 2、如何缓存&#xff0c;用的是ant的Tabs组件&#xff0c;在共同父组件中&#xff0c;实际是展示的Tabs组件 3、右键&#xff0c;用的是ant的Dropdown组件&#xff0c;当点击时&…

在linux中查找 / 目录下的以.jar结尾的文件(find / -name *.jar)

文章目录 1、查找 / 目录下的以.jar结尾的文件 1、查找 / 目录下的以.jar结尾的文件 [rootiZuf6332h890vozldoxcprZ ~]# find / -name *.jar /etc/java/java-1.8.0-openjdk/java-1.8.0-openjdk-1.8.0.342.b07-1.el9_0.x86_64/lib/security/policy/limited/US_export_policy.ja…

【学习css2】grid布局-页面footer部分保持在网页底部

中间内容高度不够屏幕高度撑不开的页面时候&#xff0c;页面footer部分都能保持在网页页脚&#xff08;最底部&#xff09;的方法 1、首先上图看显示效果 2、奉上源码 2.1、html部分 <body><header>头部</header><main>主区域</main><foot…

在 Linux 上设置 RAID 阵列的全面指南

引言 在这篇博文中&#xff0c;我们将深入探讨如何在 Linux 上设置 RAID 阵列。本文将涵盖 RAID 的定义、架构、原理、应用场景、常见命令体系&#xff0c;并通过详细的实战模拟展示如何在 Linux 系统上实际操作。希望通过这篇文章&#xff0c;您能深入理解 RAID 技术&#xff…

Flutter实现局部刷新的几种方式

目录 前言 1.局部刷新的重要性 1.概念 2.重要性 2.局部刷新实现的几种方式 1.使用setState方法进行局部刷新 2.使用StatefulWidget和InheritedWidget局部刷新UI 3.ValueNotifier和ValueListenableBuilder 4.StreamBuilder 5.Provider 6.GetX 7.使用GlobalKey 前言 …

现在有什么副业可以让人快速上岸?可以试试这个行业上岸其实不难

人为什么要努力赚銭&#xff1f; 当你想结婚的时候&#xff0c; 你可以慢慢挑&#xff0c;不着急。 当父母年老遭遇大病的时候&#xff0c; 你有机会尽孝。 当孩子需要时&#xff0c;你不会囊中羞涩。 年轻时以为金钱最重要&#xff0c; 如今年纪大了&#xff0c;发现这…

CSS在页面中使用的三种方式:行内样式、内嵌式样式表、链接式样式表

CSS样式如何在页面中使用&#xff0c;包含三种方式&#xff1a;行内样式、内嵌式样式表、链接式样式表。 1、行内样式 行内样式是比较直接的一种样式&#xff0c;直接定义在 HTML 标签之内&#xff0c;并通过 style 属性来实现。这种方式比较容易学习&#xff0c;但是灵活性不…

【秋招突围】2024届秋招笔试-字节跳动笔试题-01-三语言题解(Java/Cpp/Python)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f4e7; 清隆这边最…

【Python 基础】控制流 - 2

程序执行 在第1篇的 hello.py 程序中,Python 开始执行程序顶部的指令,然后一条接一条往下执行。“程序执行”(或简称“执行”)这一术语是指当前被执行的指令。如果将源代码打印在纸上,在它执行时用手指指着每一行代码,你可以认为手指就是程序执行。 但是,并非所有的程…

Python基础知识——(004)

文章目录 P16——15. 布尔类型 P17——16. 类型转换函数 P18——17. eval函数 P19——18. 算数运算符 P20——19. 赋值运算符 P16——15. 布尔类型 布尔类型 用来表示 “真” 值或 “假” 值的数据类型在Python中使用标识符 True 或 False 表示布尔类型的值True表示整数1&…

【vue】下载 打印 pdf (问题总结)- 持续更新ing

这里是目录标题 一、pdf1.查看 下载一、pdf 1.查看 下载 样式 Code<template><div><el-table :data="pdfList" style="width: 100%" border ><el-table-columnprop="index"label="序号"width="80"ali…

【UE5.1】NPC人工智能——01 准备NPC角色

效果 步骤 1. 之前我们已经创建了“BP_NPC”&#xff08;见&#xff1a;【UE5.1 角色练习】06-角色发射火球-part2&#xff09; 该蓝图继承于角色类 我们在该蓝图中添加了两个方法和两个变量。方法一个是用于修改角色HP值的&#xff0c;另一个是在收到伤害后执行的逻辑。两个…

面试题005-Java-JVM(上)

面试题005-Java-JVM(上) 目录 面试题005-Java-JVM(上)题目自测题目答案1. JVM由哪几部分组成&#xff1f;2. 运行时数据区中包含哪些区域&#xff1f;3. 栈和堆中分别存放什么数据&#xff1f;4. 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) &#xff1f;5. 堆空间的…