C/C++教程

TCP/IP Socket 编程原理详解

本文主要是介绍TCP/IP Socket 编程原理详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

网络编程

端口

  所谓端口,是指计算机中为了标识在计算机中访问网络的不同程序而设的编号。每一个程序在访问网络时都会分配一个标识符,程序在访问网络或接受访问时,会用这个标识符表示这一网络数据属于这个程序。这里的端口并非网卡接线的端口,而是不同程序的逻辑编号,并不是实际存在的.
  端口号是一个16位的无符号整数,对应的十进制取值范围是0~65535。不同编号范围的端口有不同的作用。低于256的端口是系统保留端口号,主要用于系统进程通信。例如网站的 WWW 服务使用的是80号端口,FTP服务使用的是21号端口。 不在这一范围的端口号是自由端口号,在编程时可以调用这些端口号。

socket 端口

  Socket(套接字) 是网络编程的一种接口,它是一种特殊的 I/O。在TCP/IP协议中,"IP地址+TCP或UDP端口号”可以唯一标识网络通讯中的一个进程。可以简单地认为 :"IP地址+端口号”就称为socket。在TCP协议中,建立连接的两个进程各自有一个socket来标识,这两个 socket组成的socket对就唯一标识一个连接。用socket函数建立一个socket连接,此函数返回一个整型的socket描述符,随后进行数据传输。
  通常,socket分为三种类型:流式socket、数据报socket和原始socket。

注意:一个完整的socket有一个本地唯一的socket号,由操作系统分配。最重要的是,socket是面向客户/服务器模型而设计的。

socket 套接口

  区分不同应用程序进程间的网络通信和连接,主要使用三个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。在编程时,就是使用这三个参数来构成一个 socket。这个 socket 相当于一个接口,可以进行不同计算机程序的信息传输。
  在TCP/IP世界中,socket接口是访问Internet最广泛的方法。在网络中如果有一台地址是192. 168 .0.5的FTP服务器,在另一台主机上运行一个FTP服务软件,执行命令 ftp 192.168.0.5, 在这台主机上将打开一个socket,并将其绑定21端口,与其建立连接并对话。
  因此,一个IP地址,一个通信端口,就能确定一个通信程序的位置。为此,开发人员专门设计了一个套接结构,就是把网络程序中所用到的网络地址和端口信息放在一个结构体中。
  一般,套接口地址结构都以"sockaddr"开头。socket根据所使用的协议的不同,可分为TCP套接口和UDP套接口,有些参考书称为流式套接口和数据套接口。

注意:UDP是一个无连接协议,TCP是一个可靠的端对端协议。传输UDP数据包时,Linux不知道也不关心它们是否已经安全到达目的地! 而传输TCP数据包时,则应先建立连接,以保证传输的数据被正确接收。

socket 套接口的数据接口

在设计网络程序之前,应该了解两个重要的数据类型:sockaddr和sockaddr_in, 如图9. 2 所示。 这两个结构类型都是用来保存socket信息的,如1P地址、通信端口等,它们的具体说明如下所示:
image
sockaddr用来保存一个套接字,定义方法如下所示:

struct sockaddr
{
    unsigned short int sa_family; 
    char sa_data[14]; 
};

参考文章

本文来源:《Linux程序设计》,金国庆等,浙江大学出版社
部分图引用自:《图解网络v3.0》,小林coding

这篇关于TCP/IP Socket 编程原理详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!