【编程基础】初学者如何学习Linux网络

1. Linux网络编程--网络知识介绍

网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.

1.1 客户端

在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一

个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序。

1.2 服务端

和客户端相对应的程序即为服务端程序。被动的等待外面的程序来和自己通讯的程序称为服务端程序。

比如上面的文件获取中,另外一个地方的程序就是服务端,我们从服务端获取文件过来。

互为客户和服务端

实际生活中有些程序是互为服务和客户端。在这种情况项目, 一个程序既为客户端也是服务端。

1.3 常用的命令

由于网络程序是有两个部分组成,所以在调试的时候比较麻烦,为此我们有必要知道一些常用的网络命令

1.3.1 netstat

命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项.

我们常用的选项是-na 用来显示详细的网络状态.至于其它的选项我们可以使用帮助手册获得详细的情况.

1.3.2 telnet

telnet是一个用来登录远程的程序,但是我们完全可以用这个程序来调试我们的服务端程序的.

比如我们的服务器程序在监听8888端口,我们可以用

telnet localhost 8888

来查看服务端的状况.

1.3.3 ping 程序用来判断网络的状态是否正常,最经常的一个用法是

ping 192.168.0.1

表示我们想查看到192.168.0.1的硬件连接是否正常

1.4 TCP/UDP介绍

1.4.1 TCP(Transfer Control Protocol)传输控制协议

是一种面向连接的协议, 当我们的网络程序使用这个协议的时候,网络可以保证我们的客户端和服务端的连接是可靠的,安全的。

1.4.2 UDP(User Datagram Protocol)用户数据报协议

是一种非面向连接的协议,这种协议并不能保证我们的网络程序的连接是可靠的,所以我们现在编写的程序一般是采用TCP协议的.

2. Linux网络编程--初等网络函数介绍(TCP)

Linux系统是通过提供套接字(socket)来进行网络编程的.网络程序通过socket和其它几个函数的调用,会返回一个 通讯的文件描述符, 我们可以将这个描述符看成普通的文件的描述符来操作, 这就是linux的设备无关性的好处。我们可以通过向描述符读写操作实现网络之间的数据交流。

2.1 socket

int socket(int domain, int type,int protocol):

用于主机之间通信建立。

2.2 bind

int bind(int sockfd, struct sockaddr *my_addr, int addrlen):

将本地的端口同socket返回的文件描述符捆绑在一起

2.3 listen

int listen(int sockfd,int backlog)

listen函数将bind的文件描述符变为监听套接字

2.4 accept

int accept(int sockfd, struct sockaddr *addr,int *addrlen)

accept调用时,服务器端的程序会一直阻塞到有一个 客户程序发出了连接。

2.5 connect

int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)

connect函数是客户端用来同服务端连接的

3. 总结

总的来说网络程序是由两个部分组成的--客户端和服务器端.它们的建立步骤一般是:

服务器端:

socket-->bind-->listen-->accept

客户端:

socket-->connect

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-06-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏个人技术分享

android手机免root修改hosts

开发及测试过程中经常需要切换开发、测试、预发布等环境,切换环境是通过修改hosts实现的。

3703
来自专栏运维前线

CentOS 7 配置Ruby语言开发环境

CentOS 7 配置Ruby语言开发环境 安装Ruby 2.2 CentOS7存储库中的Ruby版本为2.0,但如果需要,可以使用RPM软件包安装2.2 ...

19610
来自专栏F-Stack的专栏

F-Stack KNI 配置注意事项

KNI(Kernel NIC Interface)内核网卡接口,是DPDK中用于与内核通信的模块。本文介绍对其进行配置时的一些注意事项。

8010
来自专栏xingoo, 一个梦想做发明家的程序员

【web必知必会】—— 图解HTTP(下)

上一篇《图解HTTP 上》总结了HTTP的报文格式,发送方式,以及HTTP的一些使用。 本文再总结以下内容:   1 http状态码   2 http报...

16310
来自专栏信安之路

内网中间人的玩法

在内网渗透测试中,我们可以欺骗攻击网络配置和服务。这种攻击方式主要针对ARP(地址解析协议)、DHCP(动态主机配置协议)和DNS服务器配置不当造成的安全隐患。...

830
来自专栏后端技术探索

20步打造最安全的Nginx Web服务器

Nginx是一个轻量级的,高性能的Web服务器以及反向代理和邮箱(IMAP/POP3)代理服务器。它运行在UNIX,GNU/Linux,BSD各种版本,Mac ...

791
来自专栏北京马哥教育

基础拾遗--【转】上行带宽,下行带宽,上传,下载区别

1.上行 是指从服务器流出的带宽,如果是在其他机器下载服务器上的文件,用的主要是服务器的上行带宽。 2.下行 是指流入到服务器的带宽,如果是在其他机器上传文件...

3236
来自专栏知识分享

四,ESP8266 TCP服务器(基于Lua脚本语言)android客服端+eps8266+单片机+路由器之远程控制系统

我要赶时间赶紧写完所有的内容....朋友的东西答应的还没做完呢!!!!!!!没想到又来了新的事情,,....... 配置模块作为TCP服务器然后呢咱们连接服务器...

42410
来自专栏王亚昌的专栏

WinPcap在无线局域网下的使用

    最近在做网关方面的项目,用到了WinPcap开发库去获得数据帧,这个开发库功能很强大,但是在无线局域网环境下使用时有一些不同,下面就WinPcap的使用...

732
来自专栏性能与架构

nginx实例 - 如何防止大图片占满带宽?

场景 前几天网站出现了访问缓慢的情况,查看系统资源状况后,发现出网带宽一直是占满的状态 查看服务器日志,发现了很多10M左右的超大图片的请求,这些图片占满了...

3756

扫描关注云+社区