Linux网络编程
网络编程基础
ISO/OSI七层模型
ISO:国际标准化组织,OSI:开放系统互联模型。在计算机网络中,IOS是互联网操作系统,是思科公司为其网络设备开发的操作维护系统。
ISO/OSI的七层模型(由上到下):应用层(APDU),表示层(PPDU),会话层(SPDU),传输层(TPDU),网络层(报文),数据链路层(帧),物理层(比特),分层的目的主要是为了便于管理。
各层的作用如下:
Ø 物理层:设备之间的比特流的传输、物理接口、电气特性等;
Ø 数据链路层:组帧、用MAC地址访问媒介、错误检测与修正;
Ø 网络层:提供逻辑地址、选路;
Ø 传输层:可靠与不可靠的传输、传输前的错误检测,流控;
Ø 会话层:对应用会话的管理、同步;
Ø 表示层:数据的表现形式、特定功能的实现如——加密;
Ø 应用层:用户接口。
TCP/IP四层模型(实际应用)
TCP/IP四层模型(由上到下):应用层(3层),传输层(1层),网际互联层(1层),网络接口层(2层)
Ø 网络接口层
网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。其中地址解析协议(ARP)工作在此层,对应于 OSI参考模型的数据链路层。
Ø 网际互联层
网际互联层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。它包含的协议涉及数据包在整个网络上逻辑传输。该层对应三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)
Ø 传输层
传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(TCP)和用户数据包协议(UDP)。
TCP三次握手
n 计算机A:发送SYN信息(序列号x)给计算机B;
计算机B:接收SYN信息(序列号=x)
n 计算机B:发送SYN、ACK信息(序列号=y,确认号=x+1)给计算机A;
计算机A:接收SYN、ACK信息(序列号=y,确认号=x+1)
n 计算机A:发送ACK信息(确认号=y+1)给计算机B
计算机B:接收ACK信息(确认号=y+1)
Ø 应用层
应用层对应于OSI参考模型的高层,为用户提供所需的各种服务,如FTP,Talnet,DNS,SMTP等。
注意:数据传递过程要经过封装和解封装过程。
TCP/IP模型与OSI模型的比较
Ø 共同点:
n OSI参考模型和TCP/IP参考模型都采用了层次结构的概念;
n 都能够提供面向连接和无连接两种服务通信机制;
Ø 不同点:
n 前者是七层模型,后者是四层结构;
n 对可靠性要求不同(后者更高);
n OSI模型是在协议开发前设计的,具有通用性。TCP/IP是先有协议集然后建立模型,不适用于非TCP/IP网络;
n 实际市场应用不同(OSI模型只是理论上的模型,并没有成熟的产品,而TCP/IP已经成为“实际上的国际标准”)。
IP地址
IP地址分类:主要分为A类、B类、C类、D和E类,其中D类和E类是特殊IP,故下面主要分析A类、B类和C类IP地址。
类型 | 最大 网络数 | IP地址范围 | 最大主机数目 | 私有IP地址范围 |
A | 126 (2^7-2) | 1.0.0.0--126.255.255.255 | 2^24-2 | 10.0.0.0--10.255.255.255 |
B | 16384 (2^14) | 128.0.0.0--191.255.255.255 | 2^16-2 | 172.16.0.0--172.31.255.255 |
C | 2097152 (2^21) | 192.0.0.0--223.255.255.255 | 2^8-2 | 192.168.0.0--192.168.255.255 |
私有IP地址
私有IP地址是内网IP地址,它是免费的,它主要用于解决学校,办公等网络。它能够有效的节约并保护公网IP地址。但私有IP地址不能直接访问公网,要访问,需要转换。注意:不是一个网段的主机通信需要通过路由器。
子网掩码
子网掩码决定网段个数;子网掩码不能与IP地址单独查看,并需同时查看。
Ø A类子网掩码255.0.0.0
Ø B类子网掩码255.255.0.0
Ø C类子网掩码255.255.255.0
子网掩码用于确定如何变化以对应不同网段(255对应),如何变化以对应不同的主机(0对应)。注意:子网掩码要求最好所有的1是连续的(但可以不连续)。
广播地址(D类地址)
广播地址是专门用于同时向网络中所有工作站进行发送的一个地址。网络地址后面是0,广播地址是255,中间是主机地址。
端口作用
端口作用:标称服务器开启的端口,和访问的是谁。端口号共有65536个,0-65535,其中10000以内为常用端口,10000以外为个人端口。
常见网络服务端口号如下:
Ø FTP(文件传输协议):端口号 20和21
Ø SSH(安全shell协议):端口号 22
Ø talent(远程登录协议):端口号 23(禁止开启,它是明文传输)
Ø DNS(域名系统):端口号 53(TCP和UDP协议)
Ø http(超文本传输协议):端口号 80
Ø SMTP(简单邮件传输协议):端口号 25
Ø POP3(邮件协议3代):端口号 110
查看本机启用的端口使用如下命令:
netstat –an
选项:
-a:查看所有连接和监听端口
-n:显示IP地址和端口号,而不显示域名和服务名
DNS作用
DNS(域名系统,即名称解析)存在原因:在互联网中,通过IP地址来进行通信,但IP地址用数字表示,记忆起来太困难了人对域名更加敏感。而DNS作用就将域名地址翻译成IP,或将IP翻译成DNS,从而方便人和计算机找到各自对应的习惯的网页名称。注意:不配置DNS是不能访问互联网的。说起DNS就不得不介绍一下hosts文件。
hosts文件
hosts是做静态IP和域名对应。hosts文件的优先级是高于DNS解析的。
hosts文件到DNS
早期hosts文件解析域名:所有IP与对应域名全写入host,则存在缺点:1)名称解析效能下降;2)主机维护困难。基于以上,产生了DNS(域名系统)。有些利用hosts进行google翻墙,其主要的原理就是绕过DNS直接进行网址访问。
DNS服务优点:层次性,分布式
DNS服务的作用:将域名解析为IP地址
Ø 客户机向DNS服务器发送域名查询请求;
Ø DNS服务器告知客户机Web服务器的IP地址;
Ø 客户机与Web服务器通信。
域名空间结构(完全合格域名)
根域: "."表示根域名,根域名的服务器共有13台
顶级域(一级域):组织域 gov(政府部门),com(商业部门),edu(教育部门),org(民间团体组织),net(网页服务机构),mil(军事部门);国家或地区域 cn(中国),jp(日本),uk(英国),au(澳大利亚),hk(中国香港)
二级域:IBM,Microsoft,...个人和企业向域名分配组申请,购买的。
主机名:www,NEWS,...
三级域 + 二级域 + 顶级域组成完整域名空间,并且是全球唯一的域名。域名用"."进行分割便于分级管理
域名意义:
Ø 互联网中的域名是由结构有规划的;
Ø 域名进行了分级,在进行域名和IP地址解析时才能更容易找到
Ø 防范钓鱼网站(主要看二级域名与一级域名是否正确)
DNS查询类型
从查询方式上分:递归查询和迭代查询。
Ø 递归查询
要么做出查询成功响应,要么做出查询失败的响应。一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果转交给客户机
Ø 迭代查询
服务器收到一次迭代查询回复一次结果,这个结果不一定是目标IP与域名的映射关系,也可以是其它DNS服务器的地址。
从查询内容上分:正向查询和反向查询
Ø 正向查询由域名查找IP地址(访问网页)
Ø 反向查询由IP地址查找域名(邮件)
网关
网关(Gateway)又称网间连接器、协议转换器。网关是在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。网关是一种充当转换重任的服务器或路由器。
网关作用:
Ø 网关在所有内网计算机访问的不是本网段的数据包时使用;
Ø 网关负责将内网IP转换为公网IP,公网IP转换为内网IP。
未配网关和DNS可以访问局域网,但是不能访问公网。要访问公网,必须要有网关把本级数据包转换成公网IP,其次,必须有DNS把本级网页的域名信息或其他的域名请求翻译成真正的IP地址,才能进行正常的公网访问。
Linux配置IP地址
Linux配置IP地址的方法
Ø ifconfig命令临时配置IP地址
ifconfig命令:查看与配置网络状态命令
ifconfig eth0 192.168.0.200netmask 255.255.255.0 #临时设置eth0网卡的IP地址与子网掩码。
Ø setup工具永久配置IP地址(Redhat系列特有工具)
红帽专有图形化工具setup设置IP地址
最后要重启网络服务service network restart
Ø 修改网络配置文件
n 网卡信息文件:/etc/sysconfig/network-scripts/ifcfg-eth0
里面信息如下:
DEVICE = eth0 网卡设别名
BOOTPROTO = none 是否自动获取IP(none,static,dhcp(自动获取,需要有DHCP服务器))
HWADDR = 00:0c:29:17:c4:09 MAC地址
NM_CONTROLLED = yes 是否可以有Network Manager图像管理工具托管
ONBOOT = yes 是否随网路服务启动,eth0生效(设为yes,否则改后之后lo信息,没有eth0信息)
TYPE = Ethernet 类型为以太网
UUID = "44b76c8a-b59f-44d5-83fa-7f98fda86b3d 唯一识别码(克隆需修改,否则都不能上网)
IPADDR =192.168.0.252 IP地址
NETMASK =255.255.255.0 子网掩码
GATEWAY = 192.168.0.1 网关
DNS1 =202.106.0.20 DNS
IPV6INIT =no Ipv6没有启动
USERCTL = no 不允许非root用户控制此网卡
n 主机名文件:/etc/sysconfig/network
hostname [主机名] #查看与临时设置主机名命令
hostname 主机名 #临时更改主机名,一旦重启,不在生效
n DNS配置文件:/etc/resolv.conf
Ø 图形界面配置IP地址
虚拟机网络参数配置
Ø 设置LinuxIP地址
setup #修改并配置IP地址
Ø 启动网卡
将/ect/sysconfig/network-scripts/ifcfg-eth0中的ONBOOT = no改为ONBOOT = yes
service network restart #重启网络服务
若还出错,可能是IP冲突
Ø 修改UUID(注意:针对克隆的虚拟机,单独安装虚拟机不需要进行)
编辑/ect/sysconfig/network-scripts/ifcfg-eth0主要是删除MAC地址行
rm -rf/etc/udev/rules.d/70-persistent-net.rules即删除网卡和MAC地址绑定文件
重启动系统
Ø 设置虚拟机网络连接方式
虚拟机——>设置(网络适配器)使用桥接方式连网
Ø 修改桥接网卡
虚拟机——>编辑(虚拟网络编辑器)——>桥接,选择正确的网卡(无限网卡wireless)
Linux网络命令
网络环境查看命令
Ø ifconfig命令
查看与配置网络状态命令
使用ifconfig命令查看IP地址和子网掩码,查看不到网关和DNS
Ø 关闭与启动网卡
ifdown 网卡设备名 #禁用该网卡设备
ifup 网卡设备名 #启用该网卡设备
Ø 查询网络状态
netstat 选项
选项:
-t:列出TCP协议端口
-u:列出UDP协议端口
-n:不使用域名和服务名,而使用IP地址和端口号
-l:仅列出在监听状态网络服务
-a:列出所有的网络连接
netstat -tuln
netstat -an
Linux终止远程连接:执行logout命令。注销远程终端,禁止直接差掉,因为这样没有终止连接,Linux远程连接最多256,Windows Server 2003最多可以2个远程终端而Windows Server 2008默认最多4个远程中。
查看已建立的网络状态
netstat -an | grep ESTABLISHED
统计已建立连接的网络状态数目
netstat -an | grep ESTABLISHED |wc –l
Ø 查看网关和路由列表信息
netstat -rn/route -n
选项:
-r:列出路由列表,功能和route命令一致
route命令:查看路由列表(可以看到网关)
route add default gw192.168.0.2 #临时设定默认网关(没作用,可能导致不能上网)
Ø 域名解析命令
nslookup [主机名或IP] #进行域名与IP地址解析
nslookup命令用来翻译域名对应哪个IP
nslookup http://blog.csdn.net/yzhang6_10
nslookup
>server #查看本机DNS服务器
网络环境测试命令
Ø ping命令
ping [选项] ip或域名 #探测指定IP或域名的网络状态
选项:
-c 次数:指定ping包的次数
Ø talnet [域名或IP] [端口] #远程管理与端口探测命令(不加密,被ssh取代了)
talnet192.168.0.252 80 连通后退出方法是ctrl + )
Ø traceroute命令 (生产环境常用命令,但家用环境,多数节点通,少数节点不通)
Traceroute[选项] IP或域名 #路由跟踪命令
选项:
-n使用IP,不使用域名,速度更快
利用ICMP(Internet控制报文协议)协议进行远程探测
Ø wget命令(下载命令)
wgethttp://soft.vpser.net/lnmp/lnmp1.1-full.tar.gz #下载命令
Ø tcpdump命令
tcpdump-i eth0 -nnX port 21 (抓包命令,查看访问eth0网卡的21端口访问)
选项:
-i:指定网卡接口
-nn:将数据包中的域名与服务器转为IP和端口
-X:以十六进制和ASCII码显示数据包内容
-port:指定监听的端口
启动ftp服务命令:service vsftpd start
ftp协议也是明文传输(默认不允许root登录)
网络中很多的数据包是明文的,信息不是加密传输的。
远程登录
Ø SSH协议原理
SSH安全外壳协议(使用非对称加密算法主要使用RSA),它是保护信息传递过程中是安全的。
Ø SSH命令
ssh 用户名@ip #远程管理制定Linux服务器 exit #退出远程 第一次提示下载公钥。
scp文件传输命令(Linux与Linux之间远程传递文件)
scp [-r] 用户名@ip:文件路径 本地路径 #下载文件(目录加-r)
scp [-r] 本地文件 用户名@ip:上传路径 #上传文件(目录加-r)
SecureCRT远程管理工具
Xshell工具和WinSCP文件传输工具
Xshell用于远程管理Linux。
WinSCP是文件传输工具SFTP(SSH协议中附带的自协议),不能选则FTP协议,FTP需要搭载FTP,到时候可以直接拖来进行文件传输,比较方便。