Linux 网络编程模型和实现
一 . 什么是 socket ?
二 . 为什么要学习 socket 编程 ?
三 . socket 编程中的套接字。
四 . 网络协议与套接口。
五 . 编写一个 socket 程序的基本步骤。
六 . 其它注意事项。
七 . 简单演示程序。
一 . 什么是 socket
socket 是一种特殊的 IO, 也是一种文件描述符。一个完整的
socket 都有一个相关描述:[协议,本地地址,本地端口,远程
地址,远程端口]。每一个 socket 都有一个本地的唯一一个
socket 号,由操作系统自动分配。
socket 最早起源于 Unix ,即套接字,一系列在网络中用来通信的
socket 接口就称为套接字接口。它在组网领域的首次使用是在
1970 年 2 月 12 日发布的文献 IETF RFC33 中被发现的,根据美国
计算机历史博物馆的记载,文献中写到:“命名空间的元素都可称
为套接字接口。一个套接字接口构成一个连接的一端,而一个连接
可完全由一对套接字接口规定。” [编外:最早的 windows1.0 系统发布于 1985 年
5 月]
socket 的基本操作模式是“ open—write/read—close” 。
二 . 为什么要学习 socket 编程
1. Internet 资源信息共享、网络进程通信几乎用的
全都是 socket.
2. socket( 套接字 ) 接口是独立于具体协议的网络
编程接口 , 它是 TCP/IP 、 UDP 网络的 API ,它
定义了许多函数或例程,程序员可以用它们来开
发 TCP/IP 、 UDP 网络上的应用程序。
3. socket( 套接字 ) 是通过标准的 UNI 文件描述符
和其它程序通讯的一个方法,目前已经被广泛移
植到各个平台。
三 . socket 编程中的套接字类型
套接字的三种类型 :
1. 流式套接字 (SOCK_STREAM)
流式的套接字可以提供可靠的、面向连接的通讯流。它使用了 TCP 协议。 TCP 保证了数据
传输的正确性和顺序性。
2. 数据报套接字 (SOCK_DGRAM)
数据报套接字定义了一种无连接的服务 , 数据报套接字定义了一种无连接的服务 ,
互独立的报文进行传输 , 是无序的 , 并且不保证数据的完整性与可靠性。使用
UDP 协议。
3. 原始套接字
原始套接字允许对低层协议如 IP 或 ICMP 直接访问 , 要用于新的网络协议实现的测
试等。
套接字所在层次示意图
Application program
Stream Datagram
Raw
Socket Socket
Socket
Interface Interface
Interface
TCP UDP
IP
Physical and data link layers
四 . 网络套接口
1. 网络模型:
应用层
表示层 应用层 telnet 、 ftp