
Linux网络编程
文章平均质量分 95
网络学习
小鬼yalo
欲戴其冠,必承其重
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux网络编程】多路转接IO(二)epoll
这种情况,不建议让多个线程同时在epoll_wait监听的socket,而是让其中一个线程epoll_wait监听的socket,当有新的链接请求进来之后,由epoll_wait的线程调用accept,建立新的连接,然后交给其他工作线程处理后续的数据读写请求,这样就可以避免了由于多线程环境下的epoll_wait惊群效应问题。事件回调机制:避免使用遍历,而是使用回调函数的方式,将就绪的文件描述符结构加入到就绪队列中,epoll_wait 返回直接访问就绪队列就知道哪些文件描述符就绪。原创 2025-06-26 14:55:18 · 851 阅读 · 17 评论 -
【Linux网络编程】多路转接I/O(一)select,poll
二者对比特性SelectPoll最大 FD 数受限(FD_SETSIZE)无限制性能(FD 量大时)O(n) 扫描O(n) 扫描事件类型仅读/写/异常更丰富(POLLRDNORM 等)平台支持跨平台Linux 专用FD 重用每次需重置 fd_set可复用 pollfd 数组Select:FD 数量少(<1024),需跨平台Poll:FD 数量多,仅需支持 Linux注意:两种模型都采用水平触发(LT)模式,即只要 FD 处于就绪状态,每次调用都会返回该 FD。原创 2025-06-24 14:04:23 · 1021 阅读 · 20 评论 -
【Linux网络编程】五种IO模型与非阻塞IO
阻塞IO:在内核将数据准备好之前,系统调用会一直等待。所有的套接字,默认都是阻塞状态的。非阻塞IO:如果内核将数据还没有准备好,系统调用仍会直接返回,并且返回EWOULDBLOCK错误码。轮询信号驱动IO:内核将数据准备好的时候,使用SIGIO信号通知应用程序进行IO操作。IO多路转接:虽然从流程图上看和阻塞IO类似。实际上最核心的在于IO多路转接能够同时等待多个文件描述符的就绪状态。异步IO:由内核在数据拷贝完成时,通知应用程序(而信号驱动是告诉应用程序何时可以开始拷贝数据)。原创 2025-06-23 12:23:04 · 713 阅读 · 18 评论 -
【Linux网络编程】数据链路层
如上图,主机A在 向主机B发送数据的时候,是需要将数据进行一层一层的封装,向下交付,到达网络层,需要封装IP报头,其中包含源IP地址和目标主机的IP地址。否则需要对数据包进行分片(fragmentation),这个工作是在网络层完成的,网络层的IP协议中的16位标识,3位标志,13位片偏移可以实现数据包的分片和组装工作。即包含了数据链路层的内容,也包含了一些物理层的内容。但是现在的问题是,当前的两台主机只能知道对方的IP地址,不知道对方的MAC地址,需要进行通信,必须 要先获取到对方的MAC地址。原创 2025-06-01 20:44:18 · 1088 阅读 · 31 评论 -
【Linux网络编程】网络层IP协议
因此, 除了最后一个报文之外,其他报文的长度必须是 8 的整数倍(否则报文就不连续了)。如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到 Internet 上,理论上 使用任意的 IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有 IP 地址。在复杂的网络结构中,找出一条通往终点的路线;4位首部长度:表名IP协议报头的长度,单位是4字节,所以IP协议报头的最大长度是15*4=60字节。包含在这个范围中的,都称为私有 IP,其余的则称为全局 IP(或公网 IP)。原创 2025-06-01 15:34:34 · 1207 阅读 · 9 评论 -
【Linux网络编程】传输层协议TCP,UDP
客户端调用connect发起三次握手,向服务器发起建立连接的请求。而服务器端通过listen将自己设置为监听状态。本质上,connect是发起三次握手,但是不参与三次握手的。服务器端通过accept获取底层建立好的连接,也不参与三次握手。原创 2025-05-29 11:27:19 · 1467 阅读 · 27 评论 -
【Linux网络编程】HTTPS协议原理
加密就是把明文(要传输的信息)进行一系列变换,生成密文。解密就是把密文,经过一系列的变换,还原成明文。在这个加密和解密的过程中,往往需要一个或者多个中间数据,来辅助这一过程的完成,这样的数据称作密钥。2,为什么需要加密?如果使用HTTP协议,不对传输的数据进行加密,由于我们通过网络传输的数据都会经过运营商的网络设备(如路由器,交换机等等),那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改了。原创 2025-05-12 08:00:09 · 884 阅读 · 28 评论 -
【Linux网络编程】http协议的状态码,常见请求方法以及cookie-session
GET方法:获取静态资源或者网页提交参数,以uri形式提交GET提交参数一般不建议太长,因为uri长度是有限的GET传参,参数是会显示出来的。POST方法:提交参数,以正文部分参数参数不会回显,相对私密不管是GET还是POST,都是明文传送,可以抓取,是不安全的。要做到真正的安全,必须要把报文进行加密,就要用到https协议。是用来负责会话管理与会话保持的。是HTTP的附加功能,不严格属于HTTP。原创 2025-05-02 16:25:42 · 1180 阅读 · 38 评论 -
【Linux网络编程】应用层协议HTTP(实现一个简单的http服务)
虽然说,应用层协议是需要我们程序猿自己定的。但是实际上,已经有大佬们定义了一些现成的,非常好用的应用层协议,供我们直接使用。HTTP(超文本传输协议 )就是其中之一。在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或传输超文本(如HTML)。原创 2025-04-25 20:22:20 · 1768 阅读 · 38 评论 -
【Linux网络编程】TCP Echo Server的实现
这次的echo server代码的编写,我遇到的问题是客户端代码运行到connect就停止了,也就是创建完套接字就阻塞住了,没有执行 建立连接以及后序的代码。找了半天才发现是服务器端的端口号初始化时出现了问题,裂开!!!原创 2025-04-14 21:00:20 · 1222 阅读 · 37 评论 -
【Linux网络编程】UDP Echo Server的实现
IP地址+端口号。原创 2025-04-10 12:52:45 · 1768 阅读 · 34 评论