linux_C语言实现网络通信简介

上传人:无*** 文档编号:164723735 上传时间:2022-10-25 格式:PPT 页数:28 大小:1.58MB
收藏 版权申诉 举报 下载
linux_C语言实现网络通信简介_第1页
第1页 / 共28页
linux_C语言实现网络通信简介_第2页
第2页 / 共28页
linux_C语言实现网络通信简介_第3页
第3页 / 共28页
资源描述:

《linux_C语言实现网络通信简介》由会员分享,可在线阅读,更多相关《linux_C语言实现网络通信简介(28页珍藏版)》请在装配图网上搜索。

1、Linux C语言实现网络通信简介主要内容TCP/IP协议概述Socket基础编程域套接字一、TCP/IP协议概述 telnet ftp IPv4、IPv6 ARP、RARP MPLS IGMP ICMP TCP UDP 应用层 传输层 网络层 网络接口层 OSI参考模型及TCP/IP参考模型 telnet ftp IPv4、IPv6 ARP、RARP MPLS IGMP ICMP TCP UDP 应用层 传输层 网络层 网络接口层 负责应用程序的网络访问,通过端口号负责应用程序的网络访问,通过端口号来识别各个不同的进程。来识别各个不同的进程。负责端对端之间的通信会话连接与建立。负责端对端之间

2、的通信会话连接与建立。传输协议的选择根据数据传输方式而定。传输协议的选择根据数据传输方式而定。负责将数据帧封装成负责将数据帧封装成IP数据包,并运行必数据包,并运行必要的路由算法。要的路由算法。负责将二进制流转换为数据帧,并进行数负责将二进制流转换为数据帧,并进行数据帧的发送和接收。数据帧是独立的网络据帧的发送和接收。数据帧是独立的网络信息传输单元。信息传输单元。TCP TCP(Transmission Control Protocol,传输控制协议),传输控制协议):为应为应用程序提供可靠的通信连接,实现了从一个应用程序到另一个应用程用程序提供可靠的通信连接,实现了从一个应用程序到另一个应用

3、程序的数据传递。适合于一次传输大批数据的情况,并适用于要求得到序的数据传递。适合于一次传输大批数据的情况,并适用于要求得到响应的应用程序。响应的应用程序。建立一次建立一次TCP连接需三次握手,基本过程是服务器先建立一个套接连接需三次握手,基本过程是服务器先建立一个套接口并等待客户端的连接请求,然后顺序进行三次握手:口并等待客户端的连接请求,然后顺序进行三次握手:第一次握手:当客户端调用第一次握手:当客户端调用 connect进行主动连接请求时,客户端进行主动连接请求时,客户端TCP发送一个发送一个SYN,告诉服务器客户端将在连接中发送的数据的初始,告诉服务器客户端将在连接中发送的数据的初始序列

4、号;序列号;第二次握手:当服务器收到这个第二次握手:当服务器收到这个SYN后也给客户端发一个后也给客户端发一个SYN,里,里面包含了服务器将在同一连接中发送的数据的初始序列号;面包含了服务器将在同一连接中发送的数据的初始序列号;第三次握手:最后客户再回送一个带有确认顺序号和确认号的数据第三次握手:最后客户再回送一个带有确认顺序号和确认号的数据段来确认服务器发的段来确认服务器发的SYN。到此为止,一个到此为止,一个TCP连接被建立。连接被建立。SYN J SYN K,ACK J+1 ACK K+1 TCP 三次握手TCP数据报头UDPUDP(User Datagram Protocol,用户数据

5、报协议):是一种无连,用户数据报协议):是一种无连接协议,不需要像接协议,不需要像TCP那样通过三次握手来建立一个连接。且不对传那样通过三次握手来建立一个连接。且不对传送包进行可靠的保障,适合于一次传输少量数据,其可靠性由应用层送包进行可靠的保障,适合于一次传输少量数据,其可靠性由应用层来负责。同时,一个来负责。同时,一个UDP应用可同时作为应用的客户方或服务器方。应用可同时作为应用的客户方或服务器方。UDP比比TCP能更好地解决实时性的问题,包括网络视频会议系统在内能更好地解决实时性的问题,包括网络视频会议系统在内的众多的客户的众多的客户/服务器模式的网络应用都使用服务器模式的网络应用都使用

6、UDP协议。协议。UDP数据报头二、Socket基础编程socket概述socket概念:概念:在在Linux中的网络编程是通过中的网络编程是通过socket接口来进行的。接口来进行的。socket是是一种特殊的一种特殊的I/O接口,它也是一种文件描述符,是一种常用的进程之接口,它也是一种文件描述符,是一种常用的进程之间通信机制,通过它不仅能实现本地机器上的进程之间的通信,而间通信机制,通过它不仅能实现本地机器上的进程之间的通信,而且能够实现不同机器上的进程之间的通信。且能够实现不同机器上的进程之间的通信。socket类型:类型:(1)流式)流式socket(SOCK_STREAM):使用):

7、使用TCP协议协议(2)数据报)数据报socket(SOCK_STREAM):使用数据报协议):使用数据报协议UDP(3)原始)原始socket:主要用于一些协议的开发:主要用于一些协议的开发流式流式socket和数据报和数据报socket的区别:前者在通信之前必须先建立连接,并的区别:前者在通信之前必须先建立连接,并且只能和一方通信;而后者在通信之前不用先建立连接,并且可以和多方通且只能和一方通信;而后者在通信之前不用先建立连接,并且可以和多方通信。信。socketbindrecv/readclosecloserecv/readconnectsocketsend/writesend/writ

8、e传输数据传输数据传输数据传输数据acceptlistenbind等待客户连接请求的到来等待客户连接请求的到来三次握手过程建立三次握手过程建立TCP连连接接服务器端服务器端客户端客户端TCP协议socket编程的流程图 socketrecvfromsendtobindclosecloserecvconnectsocketsendsend/sendtorecv/recvfrom在在connect之之后也可以用后也可以用read和和write或或传输数据传输数据传输数据传输数据UDP协议socet编程的流程图进行socket编程的基本函数socket():用于建立一个:用于建立一个socket连接

9、。可以指定连接。可以指定socket类型等信息。在类型等信息。在建立了建立了socket连接之后,可对连接之后,可对socketaddr或或socketaddr_in进行初始化进行初始化,以保存所建立的,以保存所建立的socket信息。信息。bind():用于将本地:用于将本地IP地址绑定到端口号,主要用于地址绑定到端口号,主要用于TCP的连接,在的连接,在UDP的连接中不用。的连接中不用。listen():用于创建一个等待队列,在其中存放未处理的客户端连接。:用于创建一个等待队列,在其中存放未处理的客户端连接。connect():在:在TCP中用于与服务器端建立连接,而在中用于与服务器端建立

10、连接,而在UDP中中connect()的作用是限定该套接字只能和指定的一方通信,即未使用的作用是限定该套接字只能和指定的一方通信,即未使用connect之前,之前,可以和任意的地址通信,而可以和任意的地址通信,而connect之后只能和一方通信。在之后只能和一方通信。在TCP中一个中一个socket只能只能connect一次,而在一次,而在UDP中一个中一个socket可以可以connect多次。多次。accept():用于等待并接收客户端的连接请求,它通常从等待队列中:用于等待并接收客户端的连接请求,它通常从等待队列中取出第一个未处理的连接请求。取出第一个未处理的连接请求。send()和和r

11、ecv():分别用于发送和接收数据,可以用在:分别用于发送和接收数据,可以用在TCP中,也可中,也可以用在以用在UDP中。中。sendto()和和recvfrom():作用与:作用与send()和和recv()类似。类似。当用在当用在TCP时,后面的几个与地址有关参数不起作用,作用等同时,后面的几个与地址有关参数不起作用,作用等同于于send()和和recv();当用在当用在UDP时,可以用在之前没有使用时,可以用在之前没有使用connect()的情况下,这两的情况下,这两个函数可以自动寻找指定地址并进行连接。个函数可以自动寻找指定地址并进行连接。SocketSocket地址数据结构struc

12、t sockaddr unsigned short sa_family;/*协议族协议族*/char sa_data14;/*协议地址,包含该协议地址,包含该socket的的IP地址和端口号。地址和端口号。*/;struct sockaddr_in short int sa_family;/*协议族协议族*/unsigned short int sin_port;/*端口号端口号*/struct in_addr sin_addr;/*IP地址地址*/unsigned char sin_zero8;/*填充填充0 以保持与以保持与struct sockaddr同样大小同样大小*/;socket(

13、)socket()函数:建立一个socketsocket连接bind()函数:将本地IP地址绑定到端口号(TCP)listen()listen()函数:创建一个等待队列connect()函数:与服务器端建立连接(TCP)或限定该套接字只能和指定的一方通信(UDP)accept()函数:等待并接收客户端的连接请求send()函数:发送数据recv()函数:接收数据sendto()函数recvfrom()函数三、域套接字管道由于只能实现具有亲缘进程的进程间通信,使用受管道由于只能实现具有亲缘进程的进程间通信,使用受到了很大的限制,有名管道解决了这一问题。但是,无到了很大的限制,有名管道解决了这一问

14、题。但是,无论是管道还是有名管道,都只能实现单向通信(在只创论是管道还是有名管道,都只能实现单向通信(在只创建一个管道的情况下)。建一个管道的情况下)。用套接字除了可以实现网络间不同主机间的通信外,还用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。这里所指的使用套接字实现进程间通信,是双向的通信。这里所指的使用套接字实现进程间通信,是由将通信域指定为是由将通信域指定为PF_UNIX来实现的,即来实现的,即Unix域套域套接字。接字。Unix域套接字是通过套接字域套接字是通过套接字API

15、实现的简单的协议族。实实现的简单的协议族。实际上它并不代表一个网络协议;它只能连接到同一台机器际上它并不代表一个网络协议;它只能连接到同一台机器上的套接字。它提供了灵活的上的套接字。它提供了灵活的IPC机制。它的地址是它所机制。它的地址是它所在的文件系统的路径名,创建之后套接字就和路径名绑定在的文件系统的路径名,创建之后套接字就和路径名绑定在一起。用来表示在一起。用来表示Unix域地址的套接字文件能够使用域地址的套接字文件能够使用stat()但是不能通过但是不能通过open()打开,而且应该使用套接字打开,而且应该使用套接字API对它进行操作。对它进行操作。Unix域套接字是面向连接的,每个套

16、接字的连接都建立了域套接字是面向连接的,每个套接字的连接都建立了一个新的通讯信道。服务器可能同时处理许多连接,但对一个新的通讯信道。服务器可能同时处理许多连接,但对于每个连接都有不同的文件描述符。这个属性使于每个连接都有不同的文件描述符。这个属性使Unix域套域套接字能够比命名管道更好的适应接字能够比命名管道更好的适应IPC任务。任务。域套接字的函数的形式域套接字的函数的形式int socket(int domain,int type,int protocol);socket函数中的函数中的domain参数用于指定通信域,参数用于指定通信域,domain参数取参数取PF_UNIX时,表示时,表示创建创建UNIX域的套接字。使用域的套接字。使用PFUNIX域的套接字可以实现同一机器上的不同进域的套接字可以实现同一机器上的不同进程间的通信。程间的通信。域套接字地址结构域套接字地址结构struct sockaddr_un sa_family_t sun_family;/*PF_UNIX或或AF_UNIX*/char sun_path104;/*要绑定的套接字文件路径要绑定的套接字文件路径*/

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!