【编程基础】初学者如何学习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 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

大分区表的手工并行优化

这段时间饱受大分区表的性能之苦,碰到最大的一个分区表有1个t左右,操作起来每个细节都需要格外小心,我这次和大家分享的案例应用的分区表不是很大,有80G左右。但是...

2764
来自专栏闵开慧

map函数或reduce函数中如何调用第三方jar包

    一般我们在mapreduce程序中调用第三方jar包时会出现找不到jar包的问题,检查发现jar包就在相应路径,mapreduce任务就是找不到。仔细想...

3045
来自专栏杂烩

Redis linux下安装配置 原

make命令执行完成后,会在当前目录下生成本个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-sta...

632
来自专栏微服务生态

Dubbo简化类图

本文只是简单的将Dubbo的类结构图罗列出来,在下一次介绍中将重点讲解Dubbo框架的原理以及使用方法。

642
来自专栏清风

Linux 测试远程服务器端口开放命令&测试本地端口占用命令

623
来自专栏散尽浮华

Oracle数据库重做日志及归档日志的工作原理说明

Oracle数据库重做日志及归档日志的工作原理: lgwr进程将redo log buffer中的重做数据写入到redo log中,此时的redo log分组,...

1909
来自专栏腾讯云容器服务团队的专栏

容器健康检查详解

容器集群内核基于 kubernetes ,kubernetes 支持对容器进行周期性的探测,根据探测结果来决定判断容器的健康状态,并执行额外的操作。当我们创建服...

5170
来自专栏mySoul

Node.js多进程

使用子进程的执行命令,缓存子进程的输出。并将子进程的输出以回调函数参数的形式进行返回

1120
来自专栏MYSQL轻松学

你了解的max_allowed_packet

Error updating database. Cause: com.mysql.jdbc.MysqlDataTruncation: Data trun...

3487
来自专栏运维小白

10.6 监控io性能

监控系统状态 iostat -x 磁盘使用 iotop 磁盘使用 查看磁盘使用情况 在运维工作中,除了查看CPU和内存之外,磁盘的io也是非常重要的一个指标 ...

1887

扫码关注云+社区