Linux(三)

一、

Linux信号的使用

信号是系统相应某个条件而产生的事件,进程接收到信号会执行相应的操作。
与信号有关的系统调用在“signal.h"头文件中有声明
在这里插入图片描述
设置信号的响应方式signal()

  • 默认 SIG_DFL
  • 忽略 SIG_IGN
  • 自定义 void fun_sig(int sig)

线程

线程是进程内部的一条执行序列或执行路径,一个进程可以包含多条线程。
在这里插入图片描述
在这里插入图片描述

进程

程序只是一个静态的指令集合,而进程是一个程序的动态执行过程,它具有生命周期,是动态的产生和消亡的。
进行是自愿申请,调度和独立运行的单位,它使用系统中的运行资源,二程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,它不占用系统的运行资源。
程序:指令+数据 磁盘 … .exe -> 可执行程序
进程: 运行中的程序 内存

  • 操作系统OS 通过管理进程,让进程运行完成用户任务;
  • 操作系统对于进程描述:进程描述符(进程控制块)PCB -> 记录当前进程的运行状态 信息
  • 一个PCB对应一个进程 PCB(双向循环链表存储)
  • PID 是操作系统对进程的标识,PID 进程 一一对应
  • 创建进程 先建立PCB
  • 进程撤销: 先撤销进程才撤销PCB
  • 执行进程时,先申请PCB,再加载进程实体
  • 一个进程结束时,先释放进程实体,然后释放PCB

僵死进程: 进程实体释放 PCB释放 没有时间间隔;进程实体释放,PCB没有被释放

ps命令

默认显示与当前终端有关的进程信息。
-e:显示系统中所有的进程信息;
-f:显示更多的进程属性信息
-L:显示进程中 线程ID
pstree:以树状形式显示进程之间的关系
ps -ef:查看系统中所有的进程信息 展示更多的属性信息

kill:结束一个进程 kill PID
kill -9 PID 强制结束一个进程

进程和线程的区别

  • 进程是资源分配的最小单位,线程是CPU调度的最小单位;
  • 进程有自己的独立地址空间,线程共享进程中的地址空间;
  • 进程的创建消耗资源大,线程的创建相对较小;
  • 进程的切换开销大,线程的切换开销相对较小

进程间通信·

  • 管道
    ①有名管道(命名管道)
    在这里插入图片描述
    ②无名管道
    使用pipe创建无名管道

  • 信号量
    信号量的p v 操作
    临界资源:同一时刻只允许一个进程或者线程去访问;
    临界区:访问临界资源的代码段;
    两个程序访问同一资源

  • 共享内存

  • 消息队列

  • 套接字

二、网络基本概念

2.1 网络

网络是由若干结点和连接这些结点的链路组成,网络中的结点可以是计算机、交换机、路由器等设备;
网络设备有:交换机、路由器、集线器;
传输介质有:双绞线、同轴电缆、光纤;
在这里插入图片描述

2.2 互联网

把多个网络连接起来就构成了互联网,目前最大的互联网就是我们常说的因特网。

2.3 IP地址

IP地址是因特网上的每一个主机(或路由器)的每一个接口分配的一个在全世界范围内唯一的标识符。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 MAC地址

在局域网中,硬件地址又称为物理地址或者MAC地址,长度48位,是固化在计算机适配器的ROM中的地址。

2.5 网络协议

网络协议就是一组网络规则的集合,是我们共同遵守的约定或标准。常见的协议有:

  • ◼HTTP:超文本传输协议
  • ◼ FTP: 文件传输协议
  • ◼ TELNET : 是 internet 远程登陆服务的标准协议。
  • ◼ TCP : 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议
  • ◼ UDP :用户数据报协议
  • ◼ IP : Internet Protocol 简称 IP,又译为网际协议或互联网协议
  • ◼ ICMP :因特网控制报文协议
  • ◼ ARP : 地址解析协议,是根据 IP 地址获取 MAC 地址的协议
  • ◼ RARP : 逆地址解析协议

网络分层模型

在这里插入图片描述

网络应用程序通信流程

如下图,应用程序 A 要将数据”hello” 传给网络上另外一台主机上的应用程序 B, 数据“hello”从应用层发送给传输层后,传输层在数据前面加上 tcp 协议或 udp 协议的报头,将整条报文发给网络层,网络层添加自己的 IP 报头,再将整条数据发送给数据链路层。数据链路层将数据封装成能在网络中独立传输的数据单元,即数据帧。封装好的数据帧通过网络传输到另一台主机,然后再从下层依次拆包,将数据部分送往应用层。应用程序 B 就得到了数据”hello”。
在这里插入图片描述

TCP编程流程

TCP提供的是面向连接的、可靠的、字节流服务。UDP 提供的是无连接、不可靠的、数据报服务。TCP的服务器端和客户端编程流程如下:
在这里插入图片描述

  • socket()方法是用来创建一个套接字,有了套接字就可以通过网络进行数据的收发。这也是为什么进行网络通信的程序首先要创建一个套接字。创建套接字时要指定使用的服务类型,使用TCP 协议选择流式服务(SOCK_STREAM)。
  • bind()方法是用来指定套接字使用的 IP 地址和端口。IP地址就是自己主机的地址,如果主机没有接入网络,测试程序时可以使用回环地址“127.0.0.1”。端口是一个 16 位的整形值,一般0-1024 为知名端口,如 HTTP 使用的 80 号端口。这类端口一般用户不能随便使用。其次,1024-4096为保留端口,用户一般也不使用。4096 以上为临时端口,用户可以使用。在Linux 上,1024 以内的端口号,只有 root用户可以使用。
  • listen()方法是用来创建监听队列。监听队列有两种,一个是存放未完成三次握手的连接,一种是存放已完成三次握手的连接。listen()第二个参数就是指定已完成三次握手队列的长度。
  • accept()处理存放在 listen创建的已完成三次握手的队列中的连接。每处理一个连接,则accept()返回该连接对应的套接字描述符。如果该队列为空,则 accept 阻塞。
  • connect()方法一般由客户端程序执行,需要指定连接的服务器端的 IP 地址和端口。该方法执行后,会进行三次握手, 建立连接。
  • send()方法用来向 TCP 连接的对端发送数据。send()执行成功,只能说明将数据成功写入到发送端的发送缓冲区中,并不能说明数据已经发送到了对端。send()的返回值为实际写入到发送缓冲区中的数据长度。
  • recv()方法用来接收 TCP 连接的对端发送来的数据。recv()从本端的接收缓冲区中读取数 据,如果接收缓冲区中没有数据,则recv()方法会阻塞。返回值是实际读到的字节数,如果 recv()返回值为 0, 说明对方已经关闭了 TCP 连接。
  • close()方法用来关闭 TCP 连接。此时,会进行四次挥手。
    在这里插入图片描述
    在这里插入图片描述

主机字节序列和网络字节序列

主机字节序列分为大端字节序和小端字节序,不同的主机采用的字节序列可能不同。大端字节序是指一个整数的高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。小端字节序则是指整数的高位字节存储在内存的高地址处,而低位字节则存储在内存的低地址处。在两台使用不同字节序的主机之间传递数据时,可能会出现冲突。所以,在将数据发送到网络时规定整形数据使用大端字节序,所以也把大端字节序成为网络字节序列。对方接收到数据后,可以根据自己的字节序进行转换。

套接字地址结构

通用socket地址结构

socket 网络编程接口中表示 socket 地址的是结构体 sockaddr。

专用 socket 地址结构

TCP/IP 协议族有 sockaddr_in 和 sockaddr_in6 两个专用 socket 地址结构体,它们分别用于 IPV4 和 IPV6

IP地址转换函数

通常,人们习惯用点分十进制字符串表示 IPV4 地址,但编程中我们需要先把它们转化为整数方能使用

TCP字节流服务特点和粘包

流式服务

TCP 字节流的特点,发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系,应用程序对数据的发送和接收是没有边界限制的。如下图:
在这里插入图片描述
在这里插入图片描述

粘包:TCP分几次发的数据被接收端一次性收到
解决粘包: 发一个数据就收到一次 send()一次就recv()一次。

netstat命令查看TCP连接的信息

netsta是一个功能很强大的网络信息统计工具。它可以打印本地网卡接口上的全部连接、路由表信息、网卡接口信息等。
netsta命令常用的选项包括:

  • -n:使用IP地址表示主机,而不是主机名;使用数字表示端口号,而不是服务名称;
  • -a:显示结果中也包含监听socket;
  • -t:仅显示TCP连接;
  • -r:显示路由信息;
  • -i:显示网卡接口的数据流量。

TCP、UDP

TCP:面向连接的,可靠的,流式服务
UDP:无连接,不可靠,数据报
在这里插入图片描述

TCP固定头部结构

在这里插入图片描述
6位标志位:
在这里插入图片描述

三次握手

三次握手发生在客户端执行 connect() 的时候,该方法返回成功,则说明三次握手已经建立。三次握手示例图如下:
在这里插入图片描述

四次挥手

四次挥手发生在客户端或服务端执行 close() 关闭连接的时候,示例图如下:
在这里插入图片描述

TCP连接的可靠性

  • 应答确认、超时重传机制:发送端发送数据 m1 给接收端,接收端收到数据后会给发送端一个确认信息,以表明数据已经被成功收到。在发送方未收到确认信息前,M1
    应继续被保留,直到确认信息到达才能丢弃。
    在这里插入图片描述

  • 滑动窗口:TCP 协议是利用滑动窗口实现流量控制的。一般来说,我们总是希望数据传输得更快一些,不会一次只发一个字节。但是如果发送方把数据发得过快,接受方就可能来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。在 TCP 的报头中有一个字段叫做接收通告窗口,这个字段由接收端填充,是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。所以发送端就会有一个发送窗口,这个发送窗口的大小是由接收端填充的接收通告窗口的大小决定的,并且窗口的位置会随着发送端数据的发送和接收到接收端对数据的确认而不断的向右滑动,将之称为滑动窗口
    在这里插入图片描述

TCP的连接状态

在这里插入图片描述

HTTP长连接和短连接

浏览器服务器建立连接后,如果两次以上的请求复用同一个 TCP 连接,则称之为长连接。如果浏览器发送一次请求报文,服务器回复一次应答就断开连接,下次交互再重新进行三次握手建立连接,那么就被称作短连接。使用长连接显然是更好一些,可以减少网络中的同步报文,也使得服务器的响应速度变快。
常见的 web 服务器有:

  • ◼ Apache: 简单、速度快、性能稳定,并可做代理服务器使用
  • ◼ IIS(Internet Information Server):安全性、强大、灵活
  • ◼ Nginx:小巧而高效,可以做高效的负载均衡反向代理
  • ◼ Tomcat:技术先进、性能稳定、免费
    在这里插入图片描述

HTTP请求

HTTP请求报头格式

在这里插入图片描述
在这里插入图片描述

常见的HTTP请求

在这里插入图片描述
在这里插入图片描述

应答报头结构

在这里插入图片描述

应答状态码

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值