Linux高性能服务器编程 2. TCP协议
2. TCP协议传输层的协议主要有两个:TCP 和 UDP 协议。TCP 协议相对于 [UDP 协议](https://so.csdn.net/so/search?q=UDP 协议&spm=1001.2101.3001.7020)的主要特点是:面向连接、面向字节流和可靠传输。 使用 TCP 通信的双方都必须建立连接,并分配必要的内核资源。TCP 连接是全双工的,双方的数据读写可以通过同一个连接进行。TCP 连接是一对一的。 [TCP 协议](https://so.csdn.net/so/search?q=TCP 协议&spm=1001.2101.3001.7020)采用发送应答机制,发送端发送的每个 TCP 报文段都必须得到接收方的应答,才认为传输成功。且采用超时重传机制,发送方在发出一个 TCP 报文段后启动定时器,定时时间内未收到应答,将重发。 由于 TCP 报文段会被封装成 IP 数据报发送,而 IP 数据报到达接收端可能会乱序、重复,因此 TCP 协议还会对接收到的 TCP 报文段重排、整理,再交付给应用层。 UDP 协议则和 IP...
Linux高性能服务器编程 3.Linux网络编程基础API
3. Linux网络编程基础API 1.主机字节序和网络字节序现代 CPU 的累加器一次都能装载(至少)4个字节(对于 32 位的机器),即一个 int 类型。那么这4个字节在内存中排列的顺序将影响它被累加器装载的整数值,这就是字节序问题。 字节存储顺序主要分为大端序(Big-endian)和小端序(Little-endian),区别如下 Big-endian:高位字节存入低地址,低位字节存入高地址 Little-endian:低位字节存入低地址,高位字节存入高地址 例如,将12345678h写入1000h开始的内存中,以大端序和小端序模式存放结果如下: 现代 PC 大多采用小端字节序,因此小端字节序又称为主机字节序; 而在两台不同字节序的主机之间传递数据时,发送端总是把要发送的数据转化成大端字节序数据后再发送,因此大端字节序也被称为网络字节序。 网络字节顺序是TCP / IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释,网络字节顺序采用大端排序方式。 “大同小异 ”:大端字节序的...
Ubuntu使用telnet连接时出现的错误 没有到主机的路由 能ping通但是还是报错
Ubuntu使用telnet连接时出现的错误:没有到主机的路由(能ping通但是还是报错)错误如下: 说明: A机:192.168.120.138 B机:192.168.120.139 开启的服务端口是1234 解决方法: 1.检查是不是能ping通如果ping不通,那就先解决这个问题 2.防火墙的问题以下操作要在b机上运行,即开启服务的那个主机 列出所有规则: 1firewall-cmd --list-all 这里看到的只有22和8000端口,刚刚使用ufw开放的端口没有。于是使用相关命令开放端口(1234替换成想指定的端口): 如果是udp也要换成udp而不是用tcp 1firewall-cmd --zone=public --add-port=1234/tcp --permanent 执行完添加端口命令后,一定要重启防火墙才能生效,重启命令如下: 1firewall-cmd...
MIT 6.S081 第二章问题记录
第二章问题记录1.CS模式由于客户/服务器(Client/Server)模式,具有非常多的优点,故在单机微内核操作系统中几乎无一例外地都采用客户/服务器模式,将操作系统中最基本的部分放入内核中,而把操作系统的绝大部分功能都放在微内核外面的一组服务器(进程)中实现。 2.Xv6使用页表(由硬件实现)为每个进程提供自己的地址空间。3.操作系统中有哪些操作是由硬件实现的? 内存管理: 虚拟内存管理:通过内存管理单元(MMU),硬件实现虚拟地址到物理地址的转换,支持页表机制来管理进程的内存空间。 页错误处理:当一个进程试图访问未映射的页面时,硬件通过触发页错误中断来通知操作系统进行处理。 页表和虚拟地址到物理地址的转换 中断处理: 外部设备中断:硬件中断控制器(如 APIC)允许外部设备(如键盘、鼠标、磁盘等)向 CPU 发出中断信号,操作系统可以在中断发生时中断当前执行任务,转而处理外部设备的请求。 软件中断和 syscall:CPU...
MySQL笔记:第06章_多表查询
MySQL笔记:第06章_多表查询第06章_多表查询多表查询概述 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联。 为什么不把多张表合成一张表?答:多张表合成一张表会导致很多信息的冗余!将不必要的冗余信息从磁盘导入内存将导致很多的磁盘IO。 1.一个案例引发的多表连接1.1 案例说明从多个表中获取数据: 123#案例:查询员工的姓名及其部门名称SELECT last_name, department_nameFROM employees, departments; 查询结果(从上图可以看到:每个员工都与每个部门匹配了一遍,此错误称为笛卡尔积的错误): 12345678910# 2889行结果+-----------+----------------------+| last_name | department_name...
MySQL笔记:第07章_单行函数
MySQL笔记:第07章_单行函数第07章_单行函数1. 函数的理解1.1 什么是函数函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既 提高了代码效率 ,又 提高了可维护性 。在SQL 中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地 提高用户对数据库的管理效率 。从函数定义的角度出发,我们可以将函数分成 内置函数 和 自定义函数 。在 SQL 语言中,同样也包括了内置函数和自定义函数。内置函数是系统内置的通用函数,而自定义函数是我们根据自己的需要编写的,本章及下一章讲解的是 SQL 的内置函数。 1.2 不同DBMS函数的差异在使用 SQL 语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即DBMS。DBMS 之间的差异性很大,远大于同一个语言不同版本之间的差异。实际上,只有很少的函数是被 DBMS 同时支持的。比如,大多数 DBMS 使用(||)或者(+)来做拼接符,而在 MySQL 中的字符串拼接函数为concat()。大部分 DBMS...
MySQL笔记:第09章_子查询
MySQL笔记:第09章_子查询第09章_子查询子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。 1. 需求分析与问题解决1.1 实际问题现有解决方式: 123456789101112131415161718192021#方式一:SELECT salaryFROM employeesWHERE last_name = 'Abel';SELECT last_name,salaryFROM employeesWHERE salary > 11000;#方式二:自连接SELECT e2.last_name,e2.salaryFROM employees e1,employees e2WHERE e1.last_name = 'Abel'AND e1.`salary` <...
MySQL笔记:第10章_创建和管理表
MySQL笔记:第10章_创建和管理表MySQL笔记:第10章_创建和管理表1. 基础知识1.1 一条数据存储的过程存储数据是处理数据的第一步 。只有正确地把数据存储起来,才能进行有效的处理和分析。否则,只能是一团乱麻,无从下手。 那么,怎样才能把用户各种经营相关的、纷繁复杂的数据,有序、高效地存储起来呢? 在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。 为什么要先创建一个数据库,而不是直接创建数据表呢?因为从系统架构的层次上看,MySQL 数据库系统从大到小依次是 数据库服务器 、 数据库 、数据表 、数据表的 行与列 。MySQL 数据库服务器之前已经安装。所以就从创建数据库开始 1.2 标识符命名规则 数据库名、表名不得超过30个字符,变量名限制为29个 必须只能包含 A–Z, a–z, 0–9,...
MySQL笔记:第11章_数据处理之增删改
MySQL笔记:第11章_数据处理之增删改第11章_数据处理之增删改1. 插入数据1.1 实际问题解决方式:使用 INSERT 语句向表中插入数据。 1.2 方式1:VALUES的方式添加使用这种语法一次只能向表中插入一条数据。情况1:为表的所有字段按默认顺序插入数据 12INSERT INTO 表名VALUES (value1,value2,....); 值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同。 举例: 12345INSERT INTO departmentsVALUES (70, 'Pub', 100, 1700);INSERT INTO departmentsVALUES (100, 'Finance', NULL, NULL); 情况2:为表的指定字段插入数据 12INSERT INTO 表名(column1 [, column2, …, columnn])VALUES (value1 [,value2, …,...
MySQL笔记:第08章_聚合函数
MySQL笔记:第08章_聚合函数第08章_聚合函数1. 聚合函数介绍 什么是聚合函数聚合函数作用于一组数据,并对一组数据返回一个值。聚合函数类型 AVG() SUM() MAX() MIN() COUNT() 聚合函数语法 1.1 AVG和SUM函数可以对数值型数据使用AVG 和 SUM 函数。 12345678 SELECT AVG(salary), MAX(salary),MIN(salary), SUM(salary) FROM employees WHERE job_id LIKE '%REP%';/*+-------------+-------------+-------------+-------------+| AVG(salary) | MAX(salary) | MIN(salary) | SUM(salary) |+-------------+-------------+-------------+-------------+| 8272.727273 | 11500.00 | 6000.00 | 273000.00...