question

作者: 路破格 | 来源:发表于2020-06-06 10:17 被阅读0次

1 TCP/IP

1.1 三次握手

两次握手

       客户端发了个连接请求消息到服务端,服务端收到信息后知道自己与客户端是可以连接成功的,但此时客户端并不知道服务端是否已经接收到了它的请求,所以服务端接收到消息后的应答,客户端得到服务端的反馈后,才确定自己与服务端是可以连接上的,这就是第二次握手。客户端只有确定了自己能与服务端连接上才能开始发数据。所以两次握手肯定是最基本的。

为什么需要三次握手

       第三次握手是为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误,例如重试机制。

三次握手包字段

       第1次握手:客户端发送随机syn字段,进入SYN_SEND状态
       第2次握手:服务端发送随机syn字段和ack字段(客户端syn+1),服务器进入SYN_RECV状态
       第3次握手:客户端收到syn+ack的包,向服务器发送ack字段(服务端syn+1),进入ESTABLISHED状态,服务器收到ack包后也进入ESTABLISHED状态,完成三次握手

1.2 四次挥手

       第1次挥手:客户端发送随机FIN字段,从ESTABLISHED状态进入FIN_WAIT_1状态
       第2次挥手:服务端收到客户端FIN并发送ACK字段(客户端FIN+1),从ESTABLISHED状态进入CLOST_WAIT状态,该状态会持续到服务端发送完数据,客户端收到ACK包后进入FIN_WAIT_2状态
       第3次挥手:服务端发送随机FIN字段,进入LAST_ACK状态
       第4次挥手:客户端收到服务端FIN并发送ACK字段(服务端FIN+1),客户端进入TIME_WAIT状态,并等待2MSL时间后进入CLOSED状态,服务端收到ACK字段后,进入CLOSED状态,完成四次挥手

1.3 连接状态

LISTENING:某种服务侦听指定的TCP端口,并等待进入的连接
SYN_SENT:客户端向服务端发送连接请求
SYN_RECV:服务端LISTENING的端口收到客户端的请求,等待确认
ESTABLISHED:完成三次握手,开始正常数据传输状态
FIN_WAIT1:发送连接中断的请求后进入的状态
CLOSING:两边同时尝试关闭请求并收到对方的包时从FIN_WAIT1状态进入到该状态,进入该状态后会发送ACK给对方,收到对方的ACK后双方都会进入TIME_WAIT状态
CLOSE_WAIT:服务端接收到连接中断的请求后进入的状态,该状态服务端仍可以持续发送未完成的数据
FIN_WAIT2:服务端已同意释放后进入的状态
TIME_WAIT:客户端收到服务端连接中断的确认包后进入的状态
LAST_ACK:服务端传输完所有未完成的数据后向客户端响应请求中断后进入的状态
CLOSED:被动关闭端或等待2MSL的TIME_WAIT状态的连接最终进入的状态

1.4 影响连接超时的内核参数

net.ipv4.tcp_keepalive_time

2 操作系统

2.1 内核态和用户态

内核态(Kernel Mode):运行操作系统程序,操作硬件,运行特权指令(级别:r0)
用户态(User Mode):运行用户程序,运行非特权指令(级别:r3)

区别

处于用户态执行时,进程所能访问的内存空间和对象受到限制,其所处于占有的处理器是可被抢占的
处于内核态执行时,则能访问所有的内存空间和对象,且所占有的处理器是不允许被抢占的。

用户态到内核态的切换过程有3种

1、系统调用(主动)
       用户态的程序通过内核态提供的系统调用函数进行交互
2、异常(被动)
       当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
3、外围设备中断(被动)
       当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

2.2 进程间通讯

       进程通信(Interprocess Communication,IPC)是一个进程与另一个进程间共享消息的一种通信方式。消息(message)是发送进程形成的一个消息块,将消息内容传送给接收进程。IPC机制是消息从一个进程的地址空间拷贝到另一个进程的地址空间。

通讯目的

1、数据传输
一个进程需要将其数据发送给另一进程,发送的数据量在一个字节到几M字节之间。
2、共享数据
多个进程操作共享数据
3、事件通知
一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
4、资源共享
多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。
5、进程控制
有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

进程间通讯方式

1、无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
2、高级管道( popen ):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。
3、有名管道 ( fifo ):有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
4、信号量 ( semophore ):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
5、信号 ( sinal ):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
6、共享内存空间( shared memory ):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
7、套接字( socket ) :套解字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。
8、消息队列( message queue ):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

2.3 进程通讯信号

代号 名称 缺省动作 说明
1 SIGHUP 终止 该信号让进程立即关闭.然后重新读取配置文件之后重启
2 SIGINT 终止 程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键
8 SIGFPE 终止并产生存储文件 在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误
9 SIGKILL 终止 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程
12 SIGUSR2 终止 用户自定义信号
14 SIGALRM 终止 时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号
15 SIGTERM 终止 正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9
18 SIGCONT 恢复运行 该信号可以让暂停的进程恢复执行。本信号不能被阻断
19 SIGSTOP 暂停 该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断

相关文章

  • question

    1.铜锈的存在会不会加快青铜器的腐蚀 2.癌细胞可以无限繁殖,那能否可以改变原有细胞使其无限繁殖 3.在高二的时候...

  • Question is

    Question is 我们都没办法放弃自己,迎合对方。当维持一段关系让你觉得很累的时候,就放手。 错过,是有原因...

  • A question

    我不知道我们是怎么了,就突然间好像陌生人一样,却又保持了一种联系。我们不再联络对方,不会再在深夜里聊起只有我们自己...

  • Question

    Q004-Unity 2D 游戏屏幕大小应该如何选择? Q003-在 PC、Android、iPhone 上怎么 ...

  • That is not a question!

    和芳宇姐打了将近一个小时电话,收获了太多,思考了太多,意识到了太多,相信这这会是自己的一个转折点,一个从简单...

  • Question

    1. 有一篇文章说不要在drawrect方法里面绘制Cell,会出现一片黑, 而转载的第一个文章说可以在drawr...

  • question

    喜欢你不由自主的这些行为为什么会累?你就放轻松静静的让我喜欢你,就这么决定了

  • Question

    Question: How is Skywire gonna be used by people? Will it...

  • question

    1:before /:after伪元素默认是一个行内元素,设置width/height是无效的.可以把图片设为背景...

  • question

    第三十二本书《不如去闯》李柘远 读完这本书我更想知道剑桥和麻省理工同学的读书笔记啦, 这是一位读了耶鲁和哈佛两所名...

网友评论

      本文标题:question

      本文链接:https://www.haomeiwen.com/subject/ukbttktx.html