欢迎来到天天文库
浏览记录
ID:19592611
大小:870.50 KB
页数:56页
时间:2018-10-03
《tcpip与socket编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3讲TCP/IP实现与Socket编程3.1.1Linux下TCP/IP框架3.1.1.1Linux下TCP/IP实现结构分析Linux下TCP/IP的实现,其目标在于让学生通过阅读源代码,对经典的TCP/IP协议实现有所了解,提高对网络编程的认识和理解。阅读Linux网络内核代码是一件繁琐而起枯燥无味的工作,但是当你对TCP/IP协议的实现有了一定了解的时候,你会发现所有的辛苦都是值得的。Linux用一系列相互连接层的软件实现TCP/IP协议族,该套软件分为两个层次,分别为BSD套接字(BSDsockets)与INET套接字(INETso
2、ckets)。套接字又称为管套,是网络上运行的两个程序之间的双向通信链路中的端点,而应用程序通过套接字使用通信链路提供的服务。因此,套接字是一个编程接口,为网络应用程序提供各种接口函数。3.1TCP/IP源代码概述BSD套接字是UNIX为网络编程提供的传输层编程接口,该接口并不考虑底层的网络通信协议,而是在所有的通信协议之上提供统一的接口函数。因此,不管编程用户使用何种底层网络协议,所使用的BSD套接字函数都是一致的。INET套接字是BSD套接字基于TCP/IP协议的底层实现,将TCP/IP协议提供的各种服务封装成INET套接字函数,再实现统
3、一的BSD套接字函数。网络应用程序用户内核BSDsocketsINETsocketsTCPUDPPPP/SLIP/EthernetIPsocket接口协议接口网络设备其他底层套接字及协议其他底层套接字及协议BSD——文件套接字INET——网络套接字3.1.1.2BSDSocket接口BSD套接字是UNIX为网络编程提供的统一传输层编程接口,支持多种底层网络通信协议。套接字地址族UNIXUnix域套接字INETInternet地址族支持通过TCP/IP协议的通信AX25AmateurradioX25IPXNovellIPXAPPLETALKAp
4、pletalkDDPX25X25每种网络协议都有自己的网络地址,被称为地址族。套接字类型Stream:这些套接字提供可靠的双工顺序数据流,能保证传送过程中数据不丢失,不被混淆和复制。Internet地址中的TCP协议支持流套接字。Datagram:这些套接字提供双工数据报传送,但与流套接字不同,不保证信息的到达,也不能保其到达的顺序,甚至不能保证被复制和混淆。这类套接字由Internet地址族中的UDP协议支持。Raw:允许直接处理下层协议。例如,可以通过raw套接字直接访问IP数据包。ReliableDeliveredMessages:与数
5、据报类似,但能保证数据的到达。SequencedPackets:与流套接字相似,但的数据包大小是固定的。Packet:packet不是一个标准的BSD套接字类型,而是一个Linux特定的扩展,它允许在设备级上直接处理数据包。套接字类型的划分,实际上是服务类型的划分。在不同的协议族中,具有各种不同性能、特色的传输层、网络层协议。在进行网络编程中,用户无需考虑具体的协议细节,仅仅知道该协议可以提供何种类型的服务。下面是现实网络协议中,可能与BSDSocket类型相匹配的网络协议。Stream类型套接字——TCP/IP协议族中的TCP协议Datag
6、ram类型套接字——TCP/IP协议族中的UDP协议TCP协议采用字节编码双向连接拥有校验与确认机制TCP包大小不固定UDP协议不采用编码双向无连接有包头校验无确认机制UDP包大小不固定Raw类型套接字——TCP/IP协议族中的网络层协议以及底层协议IP协议ICMP协议IGMP协议ARP协议RARP协议ReliableDeliveredMessages类型套接字——帧中继协议中的数据链路帧传输双向传输有确认协议数据分帧传输帧传输不能保证顺序SequencedPackets类型套接字——ATM协议中的信元传输采用虚电路方式信元大小固定保证信元顺
7、序达到有校验和确认机制套接字文件系统在Unix中,所有的外部设备都是以虚拟文件的形成存在,用户对设备的访问是通过对虚拟文件的访问实现的。用户输出数据,就是向虚拟文件执行写操作;用户获取输入数据,可以通过从文件读来实现。在Linux中,套接字文件系统是一个用户不可见的,高度简化的,用于汇集网络套接字的内存文件系统;它没有块设备、没有子目录、没有文件缓冲,借用虚拟文件系统的框架来使套接字与文件描述字具有相同的用户接口;程序员通过套接字文件系统可以像访问文件中的数据一样访问网络数据。Linux中,所有的文件都用VFSinode结构来表示,为了支持文
8、件操作,BSDsocket必须也用VFSinode来表示。socket结构是VFSinode结构的一部分,分配一个socket实际上就是分配一个VFSinode。网
此文档下载收益归作者所有