- 博客(23)
- 资源 (15)
- 收藏
- 关注
原创 《网络编程》原始套接字 ---ping程序实现
基于字节流套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)不可以访问传输层协议,只是对应用层的报文进行操作,传输层的数据报格式都是由系统提供的协议栈实现,用户只需要填充相应的应用层报文,由系统完成底层报文首部的填充并发送。原始套接字(SOCK_RAW)可以访问位于基层的传输层协议,原始套接字没有端口号。 原始套接字(SOCK_RAW)是一种不同于 SOCK_STREAM、SOCK_DGRAM 的套接字,它实现于系统核心。原始套接字使进程可以读与写 ICMP、IGMP 等
2014-12-23 18:08:57 5155 4
原创 《网络编程》带外数据
有些传输层协议具有带外(Out Of Band,OOB)数据的概念,用于迅速通告对端本端所发生的重要事件。因此,带外数据比普通数据(也称为带内数据)有更高的优先级,它应该总是立即被发送,而不论发送缓冲区中是否有排队等待发送的普通数据或因流量控制而导致发送端的通告窗口大小为 0(即停止发送数据) 。带外数据的传输可以使用一条独立的传输层连接,也可以映射到传输普通数据的连接中。 UDP 没有实现带外数据传输,TCP 也没有真正的带外数据。只不过 TCP 利用其首部中的 紧急指针标志 和 紧急指针
2014-12-20 17:24:52 2466
原创 《网络编程》高级 UDP 套接字编程
UDP 是一个无连接、不可靠的数据报协议,任何可靠传输都需由应用程序提供,例如:超时重传、序列号应答机制,但是它在某些场合使用效率高,方便。它支持广播和多播。
2014-12-19 14:51:51 1841
原创 《网络编程》广播和多播
在网络协议中 IP 地址有三种方式,即为单播地址、广播地址 以及 多播地址。假设多个主机上的共享信道网络是以太网,每个以太网帧包含源主机和目的主机的以太网地址。若目的地址仅指定单个接收接口,则称为单播,在单播方式下,任意两台主机之间的通信不会干扰网内其他主机。若目的地址包含网上的所有主机的接收接口时,即一个主机要向网上所有主机发送帧,则称为广播。若一个主机把帧发送给属于多播组的多个主机,则称为多播。广播和多播仅应用于 UDP,可以将数据报文同时传给多个接收者,而 TCP 是一个面向连接的字节流协议,意味着只
2014-12-18 16:47:43 2403
原创 《网络编程》路由套接字
Unix 系统集成了路由功能,它包含相应的路由数据库可提供的路由信息,用户可以通过命令方式来增加、修改以及删除路由表中的项目,也可以只查看路由表的信息。在创建套接字时,可以通过指定参数 AF_ROUTE 域创建路由套接字,路由套接字可以访问内核中路由子系统的接口信息。
2014-12-18 14:47:02 2078
原创 《网络编程》ioctl 操作
ioctl 函数和 fcntl 函数类似,都可用于对描述符的操作,获取或设置已打开描述符的属性,但是两个函数在网络编程相关中操作针对不同了类型,fcntl 函数有套接字操作、文件操作,而 ioctl 函数除了可以操作 fcntl 函数可操作的类型之外,还可以进行接口操作、路由表操作、 ARP 高速缓存操作以及流系统操作。
2014-12-17 16:55:17 1861
原创 《网络编程》非阻塞 I/O
非阻塞式的 I/O 是进程调用 I/O 操作时,若数据未准备就绪,则立即返回一个 EWOULDBLOCK 错误,在数据准备就绪之前,应用进程采用轮询的方式检查数据是否准备就绪。直到数据准备就绪,则内核把该数据复制到应用进程的缓冲区,完成数据复制之前进程处于阻塞状态,直到数据复制完成后才返回。即 I/O 操作第一阶段处于轮询检查状态,第二阶段处于阻塞状态。
2014-12-17 08:28:28 2805
原创 《网络编程》Unix 域套接字
Unix 域套接字是一种客户端和服务器在单主机上的 IPC 方法。Unix 域套接字不执行协议处理,不需要添加或删除网络报头,无需验证和,不产生顺序号,无需发送确认报文,比因特网域套接字的效率更高。Unix 域套接字提供字节流(类似于 TCP)和数据报(类似于 UDP)两种接口,UNIX域数据报服务是可靠的,既不会丢失消息也不会传递出错。UNIX域套接字是套接字和管道之间的混合物。
2014-12-16 18:47:59 1899
原创 《网络编程》高级 I/O
本节是套接字的高级 I/O 。为套接字设置超时闹钟,使用更加方便的数据传输函数。套接字的 I/O 操作上设置超时有三种方法:调用 alarm 函数,在它指定超时到期时产生 SIGALRM 信号;在 select 函数中设置超时阻塞等待 I/O,以替代直接阻塞在 read 或write 调用上;使用 SO_RCVTIMEO 和 SO_SNDTIMEO 套接字选项(这两个选项只是一部分实现
2014-12-16 10:56:40 1743
原创 《网络编程》守护进程
守护进程是在后台运行并独立于所有终端控制的进程。守护进程没有控制终端源于它们通常是由系统初始化脚本启动,但是也有可能从某个终端由用户在 shell 提示符下键入命令行启动,这种启动方式的守护进程必须亲自脱离与控制终端的关联,从而避免与作业控制、终端会话管理、终端产生信号等发生任何不期望的交互,也可以避免在后台运行的守护进程非预期地输出到终端。 由于守护进程没有控制终端,当守护进程出错时,必须通过某种输出函数输出错误消息,而不能使用标准输出函数。syslog 函数是输出这些消息的标准方法,它把
2014-12-15 21:32:04 1759 1
原创 《网络编程》IPv4 与 IPv6 相互操作
由于互联网终端不断增加,IPv4 地址长度(32位)已不能够满足要求,所以出现了 IPv6地址(128位),但是现有应用程序大部分还是采用 IPv4 地址形式,所以必须解决 IPv4 与 IPv6 之间的相互操作,使现有基于 IPv4 的应用程序能够与基于 IPv6 的应用程序相互通信。那么我们怎么实现 IPv4 客户端与 IPv6 服务器、IPv6 客户端与 IPv4 服务器之间的通信。
2014-12-15 16:54:05 2984
原创 《网络编程》套接字地址与名字转换
在套接字编程中,我们经常使用数字的 IP 地址和端口号进程编程,但是我们平常所熟悉的是一些便于记忆的字符名字,要使这种名字能够为套接字操作函数识别,所以这两者之间必须存在着某种转换关系。本节介绍的是 【主机名 与 地址】 和 【服务名 与 端口号】 之间的转换。在 Unix 系统中,可以使用函数 gethostbyname、gethostbyaddr 实现【主机名 与 地址】之间的转换;可以使用函数 getservbyname、getservbyport 实现 【服务名 与 端口号】 之间的转换。但是前面这
2014-12-15 09:04:07 1866
原创 《网络编程》I/O 多路复用
在前面的文章中介绍了五种 I/O 模型《I/O 模型》,这里介绍 I/O 模型中 I/O 多路复用在 TCP 套接字编程中的使用。在 I/O 多路复用中主要是 select 和 poll 函数的使用。select 函数 该函数允许进程指示内核等待多个事件中的任何一个发生,并只在一个或多个事件发生或超过指定时间后才被唤醒。进程调用 select 函数是告知内核,进程对哪些描述
2014-12-13 17:12:25 2918
原创 《网络编程》I/O 模型
在分析 I/O 模型之前,首先了解 同步 I/O 和 异步 I/O 的基本概念:同步 I/O:进程调用 I/O 操作函数时,在 I/O 操作函数返回之前,该进程会被挂起(即阻塞),直到 I/O 操作完成后返回;异步 I/O:进程调用 I/O 操作函数时,在 I/O 操作函数返回之前,该进程不会被挂起(即不阻塞),当 I/O 操作完成后会通知方式告知进程;在 Unix 系统中主要有 5 种 I/O 模型:阻塞式 I/O;非阻塞式 I/O;I/O 多路复用;信号驱动式 I/O;异步 I/O;一般一个输入
2014-12-13 12:15:35 3672
原创 《网络编程》基于 TCP 套接字编程的分析
本节围绕着基于 TCP 套接字编程实现的客户端和服务器进行分析,首先给出一个简单的客户端和服务器模式的基于 TCP 套接字的编程实现,然后针对实现过程中所出现的问题逐步解决。有关基于 TCP 套接字的编程过程可参考文章《基本 TCP 套接字编程》。该编程实现的功能如下:(1)客户端从标准输入读取文本,并发送给服务器;(2)服务器从网络输入读取该文本,并回射给客户端;(3)客户端从网络读取由服务器回射的文本,并通过标准输出回显到终端;
2014-12-12 20:38:09 2116
原创 《网络编程》基本 TCP 套接字编程
基于 TCP 的套接字编程的所有客户端和服务器端都是从调用 socket 开始,它返回一个套接字描述符。客户端随后调用 connect 函数,服务器端则调用 bind、listen 和 accept 函数。套接字通常使用标准的 close 函数关闭,但是也可以使用 shutdown 函数关闭套接字。下面针对套接字编程实现过程中所调用的函数进程分析
2014-12-10 18:59:10 2818 2
原创 《网络编程》套接字编程简介
本节介绍的套接字是可以实现不同计算机之间的远程进程间通信。套接口是网络进程的 ID,在网络中每一个节点都有一个网络地址,也就是 IP 地址,两个进程间通信时,首先要确定各自所在网络节点的网络地址。但是,网络地址只要确定进程所在的计算机,由于一台计算机上同时可能有多个网络进程,所以仅凭网络地址还不能确定是网络中的哪一个进程,因此套接口中还需要其他信息,也就是端口。在一台计算机中,一个端口号只能分配给一个进程,所以,进程和端口之间是一一对应的关系。因此,使用端口号和网络地址的组合就能唯一地确定整个网络中的一个网
2014-12-10 10:42:34 2086
原创 《网络编程》关于 UNIX网络编程 卷1 的 unp.h 和源码编译问题
本文针对《网络编程 卷1》unp.h 头文件及其编译问题进行记录,在使用本书的源码时必须解决这个问题。本书的源码可在这里下载 http://www.unpbook.com。 首先进行编译,在目录 unpv13e下依次执行以下步骤./configure cd lib make cd ../libfree make cd ../libroutemake
2014-12-09 18:51:30 11198 20
原创 《网络协议》TCP 四种定时器
TCP 是提供可靠的传输层,它使用的方法之一就是确认从另一端收到的数据。但是数据和确认都可能会丢失。TCP 通过在发送时设置一个定时器来解决这个问题。如果当定时器溢出时还没收到确认,它就会重传该数据。关键在于超时和重传策略,即怎样决定超时的时间间隔和如何确定重传的频率。 对于每个连接,TCP 管理着四个不同的定时器:重传定时器、坚持定时器、保活定时器 以及 2MSL 定时器。
2014-12-09 15:52:19 1942
原创 《网络协议》TCP 的成块数据流
在前面的文章中《TCP 的交互数据流》我们可以知道,TCP 的成块数据流是在要求传输效率较高的情况下使用,例如 FTP。对于这些要求传输 TCP 最长报文段的应用,TCP 协议采用了滑动窗口协议,使发送端在等待确认前可以连续发送多个分组。 一般来说,发送端发送一个 TCP 数据报,则接收端就应该发送一个 ACK 数据报。但在实际应用中却并非如此,而是发送端将连续发送数据报保存在接受端的缓冲区中,并且尽量使其填满,接受端对这些连续发送的数据报只发送一个 ACK 报文应答,这就是 ACK 的累积
2014-12-09 11:11:21 2210
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人