随笔分类 - 网络编程
摘要:《网络通信协议》 1. 背景 在计算机体系中,存在着很多的网络通信协议;通信协议的实际上就是一段数据,通信双方按照提前约定的规则去进行编码解码,达到传输数据的目的;例如,TCP/IP是目前计算机设备最常用的通信协议;TCP/IP实际上是一个协议族,包含一组协议,其中靠近应用层且最常用的协议是TCP和
阅读全文
摘要:网络通信故障排查常用命令 1. ifconfig命令 主要用于查看当前系统的网卡和IP地址信息,通过此命令,可以查看以下信息: 本机当前激活的网卡列表 每个网卡的IPV4地址 每个网卡的IPV6地址 子网掩码 广播地址 可以看到本机当前有两块激活的网卡:eth0和lo ifconfig命令默认只展示
阅读全文
摘要:多线程服务器端实现 1.引入线程 在《基于Linux的多进程服务器 》中介绍了Linux下多进程服务端实现的原理,在文章《Linux下epoll》中,介绍了epoll的实现原理。多进程服务端与基于select或者epoll实现的服务端相比具有一定的优势,但是也有一定的问题:创建(复制)进程会给操作系
阅读全文
摘要:优于select的epoll 1. epoll的理解与应用 select服用方法由来已久,在《TCP/IP网络编程(6) 》中,介绍了如何使用select方法实现IO复用。但是利用该技术后,无论如何优化程序性能,也难于同时接入上百个客户端(同时也是基于硬件性能的不同)。这种select方式并不适合以
阅读全文
摘要:IO流分离 在《套接字与标准IO》中介绍,调用fopen函数打开文件后,可以与文件进行交换数据。因此可以说调用fopen函数之后创建了"流(stream)",此处的"指"数据流动,但是通常可以理解为"以数据手法为目的的一种桥梁"。 1. IO分离的方法 在之前的文章中介绍过两种分离IO流的方法,第一
阅读全文
摘要:标准IO函数的优点 标准IO函数具备两大优点: 标准IO函数具备良好的移植性标准IO函数可以利用缓冲提高性能 不仅是IO函数,所有的标准函数都具有很好的移植性,为了支持所有的操作系统和编译器,这些函数都是按照ANSI C标准定义的; 此外,使用标准IO函数会得到额外的缓冲支持。这里的缓冲区应该与套接
阅读全文
摘要:在Linux下,一般使用read & write函数完成数据IO,因为Linux下的套接字,可视为文件,其操作方式与文件类似,当套接字分配之后,会为其分配对应的文件描述符。在Windows下,则需要使用recv & send函数完成数据IO 1. Linux下的recv & send 函数 Linu
阅读全文
摘要:1. IPC基本概念 进程间通信(Inter process communication, IPC)以为这两个不同进程间可以交换数据,为了完成这一点,操作系统中应该提供两个进程可以同时访问的内存空间。因此,只要有两个进程可以同时访问的内存空间,就可以通过此空间来交换数据。但是,进程具有完全独立的内存
阅读全文
摘要:1. Linux下的多进程服务器 1.1 进程的概念及应用 并发服务器实现的模型和方法: 多进程服务器 (通过创建多个进程提供服务)多路复用服务器 (通过捆绑并统一管理IO对象提供服务)多线程服务器 (通过创建多个线程提供服务) 多进程技术是一种实现并发服务器的手段,在网络通信所占的时间中,数据通信
阅读全文
摘要:应用场景: 假设服务端需要同时向10000个客户端发送同样的通知消息,如果利用TCP,需要维护10000个套接字连接,如果是基于UDP,也需要进行10000数据传输,向大量客户端发送相同的数据,会对服务器端和网络流量产生负面的影响。 1. 多播 多播方式的数据传输是基于UDP完成的,因此其与UDP客
阅读全文
摘要:1. IO复用 并发服务器的实现方法 在网络程序中,数据通信时间比CPU运算时间占比更大,因此,采用并发的形式向多个客户端提供服务是一种有效利用CPU的方式。并发服务器的主要实现模型及方法如下所示: 多进程服务器,通过常见多个进程提供服务多路复用服务器,通过捆绑并统一管理IO对象提供服务多线程服务器
阅读全文
摘要:1. 套接字可选项 除了使用套接字的默认参数外,还可自定义设置套接字的多种参数: 套接字的参数 协议层选项名读取设置SOL_SOCKETSO_SNDBUFOOSO_RCVBUFOOSO_REUSEADDROOSO_KEEPALIVEOOSO_BROADCASTOOSO_DONTROUTEOOSO_O
阅读全文
摘要:TCP套接字的半关闭 TCP的断开过程比建立连接的过程更加的重要,一般在建立连接的过程中不会出现大的问题,但是在断开连接的过程中,可能发生预想不到的情况。 Linux中的close函数和windows下的closesocket函数意味着完全断开连接,既不能传输数据,也不能接收数据,因此在某些条件下,
阅读全文
摘要:基于DUP的服务端与客户端 在TCP/IP网络编程(2)中,介绍了TCP/IP的四层模型,传输层分为TCP和UDP两种方式,通过TCP套接字完成数据交换已经进行了介绍,下面介绍通过UDP套接字完成数据交换。 UDP套接字的特点 UDP的通信原理类似于寄送信件,在寄信之前,需要在信封上写好寄信人信息和
阅读全文
摘要:地址族与数据序列 IP(Internet Protocol)是为了收发网络数据而分配给计算机的值。端口号是为了区分程序中创建的套接字而分配的序号。目前IP地址分为两类,IPV4(四字节地址族 ), IPV6(16字节地址族)。目前以IPV4地址为例,4字节IP地址分为网络地址和主机地址,且分为A,B
阅读全文
摘要:1. 套接字 套接字是由操作系统提供的网络数据通信软件设备,即使对网络数据传输原理不了解,也能够使用套接字完成网络数据传输。为了与远程计算机进行数据传输,需要连接到英特网,套接字就是进行网络连接的工具。 服务端:接收连接请求的套接字创建流程如下: 1. 调用socket函数创建套接字 2. 调用bi
阅读全文