摘要: 本章讲解为什么要设计buffer和他的作用 在网络编程的应用层中必须使用 Buffer(缓冲区),核心原因是底层 IO 读取数据的粒度不受控制 —— 调用 read ()/recv () 读取 socket 数据时,实际读取的字节数由内核、网络状况、对方发送策略共同决定,可能出现 “半包”(仅读到半 阅读全文
posted @ 2026-03-02 16:10 cyusouyiku 阅读(13) 评论(0) 推荐(0)
摘要: 本章来讲讲AltasProxy整体架构设计以及为什么这么设计,初衷和理由是什么? 1.整体架构: 首先代理会收到来自客户端发送的http请求,epoll作为性能强大的I/O复用,和select相比较的优点是select会有一个上限,可能是1024,达到这个监听上限之后就要重新重置了,所以会影响效率。 阅读全文
posted @ 2026-03-02 14:12 cyusouyiku 阅读(13) 评论(0) 推荐(0)
摘要: 1.项目背景和问题描述: 假设我写了一个个人博客网站或者别的功能网站,跑在一台机器上,这一台就扛不住,响应变慢甚至挂掉。于是我会可能想加机器,变成两台,三台或者多台,但是问题来了,用户或者客户端只知道一个地址也不知道该连接哪一个,也不可能加一个机器就改配置。举个最极端的例子,高并发的12306就是一 阅读全文
posted @ 2026-03-02 13:17 cyusouyiku 阅读(20) 评论(0) 推荐(0)
摘要: include <sys/un.h> //本章主要是讲解Unix套接字,这个发明出来就是提高本机中的传输效率,比网络套接字快2倍左右,不需要走过其他类似IP层之类的。 struct sockaddr_un { sa_family_t sun_family; // 地址族,必须是 AF_UNIX ch 阅读全文
posted @ 2026-03-02 10:38 cyusouyiku 阅读(11) 评论(0) 推荐(0)
摘要: 设置超时的方法有三种: alarm + 信号(超时发 SIGALRM 中断 recvfrom) select 的 timeout 参数(同时等待多描述符) SO_RCVTIMEO/SO_SNDTIMEO 套接字选项(最简单) 扩展:connect 超时、readv/writev、recvmsg/se 阅读全文
posted @ 2026-03-02 10:38 cyusouyiku 阅读(11) 评论(0) 推荐(0)
摘要: 守护进程与inetd 守护进程 一句话:Unix 网络服务要么自己变成守护进程,要么由 inetd/xinetd 托管 成为守护进程的步骤(典型): fork() 后父进程 exit,子进程在后台 setsid() 创建新会话,脱离控制终端 再次 fork() 防止重新打开控制终端 chdir("/ 阅读全文
posted @ 2026-03-02 10:37 cyusouyiku 阅读(9) 评论(0) 推荐(0)
摘要: IPv4与IPv6,IP选项 IPv4 与 IPv6 地址结构 IPv4: struct sockaddr_in (sin_addr: struct in_addr, 32 位) IPv6: struct sockaddr_in6 (sin6_addr: struct in6_addr, 128 位 阅读全文
posted @ 2026-03-02 10:35 cyusouyiku 阅读(15) 评论(0) 推荐(0)
摘要: include <netdb.h> struct hostent *gethostbyname(const char *hostname);//本函数如果调用成功就返回一个指向hostent结构的指针,该结构中含有所查找主机的所有IPv4地址 struct hostent { char *h_nam 阅读全文
posted @ 2026-03-02 10:34 cyusouyiku 阅读(9) 评论(0) 推荐(0)
摘要: SCTP客户/服务器程序设计 与 TCP 回射程序的对比 TCP:字节流,无消息边界 SCTP:消息有边界,一次 sctp_recvmsg 收一条完整消息 SCTP 支持多流:可让不同"会话"走不同流,某流阻塞不影响其他 SCTP 服务器模式 迭代(iterative):一次处理一个客户,类似简单 阅读全文
posted @ 2026-03-02 10:33 cyusouyiku 阅读(10) 评论(0) 推荐(0)
摘要: 本章主要讲的是SCTP套接字编程 1.SCTP和TCP的主要区别 SCTP是信息导向,非字节流 支持多流:一个连接内有多个逻辑流,某流阻塞不影响其他 支持多宿:一个端点可有多个IP 四次握手:优雅关闭 接口概览 socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP 阅读全文
posted @ 2026-03-02 10:32 cyusouyiku 阅读(17) 评论(0) 推荐(0)
摘要: UDP版本的客户端/服务器模型 include <sys/socket.h> ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags,struct sockaddr *from, socklen_t *addrlen); s 阅读全文
posted @ 2026-03-02 10:28 cyusouyiku 阅读(6) 评论(0) 推荐(0)
摘要: 有很多方法来获取和设置影响套接字的选项 include <sys/socket.h> int getsockopt(int sockfd, int level, int optname,void *optval,socklen_t *optlen); int setsockopt(int sockf 阅读全文
posted @ 2026-03-02 10:27 cyusouyiku 阅读(5) 评论(0) 推荐(0)
摘要: 背景问题:在 TCP 客户端同时处理标准输入和 TCP 套接字的场景下,可能会出现阻塞问题。具体来说,当客户端程序调用 fgets 或其他标准输入读取函数时,如果标准输入没有数据,客户端会被阻塞在读取操作上。这种情况下,即使服务器已经通过 TCP 向客户端发送了 FIN(表示 TCP 连接已经关闭) 阅读全文
posted @ 2026-03-02 10:25 cyusouyiku 阅读(6) 评论(0) 推荐(0)
摘要: 本章就是根据第四章的函数来编写一个完整的TCP客户/服务器程序实例 客户从标准输入读入一行文本,并写给服务器 服务器从网络读入这行文本,并回射给客户 客户从网络输入读入这行回射代码,并标出了用于输入和输出的函数 include "unp.h" int main(int argc, char **ar 阅读全文
posted @ 2026-03-02 10:21 cyusouyiku 阅读(6) 评论(0) 推荐(0)
摘要: 本章主要讲解编写一个完成的TCP客户/服务器所需要的基本套接字函数 include <sys/socket.h> include <unistd.h> int socket(int family, int type, int protocol);返回套接字描述符,要不就是0 int connect( 阅读全文
posted @ 2026-03-02 10:17 cyusouyiku 阅读(7) 评论(0) 推荐(0)
摘要: IPv4套接字结构体地址代码 include <stdint.h> include <netinet/in.h> include <sys/socket.h> struct in_addr { in_addr_t s_addr; }; struct sockaddr_in { uint8_t sin 阅读全文
posted @ 2026-03-02 10:09 cyusouyiku 阅读(9) 评论(0) 推荐(0)
摘要: 本章主要讲解传输层协议 1.TCP传输控制协议: 特点:面向连接,可靠,字节流,全双工 三次握手建立连接,四次挥手释放连接 状态转换(简化): CLOSED -> SYN_SENT -> ESTABLISHED -> FIN_WAIT_1 -> FIN_WAIT_2 -> TIME_WAIT -> 阅读全文
posted @ 2026-03-02 10:05 cyusouyiku 阅读(10) 评论(0) 推荐(0)
摘要: 本章开始通过Unix编程书学习,一步一步复现主要函数和巩固知识点。 1.本书范围: 套接字联网API 2.简单的网络模型: OSI自上而下:应用层,表示层,会话层,传输层,网络层,数据链路层和物理层。 3.简化四层网络: 应用层:HTTP,FTP,DNS 传输层:TCP,UDP,SCTP 网络层:I 阅读全文
posted @ 2026-03-02 10:00 cyusouyiku 阅读(8) 评论(0) 推荐(0)