《08网络基础和SOCKET》由会员分享,可在线阅读,更多相关《08网络基础和SOCKET(18页珍藏版)》请在金锄头文库上搜索。
1、第八章第八章网络基础和网络基础和SOCKET本章目标了解TCP/IP协议族了解TCP和UDP协议的优缺点掌握TCP三次握手掌握SOCKET TCP通信过程中SOCKET API函数调用次序掌握SOCKET UDP通信过程中SOCKET API函数调用次序远程通信的基础通信双方双方共同约定和遵循的协议A机B机约定/协议异地进程通信协议层为双方的主机上通信进程分配“端口”和缓冲区,以便异地进程间的通信协议层:类似于物流公司端口:类似于物流公司两地的加盟点缓冲区:类似于加盟点的囤放货物平台TCP/IP协议概述TCP/IP是互联网的基础OSI参考模型与TCP/IP参考模型应用层表示层会话层传输层网络层
2、数据链路层物理层应用层传输层网络层网络接口层OSI参考模型TCP/IP参考模型图1 OSI参考模型与TCP/IP参考模型对应关系图2 OSI参考模型与TCP/IP参考模型对应关系TCP/IP协议族TCP/IP 实际上是一个一起工作的通信家族,为网际数据通信提供通路。为讨论方便可将TCP/IP 协议组大体上分为三部分:1Internet 协议(IP)2传输控制协议(TCP)和用户数据报文协议(UDP)3处于TCP 和UDP 之上的一组协议专门开发的应用程序。它们包括:TELNET,文件传送协议(FTP),域名服务(DNS)和简单的邮件传送程序(SMTP)等许多协议。应用层协议:Telnet文件传
3、送协议(FTP 和TFTP)简单的文件传送协议(SMTP)域名服务(DNS)等协议。应用层协议网络编程基础socket概述为了简化开发通信程序的工作,由Berkely学校开发了一套网络通信程序的API函数标准socket标准被扩展成window socket和unix socketlinux中的网络编程通过socket接口实现。Socket既是一种特殊的IO,它也是一种文件描述符。一个完整的Socket 都有一个相关描述协议,本地地址,本地端口,远程地址,远程端口;每一个Socket 有一个本地的唯一Socket 号,由操作系统分配。流式套接字(SOCK_STREAM)流式的套接字可以提供可靠
4、的、面向连接的通讯流。它使用了TCP协议。TCP 保证了数据传输的正确性和顺序性。数据报套接字(SOCK_DGRAM)数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。使用数据报协议UDP协议。原始套接字。原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议实现的测试等。SOCKET分类套接字地址结构struct sockaddr unsigned short sa_family; /* address族, AF_xxx */char sa_data14; /* 14 bytes的协议地址 */; sa_family 一般来
5、说, IPV4使用“AF_INET”。 sa_data 包含了一些远程电脑的地址、端口和套接字的数目,它里面的数据是杂溶在一起的。sockaddr_in地址结构struct sockaddr_in short int sin_family; /* Internet地址族 */unsigned short int sin_port; /* 端口号 */struct in_addr sin_addr; /* Internet地址 */unsigned char sin_zero8; /* 添0(和struct sockaddr一样大小)*/;这两个数据类型是等效的,可以相互转换,通常使用socka
6、ddr_in更为方便字节序列转换因为每一个机器内部对变量的字节存储顺序不同(有的系统是高位在前,底位在后,而有的系统是底位在前,高位在后 ),而网络传输的数据大家是一定要统一顺序的。所以对与内部字节表示顺序和网络字节顺序不同的机器,就一定要对数据进行转换。 htons()“Host to Network Short” 主机字节顺序转换为网络字节顺序(对无符号短型进行操作2bytes) htonl()“Host to Network Long”主机字节顺序转换为网络字节顺序(对无符号长型进行操作4bytes) ntohs()“Network to Host Short”网络字节顺序转换为主机字节
7、顺序(对无符号短型进行操作2bytes) ntohl()“Network to Host Long ”网络字节顺序转换为主机字节顺序(对无符号长型进行操作4bytes)字节转换函数地址格式转换linux提供将点分格式的地址转于长整型数之间的转换函数。inet_addr()能够把一个用数字和点表示IP 地址的字符串转换成一个无符号长整型。inet_ntoa() inet_aton()基本套接字调用socket()bind() connect() listen()accept()send()recv() sendto() shutdown()recvfrom()close() getsockopt() setsockopt() getpeername()getsockname()gethostbyname()gethostbyaddr()getprotobyname()fcntl()基于流套接字的编程流程课后练习完成一个CS结构的回显TCP服务器编写TCP客户端程序客户端发送什么,服务器立即应答