本文大半内容都不对,弃了弃了~
自计算机和互联网出现,大多数计算机都被用于上网、发邮件或者只是通过网路使用一下网络共享打印机。计算机网络[1]可以连接各种功能不一样的电子设备,例如笔记本电脑、平板电脑、智能手机、服务器、打印机、扫描仪、路由器等设备。如果说以上设备连上网络后都算是“传统”节点,那在现在的物联网时代,各种计算机新品种就可以算作“非传统”节点了吧,毕竟现在能连网的设备真的是五花八门。再说征服王“互联网”现在真的可以说已经征服世界的情况下,计算机网络类型都可以分成5种:
- PAN - 个人网络,一台电脑配打印机等设备
- LAN - 局域网,一个路由器下的网络
- WLAN - 无线局域网,一个无线路由器信号覆盖下的网络
- MAN - 都市网,一个城市的网络
- WAN - 广域网,一个省、国家或整个世界下的网络,比如互联网
在这么广阔的网络下,如果节点之间通讯只靠一个“节点ID”作为坐标来互动,那互动时所传输的数据恐怕是要迷路很久甚至有可能累死在路上。TCP/IP[2]就包含了网络相关的标准规范。这个协议集合里的IP部分就很好的为迷路的数据指明了方向。
先来个更好的文章做参考:太厉害了,终于有人能把TCP/IP协议讲的明明白白了!,TCP/UDP常见端口参考
网络上两个节点之间通讯需要3样东西来指路:
- 节点在网络上的地址(IP地址)
- 节点的名称(MAC地址)
- 节点里应用或服务接收数据的端口(Port端口)
# TCP/IP协议全家桶
全家桶包含ARP, BGP, DHCP, DNS, FTP, HTTP, ICMP, IGMP, IP, TCP, Telnet, TFTP, UDP, WWW等。 节点上的TCP/IP栈,需跟随所运行的网络应用的要求,从全家桶中选择合适的协议;不同的节点有可能会使用不一样的TCP/IP栈。
# 网络体系结构OSI七层模型
名称 | 功能 | TCP/IP协议族 | |
---|---|---|---|
7 | 应用层(Applicaiton) | 终端用户的接口支持:文件传输,电子邮件,文件服务,虚拟终端 | TFTP, HTTP, SNMP, FTP, SMTP, DNS, Telnet |
6 | 表示层(Presentation) | 数据格式化,代码转换,数据加密 | N/A |
5 | 会话层(Session) | 连接管理:解除或建立与别的节点的联系 | N/A |
4 | 传输层(Transport) | 端对端传输管理,提供端对端的接口 | TCP, UDP |
3 | 网络层(Network) | 端对端路由,为数据包选择路由 | IP, ICMP, RIP, OSPF, BGP, IGMP |
2 | 数据链路层(Data Link) | 网络接入和架构管理,传输有地址的帧以及错误检测功能 | SLIP, CSLIP, PPP, ARP, RARP, MTU |
1 | 物理层(Physical) | 比特流生成和接收,以二进制数据形式在物理媒体上传输数据 | ISO2110, IEEE802, IEEE802.2 |
# IP协议
IP协议理论上让每个网络不管大小都有一个唯一的IP地址(或称作“节点地址”),但事实上不是每个网络(小到一台电脑配一个打印机)都能独享世界唯一IP地址。讨论“不能独享世界唯一IP地址的情况下,数据到底怎么就不会迷路了?”的问题之前,我们要先认识IP地址的格式。
# IPv4格式
IPv4使用32-bit节点地址,分成4个8-bit部分,例如:
01110000.11011110.11100110.00001111
使用十进制的眼光来看这个节点地址就会变成这样:
112.222.230.15
每一个8-bit部分的最大值是255。 一个IP地址包含有两组信息:网络ID和节点ID。
网络ID分为3类:
- A类
- IP地址范围:1.0.0.0 ~ 126.255.255.255
- A类网络ID为第1个8-bit部分
- 例子:
112.222.230.15
属于A类,网络ID为112
,节点ID为222.230.15
- B类
- IP地址范围:128.0.0.0 ~ 191.255.255.255
- B类网络ID为第1-2个8-bit部分
- 例子:
142.112.1.70
属于B类,网络ID为142.112
,节点ID为1.70
- C类
- IP地址范围:192.0.0.0 ~ 223.255.255.255
- C类网络ID为第1-3个8-bit部分
- 例子:
192.168.1.1
属于C类,网络ID为192.168.1
,节点ID为1
其中以127开头的IP地址为“回环地址”,数据信息的发送者发出的数据流会原样送回发送者。 网络ID越大,处于该网络下的主机或节点越少。一般家庭用的路由器网络ID为192.168.1
的情况下最多只能连接254个设备。
# IPv6格式
IPv6使用128-bit节点地址,分成8个4位数的八进制16-bit部分,例如:
2001:0000:5723:0000:0000:D14E:DBCA:0764
也可以缩写成这样:
2001:0:5723::D14E:DBCA:764
其他例子:
2001:0DA8:0000:0000:0001:0000:0000:0001
=> 2001:DA8::1:0:0:1
OR 2001:DA8:0:0:1::1
0:0:0:0:0:0:0:1
=> ::1
0:0:0:0:0:0:0:0
=> ::
开头64-bit包含了网络和子网络的地址,后面64-bit是接口ID。因为IPv6地址是直接赋予接口的,所以一个主机可以有多个IPv6地址对应不同的网络连接。下图拆开开头64-bit网络地址:
# 路由器
路由器是能连接多个网络的设备。它们决定了数据的去向,但它们一般都不是数据的最终接收者。数据在传输过程中有可能经过多个跳板[3],一般这些数据跳的次数过多且还没到目的地的话就会累死在路上,造成的结果就是发送者得不到回应、响应超时或者收到路由甲回应的死亡信息。
一个ID为142.222
的网络例子:
在这个网络中,所有的主机或节点都是必须要向路由器142.222.9.255
发送他们的数据,这样数据才可以在这个网络中畅行或者从这个网络发出到更外面的网络;所以在这里路由器142.222.9.255
被称为是默认网关。
假如在以上网络中主机142.222.12.27
要发送数据到服务器112.111.72.56
,数据会先到路由器142.222.9.255
,路由器会通过路由表查找数据的下个传送目标(随便一提,需要解析域名的情况下,找到一个IP记录丰富的DNS也能让你的数据少跳跳板,数据极低概率会累死在路上)。
假如在以上B类网络基础上存在子网络:
在子网络中主机142.222.10.2
要发送数据到服务器142.123.32.14
,数据会先到路由器142.222.10.255
,再到外面网络的路由器142.222.255.255
,再到更外面网络的路由器142.255.255.255
;找到142.255.255.255
的下级142.123.255.255
,再到服务器142.123.32.14
。当然,如果网络142.123
底下也有子网络的话,就要通过网关142.123.32.255
,之后才是服务器142.123.32.14
。
# MAC地址
MAC地址一般说的就是网卡生产出来自带的12个十六进制数的ID,当然也可以通过软件生成一个随机的MAC地址,只要主机所在的网络路由器上的ARP表上没有就行。它能够在一个网络下确认主机发送者或接收者的身份。因为MAC地址都是厂家定的,对比IP地址,MAC地址就可以有唯一标识了,甚至一人手上说不定还能独享多个“唯一”。MAC地址例子如下:
00-0B-DB-45-A4-CC
前6个数代表制造商:00-0B-DB
后6个数为唯一编号:45-A4-CC
# ARP协议
ARP协议让路由器记录下哪个IP地址对应哪个MAC地址。因为IP地址多数为动态,一个设备说不定某天就移民了,所以路由器一般都有一个ARP表记录和分配IP地址给底下的子民;要是有的子民刚移民过来没有记录在案,在有数据传送过来路由找不到人的情况下会发广播,以这样的操作令底下子民回应,之后强制记录在案。
更多可以百度TCP/IP全家桶各种协议,比较重要的还有数据包结构、DHCP[4]和DNS[5]。