时隔2个月再来重新更新博客了,秋招也开始一段时间了,我也参加了实习生的面试,也拿了几个offer。但是感觉自己还是有很多不足的地方,在这里,博主有一个大建议,相进大公司,必须学好算法!算法!算法!
目录
计算机网络背景
网络发展
独立模式:
网络互联
局域网LAN
广域网WAN
认识"协议"
OSI七层模型
TCP/IP五层(或四层)模型
网络在哪里?
网络传输基本流程
如何理解报头?
报头知识总结
路由器工作原理
进一步理解网络资源
如果我想攻击这个局域网怎么做?
再谈数据跨网络传输的过程
网络中地址管理
IP地址
Mac地址
独立模式: 计算机之间相互独立
网络互联: 多台计算机连接在一起, 完成数据共享
局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起
广域网WAN: 将远隔千里的计算机都连在一起
注意:所谓的"广域网"和"局域网"只是一个相对的概念。比如, 我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网.。如果将来我们在月球上也建立了网络基站,那么"广域网"就又是另一个概念了。
协议本身就是一种约定。计算机之间的传输媒介是光信号和电信号.。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式。
计算机生产厂商有很多;
计算机操作系统, 也有很多;
计算机网络硬件设备, 还是有很多;
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准,
大家都来遵守, 这就是网络协议;
所以科学家们设计了下面的一个理论网络协议模型。
1、OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
2、把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机;
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;3、它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
4、但是, 它既复杂又不实用;
当然,科学家们是在理论层面上设计的一套网络通信"协议",但是工程师们在实际现实时实现了五层,表示层和会话层是被优化掉了。
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构, 每一层都呼叫它的下一层所提供的网络来完成自己的需求
物理层: 负责光/电信号的传递方式.。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层。
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层。
网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层。
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机。
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层。
我们来对比一下理论和实际实现的差别:
物理层我们考虑的比较少(因为博主是专门研究软件层面的)。因此很多时候也可以称为 TCP/IP四层模型。
一般而言
对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
对于一台路由器, 它实现了从网络层到物理层;//当然,现在的路由器实现的很高级,有的甚至可以工作在应用层。
对于一台交换机, 它实现了从数据链路层到物理层;
对于集线器(信号放大器,信号在远距离传输过程中信号会慢慢衰减,所以需要通过集线器来放大传输的信号,保证更远距离的信号传输), 它只实现了物理层;
但是并不绝对。很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发)。
这里的网络,指的是网络协议栈。它是一个软件,贯穿体系结构的tcp/ip,属于OS的一部分。
重点:软件也是可以分层的,计算机网络也不例外!
所以,我们来看TCP/IP协议分层:
关于报头的详情介绍,博主会在以后的博客中写的,在这里博主用粗粒度的语言来初步介绍报头。
我们从生活的角度来理解报头,比如说快递单。
IP的意义!
比如唐僧取经的栗子:
1、 从哪里来,到哪里去(几乎是一直不变的)IP
2、上一站从哪里来,下一站去哪里(一直在变化)Mac。因为在数据链路层,经过路由器,一直在进行解包和封装。
如果每台主机同时发送数据,可能会存在数据碰撞的问题。
所以:
1、每台主机都要具有碰撞检测的能力。
2、每台主机都要有碰撞避免算法。
补充:
以上是以太网的避免数据碰撞的做法。令牌环网的解决方法是,在这个局域网中,具有令牌的主机才能优先发送数据,这就和之前博主讲的互斥锁优点像。
我们通过上面的工作原理可知,发送数据前,主机要在数据链路层进行碰撞算法检测。所以我们可以使用特定的工具绕过碰撞避免算法检测,直接向局域网中塞大量数据,这样别的主机就一直没法发送数据,那么这个局域网就基本瘫痪了。
在这里博主就不敢演示了~
总结:我们发现,数据发送并不是直接从上层直接到对端主机的。中间还有许多查找的过程。只看主机A和主机B的话,数据发送不是从应用层直接到应用层,而是经过封装和解包的过程,是贯穿整个体系结构的!
IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4。
IP地址是在IP协议中, 用来标识网络中不同主机的地址;
对于IPv4来说, IP地址是一个4字节, 32位的整数;
我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
关于具体的细分,后面博主再总结介绍~
MAC地址用来识别数据链路层中相连的节点。Mac地址是全球内唯一标识的一台主机的网卡的,但是在实际中,我们并不使用Mac地址来标识主机,更多的使用IP地址。
长度为48位, 及6个字节。一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改。 mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).