南京微网站开发,wordpress当前导航菜单,怎么做网站页面,优化服务公司 我的所有学习笔记#xff1a;https://github.com/Dusongg/StudyNotes⭐⭐⭐
文章目录 1 网络基础知识1.1 查看网络信息1.2 认识端口号1.3 UDP1.4 TCP1.4.1 确认应答机制1.4.2 TCP三次握手/四次挥手为什么是三次握手为什么是四次挥手listen 的第二个参数 backlog—— 全… 我的所有学习笔记https://github.com/Dusongg/StudyNotes⭐⭐⭐
文章目录 1 网络基础知识1.1 查看网络信息1.2 认识端口号1.3 UDP1.4 TCP1.4.1 确认应答机制1.4.2 TCP三次握手/四次挥手为什么是三次握手为什么是四次挥手listen 的第二个参数 backlog—— 全连接队列的长度TIME_WAITsetsockopt 服务端出现大量CLOSE__WAIT 1.4.3 超时重传1.4.4 流量控制1.4.5 滑动窗口1.4.6 延迟应答1.4.7 拥塞控制1.4.8 TCP粘包问题总结 1.5 网络字节序1.6 查看所有http守护进程pid —— pidof1.7 IP网络层1.7.1 IP报头IP分片 1.7.2 路由器1.7.3 IP地址分类和CIDR1.7.4 公网IP和私网IP1.7.5 局域网/广域网1.7.6 网关?网段默认网关 1.8 MAC (数据链路层)交换机ARP协议ARP欺骗 1.9 DNS —— 域名解析1.10 NAT/NAPT1.11 内网穿透 frp/frps/frpc1.12 正向代理/反向代理SOCKS5VPN 1.13 DHCP 2 socket相关函数2.1 socket()2.2 bind2.2.1 in_addr 与 字符串的转换函数2.2.2 关于绑定IP地址 2.3 从套接字里收消息 —— recvfrom2.4 发送消息 —— sendto2.5 listen:服务器设置为监听状态2.6 accept获取新连接2.7 connect2.8 popen 3 UDP_Socket TCP_Socket4 后台任务4.1 终端、bash、前/后台进程、会话4.2 会话退了后台进程会如何4.3 后台进程与守护进程的区别4.4 守护进程4.4 daemon —— 创建守护进程 5 HTTP1 请求方法1.1 GET 与 POST的区别1.2 其他常见方法1.3 HTTP1.0 与 HTTP1.1 关于请求方法的区别 2 状态码3 消息头字段3.1 Cookiecookie的基础属性session 6 HTTPS6.1 对称加密6.2 非对称加密6.3 非对称 对称加密6.3.1 中间人攻击 6.4 数字证书6.5 数字签名6.6 对称 非对称 证书 —— [SSL/TLS协议](https://xiaolincoding.com/network/2_http/http_interview.html#https-%E6%98%AF%E5%A6%82%E4%BD%95%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5%E7%9A%84-%E5%85%B6%E9%97%B4%E4%BA%A4%E4%BA%92%E4%BA%86%E4%BB%80%E4%B9%88)6.2 非对称加密6.3 非对称 对称加密6.3.1 中间人攻击 6.4 数字证书6.5 数字签名6.6 对称 非对称 证书 —— [SSL/TLS协议](https://xiaolincoding.com/network/2_http/http_interview.html#https-%E6%98%AF%E5%A6%82%E4%BD%95%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5%E7%9A%84-%E5%85%B6%E9%97%B4%E4%BA%A4%E4%BA%92%E4%BA%86%E4%BB%80%E4%B9%88) 1 网络基础知识
查看网络信息 网口的 IP 地址、子网掩码、MAC 地址、网关地址每层数据包的称呼 1.1 查看网络信息
netstat -naup
# -p : 显示pid sudo显示全部
# -a 显示所有all
# -u 显示udp信息
# -n 将ip和mac地址写成数字
# -l : 仅列出listen状态的服务1.2 认识端口号
用户使用应用层软件完成数据发送和接收本质是进程间通信传输层怎么知道将报文交给哪一个上层应用 —— 端口号在公 网上IP地址表示唯一的一台主机端口号port用来标识主机上唯一的一个进程端口号与pid两者都能标识进程的唯一性 不是所有进程都需要网络通信系统和网络功能解耦一个进程可以绑定多个端口号一个端口号不能被多个进程绑定 端口号占两个字节 0-1023 知名端口号系统内置的通过cat /etc/services可以查看HTTP40 HTTPS:443
1.3 UDP udp无连接、不可靠传输、面向数据报 面向数据报应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并; udp报头双方规定了报文的固定长度 内核接收发放udp通过结构体sk_buf管理多个udp报文
1.4 TCP
tcp有链接、可靠传输、面向字节流 首部长度四位0-15基本单位4字节所以首部长度范围为0-4*15 窗口大小填写自己接收缓冲区剩余空间的大小在三次握手时可以协商窗口大小 序列号发送缓冲区中此次发送数据的最后一个下标 确认号序列号 1表示确认号之前的数据都收到了下次从该确认号开始发 选项 最大报文长度MSS 在TCP连接的建立阶段可以通过选项告知对方本端能够接收的最大报文长度从而避免因为报文过长而导致的分片和重组提高传输效率。窗口扩大因子 用于在连接建立后通知对端本端接收窗口的扩大情况从而提高数据传输的效率。时间戳 可以在选项中包含时间戳信息用于测量往返时间RTT对数据包进行排序等。SACKSelective Acknowledgment 用于告知对方本端已经正确接收到的数据段从而提高数据传输的可靠性。窗口比例因子 用于在连接建立时通知对端本端接收窗口的规模从而提高数据传输的效率。 六个标记位 - 区分报文的“类型” URG紧急指针指向数据的偏移量紧急数据一般只能站数据的一个字节 通过将send、recv的第四个参数设置成MSG_OOB应用场景当服务器繁忙无法处理用户数据时用户可以采取发送紧急数据服务端收到后立即处理由于紧急数据很小然后返回服务器繁忙的原因给客户端。 ACK确认序号 PSHpush当接收方缓冲区空间不足上层没有取走数据时PSH被设置提示接收端应用程序立刻从TCP缓冲区里把数据取走 RST当己方认为链接不一致或链接异常时要求重新建立链接RST称为复位报文段建立链接时、或者正在通信服务端异常时 三次握手建立链接时当client的ack发送之后就认为链接建立好了 此时开始发数据而如果此时最后一次ack服务端没有收到但是收到了客户端发来的数据则此时服务端发送报文将RST设置表示重新建立链接 SYN请求建立链接把携带SYN标识的称为同步报文段 FIN通知对方自己要断开链接了
1.4.1 确认应答机制
1.4.2 TCP三次握手/四次挥手 为什么是三次握手 验证全双工如果两次有一方只能验证收/发其中一种能力如果单次握手服务端一旦收到SYN就建立连接 -- SYN泛洪如果两次握手当服务端收到SYN时就必须建立链接并发送ack并且不知道客户端是否收到ack导致当客户端没有收到ack并重传SYN时服务端又会建立一次链接如果时三次握手第三次握手丢失此时客户端建立链接而服务端并没有建立链接之后客户端重新建立链接使得建立链接失败导致的后果由客户端承担减少了服务端处理错误链接的负担 第三次握手可以携带数据
为什么是四次挥手
一方关闭链接之后另一方可能还有数据向对方发送所以这时ACK与FIN不能同时发送
但是在特定情况下四次挥手可以变成三次挥手
listen 的第二个参数 backlog—— 全连接队列的长度 The backlog argument defines the maximum length to which the queue of pending connections for sockfd may grow. If a connection request arrives when the queue is full, the client may receive an error with an indication of ECONNREFUSED or, if the underlying protocol supports retransmission, the request may be ignored so that a later reattempt at connection succeeds. 现象服务端没有accept客户端和服务端也能建立链接建立连接的数量是n1如果超过这个数量客户端链接显示ESTABLELISH而服务端显示SYN_RECV此时全连接队列满了服务端收到了客户端的ACK只是将他丢弃了服务端将链接存放在半连接队列里如果长时间没有处理这个半连接服务端会丢弃该链接 n不能太长 n不能没有
TIME_WAIT
主动断开连接的一方在四次挥手完成之后进入TIME_WAIT状态等待一段时间后自动释放
因此当服务器主动断开四次挥手之后服务器无法立即重启
使用链接复用
setsockopt
int opt 1;
setsockopt(listensock, SOL_SOCKET, SO_REUSEPORT | SO_REUSEADDR, opt, sizeof(opt));为什么要有TIME_WAIT 最后一次ACK丢弃的情况等待接收对方最后发来的数据让之前的数据消散防止影响后续的链接 TIME_WAIT等多久 —— 2MSL MSL(maximum segment lifetime) 一个报文在网络存活的时间 查看$ cat /proc/sys/net/ipv4/tcp_fin_timeout
服务端出现大量CLOSE__WAIT CLOSE_WAIT状态是被动关闭方收到FIN并进行ACK回复后进入的状态接下来他会等待上层知道对方要关闭连接后做出处理当自己也要关闭连接的时候给对方发送FIN则 进入LAST_ACK状态而一旦自己上层没有做出处理则套接字状态会一直处于CLOSE_WAIT 因此Server端出现大量的CLOSE_WAIT是由于Server端没有及时的关闭连接导致的。 1.4.3 超时重传 超时重传的时间间隔 动态的和网络状况有关 Linux中(BSD Unix和Windows也是如此), 超时以500ms为一个单位进行控制, 每次判定超时重发的超时 时间都是500ms的整数倍。如果重发一次之后, 仍然得不到应答, 等待 2500ms 后再进行重传。如果仍然得不到应答, 等待 4500ms 进行重传. 依次类推, 以指数形式递增。累计到一定的重传次数, TCP认为网络或者对端主机出现异常, 强制关闭连接 1.4.4 流量控制 TCP根据接收端的处理能力来决定发送端的发送速度这个机制就叫做流量控制(Flow Control) 第一次怎么保证数据量的合理性三次握手时交换了窗口大小协商了双方的接收能力 实际上, TCP首部40字节选项中还包含了一个窗口扩大因子M, 实际窗口大小是 窗口字段的值左移 M 位;
1.4.5 滑动窗口
滑动窗口的大小默认为对方的接收缓冲区剩余大小滑动窗口是发送缓冲区的一部分滑动窗口越大代表着网络吞吐量越大 如果丢包了滑动窗口怎么变化 由于ack序号sqn表示sqn之前的全部报文都已经收到了所以运行少量之前的ack丢失 但是如果发送过来的数据报丢了呢比如上述3001-4000的报文丢失了那么如果收到了4001-5000服务端不能将确认序号设置成5001而必须是3001 如果收到三次重复确认应答则立即对丢失的报文补发 —— 快重传 已经有了快重传了为什么还要又超时重传 发送缓冲区逻辑上为环状结构不用担心窗口越界问题
1.4.6 延迟应答
当接收方收到报文时等待一段时间让应用层取数据此时缓冲区腾出更多剩余空间发送ACK时携带窗口大小下次发送报文时就能发送更多的数据窗口越大网络吞吐量越大传输效率越高
1.4.7 拥塞控制 如果通信双方出现大量的数据包丢失tcp会判断网络拥塞此时不能立即对报文进行超时重传会加重网络拥塞 如果一个网络发送拥塞通过这个网络通信的主机都需要发生拥塞控制 实际滑动窗口大小min(窗口大小拥塞窗口) 窗口大小考虑对方的接受能力拥塞窗口考虑网络的接受能力
1.4.8 TCP粘包问题
对于定长的包, 保证每次都按固定大小读取即可; 例如上面的Request结构, 是固定大小的, 那么就从缓冲 区从头开始按sizeof(Request)依次读取即可;对于变长的包, 可以在包头的位置, 约定一个包总长度的字段, 从而就知道了包的结束位置;对于变长的包, 还可以在包和包之间使用明确的分隔符(应用层协议, 是程序猿自己来定的, 只要保证分隔 符不和正文冲突即可);
总结 1.5 网络字节序
TCP/IP协议规定网络数据流应采用大端字节序即低地址存放高字节
网络字节序与主机字节序的转换函数 1.6 查看所有http守护进程pid —— pidof
pidof httpd
删除所有http守护进程 pidof httpd | xargs kill -9
1.7 IP网络层
1.7.1 IP报头
ip 目标网络 目标主机 和tcp一样首部长度20-(2^4-1) * 4 60TTL:8位协议将该报文交付给上层的指定协议16位标识标识所有的分片3位标志第二位为0表示允许分片第三位用来表示分片结束标记13位片偏移表示该报文在原始报文当中的位置 用于分片的排序组装
IP分片
ip数据报中任何一个分片丢失都要重新发送 1.7.2 路由器 1.7.3 IP地址分类和CIDR 网络号 IP地址 子网掩码
1.7.4 公网IP和私网IP
10.* , 前8位是网络号,共16,777,216个地址172.16.* 到172.31.,前12位是网络号,共1,048,576个地址192.168.* , 前16位是网络号,共65,536个地址 包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP);
1.7.5 局域网/广域网 局域网按照传输介质使用的访问控制方法可以分为以太网、FDDI网和令牌网目前广泛使用的是以太网它以集线器或交换机为中心构成。
1.7.6 网关?网段默认网关 网段IP地址通过子网掩码的到的网络号 网关 网关Gateway是在计算机网络中用作连接不同网络的设备或程序。它可以是物理设备如路由器也可以是运行网络协议的计算机用于转发数据包到目标网络中的设备。网关的作用是在**不同网络之间传输数据**并在需要时执行转换或处理数据的功能。 在互联网中ISPInternet Service Provider互联网服务提供商通常会提供网关来连接用户的局域网与互联网。局域网中的设备通过网关访问互联网上的资源网关负责将数据包从局域网传输到互联网并将来自互联网的响应数据包传输回局域网。
1.8 MAC (数据链路层) 区分同一个局域网中的不同主机
通过定长报文实现解包和封装
交换机
划分碰撞域——减少局域网内的碰撞
ARP协议
arp - a查看arp缓存 通过将数据链路层加上mac报头类型0806,目的地址全F:广播地址通过op分别请求/响应ARP报文
ARP欺骗
一个中间人向同一子网的另一个主机发送ARP响应IP:路由器IP MAC: 中间人MAC,之后这台主机发送给路由器的报文会发送给中间人主机
1.9 DNS —— 域名解析
host文件cat /etc/hosts
默认端口号53
1.10 NAT/NAPT NAT 静态NAT实现固定私网主机地址到公网地址的一对一转换适用于上网用户少且同时上网用户数量与公网地址数量相同的场景动态NAT私网主机地址与公网地址的动态转换并没有固定映射关系 NAPT路由器的转换表通常在TCP握手时生成在FIN时删除 1.11 内网穿透 frp/frps/frpc frp是一种用于将本地服务暴露到公共网络的工具通常用于内网穿透。其全称为Fast Reverse Proxy是一个开源的、高性能的反向代理应用。通过frp您可以在外部网络访问本地网络中的服务而无需公网IP或端口映射。 frp工作原理是在公网服务器上部署一个frp服务器和一个frp客户端然后在需要暴露的本地服务器上部署一个frp客户端。frp客户端会将本地服务的流量通过加密通道发送到frp服务器frp服务器再将流量转发到公网访问者。这样即使本地服务器位于内网或没有公网IP也能实现被公网访问的效果。 frp可以用于很多场景比如远程监控、内网穿透、局域网共享等是一个非常实用的网络工具。 1.12 正向代理/反向代理 正向代理和反向代理是两种不同的代理服务器配置方式它们在网络中的作用和工作方式有所不同。 正向代理 定义正向代理Forward Proxy是代理服务器在客户端和目标服务器之间的中介代表客户端向目标服务器发送请求。用途用于隐藏客户端的真实IP地址访问被墙的网站加速访问等。工作方式客户端向正向代理发送请求代理服务器将请求转发给目标服务器然后将目标服务器的响应返回给客户端。 反向代理 定义反向代理Reverse Proxy是代理服务器位于目标服务器和客户端之间的中介代表目标服务器向客户端发送响应。用途用于负载均衡、安全性、缓存、SSL终结等。工作方式客户端向反向代理发送请求反向代理根据配置将请求转发给一个或多个目标服务器然后将目标服务器的响应返回给客户端。 总的来说正向代理隐藏了客户端代表客户端向服务器发送请求而反向代理隐藏了服务器代表服务器向客户端发送响应。两者的主要区别在于代理服务器的位置和功能。 SOCKS5 SOCKS5Socket Secure 5是一种**网络协议**用于在客户端和服务器之间进行数据传输。它是SOCKS协议的第五个版本相比之前的版本提供了更多的功能和安全性。 SOCKS5协议通常用于网络代理服务允许客户端通过代理服务器访问互联网。与HTTP代理不同SOCKS代理可以传输各种协议的数据包括HTTP、FTP、SMTP等更加灵活。此外SOCKS5还支持身份验证和UDP转发提供了更高的安全性和功能性。 使用SOCKS5代理可以帮助用户**隐藏真实IP地址绕过地区限制访问特定网站**提高网络安全性等。许多网络工具和软件都支持SOCKS5代理使其成为一个常用的网络工具。 VPN
什么是VPN 定义VPN是一种通过公共网络如互联网建立私密连接的技术用于在不安全的网络上创建安全的通信管道。用途用于保护用户的隐私和安全突破网络封锁访问受限制的内容等。工作方式通过加密和隧道技术在公共网络上创建一个安全的通信通道使得通过该通道传输的数据在传输过程中不易被窃听或篡改。 VPN可以看作成正向代理吗 在某种程度上可以将VPN视为一种正向代理。正向代理Forward Proxy是代理服务器在客户端和目标服务器之间的中介代表客户端向目标服务器发送请求。VPN也是一种将客户端的请求通过代理服务器转发到目标服务器的技术因此在这个意义上VPN可以被视为一种正向代理。 然而VPNVirtual Private Network虚拟专用网络通常具有更广泛的功能和用途不仅仅局限于将客户端的请求转发到目标服务器还包括加密通信、保护用户隐私、突破网络封锁等功能。因此虽然VPN可以看作是一种正向代理但它的功能和应用场景可能更加多样和复杂。 1.13 DHCP
端口客户端监听68 服务端监听67 什么是BOOTP 2 socket相关函数 套接字的分类 域间套接字类似于管道用于一个主机内的多个进程间通信以文件的方式标识公共资源原始套接字用于编写网络工具绕过传输层网络套接字用于用户间的网络通信
不同类型套接字接口同一参数类型 —— sockaddr* address
//头文件
#include sys/type.h
#include sys/socket.h// 创建 socket 文件描述符 (TCP/UDP, 客户端 服务器)
int socket(int domain, int type, int protocol);// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address, socklen_t address_len);// 开始监听socket (TCP, 服务器)
int listen(int socket, int backlog);// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address, socklen_t* address_len);// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);2.1 socket()
int socket(int domain, int type, int protocol);domain : 域根据不同套接字类型创建不同的套接字网络套接字使用AF_INET(ipv4)或AF_INET5(ipv6) type 套接字的类型 SOCK_STREAM:流式套接字 —— tcpSOCK_DGRAM数据包套接字 —— udp protocol 目前填0返回值网络文件描述符
int sockfd_ socket(AF_INET, SOCK_DGRAM, 0);分配fd分配tcp/udp控制块tcp control block/udp control block
2.2 bind
// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address, socklen_t address_len);将字符串地址转为网络的四字节小端—— inet_addr
struct sockarr_in local;
bzero(local, sizeof(local)); //填充字节
//初始化socket结构体的三个字段
local.sin_family AF_INET; //域
local.sin_port htons(port_); //本主机字节序转网络字节序 —— 端口号
local.sin_addr.s_addr inet_addr(ip_.c_str()); //将ip地址风格的字符串转uint32_t再转成网络字节序整型in_addr_t2.2.1 in_addr 与 字符串的转换函数
IP地址字符串转in_addr
inet_addrinet_aton in_addr转IP地址字符串
inet_ntoa :函数返回一个动态开辟的字符指针放在静态区不需要手动释放但是重复调用会覆盖之前的结果该函数不是线程安全的 inet_ntop:用户自己传缓冲区 inet_aton(ip_.c_str(), (local.sin_addr));
//local.sin_addr.s_addr inet_addr(ip_.c_str());
//local.sin_addr.s_addr INADDR_ANY; 上述socket结构体初始化在用户栈区通过调用bind将结构体绑定到socket文件中
int ret bind(sockfd_, (const struct sockaddr *)local, sizeof(local));2.2.2 关于绑定IP地址
IP地址为0任意地址绑定收到发送给这台主机任意ip地址的信息一台主机可能有多个网卡多个ip地址
#define INADDR_ANY ((in_addr_t)0x00000000) //#includein.hlocal.sin_addr.s_addr 0;
local.sin_addr.s_addr INADDR_ANY; //两者效果相同2.3 从套接字里收消息 —— recvfrom char inbuffer[size];struct sockaddr_in client; //输出型参数
socklen_t len sizeof(client);
sszie_t n recvfrom(sockfd_, inbuffer, sizeof(inbuffer) - 1, 0, (const struct sockaddr*)client, len);2.4 发送消息 —— sendto std::string info(inbuffer);
std::string echo_string server echo# info;
sendto(sockfd_, echo_string.c_str(), echo_string.size(), 0, (const sockaddr*)client, len);2.5 listen:服务器设置为监听状态 listen干了什么
tcb-status TCP_STATUS_LISTEN 建立两个队列tcb-syn_queue和tcb-accept_queue
listen的第二个参数防止syn泛洪
syn队列syn accept队列总长度未分配fd的tcb数量accept队列长度
2.6 accept获取新连接 addr,addrlen:获取客户端的socket返回值文件描述符
struct sockadd_in client;
socklen_t len sizeof(client);
int sockfd accept(listensockfd_, (struct sockaddr*)client, len); //listensockfd_是服务端类的成员,由socket()初始化sockfd可能有多个而listensockfd_只有一个称为监听套接字
2.7 connect 返回值0连接失败
2.8 popen
创建管道创建子进程程序替换将命令执行结果写入文件 3 UDP_Socket TCP_Socket
udp:单线程echo服务器
#include sys/types.h
#include sys/socket.h
#include arpa/inet.h //htons
#include string.h
#include stdlib.h //atoi
#include iostreamint main(int argc, char* argv[]) {// int port atoi(argv[1]); // a.out 8888int sockfd socket(AF_INET, SOCK_DGRAM, 0);struct sockaddr_in local;memset(local, 0, sizeof(local));local.sin_family AF_INET;local.sin_port htons(8888); local.sin_addr.s_addr INADDR_ANY; //0.0.0.0bind(sockfd, (struct sockaddr*)local, sizeof(local));char buffer[1024]{0};while(true) {struct sockaddr_in client;socklen_t len sizeof(client);ssize_t ret recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)client, len);buffer[ret] 0;sendto(sockfd, buffer, ret 1, 0, (struct sockaddr*)client, len); }}tcp:单线程echo服务器
#include sys/types.h
#include sys/socket.h
#include arpa/inet.h //htons
#include string.h
#include stdlib.h //atoi
#include iostream
#include unistd.hint main(int argc, char* argv[]) {// int port atoi(argv[1]); // a.out 8888int listenfd socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in local;memset(local, 0, sizeof(local));local.sin_family AF_INET;local.sin_port htons(8888); local.sin_addr.s_addr INADDR_ANY; //0.0.0.0bind(listenfd, (struct sockaddr*)local, sizeof(local));listen(listenfd, 5);char buffer[1024]{0};while(true) {struct sockaddr_in client;socklen_t len sizeof(client);int clientfd accept(listenfd, (struct sockaddr*)client, len);int ret read(clientfd, buffer, sizeof(buffer));buffer[ret] 0;write(clientfd, buffer, ret);}}4 后台任务 通过在命令末尾加上 将一个进程启动成后台进程 jobs : 查看后台任务 fg: 将后台任务提到前台 ctrl z: 将一个前台进程暂停之后将这个暂停的进程提到后台将bash进程自动提到前台 bg将一个暂停的后台进程运行在后台 PGID:进程组id任务和进程组的关系一个任务被一个进程组执行 SID:会话id(session id) bash进程的进程id TTY:控制终端 TTY是指终端设备通常是用户与计算机交互的界面。每个进程都可以有一个关联的TTY。TTY可以是物理终端如键盘和显示器也可以是虚拟终端如SSH会话或终端仿真器。TTY的相关信息可以通过/dev/tty或/dev/pts/*来表示。 TPGID终端进程组IDTPGID 的主要作用之一是确定前台进程组。在一个终端会话中只有一个进程组是前台进程组它接收来自终端的输入当用户在终端中启动一个新的命令时该命令通常会成为前台进程组的一部分从而接收来自终端的输入
4.1 终端、bash、前/后台进程、会话 bash进程是一个会话的session leader linux中一个会话和bash进程的关系 在Linux中一个会话session是一个用户与系统进行交互的一段时间。一个会话可以包含一个或多个进程而这些进程通常与一个终端terminal相关联。终端是用户与系统进行文本输入和输出的界面可以是物理终端、虚拟终端比如终端仿真器如xterm、gnome-terminal等或者通过SSH等方式远程连接的终端。 每个进程都有一个唯一的进程IDPID而在一个会话中有一个进程被认为是控制终端的拥有者。通常这个进程是用户登录时启动的shell进程比如bash。该shell进程成为会话的领头进程session leader。 与这个会话相关的进程无论是直接子进程还是孙子进程都共享同一个会话IDSID。这使得它们能够共享一些会话级的属性比如控制终端、作业控制等。 当你启动一个终端并登录系统时通常会话开始一个shell进程成为领头进程而你与该shell的交互都属于这个会话。当你在该终端中运行其他命令时它们将成为这个会话的子进程。 在一个会话中可以通过ps命令或者pstree命令查看进程树这有助于理解会话与进程之间的关系。例如你可以使用以下命令查看当前会话中的进程树 ps -ejH或者使用pstree命令 pstree总的来说一个会话是一个用户与系统交互的时间段而相关的进程树则包括会话领头进程和其衍生的子进程。 Bash进程通常是会话的领头进程而其他在Bash中运行的命令则是该会话的子进程。 4.2 会话退了后台进程会如何 当一个会话session终止时会话中的所有进程都会收到SIGHUP信号挂起信号。这通常发生在用户从控制终端注销logout时。收到SIGHUP信号后进程会有不同的行为取决于进程对该信号的处理方式 默认情况下大多数进程会终止terminate。某些进程可能会忽略SIGHUP信号继续运行。这通常是后台进程daemon所采取的策略以便继续在后台执行。 因此会话终止可能导致会话中的后台进程终止或继续运行具体取决于这些进程的信号处理方式。 4.3 后台进程与守护进程的区别 后台进程和守护进程的主要区别在于其目的和特性 目的 后台进程后台进程是指不与终端直接关联的进程它们可以在后台运行而不影响用户终端的操作。这种设计使得用户可以在终端上执行其他任务而不受后台进程的影响。守护进程守护进程是一种特殊的后台进程其设计目的是在系统启动时启动并在系统关闭时关闭。它们通常用于执行系统级任务如网络服务、日志记录等。 控制终端 后台进程后台进程不与任何控制终端直接关联。守护进程守护进程也不与任何控制终端直接关联它们通常在启动时会调用setsid函数创建一个新的会话从而使守护进程脱离终端控制。 生命周期 后台进程后台进程的生命周期与其父进程通常是一个终端会话相关联。守护进程守护进程的生命周期通常与系统的启动和关闭相关联它们在系统启动时启动在系统关闭时关闭。 4.4 守护进程 **自成进程组自成会话**的进程 —— 在后台运行不依赖于任何特定的终端或用户会话
创建守护进程 ——将自己变成一个独立的会话 一般单独的一个进程即进程组只有一个则它自己就是process group leader那么如何让进程变成守护进程呢
int main() {//忽略其他异常信号signal(SIGCLD, SIG_IGN);signal(SIGPIPE, SIG_IGN);signal(SIGSTOP, SIG_IGN);if (fork() 0) exit(0); //父进程退出setsid(); //创建新的会话//该守护进程可能服务于其他进程需要更改进程的工作目录chdir(cur_cwd);//由该进程创建的会话不因该占用IO所以需要“关闭”即将stdin、stdout、stderr重定向到/dev/nullint fd open(/dev/null, O_RDWR); //O_RDWR:以读写方式打开if (fd 0) {dup2(fd, 0);dup2(fd, 1);dip2(fd, 2);close(fd);}
}4.4 daemon —— 创建守护进程 5 HTTP 1 请求方法
1.1 GET 与 POST的区别 数据传输方式 GET通过 URL 参数传输数据数据在 URL 中可见适用于传输少量数据。POST通过请求体传输数据数据不在 URL 中可见适用于传输大量数据和敏感信息。 安全性 GET数据在 URL 中可见不适合传输敏感信息如密码等。POST数据在请求体中相对更安全适合传输敏感信息。 数据长度限制 GET受浏览器和服务器的限制通常不能超过 2048 个字符。POST通常没有固定长度限制但受服务器配置和网络传输等因素影响。 数据类型 GET仅能传输 ASCII 字符。POST可以传输二进制数据。 幂等性 GET幂等多次请求返回的结果应该是相同的。POST非幂等多次请求可能会产生不同的结果如提交订单。 缓存处理 GET可以被缓存可以被收藏为书签可被历史记录保存。 POST不能被缓存不应该被收藏为书签不会保存在历史记录中。即我们为什么无法从浏览器历史记录中查找到POST请求 POST 请求通常用于提交表单、执行操作等这些请求可能会改变服务器状态因此不适合保存在历史记录中以免用户在未经意的情况下重复执行这些操作。 另外POST 请求中的数据通常是通过请求体传输的而不是像 GET 请求那样在 URL 中可见所以即使保存了请求的 URL也无法完整地还原出 POST 请求所携带的数据。因此为了避免用户的隐私泄露和意外操作浏览器通常不会将 POST 请求保存在历史记录中。 使用场景 GET适用于获取资源、查询操作不应该用于改变服务器状态。POST适用于提交表单、上传文件、执行操作等可以改变服务器状态。
1.2 其他常见方法 GET从服务器获取资源。GET 方法应该只用于获取数据不应该对服务器上的资源产生其他影响。POST向服务器提交数据用于创建新资源。POST 方法通常用于提交表单数据或上传文件。PUT向服务器上传更新资源的表示。PUT 方法通常用于更新已经存在的资源客户端需要提供完整的资源表示。(可以上传数据)DELETE从服务器删除资源。DELETE 方法用于删除服务器上的资源。HEAD与 GET 方法类似但服务器只返回头部信息不返回实际数据。HEAD 方法通常用于获取资源的元数据如大小或修改日期。PATCH对资源进行部分修改。PATCH 方法用于对资源进行局部更新客户端提供要修改的部分及其新值。OPTIONS获取目标资源支持的通信选项。OPTIONS 方法用于查询服务器支持的方法和其他功能常用于跨域请求中的预检请求。TRACE追踪请求-响应的传输路径。TRACE 方法用于在目的服务器端发起一个测试以查看客户端发送的请求在传输过程中是否被修改。CONNECT建立用于代理服务器的隧道连接。CONNECT 方法用于建立与目标资源的双向连接通常用于加密连接的代理服务器。 1.3 HTTP1.0 与 HTTP1.1 关于请求方法的区别
http1.0三种postgetheadhttp1.1八种postgetheadoptionsputdeletetraceconnect
2 状态码 「200 OK」是最常见的成功状态码表示一切正常。如果是非 HEAD 请求服务器返回的响应头都会有 body 数据。「204 No Content」也是常见的成功状态码与 200 OK 基本相同但响应头没有 body 数据。「206 Partial Content」是应用于 HTTP 分块下载或断点续传表示响应返回的 body 数据并不是资源的全部而是其中的一部分也是服务器处理成功的状态。
3xx 类状态码表示客户端请求的资源发生了变动需要客户端用新的 URL 重新发送请求获取资源也就是重定向。
「301 Moved Permanently」表示永久重定向说明请求的资源已经不存在了需改用新的 URL 再次访问。「302 Found」表示临时重定向说明请求的资源还在但暂时需要用另一个 URL 来访问。
301 和 302 都会在响应头里使用字段 Location指明后续要跳转的 URL浏览器会自动重定向新的 URL。
「304 Not Modified」不具有跳转的含义表示资源未修改重定向已存在的缓冲文件也称缓存重定向也就是告诉客户端可以继续使用缓存资源用于缓存控制。
4xx 类状态码表示客户端发送的报文有误服务器无法处理也就是错误码的含义。
「400 Bad Request」表示客户端请求的报文有错误但只是个笼统的错误。「403 Forbidden」表示服务器禁止访问资源并不是客户端的请求出错。「404 Not Found」表示请求的资源在服务器上不存在或未找到所以无法提供给客户端。
5xx 类状态码表示客户端请求报文正确但是服务器处理时内部发生了错误属于服务器端的错误码。
「500 Internal Server Error」与 400 类型是个笼统通用的错误码服务器发生了什么错误我们并不知道。「501 Not Implemented」表示客户端请求的功能还不支持类似“即将开业敬请期待”的意思。「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码表示服务器自身工作正常访问后端服务器发生了错误。「503 Service Unavailable」表示服务器当前很忙暂时无法响应客户端类似“网络服务正忙请稍后重试”的意思。
3 消息头字段 Content-Type 数据类型text/html 、application/json、image/jpg 例如当请求图片资源时服务器需要在html文件中将图片路径带上并且需要填写图片对应格式的Content-Type Content-LengthBody部分长度 Host客户端告知服务器请求的资源是在哪个主机的的哪个端口上 User-Agent用户的操作系统和浏览器版本信息 referer当前页面是从哪个页面跳转过来的 Location重定向的地址 Connection 短链接http1.0长连接http1.1——keep-alive客户端和服务器协商
3.1 Cookie
http协议本身是无状态的Set-Cookie服务器向客户端发送浏览器收到将cookie写入文件之后客户端向服务器发送http报文会自动携带cookiecookie数据实在http协议头部字段中传输的 cookie文件内存级cookie存放在浏览器进程的虚拟内存中文件级cookie存放在浏览器的的某个路径下磁盘中 cookie的基础属性 domain可以访问该Cookie的域名。如果设置为“.google.com”则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”。 pathCookie的使用路径。如果设置为“/sessionWeb/”则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”。 httponly如果cookie中设置了HttpOnly属性那么通过js脚本将无法读取到cookie信息这样能有效的防止XSS攻击窃取cookie内容这样就增加了cookie的安全性,但不是绝对防止了攻击 secure该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPSSSL等在网络上传输数据之前先将数据加密。默认为false。 expires:指定了coolie的生存期默认情况下cookie是暂时存在的他们存储的值只在浏览器会话期间存在当用户退出浏览器后这些值也会丢失如果想让cookie存在一段时间就要为expires属性设置为未来的一个过期日期。现在已经被max-age属性所取代max-age用秒来设置cookie的生存期 cookie安全问题个人信息泄露ip地址修改cookie失效
session
通过session得到session id存放再服务端有服务端管理避免了cookie内容被窃取 解决cookie信息被盗取但是别人拿到session id在特定站点同样能访问到用户在该页面的数据如何避免当用户ip地址发生改变时服务器要求重新客户端认证
6 HTTPS 6.1 对称加密 采用单钥密码系统的加密方法同一个密钥可以同时用作信息的加密和解密这种加密方法称为对 称加密也称为单密钥加密特征加密和解密所用的密钥是相同的 常见对称加密算法DES、3DES、AES、TDEA、Blowfish、RC2等 特点算法公开、计算量小、加密速度快、加密效率高
6.2 非对称加密 公钥加密-私钥解密私钥解密-公钥解密 需要两个密钥来进行加密和解密这两个密钥是公开密钥public key简称公钥和私有密钥 private key简称私钥 常见非对称加密算法(了解)RSADSAECDSA 特点算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂而使得加密解密速度没有对 称加密解密的速度快。
6.3 非对称 对称加密 此时当其他方拿到公钥也无法会信息解密
6.3.1 中间人攻击 客户端无法知道公钥是否可信例如图上的公钥M客户端将其认为是服务器的公钥
6.4 数字证书
服务端在使用HTTPS前需要向CA机构申领一份数字证书数字证书里含有证书申请者信息、公钥信 息等。服务器把证书传输给浏览器浏览器从证书里获取公钥就行了证书就如身份证证明服务端 公钥的权威性 如何保证证书的完整性与合法性 CA机构用自己的私钥对证书进行加密形成数字签名
6.5 数字签名
CA机构签名客户端验证防止证书被篡改 6.6 对称 非对称 证书 —— SSL/TLS协议 等
特点算法公开、计算量小、加密速度快、加密效率高
6.2 非对称加密 公钥加密-私钥解密私钥解密-公钥解密 需要两个密钥来进行加密和解密这两个密钥是公开密钥public key简称公钥和私有密钥 private key简称私钥 常见非对称加密算法(了解)RSADSAECDSA 特点算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂而使得加密解密速度没有对 称加密解密的速度快。
6.3 非对称 对称加密
[外链图片转存中…(img-8i5waVtf-1711710069811)]
此时当其他方拿到公钥也无法会信息解密
6.3.1 中间人攻击
[外链图片转存中…(img-3ybQ0IhQ-1711710069812)]
客户端无法知道公钥是否可信例如图上的公钥M客户端将其认为是服务器的公钥
6.4 数字证书
服务端在使用HTTPS前需要向CA机构申领一份数字证书数字证书里含有证书申请者信息、公钥信 息等。服务器把证书传输给浏览器浏览器从证书里获取公钥就行了证书就如身份证证明服务端 公钥的权威性
[外链图片转存中…(img-COzrVvED-1711710069812)]
如何保证证书的完整性与合法性 CA机构用自己的私钥对证书进行加密形成数字签名
6.5 数字签名
CA机构签名客户端验证防止证书被篡改
[外链图片转存中…(img-mi65httk-1711710069812)]
6.6 对称 非对称 证书 —— SSL/TLS协议
[外链图片转存中…(img-O90fWJ72-1711710069812)] 文章转载自: http://www.morning.paxkhqq.cn.gov.cn.paxkhqq.cn http://www.morning.gyylt.cn.gov.cn.gyylt.cn http://www.morning.sqqpb.cn.gov.cn.sqqpb.cn http://www.morning.xgcwm.cn.gov.cn.xgcwm.cn http://www.morning.wlddq.cn.gov.cn.wlddq.cn http://www.morning.lrzst.cn.gov.cn.lrzst.cn http://www.morning.ryywf.cn.gov.cn.ryywf.cn http://www.morning.fkgqn.cn.gov.cn.fkgqn.cn http://www.morning.gnzsd.cn.gov.cn.gnzsd.cn http://www.morning.jwgmx.cn.gov.cn.jwgmx.cn http://www.morning.brld.cn.gov.cn.brld.cn http://www.morning.dmldp.cn.gov.cn.dmldp.cn http://www.morning.ddtdy.cn.gov.cn.ddtdy.cn http://www.morning.nlywq.cn.gov.cn.nlywq.cn http://www.morning.snyqb.cn.gov.cn.snyqb.cn http://www.morning.nqcwz.cn.gov.cn.nqcwz.cn http://www.morning.fgxr.cn.gov.cn.fgxr.cn http://www.morning.rgksz.cn.gov.cn.rgksz.cn http://www.morning.lsjgh.cn.gov.cn.lsjgh.cn http://www.morning.nlgnk.cn.gov.cn.nlgnk.cn http://www.morning.kbdrq.cn.gov.cn.kbdrq.cn http://www.morning.qmwzr.cn.gov.cn.qmwzr.cn http://www.morning.ryztl.cn.gov.cn.ryztl.cn http://www.morning.jbtwq.cn.gov.cn.jbtwq.cn http://www.morning.wdhzk.cn.gov.cn.wdhzk.cn http://www.morning.xwrhk.cn.gov.cn.xwrhk.cn http://www.morning.wjplm.cn.gov.cn.wjplm.cn http://www.morning.sxwfx.cn.gov.cn.sxwfx.cn http://www.morning.tbstj.cn.gov.cn.tbstj.cn http://www.morning.mdxwz.cn.gov.cn.mdxwz.cn http://www.morning.qjngk.cn.gov.cn.qjngk.cn http://www.morning.fqljq.cn.gov.cn.fqljq.cn http://www.morning.hxftm.cn.gov.cn.hxftm.cn http://www.morning.tbstj.cn.gov.cn.tbstj.cn http://www.morning.mxhys.cn.gov.cn.mxhys.cn http://www.morning.xwrhk.cn.gov.cn.xwrhk.cn http://www.morning.jjnry.cn.gov.cn.jjnry.cn http://www.morning.rjljb.cn.gov.cn.rjljb.cn http://www.morning.wctqc.cn.gov.cn.wctqc.cn http://www.morning.wlxfj.cn.gov.cn.wlxfj.cn http://www.morning.beiyishengxin.cn.gov.cn.beiyishengxin.cn http://www.morning.xtlty.cn.gov.cn.xtlty.cn http://www.morning.wbxr.cn.gov.cn.wbxr.cn http://www.morning.kfmnf.cn.gov.cn.kfmnf.cn http://www.morning.aswev.com.gov.cn.aswev.com http://www.morning.hjjkz.cn.gov.cn.hjjkz.cn http://www.morning.fqnql.cn.gov.cn.fqnql.cn http://www.morning.ykswq.cn.gov.cn.ykswq.cn http://www.morning.yrlfy.cn.gov.cn.yrlfy.cn http://www.morning.lmmh.cn.gov.cn.lmmh.cn http://www.morning.ctlbf.cn.gov.cn.ctlbf.cn http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn http://www.morning.jrqbr.cn.gov.cn.jrqbr.cn http://www.morning.ngqdp.cn.gov.cn.ngqdp.cn http://www.morning.cwgpl.cn.gov.cn.cwgpl.cn http://www.morning.rfqkx.cn.gov.cn.rfqkx.cn http://www.morning.gqddl.cn.gov.cn.gqddl.cn http://www.morning.xlwpz.cn.gov.cn.xlwpz.cn http://www.morning.i-bins.com.gov.cn.i-bins.com http://www.morning.mrfnj.cn.gov.cn.mrfnj.cn http://www.morning.ymrq.cn.gov.cn.ymrq.cn http://www.morning.mytmx.cn.gov.cn.mytmx.cn http://www.morning.qxbsq.cn.gov.cn.qxbsq.cn http://www.morning.mnbcj.cn.gov.cn.mnbcj.cn http://www.morning.yqwsd.cn.gov.cn.yqwsd.cn http://www.morning.sqqhd.cn.gov.cn.sqqhd.cn http://www.morning.nfsrs.cn.gov.cn.nfsrs.cn http://www.morning.gxeqedd.cn.gov.cn.gxeqedd.cn http://www.morning.lbgfz.cn.gov.cn.lbgfz.cn http://www.morning.yrnrr.cn.gov.cn.yrnrr.cn http://www.morning.xhfky.cn.gov.cn.xhfky.cn http://www.morning.ysckr.cn.gov.cn.ysckr.cn http://www.morning.czgtt.cn.gov.cn.czgtt.cn http://www.morning.kpygy.cn.gov.cn.kpygy.cn http://www.morning.znkls.cn.gov.cn.znkls.cn http://www.morning.nlnmy.cn.gov.cn.nlnmy.cn http://www.morning.tcsdlbt.cn.gov.cn.tcsdlbt.cn http://www.morning.kgjyy.cn.gov.cn.kgjyy.cn http://www.morning.pkrtz.cn.gov.cn.pkrtz.cn http://www.morning.ybgcn.cn.gov.cn.ybgcn.cn