摘要: 自2021-02-25日起,本人的博客将如数全部搬至CSDN。 阅读全文
posted @ 2021-02-25 11:43 角色人生 阅读(281) 评论(0) 推荐(0)
摘要: 为什么建立连接是三次握手,关闭连接确是四次挥手呢? 建立连接的时候,服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。 而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所 阅读全文
posted @ 2021-02-25 09:48 角色人生 阅读(481) 评论(0) 推荐(0)
摘要: 为什么客户端最后还要等待2MSL? MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。 第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没 阅读全文
posted @ 2021-02-25 09:47 角色人生 阅读(528) 评论(0) 推荐(0)
摘要: 什么是四次挥手 在网络数据传输中,传输层协议断开连接的过程我们称为四次挥手; 第一次,Client将FIN置为1,发送一个序列号seq给Server;进入FIN_WAIT_1状态; 第二次,Server收到FIN之后,发送一个ACK=1,acknowledge number=收到的序列号+1;进入C 阅读全文
posted @ 2021-02-25 09:45 角色人生 阅读(474) 评论(0) 推荐(0)
摘要: 为什么服务端易受到SYN攻击? 服务端的资源分配是在二次握手时分配的,而客户端的资源是在三次握手时分配的。 SYN攻击,即客户端在短时间内伪造大量不存在的IP地址,并向SERVER端不断的发送SYN包,SERVER收到请求即回复确认,并等待客户端的确认,由于源地址不存在,因此SERVER需要不断的重 阅读全文
posted @ 2021-02-25 09:43 角色人生 阅读(532) 评论(0) 推荐(0)
摘要: 为什么三次握手中客户端还要发送一次确认呢?可以二次握手吗? 主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。 如果是两次握手,连接过程应该是这样的,当服务器收到对端的连接请求时,就认为连接建立好了,进入ESTABLISHED状态。客户端在收到服务器发来的同步确认报文后,就认为连接建 阅读全文
posted @ 2021-02-25 09:42 角色人生 阅读(513) 评论(0) 推荐(0)
摘要: 什么是三次握手 在网络数据传输中,传输层协议TCP(传输控制协议)是建立连接的可靠传输,TCP建立连接的过程,我们称为三次握手。 第一次,建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence 阅读全文
posted @ 2021-02-25 09:40 角色人生 阅读(467) 评论(0) 推荐(0)
摘要: URI(统一资源标识符)和URL(统一资源定位符)之间的区别 URL: ​ URL 统一资源定位符(Uniform Resource Locator):其实就是我们访问web页面时需要输入的”网页地址“”网址“,比如:https://www.google.com/ 就是URL。 完整定义如下: 协议 阅读全文
posted @ 2021-02-25 09:39 角色人生 阅读(666) 评论(0) 推荐(0)
摘要: HTTPS与HTTP的一些区别 HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。 HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。 HTTP和HTTPS使用的是完全不同的连接方式,用的 阅读全文
posted @ 2021-02-25 09:37 角色人生 阅读(589) 评论(0) 推荐(0)
摘要: Http1.1和Http1.0的区别 HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在: 缓存处理:在H 阅读全文
posted @ 2021-02-25 09:35 角色人生 阅读(444) 评论(0) 推荐(0)
摘要: 典型网络模型,简单说说有哪些 网络模型一般是指OSI七层参考模型和TCP/IP四层参考模型。 OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层(4层):网络接口层、网际层、运输层、应用层。 网络层:IP协议、ICMP协议、ARP协议、RARP协议。 阅读全文
posted @ 2021-02-25 09:34 角色人生 阅读(586) 评论(0) 推荐(0)
摘要: TCP为什么是可靠连接 确认和重传机制:建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础传输过程中,如果Checksum校验失败、丢包或延时,发送端重传。 数据排序:TCP有专门的序列号SN字段,可提供数据re-order。 流量控制:窗口和计时器的使用。 阅读全文
posted @ 2021-02-25 09:33 角色人生 阅读(549) 评论(0) 推荐(0)
摘要: TCP UDP适用场景 TCP的应用场景:适合通信质量要求较高的场景,http传输、文件传输、smtp等等,目前大部分的传输都是基于TCP协议传输; UDP的应用场景:相对于TCP传输,UDP传输速度更快,实时性更好,耗资源更少,但稳定性、可靠性比TCP差,适合对网络通讯质量要求不高、速度要求尽量快 阅读全文
posted @ 2021-02-25 09:32 角色人生 阅读(542) 评论(0) 推荐(0)
摘要: TCP、UDP的优缺点 TCP的优点:可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点:慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这 阅读全文
posted @ 2021-02-25 09:31 角色人生 阅读(612) 评论(0) 推荐(0)
摘要: TCP、UDP的区别 TCP 是面向连接的,UDP是面向无连接的; UDP 程序结构较简单; TCP 是面向字节流的,UDP是基于数据报的; TCP 保证数据正确性,UDP可能丢包; TCP 占用资源较多,UDP占用资源较少; TCP 保证传输数据顺序、无差错、不丢失、不重复、且按时序到达,UDP 阅读全文
posted @ 2021-02-25 09:28 角色人生 阅读(566) 评论(0) 推荐(0)
摘要: c/c++中变量的作用域 作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,作用域由变量所在的最近一对括号确定。 全局变量: 全局变量是在所有函数体的外部定义的,程序的 阅读全文
posted @ 2021-02-25 09:26 角色人生 阅读(654) 评论(0) 推荐(0)
摘要: volatile作用和用法 使用volatile关键字声明的变量或对象通常具有与优化、多线程相关的特殊属性。通常,volatile关键字用来阻止(伪)编译器认为的无法“被代码本身”改变的代码(变量/对象)进行优化。如在C语言中,volatile关键字可以用来提醒编译器它后面所定义的变量随时有可能改变 阅读全文
posted @ 2021-02-25 09:24 角色人生 阅读(789) 评论(0) 推荐(0)
摘要: const常量和#define的区别(编译阶段、安全性、内存占用等) 区别: 就起作用的阶段而言:#define是在编译的预处理阶段起作用,而const是在编译、运行的时候起作用。 就起作用的方式而言:#define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可 阅读全文
posted @ 2021-02-25 09:23 角色人生 阅读(1041) 评论(0) 推荐(0)
摘要: static的用法(定义和用途) 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。 那 阅读全文
posted @ 2021-02-25 09:21 角色人生 阅读(830) 评论(0) 推荐(0)
摘要: char和int之间的转换 Char转int: Char与int的相互转换,联想ASCII码,字符’0’对应的值为48,所以不能直接加减’’; Char ch = ’9’; int ch_int = ch – ’0’; //此时ch_int = 9; int转char: int i= 9; char 阅读全文
posted @ 2021-02-25 09:19 角色人生 阅读(614) 评论(0) 推荐(0)
摘要: struct和class的区别 class是引用类型,struct是值类型; class可以继承类、接口和被继承,struct只能继承接口,不能被继承; class有默认的无参构造函数,有析构函数,struct没有默认的无参构造函数,且只能声明有参的构造函数,没有析构函数; class可以使用abs 阅读全文
posted @ 2021-02-25 09:18 角色人生 阅读(553) 评论(0) 推荐(0)
摘要: 数组到底存放在哪里 数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。下面将深入介绍数组在内存中的运行机制。 数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来访问数组元素。 与所有引用变量相同的是, 阅读全文
posted @ 2021-02-25 09:16 角色人生 阅读(1184) 评论(0) 推荐(0)
摘要: 重写memcpy()函数需要注意哪些问题 标准memcpy()的解释: void *memcpy(void *dst, const void *src, size_t n); //If copying takes place between objects that overlap, the beh 阅读全文
posted @ 2021-02-25 09:13 角色人生 阅读(978) 评论(0) 推荐(0)
摘要: 函数参数压栈顺序,即关于__stdcall和__cdecl调用方式的理解 __stdcall和__cdecl都是函数调用约定关键字。 __stdcall:参数由右向左压入堆栈;堆栈由函数本身清理。 __cdecl:参数也是由右向左压入堆栈;但堆栈由调用者清理。 阅读全文
posted @ 2021-02-25 09:11 角色人生 阅读(600) 评论(0) 推荐(0)
摘要: 函数头文件的声明前加extern 与不加extern 有什么区别 声明时加不加extern无所谓,没区别,因为函数默认是extern属性。 在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用。 阅读全文
posted @ 2021-02-25 09:08 角色人生 阅读(1035) 评论(0) 推荐(0)
摘要: extern”C” 的作用 extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函 阅读全文
posted @ 2021-02-25 09:07 角色人生 阅读(560) 评论(0) 推荐(0)
摘要: C语言检索内存情况 内存分配的方式 内存分配方式: 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置 阅读全文
posted @ 2021-02-25 09:06 角色人生 阅读(865) 评论(0) 推荐(0)
摘要: 指针与引用的相同和区别;如何相互转换? 相同: 都是地址的概念,指针指向某一内存、它的内容是所指内存的地址;引用则是某块内存的别名。 从内存分配上看:两者都占内存,程序为指针会分配内存,一般是4个字节;而引用的本质是指针常量,指向对象不能变,但指向对象的值可以变。两者都是地址概念,所以本身都会占用内 阅读全文
posted @ 2021-02-25 09:02 角色人生 阅读(930) 评论(0) 推荐(0)
摘要: 在1G内存的计算机中能否malloc(1.2G)?为什么? malloc能够申请的空间大小与物理内存的大小没有直接关系,仅与程序的虚拟地址空间相关。程序运行时,堆空间只是程序向操作系统申请划出来的一大块虚拟地址空间。应用程序通过malloc申请空间,得到的是在虚拟地址空间中的地址,之后程序运行所提供 阅读全文
posted @ 2021-02-25 09:01 角色人生 阅读(1030) 评论(0) 推荐(0)
摘要: malloc的底层实现 使用过c语言的都知道malloc是一个动态分配内存的函数,还可以通过free释放内存空间。如果我们想分析一下malloc的源码,这其实不是一会就能看懂的,但是我们可以讨论一下malloc的简单实现。在这之前,我们先来看一下虚拟内存空间。虚拟内存空间是操作系统实现内存管理的一种 阅读全文
posted @ 2021-02-25 08:58 角色人生 阅读(1084) 评论(0) 推荐(0)
摘要: new和malloc的区别 new是操作符,而malloc是函数。 new在调用的时候先分配内存,在调用构造函数,释放的时候调用析构函数。 new是类型安全的,malloc返回void*。 new可以被重载。 new分配内存更直接和安全。 malloc 可以被realloc。 new发生错误抛出异常 阅读全文
posted @ 2021-02-25 08:56 角色人生 阅读(604) 评论(0) 推荐(1)
摘要: 正确处理僵尸进程的方法 子进程退出时向父进程发送SIGCHILD信号,父进程处理SIGCHILD信号。在信号处理函数中调用wait进行处理僵尸进程。 fork两次,父进程fork一个子进程,然后继续工作,子进程fork一个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进 阅读全文
posted @ 2021-02-25 08:54 角色人生 阅读(557) 评论(0) 推荐(0)
摘要: 如何创建守护进程 调用fork(),创建新进程,它会是将来的守护进程。 在父进程中调用exit,保证子进程不是进程组长。 调用setsid()创建新的会话区。 将当前目录改成跟目录(如果把当前目录作为守护进程的目录,当前目录不能被卸载他作为守护进程的工作目录)。 将标准输入,标注输出,标准错误重定向 阅读全文
posted @ 2021-02-25 08:53 角色人生 阅读(476) 评论(0) 推荐(0)
摘要: 孤儿进程、僵尸进程、守护进程的概念 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程所收养,并由init进程对它们完成状态收集工作。僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取 阅读全文
posted @ 2021-02-25 08:51 角色人生 阅读(599) 评论(0) 推荐(0)
摘要: 并发,同步,互斥,异步,阻塞,非阻塞的理解 并发(concurrency):在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥。 同步(synchronous):线程之间的关系不是相互排斥临界资源的关系,而是 阅读全文
posted @ 2021-02-25 08:50 角色人生 阅读(737) 评论(0) 推荐(0)
摘要: 线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗? 同步是个过程,阻塞是线程的一种状态。多个线程操作共享变量时可能会出现竞争。这时需要同步来防止两个以上的线程同时进入临界区,在这个过程中,后进入临界区的线程将阻塞,等待先进入的线程走出临界区。线程同步不一定发生阻塞,线程同步的时候,需要协调推进速 阅读全文
posted @ 2021-02-25 08:49 角色人生 阅读(750) 评论(0) 推荐(0)
摘要: 什么是线程同步和互斥 线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。 线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用, 阅读全文
posted @ 2021-02-25 08:33 角色人生 阅读(657) 评论(0) 推荐(0)
摘要: 一个进程可以创建多少线程,和什么有关 理论上,一个进程可用虚拟空间是2G,默认情况下,线程的栈的大小是1MB,所以理论上最多只能创建2048个线程。如果要创建多于2048的话,必须修改编译器的设置。一个进程可以创建的线程数由可用虚拟空间和线程的栈的大小共同决定,只要虚拟空间足够,那么新线程的建立就会 阅读全文
posted @ 2021-02-25 08:31 角色人生 阅读(1126) 评论(0) 推荐(0)
摘要: 什么是进程上下文、中断上下文 进程上下文: 进程上文:其是指进程由用户态切换到内核态是需要保存用户态时cpu寄存器中的值,进程状态以及堆栈上的内容,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。 进程下文:其是指切换到内核态后执行的程序,即进程运行在内核空间的部分 阅读全文
posted @ 2021-02-25 08:30 角色人生 阅读(940) 评论(0) 推荐(0)
摘要: 父进程、子进程的关系以及区别 关系:fork出子进程后,子进程都会继承父进程以下信息: 文件描述符 实际用户ID,实际组ID,有效用户ID,有效组ID 进程组ID 添加组ID 对话期ID 控制终端 设置-用户-ID标志和设置-组-ID标志 当前工作目录 根目录 文件方式创建字 信号屏蔽和排列 对任意 阅读全文
posted @ 2021-02-25 08:29 角色人生 阅读(1541) 评论(0) 推荐(0)
摘要: 进程线程的状态转换 进程 创建状态(New):一个应用程序从系统上启动,首先就是进入创建状态,需要获取系统资源创建进程管理块(PCB:Process Control Block)完成资源分配。 就绪状态(Runnable):在创建状态完成之后,进程已经准备好,但是还未获得处理器资源,无法运行。 运行 阅读全文
posted @ 2021-02-25 08:27 角色人生 阅读(810) 评论(0) 推荐(0)
摘要: 进程的空间模型 Linux下使用虚拟内存空间给每一个进程,32位操作系统下,每个进程都有独立的4G虚拟内存空间。其中包括: 内核区:用户代码不可见的区域,页表就存放在这个区域中。 用户区:a、代码段:只可读,不可写,程序代码段。b、数据段:保存全局变量,静态变量的区域。c、堆区:就是动态内存,通过m 阅读全文
posted @ 2021-02-25 08:25 角色人生 阅读(1066) 评论(0) 推荐(0)
摘要: 多进程、多线程同步(通讯)的方法 进程间通讯: 管道( pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系 有名管道 (named pipeline) :有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 高 阅读全文
posted @ 2021-02-25 08:24 角色人生 阅读(1334) 评论(0) 推荐(0)
摘要: 什么时候用进程,什么时候用线程 线程进程的区别体现在几个方面: 地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。 通信: 进程间通信 IPC(管道,信号量,共享内存,消息队列,信号,套接字),线程间可以直接读写进程数据段(如全局变量)来进行通 阅读全文
posted @ 2021-02-25 08:23 角色人生 阅读(946) 评论(0) 推荐(0)
摘要: 标题多进程、多线程的优缺点? 多进程优点: • 每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系; • 通过增加CPU,就可以容易扩充性能; • 可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系; • 每个子进程都有2GB地址空间和相关资源,总体能够达到 阅读全文
posted @ 2021-02-25 08:21 角色人生 阅读(1019) 评论(0) 推荐(0)
摘要: 什么是进程,线程,两者联系与区别 进程:一个正在运行的程序,进程为系统中分配内存资源的最小单元;线程:线程是程序执行的最小单位,线程是正在运行的一个函数;联系: 进程和线程都是操作系统所运行的程序运行的基本单元; 进程是具有一定独立功能的程序的一次运行活动,操作系统动态执行的单元,包含程序从调度到消 阅读全文
posted @ 2021-02-25 08:19 角色人生 阅读(1161) 评论(0) 推荐(1)