#阮一峰的网络日志

UNIX网络编程学习笔记:值-结果(value-result)参数

前言当把套接口地址结构传递给套接口函数时,总是通过指针来传递的,即传递的是一个指向结构的指针。结构的长度也作为参数来传递,其传递的方式取决于结构的传递方向:从进程到内核,还是从内核到进程。1、从进程到内核从进程到内核传递套接口地址结构的函数有3个:bind、connect和sendto,这3个函数的一个参数是指向套接口...

UNIX网络编程读书笔记:套接口地址结构

前言大多数套接口函数都需要一个指向套接口地址结构的指针作为参数。每个协议族都定义它自己的套接口地址结构。这些结构的名字均以“sockaddr_”开头,并以对应每个协议族的唯一后缀结束。IPv4套接口地址结构IPv4套接口地址结构通常也称为”网际套接口地址结构“,它以”sockaddr_in“命名,定义在头文件<n...

UNIX网络编程读书笔记:TCP输出、UDP输出和SCTP输出

TCP输出下图展示了应用进程写数据到TCP套接口的过程。每一个TCP套接口有一个发送缓冲区,我们可以用SO_SNDBUF套接口选项来改变这个缓冲区的大小。当应用进程调用write时,内核从应用进程的缓冲区中拷贝所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用进程的缓冲区大于套接口发...

UNIX网络编程读书笔记:图解TCP端口号和并发服务器

          图1TCP服务器在端口21上执行被动打开             &n...

UNIX网络编程读书笔记:端口号、套接口对和套接口

端口号端口号(portnumber):16位整数,用来区分不同的进程。服务器使用的端口号:TCP和UDP定义了一组众所周知的端口(well-knownport),用于标识众所周知的服务。客户端使用的端口号:通常使用短期存活的临时端口(ephemeralport)。这些端口号通常由传输层协议自动赋予客户。客户一般不关心其...

UNIX网络编程读书笔记:简介

认知套接口编程接口理解原始套接口(rawsocket)的概念 值得注意的是,客户和服务器是典型的用户进程,而TCP和IP协议则通常是系统内核协议栈的一部分。上图中在TCP和UDP之间留有间隙,用于指出应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(rawsocket)。UNIX网络编程中...

UNIX/Linux网络编程基础:应用层协议简介

目录1、HTTP协议2、FTP协议3、TELNET协议4、NFS协议1、HTTP协议应用层协议HTTP协议是Web的核心。HTTP协议在Web的客户程序和服务器程序中得以实现,运行在不同系统上的客户程序和服务器程序通过交换HTTP消息彼此通信。HTTP协议定义数据格式,使得服务器和客户端通过协议进行数据交流。客户端和服...

UNIX/Linux网络编程基础:图解TCP/IP协议栈

目录1、主机到网络层协议:以太网协议2、IP协议3、网际控制报文协议(ICMP)4、传输控制协议(TCP)5、用户数据报文协议(UDP)6、流控制传输协议(SCTP)7、地址解析协议(ARP) 联网的各个终端之间能否进行交互的软件基础是网络协议栈,目前主流的网络协议栈是TCP/IP协议栈。1、主机到网络层协议...

网络IPC:套接字之非阻塞和异步I/O

通常,recv函数没有数据可用时会阻塞等待。同样地,当套接字输出队列没有足够空间来发送消息时函数send会阻塞。在套接字非阻塞模式下,行为会改变。在这种情况下,这些函数不会阻塞而是失败,设置errno为EWOULDBLOCK或者EAGAIN。当这些发生时,可以使用poll或select来判断何时能接收或者传输数据。在S...

网络IPC:套接字之带外数据

带外数据(Out-of-banddata)是一些通信协议所支持的可选特征,允许更高优先级的数据比普通数据优先传输。即使传输队列已经有数据,带外数据先行传输。TCP支持带外数据,但是UDP不支持。套接字接口对带外数据的支持,很大程度受TCP带外数据具体实现的影响。TCP将带外数据称为“紧急”数据(“urgent”data...

网络IPC:套接字之套接字选项

套接字机制提供两个套接字选项接口来控制套接字的行为。一个接口用来设置选项,另一个接口允许查询一个选项的状态。可以获取或设置的三种选项:(1)通用选项,工作在所有套接字类型上。(2)在套接字层次管理的选项,但是依赖于下层协议的支持。(3)特定与某协议的选项,为每个协议所独有。SingleUNIXSpecification...
代码星球 ·2021-02-21

网络IPC:套接字之数据传输

既然将套接字端点表示为文件描述符,那么只要建立连接,就可以使用read和write来通过套接字通信。通过在connect函数里设置对方地址,数据报套接字也可以“连接”。在套接字描述符上采用read和write是非常有意义的,因为可以传递套接字描述符到那些原先设计为处理本地文件的函数。而且可以安排传递套接字描述符到执行程...

网络IPC:套接字之建立连接

如果处理的是面向连接的网络服务(SOCK_STREAM或SOCK_SEQPACKET),在开始交换数据以前,需要在请求服务的进程套接字(客户端)和提供服务的进程套接字(服务器)之间建立一个连接。客户端可以用connect建立一个连接。#include<sys/socket.h>intconnect(ints...

网络IPC:套接字之寻址

在学习用套接字做一些有意义的事情之前,需要知道如何确定一个目标通信进程。进程的标识有两个部分:计算机的网络地址可以帮助标识网络上想与之通信的计算机,而服务可以帮助标识计算机上特定的进程。1、字节序运行在同一台计算机上的进程相互通信时,一般不用考虑字节的顺序(字节序),字节序是一个处理器架构特性,用于指示像整数这样的大数...
代码星球 ·2021-02-21

网络IPC:套接字之套接字描述符

套接字是通信端点的抽象。与应用程序要使用文件描述符访问文件一样,访问套接字也需要套接字描述符。套接字描述符在UNIX系统是用文件描述符实现的。事实上,许多处理文件描述符的函数(如read和write)都可以处理套接字描述符。要创建一个套接字,可以调用socket函数。#include<sys/socket.h&g...
代码星球 ·2021-02-21
首页上一页...7891011...下一页尾页