计算机网络简单理解总结

这篇文章我看了书 也网上搜索了一些网站看看大概的不懂的地方。本文大概理解了大部分内容部分内容的理解大家可以根据自己

的东西加以理解,有不正确的地方 还望加以评论指正! 谢谢!

首先是知乎上一篇对计算机网络总体的理解:  那么计算机网络怎么去理解呢?

计网的目的是通信,是为了连接端到端
所以我们首先要考虑——网怎么设计
我们有两种网:1.分组交换 ;2.电路交换(电话)
在很久很久以前,你记不记着,有个“拨号连接”,有个叫做“猫”的东西???
没错,就是那个,一上网就打不了座机的时代
此时,我们还是电路交换哟这样太蠢了!!!
如果我只是想上网看下小电影的简介,那我打开介绍小电影的网站,就暂时不会再通信了
所以,没必要一直给我连接着啊!于是,我们用起了分组交换
分组交换还有两种方式:
1.虚电路,如ATM(模拟电话线路) 数据报 ,如因特网 为啥因特网不用虚电路?
肯定是因为,大多数时候,虚电路没必要啊,而且麻烦不好用啊 为啥虚电路没必要 不好用?
因为大多数时候,互联网没有实时要求啊;他的面向连接浪费资源啊
好嘞,现在我们知道了,因特网使用的是,数据报
我们先不管数据报是什么,我们先考虑下如何传输数据报
我们的因特网,肯定是基于物理电路的,
因此,我们需要一个,将数据转化为物理信号的层,
于是,物理层诞生啦

有了处理物理信号的物理层,可我们还得知道,信号发给谁啊
你肯定知道,每个主机都有一个,全球唯一的MAC地址吧
所以,我们可以用MAC地址来寻址啊
恭喜你,链路层诞生啦别急,
你知道MAC地址,是扁平化的吧
也就是说,MAC地址的空间分布,是无规律的!!!
如果你有十万台主机,要通过MAC地址来寻址
无F**K可说
不管你设计什么样的算法,数据量都太大了!!!
所以,我们需要IP地址啊
,IP里的有趣的东西太多啦,所以我补充在了最后;
有了IP地址,恭喜你,网络层诞生啦

然而,一台主机不能只和一台服务器通信啊,
毕竟下小电影,也要同时货比三家啊
那如何实现并行通信呢?
嘿嘿,我们有端口号啊 再基于不同需求:
有人想要连得快,不介意数据丢失,比如你的小电影
有人必须要数据可靠,比如发一个电子邮件
于是产生了UDP;TCP
恭喜你,运输层诞生啦

别急,你知道的吧,不同应用,有不同的传输需求
比如,请求网页,发送邮件,P2P...
而且,还有DHCP服务器啊
为了方便开发者,我们就对这些常用需求,进行了封装
恭喜你,应用层诞生啦至此,自底向上,讲述了计网。

来我们思考先一个问题:如果有四台电脑,要互相能通信,咋办?每一台电脑都和另外三台连起来?
那我要是再来十台电脑,你在电脑上给我再加十个接口?那,把他们连接到一个小盒子上,让小盒子帮着通信?
哎这个可以有啊,那如果我有一万台电脑,一个小盒子能够用?嘿嘿
,那让每一个小盒子连一百台,然后把一百台小盒子再连给一个小盒子-------
我们可以用“电话线,宽带,和光纤”,把电脑接给小盒子,它们被称作“接入网”
而ISP就像小盒子,帮你在网络里做通信
而ISP的分层,无非就是,终端太多了,没办法不分层  好了,现在你已经明白了网络的层次化你肯定是知道,
为了在辣么多计算机里,找到目标,我们采用了,有规律的IP地址
而路由器,又叫分组交换机,就是帮我们在公网里,做IP寻址的最初,IP地址是IPv4
首先,IP地址是分成了五类(ABCDE)奈何不够用啊,于是,我们是使用了子网划分
然鹅,手动分配子网IP,会死人的!
于是,DHCP来了(md还是不好用啊,于是,诞生了无分类编址(CIDR)
奈何,还是不够用啊
于是,VPN出现啦,于是专用网的IP不再占用公网IP首先,啥是专用网啊
1.局域网,比如,公用一个路由器的宿舍啊,家啊
2.部分广域网,比如军队、铁路、交通、电力等部门,拥有自己专用的通信网和计算机网。
然鹅,这些网络不对内部外的用户开放。这些网络覆盖的地理范围很广,因此,这些专用网都是广域网。
保密性质的广域网,通信要扯到VPN,宝宝没学到这里,先埋个坑
来我们先谈谈局域网内的通信
如果哈,我们是一个大局域网,比如我们公司有一百台电脑,
首先,路由器没一百个接口让我插! 
其次,如果我不想和公网通信,那我就没必要用路由器!
所以,链路交换机来了!!!链路交换机是基于MAC寻址的,因为局域网没大到必须用IP寻址的地步啊
但更准确的说话,链路交换机采用了,跨越链路层和网络层边界的协议——<b>ARP</b>
毕竟,ARP要做一个IP到MAC的映射,你问我,为啥ARP要做IP到MAC的映射
因为,你在应用层和运输层里,目的地址都写得是IP,
不把IP转化为MAC,咋寻址啊?你问我,局域网为啥不用路由器,为啥要用链路交换机

交换机功能少,接口多,比路由器划算啊;

那,局域网和公网怎么通信呢?
所以,NAT来了啊!!!分组交换机,也就是路由器,用自己的公网IP,帮你们局域网里的人们,给公网发信息
然后把接受到的信息,再转发给,那个找他帮忙的人
这就是NAT技术啊
这时一群人说,NAT bulabula不好,我们要拒绝NAT,使用IPv6
那么就牵扯到了IPv4和IPv6间的通信(双栈||隧道)还有啊,IP地址太丑啦,
用户根本记不住
于是乎,域名千呼万唤始出来

顺便带出来了DNS服务器

下面看看计算机网络概念的理解吧

计算机网络  简单说就是一组自主的计算机 为了 数据连通和共享连接起来的集合
通用的说法 不同地理位置,具有独立功能的计算机系统和通信设备 用通信线路连接起来
以功能完善的协议和软件管理实现资源共享 信息传输 的系统
计算机网络的作用 功能 就像定义说的
连通性(信息传输)
数据共享
网络 有若干节点(集线器 计算机 交换机 路由器等等)啊 链路啊组成
互联网就是网络的网络  等于说 网络就是把许多计算机连接在一起  而 互联网 就是把网络连接在一起
因特网 最大的互联网


我们要访问互联网
就必须要有一个入口吧 让他们帮我们代理 如果没有代理 这么多 数以上亿级别的计算机搞在一块不就乱套了
NAP  网络接入点 就是说计算机网络中 用来交换流量的节点  就是所谓那些大的电信公司

就是让你连接宽带的公司,或者给你提供上网流量连接的公司

连接方式不是有很多吗?什么一对一 一对多这些?这里暂时谈谈p2p

P2P 一对一或点对点传输,平等共享资源的意思
其中每个客户计算机都可以作为其他计算机的服务器,允许对文件和外围设备的共享访问,而不需要中央服务器
可以理解为一种特殊的c/s方式  客户机既是客户端也是服务端 
常见的p2p软件 腾讯视频,暴风等,在看视频缓冲时,也再上传。 wechat  qq 接收信息 也发送信息这样理解
对于p2p理财这种这些  其实是所谓有钱 人人都可以当老板 点对点理财 但是实际上作为p2p平台
技术上是平等的 也就是每个人都可以是老板角色  但是真的在运用的时候 只有双方都掌握当老板需要的技术含量
这才算是对等的  连老板都不会当 谈什么p2p?  这是题外话 便于理解

ISP  因特网服务提供者 现在主要是电信公司这些 一个用户接入互联网 就能成为ISP 但必须具备相应的东西
比如调制解调器 路由器等这样的设备
总之 ISP 就相当于一个盒子 在现在的多层ISP结构的计算机网络当中
一个计算机和另一个计算机通信 可能要经过多层ISP 比如从本地ISP 经过几层更加高层ISP 然后通过NAP接入互联网
从互联网出去 也是类似的操作
因特网发展的三个阶段
arpanet(单个的网络) -> 主干网 地区网 校园网(企业网)三级结构 -> 多层ISP结构 
这个其实没什么好说的  理解理解就好了 就是随着时代发展 互联网需要继续扩大 而生出的架构  从一个网络 到三级网络 到全球多层


为什么要分层呢   理解
各层之间独立
某一层不需知道下一层是怎么实现的 仅仅需要知道该层通过接口所提供的的服务
大问题就可以分为多层之间的小问题  降低了难度
灵活性好
任何一层发生改变 没关系 不影响其它层  而且某一层的服务可以进行修改 当某层的服务不要了 甚至可以直接删除
结构上可分割开
各层可采用自己最合适的技术实现
易于实现和维护
对于整个大系统来说  调试和实现都方便了很多  因为分成了多个更小的系统
能促进标准化工作
每一层的功能进行了精确的说明


各层要完成什么功能
差错控制啊 可靠处理  
流量控制啊 发送速率不要太快也不要太慢
分段重装啊 发送端分组 接收端重组
复用和分用啊  高层会话复用一条底层的连接 在接收端在进行分用
连接建立和释放啊

那你说你要分层  有哪些层次比较好呢?

四层tcp ip
网络接口层(对应osi物理层和数据链路层) 网际层(对应osi网络层) 运输层 应用层(对应osi会话层表示应用层)
七层osi
物理层 数据链路层 网络层 运输层 会话层 表示层 应用层
五层模型
我们学习的五层  肯定是因为前面四层和七层都不够好
物理层 数据链路层 网络层 运输层 应用层(对应osi会话层表示层应用层)


边缘部分
用户的主机 用户直接使用的这些计算机等设备 传送数据啊 资源共享啊
核心部分
路由啊 网络啊 等等  就是为边缘部分提供服务的
交换啊 连通性啊这些
就是因为 a b  直接通信 可能需要跨过网络核心
c/s:客户端 服务端连接模式
client 不要复杂的操作系统 硬件要求不高  只要知道服务器地址就好了
server 想当然的需要强大硬件支持 然后需要高级的操作系统操作管理
建立连接以后 他们的通信是双向的
记住  所谓两个主机的通信 实际上就是两个主机上面运行的计算机程序 是指进程直接的通信  本质上就是程序直接的通信

之前说过了p2p这里不再叙述了

我是根据谢希仁 第5版 这本书来看的   物理层直接跳过  自己不怎么懂  接下来我们说说协议层次之间数据传送相关的概念:
实体 可发送或者接受数据的硬件或者软件进程  大部分时候是特定的软件模块
对等实体 就是同一层次的实体  
协议  控制两个或者多个对等实体进行通信的规则的集合
协议是水平的 就是说协议作用于对等实体的
服务是垂直的 就是下层给上层跨层提供的  服务一般是说能被上层看见的功能
服务访问点  就是一个逻辑接口 用来相邻两层之间交流数据的地方

服务数据单元 
协议数据单元  
所谓协议数据单元就是在不同站点的各层对等实体之间,为实现该层协议所交换的信息单元。
通常将第N层的协议数据单元记为NPDU。它由两部分组成,即本层的用户数据(N)和本层的协议控制信息(NPCI)。
从服务用户的角度来看,它并不关心下面的PDU,实际上它也看不见PDU的大小。
一个N服务用户关心的是:下面的N实体为了完成服务用户所请求的功能,究竟需要多大的数据单元。
这种数据单元称为服务数据单元SDU,一个N服务数据单元就是N服务所要传送的逻辑数据单元。
实际上,在某种情况下,某一层的服务数据单元SDU和上一层的PDU是对应的。因此NSDU就相当于N层的用户数据。
而在许多情况下,SDU和PDU并不等同,有时NSDU较长,而N协议所要求的NPDU较短。
这时就要对NSDU进行分段处理,将一个SDU分成两个或多个PDU来传送。
当PDU所要求的长度比SDU还大时,也可将几个SDU合并成为一个PDU。

然后说说数据发送方式
这个计算机之间的通信 究竟可以使是怎么样的呢?
以前的电路交换  以前就是有一个猫这样子的东西这个就是 modem 谐音叫过来是猫 
它是调制解调器 将模拟信号转换为数字信号的东西
计算机之间的通信呗 这种方式就是通过它来把 01 这些数字信号 和 对应的模拟信号进行转换 实现计算机之间的通信
现在用的不多了   它是一个工具 但是其实和这种连接方式没多大关系  现在也有光猫这些  就是用来调制解调信号的
回到电路交换这个东西 听名字就是知道基于电路
他是很烦人的 占着茅坑可能不拉屎的那种通信方式 连接建立以后 在全部通话的时间内 占用着整个链路的通信
以前 打电话这种  长途 需要中继器 中继器占满 别人就不能进行长途通话了  
所谓传输效率当然低  因为传输数据的时间很短 可是你这两个计算机端到端的资源你一直占着  有很多的地方是空闲的
可是你不能给其他人用 就浪费了
好 改进吧
报文交换来了 采用存储转发技术 
通过路由器 收到一个分组 暂时存储下来 检查首部 查找路由表 根据目的地址找到合适的接口转发出去
这里提到了很多概念  路由器是什么东西  路由器就是一个 实现了存储转发技术的 
完成这样的特定功能的计算机  它里面有一个路由表
路由器有很多借口 路由表的建立就是路由器之间经常交换信息 从而掌握整个网络拓扑结构 
这里关于路由器之间交换信息的算法方式先不说 关于路由器对路线的选择等等也不说
路由表里面包括接口和对应的一些计算机的地址
首部是这交换方式添加的控制信息 里面包含了 这个报文的目的地址 源地址 等等信息 
所以在传送的过程中其他路由器只需要解析一下就知道下一步从哪一个接口转发出去了
这样整个的链路不需要一直占用 这个报文发出去
由路由器负责存储转发 就提高了效率 不用一直占着端到端的线路资源了
总之  存储转发的本质是在数据通信的过程中 断续 或者说 动态的 分配传输带宽的策略
关于带宽等计算机网络性能指标等下说:
刚才的报文交换 有人发现也不够好 为什么呢  因为 我每次一个报文 这么大的数据  能不能先接受
小部分数据  接受一个小的单位就可以处理 转发呢?  
 
好 那么分组交换来了 就是把一个报文  一个数据包分成几个分组来发送 
路由器吧他们分成更小的数据段 加上必要的头部信息形成一个分组传送出去
这样 处理速度 接受 转发速度提高了   整体性能就提高了

然后问题来了  你以前是一个数据包传送的 现在 多了路由器  是不是时延增加了呢?
确实是的   但是这点延迟 不算高  为了提高线路利用率 提高效率 这点延迟完全是值得的
以下可作为了解
多处理机系统: 1m以下
个人区域网    10m左右
局域网 1km左右
城域网 5-50km
广域网 几十到几千公里  跨国

总之 这些 就是通过作用范围来划分的


那我们说网络有很多性能指标 有哪些  又怎么理解为什么需要这些指标呢?
速率 也叫额定速率 标称速率  通俗说就是在数字信道上传送数据的速度
带宽 通信线路传送数据的能力  最高数据率
速率就相当于管道里输水的速度 
而带宽则是这个管道的最大输水速度 管子大小决定带宽 速率不变
如果你买了电信的20M带宽,但是接入的以太网是百兆的,那么,速率是百兆,带宽是20M

speed更多的是涉及物理概念,描述的是一个网络线路中硬件所能承载的最大的bit/s值。
举个例子,一段网络电缆,根据其物理特性,speed最多也就是10Gbps。
你可以这样想象,你站在一个管子的出口,在你面前不断地有一种叫做bit的生物跑出来,一会儿是0一会儿是1,
它们“奔跑的速度”就是我们讲的speed。不同硬件技术可能会有不同的speed,
bandwidth更多涉及逻辑概念,描述的是你在一秒里面能接收到多少bit的数据
现在,你观察的不是一根管子,而是两个管子,这两个管子里面都不断的有bit生物跑出来。
我们可以确信的是,它们“奔跑的速度”是不变的,因为生物还是那个生物,即speed不变。
但是在一秒时间内,你看到的生物却多了一倍,因为现在是两根管子啊!bandwidth就是用来描述这个物理量。
由此我们也能知道,bandwidth和speed的度量单位是一样的,都是比特每秒。
那么,有没有可能bandwidth会小于speed呢?这是有可能的。我们再举上面比特生物的例子。
现在,有两种比特生物,一种是在黑漆漆的管子里开手电筒照明,让其余比特知道路怎么走,
另一种是身上背着信息,从管子里跑出来之后把信息告诉你。
由于管子太长,比特们决定每4个背着信息的比特前面都必须另外有一个比特专门负责照明。
这样,从管子里每出来5个比特,实际上只有4个对你而言是有用的。
此时,这条线路的bandwidth = speed * (4/5)。
总结一下,就是bandwidth实际上是对于你而言这条线路里面有用的bit的传输速率。
此外,通过上面的讲述,你还会发现,假如你要从网络中接收一个很小的文件,小到只有一个bit,
那么,此时对于你而言,bandwidth实际是没有多大意义的,你的接收快慢几乎仅取决于speed。
但是,如果你想接收一个很大很大的文件,那么,bandwidth对于你完成接收的快慢就有至关重要的作用。
最后一点, 如上所述,因为speed是物理概念,讨论的是一段网络线路的物理极限,所以在现代所有网络技术的讨论中, 
speed通常是一个硬性条件,没有多少回旋的余地,很少有人会在这上面做文章,所以讨论speed的情况很少。
更多时候,大家都是关心bandwidth。
吞吐量  单位时间内通过某个   网络或者信道或者说接口   的数据量
吞吐  就是因为额定速率收到cpu处理速度 网络是否拥塞这些影响后
实际上还有多大的数据量通过网络  比如100m以太网  因为上面的因素可能也只有70 60m的吞吐

时延 包括下面四个
网络中数据从一端到另一端的时间
发送时延  主机啊 路由器啊发送完数据出去的时间  也叫作传输时延  发送时延 = 数据帧长度/发送速率
传播时延  数据在通信线路传输上的时间 电磁波传播的时延 传播时延 = 信道长度/电磁波在信道上传播的速率
处理时延  路由器主机 接收分组 后花费一定时间进行处理
排队时延  分组在网络中传输 经过路由器 可能需要在输入队列中排队  到了转发口 也可能需要排队
时延带宽积
= 传播时延 * 带宽
假设时延带宽积为2*10^5bit 这说明 第一个比特到达目的时 发送端就已经发送了20万个比特

往返时间RTT
从发送端发送数据开始 到发送方收到来自接收方的确认的时间
有时候忽略传播时延处理时延排队时延等因素  
利用率
u = 1 - D0/D 
D0表示空闲时候的时延  D表示当前网络的时延
利用率过高会导致网络拥塞

好 为什么需要这些呢?我们说评价一个东西的性能那肯定有指标。这些指标只不过是历史问题,通过大量经验积累最终确定的。

所以没必要纠结。


点对点信道
数据链路和链路区别
链路指的是物理线路
数据链路是指为了实现数据传输,把协议和硬件加到这条链路上 就构成了~
封装成帧 透明传输 差错检测
封装成帧
添加首部和尾部 然后在另一端的物理层上交数据链路层就可以标识帧的开始和结束 
帧定界控制符:开始SOH start of header 结束EOT end of transimission
可以判断帧是否完整 是否应该被收下
透明传输 
比如文本文件组成的帧,都是从键盘上输入的,其数据部分不会出现帧定界控制符
也就是说不论你从键盘上输入什么都可以在这样的帧中传输过去 这样的传输就是透明传输
如果是二进制文件,刚好里面的数据有和soh eot这样的控制字符一样的,那么数据链路层
会错误的找到边界,这样帧接收就不正确了,显然不是透明传输
转义字符就来了 esc  在数据里面遇到和控制字符一样的就补上esc转义字符
数据和转义字符一样就在前面也加一个转义字符 这就是所谓的字节填充或者字符填充。
另一类差错比较复杂
帧丢失
帧重复
帧失序 
都是传输差错 这些可以通过 帧编号 确认重传机制纠正  到时候说吧
差错检测
比特层次上 0 变成1  1 变成 0 这个就是所谓的比特错误 比特总数的比率就叫误码率
传输不可能是无误的,肯定不理想,有错误,差错检测就来了
差错检验包括很多方法  这里可以了解了三四种 循环冗余校验 奇偶校验  海明码
奇偶校验
单向奇偶校验 校验位保持奇校验奇数个1  偶校验偶数个1
奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数  
偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数   
只当一个给定的字里同时出现两个错误的概率被忽略不计时,单个的奇偶监督才是有效的
试想:bit改变偶数个1 奇校验不出来是否错误  改变偶数个1 偶校验也同样失效
实际上 奇监督码比偶监督码可取,因为它排除了传输全0的情况。
方块校验就是双向奇偶校验 也叫垂直水平校验
也就是二维上的校验 增加了校验次数提高了检错能力 好几个数据排成一个二维表 7*7 
一般在同步传输方式下选择奇校验  异步传输下选择偶校验
同步传输该方式是在一块数据的前面加人1个或2 个以上的同步字符SYN。
SYN 字符是从ASCII 码中精选出来供通信用的同步控制字符。
同步字符后面的数据字符不需任何附加位,同步字符表示字符传送的开始,发送端和接收端应先约定同步字符的个数。
异步传输将比特分成小组进行传送,小组可以是8位的1个字符或更长。
发送方可以在任何时刻发送这些比特组,而接收方从不知道它们会在什么时候到达。

来啊循环冗余校验啊:
冗余校验检验CRC Cyclic Redundancy Check 是通过n位冗余码检测差错的
n位冗余码怎么来的 怎么校验呢?
在发送端:
我们知道数据M k位  商量好的除数P 位数也知道  就可以知道 冗余码为多少位了
用二进制模二运算进行2^n 乘 M 运算 相当于在要校验的数据M(k位)后面添加n个0
得到的k+n位的数 除以 收发双方事先商定的长度为(n+1)的除数P
得出的商是Q 商没什么用 余数是R (n位) 余数作为冗余码 
为了检验差错而添加的冗余码长叫做帧检验序列FCS
加上FCS后一个就是k+n位了 
在接收端
我们吧接收到的数据以帧为单位CRC校验 如果没错 那肯定冗余码为0 也就是余数为0
如果误码就冗余码不是0了 但这个也不是万能的 只是 这种出了错 冗余码还为0的概率非常小
循环冗余校验都是用硬件完成的 所以校验很快
我们有一种比较方便的方式表示循环冗余码的检验过程 就是用多项式
比如p(x)多项式 = X^3 + X^2 + 1 那么就是表示除数p = 1101

汉明码:汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。 只能纠正一位错误可以检测多位错误
http://blog.csdn.net/woshinia/article/details/22381075
其实也算是基于奇偶校验产生的   一般用于检测和纠错一位错误
下列通用算法可以为任意位数字产生一个可以纠错一位的汉明码:
1.从1开始给数字的数据位(从左向右)标上序号, 1,2,3,4,5...
2.将这些数据位的位置序号转换为二进制,1, 10, 11, 100, 101,等。、、、、、、、//这个究竟是干嘛的?就是给第5点用的。。。
3.数据位的位置序号中所有为二的幂次方的位(编号1,2,4,8,等,即数据位位置序号的二进制表示中只有一个1)是校验位
4.所有其它位置的数据位(数据位位置序号的二进制表示中至少2个是1)是数据位
//5.每一位的数据包含在特定的两个或两个以上的校验位中,这些校验位取决于这些数据位的位置数值的二进制表示
(1) 校验位1覆盖了所有数据位位置序号的二进制表示倒数第一位是1的数据:1(校验位自身,这里都是二进制,下同),11,101,111,等
(2) 校验位2覆盖了所有数据位位置序号的二进制表示倒数第二位是1的数据:10(校验位自身),11,110,111,1010,1011,等
(3) 校验位4覆盖了所有数据位位置序号的二进制表示倒数第三位是1的数据:100(校验位自身),101,110,111,1100,1101,。。
三、海明码计算示例  偶校验  
校验位置选择原则:第i位校验码从当前校验码位开始,每次连续校验i位后再跳过i位,然后再连续校验i位,再跳过i位,
以此类推。确定每个校验码所校验的比特位:
P1校验码位校验的码字位为:第1位(也就是P1本身)、第3位、第5位、第7位、第9位、第11位、第13位、第15位,……。
P2校验码位校验的码字位为:第2位(也就是P2本身)、第3位,第6位、第7位,第10位、第11位,第14位、第15位,……。
这种说法其实是就和上面的第5小点是一样的
原信息码:10011101
(1)确定校验码位数
原始信息码一共8,根据前面的表可得知校验码位数为4
(2)确定校验码位置
??1?001?1101
(2)计算机各位校验码
P1(n=1):1、3、5、7、9、11   #----检验的bit位,下同
1  1  0  1  1  0    #----对应位的值,下同
P2(n=2):2、3、6、7、10、11
        1  1  0  0  1   1
P3(n=3):4、5、6、7、12
        0  0  0  1  1  
P4(n=4):8、9、10、11、12
        1  1  1   0   1
最终得出插入校验码后的信息码为:111000111101
关于根据海明码校验
1  所有校验码所在的位是只由对应的校验码进行校验,
如第1位(只由p1校验)、第2位(只由p2校验)、第4位(只由p3校验)、第8位(只由p4校验)、第16位(只由p5校验),……。
也就是这些位如果发生了差错,影响的只是对应的
校验码的校验结果,不会影响其它校验码的校验结果。
这点很重要,如果最终发现只是一个校验组中的校验结果不符,
则直接可以知道是对应校验组中的校验码在传输过程中出现了差错。

2  所有信息码位均被至少两个校验码进行了校验,也就是至少校验了两次。
查看对应的是哪两组校验结果不符,然后根据海明码校验码码位对照表就可以很快确定是哪位信息码在传输过程中出了差错。

海明码校验的方式就是各校验码对它所校验的位组进行“异或运算”,即:
b1,b2...表示数据位的数据0 1
G1=p1⊕b1⊕b2⊕b4⊕b5⊕……
1 3 5 7.。按位标序号
G2=p2⊕b1⊕b3⊕b4⊕b6⊕b7⊕b10⊕b11⊕……
 2 3 6 7 。。 
G3= p3⊕b2⊕b3⊕b4⊕b8⊕b9⊕b10⊕b11⊕……
4 5 6 7 。。。12 13 14 15。。
正常情况下(也就是整个码字不发生差错的情况下),在采用偶校验时,各校验组通过异或运算后的校验结果均应该是为0,
也就是前面所说的G1、G2、G3、G4,……均为0,因为此时1为偶数个,进行异或运算后就是0;
而采用奇校验时,各组校验结果均应是为1。

现在举一个例子来说明,假设传输的海明码为111000111101(一共12位,带阴影的4位就是校验码),
从中可以知道它有四个校验组:G1、G2、G3、G4,
然而到达接收端经过校验后发现只有G4=1(也就是只有这组校验结果不等于0),
通过前面介绍的校验规律可以很快地发现是G4校验组中的p4校位码(也就是整个码字中的第8位)错了
(因为只有一组校验结果出现差错时,则肯定只是对应的校验位出了差错),也就是最终的码字变成了:111000011101。

    再假设G3、G4两个校验值都不为0,也就是都等于1。
通过码位对照表中比较G3、G4两个校验组(注意本示例中码字长度一共才12位,
只需要比较前12位)中共同校验的码位可是以很快发现是b8
也就是第12位出现了差错,也就是最终的码字变成了:111000011100。
表格本来就是自己算出来的  根据规则画出来的  所以 出题目 也可以自己算出来 

最后啰嗦一下 在数据链路层仅仅使用循环校验 则只能做到 对帧的无差错接收   这个要理解清楚
凡是接收端数据链路层接收的帧 我们都以非常接近1 的概率认为没有产生差错

你只说了校验方法 就不能优化一下 少点错误吗?
可以啊  那我们要知道啥东西影响导致了bit错误呢
信噪比影响很大 提高信噪比就可以优化  少错误了
什么是信噪比啊?
信号 和 噪声 的比例
是指一个电子设备或者电子系统中信号与噪声的比例  暂时了解到这里

ppp:
因特网是由大量的异构网络通过路由器相互连接起来的。
网络层是指的我们用的最多的以太网的网络层,它主要运行IP协议。
路由器可以连接不同的网络,即支持不同的网络层协议。
所以PPP链路的两端的NCP根据网络层的不同协议互相交换网络层特定的网络控制分组。
总之,PPP协议两端的网络层可以运行不同的网络层协议,但仍然可使用同一个PPP协议进行通信。
如果在PPP链路上运行的是IP协议,则对PPP链路的每一端配置IP协议模块(如分配IP地址)时
就要使用NCP中支持IP的协议——IP控制协议IPCP(IP Control Protocol)。IPCP分组也封装成PPP帧在PPP链路上传送。
  PPP协议的验证分为两种:一种是PAP,一种是CHAP。
  相对来说PAP的认证方式安全性没有CHAP高。PAP在传输password是明文的,
  而CHAP在传输过程中不传输密码,取代密码的是hash(哈希值)。
  PAP认证是通过两次握手实现的,而CHAP则是通过3次握手实现的。

ppp协议已经不是纯粹的数据链路层协议  还包括了物理链路层和网络层内容
从那副ppp协议状态图就可以看出来 包括了物理连接和网络协议配置
广播信道
我们说除了点对点(一对一)信道以外,还有广播信道(一对多)
广播信道有那些拓扑呢 星型网 环形网 总线网 树形网
在以太网中 多个站发送信息可能会发生碰撞
所以利用率不会是100%  利用率是 S = T0/T0+t  t表示单程端到端传播时延  T0表示发送帧的时间
我们定义了一个参数a = t/T0 可见应该尽可能减小a的值
既然提到了碰撞我们该怎么应对呢  CSMA/CD

CSMACD这个东西记住几个字就好了
多点接入  就是总线型网络 计算机之间以总线的方式连接在一起
载波监听   其实就是先听后发 
碰撞检测  边听边发 碰撞停发 人工加强干扰信号告诉其他计算机有碰撞不要发了
其他的你可以自己模拟一下碰撞的过程图解
这里的碰撞需要知道的是 截断二进制退避算法
也好理解 就是确定了基本的退避时间为2t = 51.2us 也就是在争用期内可以发送512bit 64字节
然后每次碰撞我们下次从0~2^k-1 中随机取一个数 作为等待时间 k呢 从min(重传次数,10)中间取
当重传次数达到16次 我们就丢弃该帧 向高层报告

我们知道网络会越来越大 一步步扩大的 那么局域网扩大怎么扩大呢?
有人提出了集线器,可是由于上面的碰撞问题,集线器很快不会适用,会导致更大的碰撞域
于是网桥来了
网桥就是说 他有一个转发表  所以
能通过转发表过滤通信量 增大吞吐量 提高了可靠性 隔离了碰撞域
当然因为要查询转发表 肯定增加了时延
另外网桥还是只适合用户数不太多的 可能几百个这样子的 或者说通信量不太大的以太网
因为网桥再怎么样是属于数据链路层 还是在同一个局域网 无法避免广播风暴
广播风暴无法从根本上解决,因为我们这个主机越来越多没办法 只能尽量避免
所以VLAN来了呀   他就是在以太网帧中加了个VLAN标记 代表着不同的虚拟局域网
这样的话就是在以太网中划分了不同的虚拟局域网 限制了接收广播站的主数目
哦吼  ~  忘记说网桥的特殊 透明网桥了  也就是即插即用 就是他有神奇的魔法  是开心大喇叭。。。。
不是 是他可以自学习  就是本身转发表是空的  但是可以查到以太网 记录地址和对应的接口
一般的步骤如下:
网桥收到一帧,查找转发表中与收到的帧的源地址有误相匹配的项目
没有  嘿嘿  增加一个项目 有的话 就更新  转发表一般大概是就是 进入接口的时间 源地址 和接口
然后转发帧 查找转发表中的目的地址有无相匹配的项目,没有就通过其他的出口(接口)转发出去
有的话就按照转发表的对应的接口转发出去
有趣的是 透明网桥这么转发 可能死循环  就是网络中难免会有圈子  死循环就不好了
怎么办呢   来了  生成树算法   这个我不熟悉 但是知道有这个算法就好了 它能解决这个问题

LLC+MAC   
  LLC子层负责向其上层提供服务;
LLC 是在高级数据链路控制(HDLC:High-Level Data-Link Control)的基础上发展起来的,
并使用了 HDLC 规范子集。LLC 定义了三种数据通信操作类型:
类型1:无连接。该方式对信息的发送通常无法保证接收。
类型2:面向连接。该方式提供了四种服务:连接的建立、确认和承认响应、
差错恢复(通过请求重发接收到的错误数据实现)以及滑动窗口(系数:128)。通过改变滑动窗口可以提高数据传输速率。
类型3:无连接承认响应服务。
类型1的 LLC 无连接服务中规定了一种静态帧格式,并支持运行网络协议。有关传输层网络协议通常是使用服务类型1方式。
注意:在Windows 2000网络体系结构中,LLC子层是由传输驱动程序实现的,而MAC子层是由网络接口卡(NIC:网卡)来实现。
类型2的 LLC 面向连接服务支持可靠数据传输,运用于不需要调用网络层和传输层协议的局域网环境。
LLC子层负责向其上层提供服务;
LLC子层的主要功能包括: 
* 传输可靠性保障和控制; 
* 数据包的分段与重组; 
* 数据包的顺序传输。

从上面我们可以看出LLC是基于高级链路控制的 当不需要涉及到传输层来保证数据可靠性的时候
需要在LLC层实现

MAC子层的主要功能包括
数据帧的封装/卸装,
帧的寻址和识别,帧的接收与发送,
链路的管理,帧的差错控制等。
MAC子层的存在屏蔽了不同物理链路种类的差异性。
好了  我们说的  局域网还有更大的 吉比特什么的 这些我也没什么好讲的。。以后工作中需要

在去学习吧  大概了解下知道有这么一些就够了



网络层:
ip 怎么来的额  因为mac太复杂来了 所以ip就来了
ip分类  点分十进制  192.168.1.14  不同的网络异构  所以需要不同的分类
a: 网络号8位 0
b:网络号16位 10 
C: 网络号24位 110
D: 多播  1110
  E: 广播  1111
然后我们应该能知道不同类别的主机和网络号从哪一个开始的 a:1.0.0.1
ip数据包的格式需要记好
为什么说0 1 全0 全1 不能分配  因为这是规定的 我们留出来的 东西 当然是有用的 比如备用  比如广播
比如用作本网络的标识  全 0
为什么分为网络号,主机号
分等级不是很好嘛  这么多主机
另外 可以先找网络号 再找主机 岂不是可以省掉路由表中的项目,也就是减少了路由表
所占的存储空间以及查找路由表的时间

这些问题 其实是便于我们理解 但是面试中是不会问的
我们有时候会遇到说知道ip想知道对应的mac地址 然后可能知道mac想知道ip
这个时候RARP ARP这两个协议就来了
现在没有单独的用RARP协议了 以为DHCP协议已经包含了这个协议
另外,我们这个地址解析协议吧 会经常缓存  通过ARP缓存可以节省总是找服务器解析的时间
而且要知道查找是一种广播 而响应是单播


问题来了 我们主机数越来越多 还是不够用啊 于是我们划分子网
我们说 这个网络的划分吧 有时候也不那么好 不够仔细不够灵活 有时候我们主机数目不是那么多
但是分配了这么大的网络号 就浪费了很多的ip空间
两级ip不够 三级的子网划分就可以了
对外呢他还表现为一个网络  对内则在主机号上借位作为子网号 
子网号怎么获得呢  子网掩码就来了 ip和子网掩码相与就得出了子网络号


还是不够用。。。。无分类编址就来了 对应可变长子网掩码 
CIDR消除了传统的ABCD类 斜线记法。 eg: 172.168.2.1/26  代表前26位是网络号 
更加灵活 所以可以聚合
所以采用的也是最长前缀匹配  多长网络号 比如我26位 那我就26个1 对应相与
另外使用二叉线索树查找路由表.为了提高中查找效率,采用了压缩技术


CIDR的计算方法:
例1、192.168.9.0/24   192.168.10.0/24   192.168.11.0/24   192.168.12.0/24  192.168.13.0/24
192.168.14.0/24   192.168.15.0/24 汇总以上路由条目
          192.168.00001 001.0
          192.168.00001 010.0
          192.168.00001 011.0
          192.168.00001 100.0
          192.168.00001 101.0
          192.168.00001 110.0
          192.168.00001 111.0
          192.168.00001 000.0/21 即 192.168.8.0/21
  
ICMP: 为什么需要网际报文控制协议
为了更加有效的转发ip数据报和提高交付成功的机会 在网际层使用ICMP
怎么样才是更加有效?
我们不知道网络状况,于是我们可以先发送ICMP报文检测看看网络怎么样
收集的信息便于告诉我们适不适合转发ip报文,是否有差错啊
比如终点不可达啊  源点抑制啊(就是路由器或者主机拥塞而丢弃数据)
时间超过啊,生存时间为0时 丢弃报文并向源点发送时间超过报文
参数问题等等 比如ip首部字段出错  丢弃  并向源点发送参数问题报文
改变路由 比如网络拓扑改变 或者有更好的路由选择  告诉源点下次选择对应的路由器转发ip
上述的是差错报告报文

此外我们还有询问报文  比如询问ping值  traceroute  tracert
  有两种  回送请求 和回答  时间戳请求和回答

不管你ICMP报文也好 转发ip也好 总需要在不同的路由器中做出选择吧,路由选择协议就来了
我们路由选择是分层次的 包括内部网关协议 和外部网关协议
他们的共同特点是和其他路由交换信息:
我们考虑的问题包括 和那些路由器交换信息 交换什么信息 什么时候交换信息
RIP:  基于UDP
基于路由向量的路由选择协议 
仅和相邻的路由器交换信息
路由交换的信息就是当前本路由器所知道的全部信息 即自己的路由表
按固定的时间间隔交换路由信息  比如30秒一次

距离向量算法:
对每一个发来的RIP报文进行如下步骤:
对地址为X的相邻路由器发来的RIP报文
首先修改此报文中的所有项目 把下一跳字段中地址都改为X
并且把距离字段都加1  注意:每个项目都有三个关键字 到目的网络N 距离d 下一跳X
然后对修改后的报文的每个项目进行如下步骤:
如果原来的路由表中没有这个项目,那么添加该项目 否则 说明有
那么判断下一跳路由是不是N 是N 就直接更新 否则
就是下一跳不是x但是到目的网络是N 那么比较d  取d小的项目
若3分钟还没有收到相邻路由器的更新路由表 则把此相邻路由器记为不可达路由器 距离d = 16
但是 RIP有一个问题 就是坏消息传播的特别慢
什么意思呢
假设我有一个网络不可达。。。。举例子
于是为了克服这个缺点 OSPF就来了
OSPF: 最短路径优先  迪杰斯特拉算法   但是其实 他这个只是一个名字 不代表其他路由选择协议就不是最短路径优先
OSPF最主要的特征就是使用分布式链路状态协议   

分布式我想是因为它是分区的  类似于分工  而链路状态 则是因为他是传播和相邻的路由器的链路状态

向本自治系统内的所有路由器洪泛法发送信息  也就是说不考虑网络拓扑结构和路由计算
发送的信息是本路由器相邻的所有路由器的链路状态 这只是路由器所知道的部分链路信息
只有当链路状态发生变化时 路由器才洪泛法发送信息    
就是说链路状态改变  洪泛  相邻路由器链路状态也就是这个路由器和那些路由器相邻,以及该链路的度量
度量就是比如距离 时延带宽这些  然后不管你网络拓扑是什么结构 我都转发给相邻的路由器 

他是直接用IP数据报传送的 可以减少路由信息的通信量


ospf有五种分组类型 问候分组 发现和维持邻站的可达性 
数据库描述 向邻站给出自己的链路状态数据库中的所有链路状态的项目的摘要信息
链路状态请求 想对方请求发送某些链路状态项目的详细信息
链路状态更新 洪泛法对全网更新链路状态 这种分组是复杂的  也是OSPF协议最核心的
链路状态确认 对链路状态更新分组的确认

到这里有人可能会问洪泛和广播有啥子区别哟?
广播包的目的主机是全网用户,使用广播地址,在所有端口发送数据包,行为是主动的,
泛洪是指交换机在MAC表中无法找到与数据包目标地址一致的条目,就将数据包从所有端口发送出去
(除了接收该数据包的端口),以期找到目标主机来接收数据包


我们说除了内部网关协议EGP以外
还有外部网关协议BGP   为什么  规模问题 因特网规模太大 AS自治系统之间路由选择也很困难
AS之间必须选择考虑有关的策略
其实边界网关协议力求一条能够达到目的的比较好的路由 并非寻找一条最佳路由
BGP采用了路径向量路由选择协议
我只关心我怎么走 不关心我走多远


我们说要选一个BGP发言人 往往就是边界路由器  但也可以不是
AS管理员每次至少要选择一个路由器作为发言人,然后建立TCP连接
在此连接上建立BGP会话  通过会话交换路由信息
BGP邻站是交换整个的BGP路由表。但以后只需要在发生变化时更新有变化的部分。
规定了四中报文:
open报文 用来与相邻的另一个BGP发言人建立关系
update报文 用来通告某一路由信息,以及列出要撤销的多条路由
keepalive报文 保活报文 用来周期性地证实邻站的连通性
notification报文 用来发送检测到的差错

路由器的构成:
输入端口 交换结构 输出端口
输入端口 输出端口
物理层处理---数据链路层处理----网络层分组排队--交换结构--网络层分组排队--、、、物理层
交换结构:
可以通过存储器  通过总线 通过互联网络

IP多播:
我们说局域网具有硬件多播 不需要复制分组
所以只要从服务器复制一个 另外每个路由器转发复制一次 到了局域网就不需要每个都复制
只需要复制一份就可以了
多播地址只能用于目的地址 不能用于源地址


而ip多播出现也很简单  因为需要这么传播
那么需要相关的协议对应 IGMP就来了  但是仅仅有他是不够的
IGMP协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机
其实是主机上的某个进程参加或者退出了某个多播组
连接在局域网上的多播路由器还必须和因特网上的其他多播路由器协同工作
以便把多播数据报用最小代价传送给所有的组成员 这就需要多播路由选择协议


IGMP包括两个阶段:
第一阶段:当某个主机假如新的多播组时,该主机应向多播组的多播地址发送一个
IGMP报文 声明自己要成为该组的成员 本地的多播路由器收到IGMP报文后 还要利用多播路由选择协议
把这种组成员关系转发给因特网上的其他多播路由器

第二阶段:组成员关系是动态的。本地多播路由器要周期性地探询本地局域网上的主机
一边指导这些主机是否还继续是组的成员   


IGMP为了避免多播控制信息给网络增加很大的开销
自助机和多播路由器之间私用ip多播 只要有可能鞋带IGMP报文的数据报都适应硬件多播来传送
多播路由器在探询组员成员关系时,只需要对所有的组发送一个请求信息的询问报文 
而不需要对每一个组发送一个询问报文
当一个网络上连续出现有几个多播路由器时,他们能够迅速和有效地选择其中的一个
来探询主机的成员关系
在IGMP 的询问报文中有一个数值N 他指明一个最长响应时间 默认为10秒
收到询问时  在0-N之间选择一个数值作为响应的时延
因此多个响应报文 会优先最小时延先发送
同一个组内的主机都要监听 只要本组额其他主机先发送了响应 自己就可以不再发送响应了
这样就可以抑制不必要的通信量
强调一下 ip多播的实现本来就是多播 和响应
从始至终 多播数据报的发送者和接受者都不知道也无法找出一个多播组的成员有多少
自己这些成员是那些主机 其实也没有必要  我们只要实现ip多播的功能就好了

多播路由选择协议:
本身协议复杂
大概记住 采用了多播转发树 防止了广播兜圈
通过反向路径广播RBP实现:
每一个路由器在收到一个多播数据报时,先检查数据报是否从源点最短路劲传送来的
只要是从本路由器寻找到源点的最短路劲上(之所以叫做反向路径 也就是在计算最短路径时
把源点当做终点)   的第一个路由器是否就是刚才把多播数据报发送过来的路由器
若是,向其他地方转发  否则也就是说不在源点最短路径上 那就丢弃
此外如果多播转发树上的某个路由器发现它的下游树枝没了 已经没有该多播组的成员 那就把它和下游树枝剪除

隧道技术:
假如我们的多播组地理位置很分散,不在同一个网络中,那么可以通过隧道技术实现ip多播
隧道技术其实就是加密和解密结合实现的
基于核心的发现技术:
这种方法是指 对每一个多播组G 指定一个核心路由器G 并给出这个路由器的IP单播地址
按照前面的方法构造 转发树 如果说有其他的路由器向这个核心路由器发送数据报 那么就对于这个转发树中的
其他路由器都检查这个多播数据报 如果这个数据报时说某个路由器要加入这个多播组,那么就记录这个信息到路由中
并且利用隧道技术给这个路由器提供相应的他知道的多播信息 如果是个转发请求那么他就转发

关于NAT nat好理解
我们说ip就算是用CIDR技术还是不够用怎么办
我们重新规划 在原来的地址中分出一部分地址作为只在局域网中使用的专用地址
专用地址不能用作因特网通信  这样 全球地址可以省下很多  也就是局域网地址不会占用很多全球地址了
专用ip地址因为是在局域网中使用不能用作全球通信  所以可以重用 这也就是节省ip地址的缘由
但是如果我们要全球通信怎么办  那就地址转换
采用隧道技术
我们说全球通信得包装一下 给个全球地址用完了就可以还,通过隧道加密解密就可以实现虚拟局域网直接的通信了


传输层有一个很重要的功能:
分用和复用  复用呢就是发送发不同的应用进程都可以使用同一个传输层协议传送数据
分用呢就是接收方的运输层在剥去报文的首部后能够把这些数据正确的交付到目的应用进程

tcp udp 区别  都是全双工协议
udp 用户数据报协议 面向无连接 尽最大努力交付 面向报文 不考虑拥塞控制 
支持一对一 多对一 多对多的交互通信  首部开销小
tcp 传输控制协议  面向连接 可靠交付 面向字节流  套接字 等于说为了加上控制 什么拥塞控制需要在首部多加一些信息
首部开销就更大


我们知道这个传输层呢是端口通信 那么分哪些端口呢?
服务器端端口号:0-1023  这些 也叫作熟知端口 系统端口号
另一类叫做 登记端口号 1024-49151
客户端端口号:数值为 49152-65535  这些端口号呢 是留给客户进程选择暂时使用  通信结束后
刚才使用的端口就会消失  供其他进程使用
FTP 21 TELNET 23  HTTP 80   SNMP 161  SNMP 162
SMTP 25  DNS 53  TFTP 69


面向连接 表示 需要协商握手。 连接成功后,发送接收数据 
面向无连接 表示 直接发送数据,不管是否人家能接收
ip头部, 是为了让报文能够顺利从源主机, 到达目的主机
tcp/udp头部, 是为了让报文在目的主机, 能够正确被投递到正确的程序
上面ip+端口就是套接字编程
可靠传输的工作原理:
停止等待协议:
停止等待协议就是发一次等待确认了 继续发
如果有差错怎么办呢? 设定过一个超时计时器  发送方保留已经发送的副本 只有收到接受方
发送的相应的确认才能清楚暂时保留的副本
只要发送发超过一段时间仍然没有收到确认 那就认为刚才的分组丢失了  于是可以超时重传
好 你说确认重传 我怎么知道我收到的确认是刚才的分组的确认 。。。那就来一个编号
于是这样就能确认哪一个分组确认 哪一个分组没有确认
值得注意的是  超时计时器设置的重传时间应该比数据在分组传输的平均往返时间更长一些
因为考虑到对应的路线的拥塞状况
但是也不能太长  会影响效率
另外这里的确认包括了两个方面 假如接收方的确认报文丢失了
发送发收不到确认 超时重传 这个时候接收方采取两个措施
发送确认报文 丢弃发送方重发的报文  这个时候发送发接收到确认了 继续发送后面的报文
结果发现超时过来的接收报文过来了 怎么办    直接不要就可以了 当做这个确认报文没有意义
但是如果始终收不到接收方的确认报文 也就是证明两者之间大概不能通信

停止等待协议太慢了,凭什么我要等你确认才能发送?于是连续ARQ协议就来了
连续ARQ:
什么意思呢 我设置一个窗口 发送发维持发送窗口表示可以发送的报文数
接收方采取累积确认的方式,对按序到达的最后一个分组发送确认
可是吧 累积确认也有缺点 啥意思?。。。我不是提高效率了吗!!!
冷静冷静 不好意思  我是说你这个难道不会出错吗?出什么错呢?
假如我累积收到了4个分组,结果这个时候才发现乱序了 或者重复接受了。。你岂不是要每次退好几个窗口
这样不是麻烦吗?
对呀 怎么办。。。所以接收端有缓存啊,发送端也有缓存 为什么  我们是全双工  当然有两端缓存
面向流:
以字节为单位 我们弄三个指针  干嘛用呢  因为我们无法确定我们发送了几个 发送窗口多大
接收窗口还有多大 我们肯定有已发送的 允许发送的 不允许发送的这些信息
这三个指针就是为了知道发送窗口还有多大  已发送但是尚未确认的字节数
允许发送但是尚未发送的字节数这样的信息
p1指向发送窗口的首个字节
p2指向已经发送但是尚未确认的字节后一位 也就是可用窗口的第一位
p3指向不允许发送的第一位 其实就是窗口末尾后一位

所以p3-p1 = 发送窗口
p2-p1 = 已发送但尚未确认的字节数
p3-p2 = 允许发送但尚未发送的字节数  可用窗口

总之 发送窗口和接收窗口不总是一样大 这是网络延迟导致的
对于不按序到达的 临时存放在接收窗口中,等到字节流中所缺少的字节收到后 按序交付给上层
接收方必须有累积确认功能 有的还有捎带确认 选择确认SACK

TCP流量控制:
就是叫发送方不要太快  让接收方能来得及接收
考虑传输效率:维持一个计数器 发送发的数据达到MMS最大报文段长度就组成一个TCP报文发送出去
或者由发送方的应用进程指明要求发送报文段
如果发送发计时器期限到了 也把当前缓存的数据组成报文发送出去

我们除了流量控制。。。还有什么控制呢。。。拥塞控制啊
慢开始  拥塞避免  快恢复 快重传
这些 包括下面的都需要自己看图 画画图去理解 其中快重传可以说一下就是
在计数器到期之前 如果有三次收到重复的确认 就马上发送未收到的报文段 不用等待计时器过期
这里说明一共收到了四个这样的确认
快恢复是觉得网络可以继续提高利用率 还没有拥塞
两次握手 三次握手 四次挥手 tcp状态图


公网 内网
简单的说,自己的单位或者家庭、小区内部有局域网;
单位、家庭之外有覆盖范围极大的网络,比如internet,
这个大网络延伸到了我们的单位、家庭(通过光纤、网线、电话线等)。
我们把自己的局域网连接到internet上,那么我们的访问范围就从局域网扩展到了整个internet。
这时候,就说局域网是内网,internet是外网。 
同理,如果你们单位的局域网很庞大,而你的办公室里面的几台电脑组成的小局域网又连接到单位的整个大局域网,
那么也可以说单位的大局域网是外网,办公室内的小局域网是内网。
同时,如果单位的大局域网连接了Internet,那么相对于Internet,也可以说单位的大局域网是内网。
但是上面这些解释 只是为了理解 
实际上 内网 公网的概念 来自于NAT  你知道了NAT是怎么回事你就知道了公网内网的概念

内网IP地址、外网IP地址这个概念并不是固定的,而是相对的。
如果用私有IP、公网IP或者局域网IP、互联网IP来理解就容易多了。
看网络习惯书籍无法理解很多原因是因为教科书太古老,不与时俱进造成的。
几乎所有的教科书都会告诉大家私有IP有3种:A类10.0.0.0~10.255.255.255,

B类172.16.0.0~172.31.255.255,C类192.168.0.0~192.168.255.255。但事实上远远不止。


先说好  应用层我自己没认真研究  所以大概的思路不是很清晰  只是做了大概的部分知识理解
同时我引用参考了很多网上其他博客的东西 比如
http://blog.csdn.net/qq992817263/article/details/56669228
http://blog.csdn.net/hongchh/article/details/52610639
https://www.2cto.com/net/201609/544538.html
https://www.cnblogs.com/qingdaofu/p/7399670.html对于相对应的详细知识 建议大家直接看其他的博客文章 

应用层:
域名系统DNS:因特网中用来命名的系统  其实就是名字系统 
我们前面了解到ip对于用户来说也不友好  所以搞些通俗易懂的名字系统  那么我们需要解析名字对应的ip
所以需要域名解析  加上分配域名等  这些都需要服务器  所以域名服务器来了
那域名是怎么个命名的呢?
通过域名结构
最上面的是根域名服务器
然后是顶级域名com cn net org edu...
然后是二级域名  cctv,baidu com  edu  ..
三级域名  mail www tsinghua...
四级域名  mail  www ..
实际上上面后面的分级是看中间的级别有几层的比如www.baidu.com  
那么www 三级   百度  二级  com顶级
如果www.sina.com.cn   那么就是四层的结构


域名服务器里面还分了区
区是域的子集  这样你就清楚了 区域之间的关系
既然域名是分层次的
那么对应的域名服务器也一定是分层次的
有根域名服务器 顶级域名服务器 权限域名服务器 本地域名服务器


关于域名服务器的迭代查询和递归查询


我们计算机通信是为了获取数据 也就是说向服务器或者其他的主机上获取信息
应用层 除了说这个。。。恩 提供了相应的应用层协议以外还有什么呢?
www 万维网 他其实是一个分布式的超媒体系统  什么是分布式什么是集群呢?
举个例子:
小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。
后来客人多了,厨房一个厨师忙不过来,又请了个厨师,
两个厨师都能炒一样的菜,这两个厨师的关系是集群。
为了让厨师专心炒菜,把菜做到极致,
又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,
一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群

分布式:一个业务分拆多个子业务,部署在不同的服务器上
集群:同一个业务,部署在多个服务器上

回到万维网  他是超文本的扩充 超文本就是包含指向其他链接的文本 也就是说 一个超文本由多个信息源链接成  这些信息源的数目
不受限制 利用一个链接找到另一个文本  另一个文本又可以包含其他的信息源。。。可以使图形声音 动画 视频等
总之万维网是因计算机网络规模不断扩大 产生的概念  我们想  如果只有几台电脑 我们不需要所谓的集群 分布式 只有扩大规模了
到了一定程度 需要这么一个东西来管理 来统一化
万维网就是把大量信息分布在整个因特网上 每台主机上的文档都独立进行管理
但是万维网必须解决下面的问题  因为他是整个因特网的通信
1>怎样标志分布在整个因特网上的万维网文档?   URL就出来啦
2>用什么样的协议来实现万维网上的各种连接?   HTTP就来啦
3>怎样使不同的万维网文档都能在因特网上的各种主机上显示出来
 同时使用用户清楚知道这个在什么地方存在链接?
HTML就来啦
4>怎么使用户方便的找到所需的信息?       搜索工具就来啦


URL 格式: 统一资源定位符
协议://主机:端口/路径

http 默认端口为80 通常可省略 若在省略文件的路径 就指到因特网的某个主页



  • 22
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值