首页 > 文章中心 > 正文

LINUX系统网络通信探索

时间:2021-07-27

LINUX系统网络通信探索

LINUX网络通信设计

下面我将对LINUX平台下网络通信设计的工作流程、数据发送、数据接收三个模块进行详细的介绍。

1工作流程

首先调用SOCKET函数创建一个用于通信的套接字,然后给已经创建的套接字(SOCKET)绑定本地地址/端口号(Bind()),成功之后就在相应的SOCKET上监听(Listen())。当Accept()函数捕捉到一个连接服务(Connect())请求时,接受并生成一个新的SOCKET,并通过这个新的SOCKET与客户端连接,用Read()/Write()或相关函数读取和发送数据,传输完毕时,用Close()关闭所有进程,结束这次通信。客户端程序设计流程:客户端也先要创建一个SOCKET,将该SOCKET与本地地址/端口号绑定,还需要指定服务器端的地址与端口号,随后向服务器端发出连接(Connect())请求,请求被服务器端接受后,用函数进行了数据的接收与发送,传输完毕后,用Close()关闭套接口,通信结束。

2数据发送模块

从应用层到物理层发送数据时,函数调用顺序如下:send>sys—send>sys—sendto>sock—sendmsg>inet—sendmsg>tcp—sendmsg>tcp—send—skb>tcp_transmit>ip—queue—xmit>ip—queue—xmit2>ip—output>ip—finish—output>ip—finish—output2>neigh_resolve_output>dev_queue_xmit>ei—start_xmit网络连接创建好以后,就可以进行发送数据了。

3数据接收模块

当网络上的数据到达接收计算机时,网卡控制器产生中断,调用该中断的中断处理程序ei—interrupt()。在这个函数中主要通过判断中断状态寄存器(ISR)的内容,调用相应的处理程序来接收数据。如果中断状态寄存器显示接收到数据或者接收到有错误的数据时,就调用ei—receive()函数进行数据的接收。在ei—receive()函数中要正确设定边界指针寄存器(BNRY)和当前页寄存器(CPR)的内容,当BNRY或者CPR等于页停止寄存器(PSTOP)时,把它们的内容设置成页开始寄存器(PSTART).当CPR=BNRY时,表示缓冲区全部被存满,数据没有被用户读走,这时网卡将停止往内存写数据,新收到的数据包将被丢弃不要,而不覆盖旧的数据;当CPR=BNRY+1时,表示网卡的接收缓冲区里没有数据,用户通过这个判断知道没有包可以读,当CPR!=BNRY+1时,表示接收到新的数据包。

结束语

LINUX操作系统在网络应用方面具有很强的开发潜力,同时LINUX也是可靠性、安全性非常高的系统,因此在基于LINUX平台借助于SOCKET端口进行网络通信的研究具有广泛的应用价值和前景。

作者:丁思强单位:黑龙江八一农垦大学信息技术学院

复制文章

微信扫描左侧二维码,3秒钟快速获得
下载验证码

被举报文档标题:LINUX系统网络通信探索

被举报文档地址:

https://www.1mishu.com/lunwen/txcblw/wltxlw/201304/750254.html
我确定以上信息无误

举报类型:

非法(文档涉及政治、宗教、色情或其他违反国家法律法规的内容)

侵权

其他

验证码:

点击换图

举报理由:
   (必填)
紧急删除:

 13882551937、13808266089 服务时间:8:00~21:00 承诺一小时内删除

文档上传者

推荐服务

期刊推荐

期刊咨询、进度管理优化,不成功退款

立即咨询
文秘服务

一对一指导,助力提升语言质量

立即咨询
联系我们
400-888-9411 在线客服 服务时间:8:00~23:00
关于我们

公司简介

股权挂牌

版权声明

学术服务

业务介绍

服务流程

企业优势

四大保障

常见问题

参考范文

服务说明

服务流程

常见问题

使用须知

用户协议

免责声明

版权声明

侵权申诉

个人隐私

公众号