program-dog

2016年11月21日星期一

[Linux Net]:1 学习Linux网络编程应该了解的基础简介

网络分层结果是计算机网络工作的基础,此模型简单灵活却强大。本文将介绍这一模型。

网络分层

网络分层



版权声明

Copyright 2016-2016 Program Dog

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled 'GNU Free Documentation License'.


第1章 网络基础

这一章并非直入linux网络主题,而是先介绍一些后面会用到的基本的网络概念。

1.1. 网络分层

1.1.1. 7层OSI模型

说到协议分层,就不得不提osi的7层(应用层,表示层,会话层,传输层,网络层,数据链路层,物理层)网络模型。我们主要讨论2层和3层,次要提及其他层。原因是2,3层对理解网络很重要。至少你应该知道系统管理员常说的“2层设备”或“3层广播”是什么意思。

1.1.2 4层DoD模型

DoD(或者说是tcp/ip)模型只有4层。其网络接口层对应OSI的1,2层(物理层和数据链路层),其网络互联层对于OSI的网络层,其传输层(tcp,udp)对应OSI的第4层传输层,其应用层对于OSI的5,6,7层。

下图是ISO和DoD对应表,以及协议举例和设备举例。

分层协议图

分层协议图

1.1.3. 物理层简介

物理层在第1层,主要是关于电压,电信号和物理链接的。一些网络依然在用同轴电缆,不过更多的网络已经开始用双绞线了。

中继器和集线器属于物理层。但物理层之上的软件是没办法“感觉到”他们的存在的。因为他们唯一的作用就是放大电缆中的电信号。Passive hubs are multiport amplifiers that amplify an incoming electrical signal on all other connections. Active hubs do this by reading and retransmitting bits, without interpreting any meaning in those bits.

Network technologies like csma/cd and token ring are defined on this layer.

关于第一层,这本书我们就介绍这点。

1.1.4. 数据链路层简介

第2层数据链路层是关于帧的。帧自带循环冗余检查(cyclic redundancy check)。在这一层的以太网(802.3)中,每一块网卡都可以通过一个48bit的mac地址(media access control address)唯一确定。

关于这一层的桥接器和交换器(bridges and switches)。桥接器要比物理层的集线器(hub)更高级,因为桥接器是基于mac地址的。另外交换器也是,它也可以识别mac地址。

关于这一层,这本书将会讨论命令arpifconfig

1.1.5. 网络层简介

第3层是关于ip数据包的。这一层分配给每一个主机一个唯一的32bit的ip地址。但是ip协议并非这一层唯一的协议。除此之外还有icmp,igmp,ipv6等协议。全部协议见文件 /etc/protocols

这一层的路由(routers)和第3层的交换器都可以识别ip地址。

在tcp/ip协议里面这次层通常指的是网络层。

1.1.6. 传输层简介

我们讨论的第4层的tcp和udp协议在DoD中叫做传输层(host-to-host)。

1.1.7. 第5,6,7层

tcp/ip的应用层对应了这一层的5,6,7层。讨论它们之间的细节已经超出本书范围。

1.1.8. 本书中的网络分层

本书的分层基于wireshark中的帧里的协议(Protocols in Frame)。比如嗅探一个dhcp数据包,观察下面的嗅探的结果。

[Protocols in Frame: eth:ip:udp:bootp]

根据嗅探ntp(网络时间协议)数据包的结果,我们推测ntp和bootp在同一层。

[Protocols in Frame: eth:ip:udp:ntp]

嗅探arp的结果显示其和ip在同一层。

[Protocols in Frame: eth:arp]

下面是wireshark的常用协议列表(部分)。

wireshark协议表(部分)

wireshark协议表(部分)

1.2. 单播,广播,多播,任播

1.2.1. 单播

单播意指一台计算机对另一台计算机通信。一般一台计算机可以有多个单播对象。

单播

单播

1.2.2. 多播

多播意指一台计算机对一组计算机通信。

多播

多播

有一些多播的例子如Realplayer(.sdp文件)和 ripv2(一种路由协议)。

1.2.3. 广播

广播意指一台计算机对所有计算机通信。

广播

广播

典型的例子是BBC广播。一般,广播在局域网中会被限制。

注意,2层中的广播和3层中的广播是不一样的。2层中的广播被同一网段所接收(不能跨越路由),但是3层广播被同一ip子网所接受。

1.2.4. 任播

根域名服务器用的就是任播。任播是计算机找到立它最近的组进行通信。

任播

任播

感谢维基百科的匿名志愿者提供的图片。

1.3. lan,wan和man

lan用在局域网而wan用在广域网。其用处不同源于计算机之间的距离不同而非计算机数量不同。一些协议如atmwan而设计,而一些协议如以太网(ethernet)为lan而设计。

1.3.1. lan

lan(Local Area Network)就是局域网。它可以是一个房间,或一层楼,甚至建筑大楼。只要计算机距离足够近就可以组成一个lan。你也可以把lan定义成所有通过以太网连接的计算机的集合体。

一个lan可以包含多个小的lan。下图是多个小lan组成的一个大lan的拓补图。

lan

lan

1.3.2. man

man(Metropolitan Area Network)即城域网,意指连接lan和wan的并且同处一个建筑,或社区或城市的网络。man可利用fddi以太网或其他协议进行通信。

1.3.3. wan

wan(Wide Area Network) 是连接远程计算机的网络。这些计算机通常通过租用线路互相连接。wan不采用以太网协议而采用像fddi, frame relay, ATM or X.25之类的协议互相连接。

下图示意了一个办公场所通过桢中继(Frame Relay)连接到总部。

man

man

wan有时也指大型网络,如互联网。

思科(Cisco)以他们的在wan方面的技术而闻名于世。他们成功地制造了路由,并通过wan协议把非常多的lan连接在了一起。

1.3.4. pan-wpan

家庭网络称之为pan(Personal Area Network)。wifi环境称之为wpan

1.4. internet-intranet-extranet

互联网(internet)就是由很多不同的网络通过tcp/ip协议栈互相连接而成的公网。

互联网起源于arpanet。而arpanet于1969年被发明,当时仅有4台计算机相连。1971年第一封电子邮件成功通过arpanet发送。1973年时,75%的网络传输用于电子邮件。同在1973年,ftp被发明,网络连接到了欧洲(挪威和英国)。2009年互联网覆盖了25%的人口。2011年,据估计英文网页占比下降到25% 。

内联网(intranet)是tcp/ip私网。内联网和互联网使用相同的协议,只不过内联网只对组织内部人员开放。

外联网(extranet)类似于内联网,只不过外联网还允许一些外部组织(如合伙人,客户端,技术提供者等)访问。

1.5. tcp/ip

1.5.1. tcp/ip的历史

tcp/ip协议栈的研发始于1960s的美国国防部。80年代,很多商业公司开发了自己的协议栈。比如IBM开发了sna,Novell开发了ipx/spx,微软开发了netbeui,Apple开发了appletalk。但这些协议基本上都没有活到90年代。到了90年代末,几乎所有的计算机都在使用tcp/ip协议。

鄙以为,tcp/ip之所以能活下来是因为其开放性,因为任何人都可以免费参与开发和使用这一套协议。

1.5.2. rfc(征求意见稿)

这些网络协议被rfc所定义。一份征求意见稿描述一个网络协议的全部工作细节。1986年以来,IETF(互联网工程任务组)一直是rfc的核心发布组织。

rfc官方网站是http://www.rfc-editor.org。这个网站包含了所有的rfc的文本内容。例如rfc2132(定义了dhcp和bootp)的内容在这http://www.rfc-editor.org/rfc/rfc2132.txt

1.5.3. 协议举例

tcp协议建立的连接是可靠的,udp协议建立的连接是不可靠的但是速度快。ping协议用icmp探测错误信息,igmp则是多播分布协议。

ip头可见的协议列表见文件/etc/protocols

paul@debian5:~$ grep tcp /etc/protocols
tcp      6      TCP      # transmission control protocol

1.5.4. 服务举例

网卡被唯一的mac地址所确定,主机被ip地址所确定,应用被端口(port)所确定。

常见的应用层协议服务如smtp,http,ssh,telnet和ftp都有固定的端口号。端口号列表见/etc/services

paul@ubu1010:~$ grep ssh /etc/services
ssh   22/tcp   # SSH Remote Login Protocol
ssh   22/udp

注:

1.本文由Program Dog翻译自 http://linux-training.be

2.本文原始链接:https://program-dog.blogspot.com/2016/11/linux-net-char01-general-networking.html


5 条评论 :

  1. 谢谢整理,学习啦!

    回复删除
  2. 这篇文章翻译自http://linux-training.be 个人认为要比《鸟哥的私房菜》要直截了当些,而且更加适合入门。

    回复删除
  3. @编程狗,你的博客看起来简洁清爽,而且有很多人性化的细节设计,不知道用的是什么框架?可否分享分享?

    回复删除
    回复
    1. 这个博客的样式是我在基础模板上个性化定制的。博客效果大多是通过js完成。可以右键查看源码,参考css和js:)

      删除