Unix网络编程

UNIX网络编程之六:基本UDP套接字

UDP是无连接不可靠的数据报协议,不同于TCP提供的面向连接的可靠字节流。常见的使用UDP的应用程序有:DNS,NFS和SNMP。

一、概述

UDP的主要特点如下:

  • UDP是面向无连接的,不需要建立连接就可以传输数据

  • UDP尽最大可能交付,不保证可靠交付

  • UDP是面向报文,对应用层传输的报文添加首部后就直接发送,不合并不拆分

  • UDP没有拥塞控制

  • UDP支持一对一,一对多,多对一,多对多

  • UDP首部八个字节,开销小

基于UDP的套接字编程比基于TCP的相对较为简单。客户不与服务器建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须指定目的地,的地址作为参数。类似的,服务器不接受来自客户端的连接,而是只管调用recvfrom函数,等待来自某个客户的数据到达。recvform将所接收的数据报一道返回客户的协议地址,因此服务器可以把响应发送给正确的客户。下图给出了典型的UDP客户/服务器程序的函数调用。

UNIX网络编程之五:select和poll函数

一、I/O复用技术

I/O多路复用是指内核一旦发现进程指定的一个或者多个I/O条件准备就绪,它就通知该进程。I/O复用适用于以下场合:

  • 当客户处理多个描述符(一般是交互式输入或网络套接字),必须适用I/O复用
  • 当一个客户处理多个套接字时,这种情况很少见,但也可能出现
  • 当一个TCP服务器既要处理监听套接字,又要处理已连接套接字,一般就要使用I/O复用
  • 如果一个服务器既要适用TCP,又要适用UDP,一般就要使用I/O复用
  • 如果一个服务器要处理多个服务或者多个协议,一般就要使用I/O复用

与多线程和多进程技术相比,I/O复用技术的最大优势就是系统开销小,系统不必创建进程/线程,也不必维护这些进程/进程,从而大大减小了系统的开销。

UNIX网络编程之四:TCP客户-服务器示例

本篇博客主要记录一个完整的TCP客户/服务器实例的编写,以及从这个实例中引发的对僵死进程的处理等问题。

一、TCP客户/服务器功能需求

本实例完成以下功能:

  • 客户从标准输入读入一行文本,并写给服务器
  • 服务器从网络输入中读入这行文本,并回射给客户
  • 客户从网路输入读入这行回射文本,并显示在标准输入

需要用到的函数:

  • 套接字编程基本函数(socket,bind,listen,accept,connect,close等),完成套接字编程
  • 标准I/O库函数fputs和fgets,完成输入和输出
  • read,writen,readline函数,完成数据的传输
  • fork函数,完成并行服务器的编写

UNIX网络编程之三:基本套接字编程

unp第三章主要介绍了基本套接字编程函数。主要有:socket(),bind(),connect(),accept(),listen()等。 本博文也直接进入正题,对这几个函数进行剖析和讲解。

一、基本套接字函数

在《计算机网络》和《TCP/IP详解》中,我们经常讨论TCP/IP的工作流程,连接建立的三次握手和连接断开的四次挥手等,那么这些如何体现在程序中呢?我们如何来运用这些理论知识于实践之中呢?下面我们来看看套接字编程中客户和服务器进程之间的一些典型事件的时间表。

如图,服务器首先启动,稍后客户进程启动,它通过connect()函数试图连接服务器,这个阶段完成三次握手,然后read()和write()完成客户和服务器之间的数据传输,之后客户进程调用close()来请求断开连接,服务器收到后读取EOF,接着关闭连接,这时完成四次挥手的过程。下面就图中的每个函数,细细剖析他们的用途。

UNIX网络编程之二:套接字编程简介

unp第二章主要将了TCP和UDP的简介,这些在《TCP/IP详解》和《计算机网络》等书中有很多细致的讲解,可以参考本人的这篇博客【计算机网络 第五版】阅读笔记之五:运输层,这篇博客就不再赘述。

本篇博客主要记录套接字编程API,从一些基本的API来一步一步了解套接字网络编程。

一、套接字地址结构

大多数的套接字函数都以一个指向套接字地址结构的指针作为参数。每个协议簇都定义了自己的套接字地址结构。 套接字地址结构均以sockaddr_开头,并以对应每个协议簇的唯一后缀结尾。

ipv4套接字地址结构

UNIX网络编程之一:代码环境搭建

粗略的阅读过《TCP/IP详解》和《计算机网络(第五版)》后,开始啃这本《UNIX网络编程卷一:套接字联网API》,目前linux下的编程不算太了解,在阅读的过程中也会有很多障碍,希望自己坚持下去。

一、源代码的下载和编译

源代码下载地址:http://www.unpbook.com/ , 下载下来得到unpv13e.tar.gz文件

编译步骤: 解压缩zxvf unpv13e.tar.gz

tar zxvf unpv13e.tar.gz

进入unpv13e文件夹中

cd /unpv13e
./configure//如果权限不够可以chmod改权限

编译lib文件

cd lib
make
cd ../libfree
make
cd ../libgai
make