今天这个老不要脸的混蛋竟然给我们一口气讲了20多页,真是不想给我这种只会课后慢慢看书做笔记的人活路了啊……
话说,这才刚刚开学呢就已经一周三节课了以后还要多,而现在就已经讲到60页了,就算按照只上十个周的水准也就是600页了,而且还不算诸多的习题,但是这本书也就只有600页的程度,老师你确定你这个节奏没问题的吗?!
服务原语
简单来说,就是一个服务是由一组原语来正式说明的,用户进程通过这些(原语就是操作)操作来访问这一项服务
原语告诉服务要执行某个动作,或者将对等实体所执行的动作报告给用户,如果协议栈位于操作系统中(绝大多数时候),则这些服务原语通常都是为系统所调用,系统调用会陷入内核模式,然后在内核模式中取代操作系统来控制系统发送必要的数据包
可用的原语取决于底层所提供的服务,面向连接和无连接服务的原语是不一样的。
来个小科普之其实我自己之前也不知道而且看了也不明白
Berkeley套接字接口,一个[应用程序接口],使用一个Internet套接字的概念,使[主机]间或者一台计算机上的进程间可以通讯。 它可以在很多不同的输入/[输出设备]和驱动之上运行,尽管这有赖于[操作系统]的具体实现。 接口实现用于TCP/IP协议,因此它是维持Internet的基本技术之一。 它是由加利福尼亚的伯克利大学开发,最初用于Unix系统。 如今,所有的现代[操作系统]都有一些源于Berkeley套接字接口的实现,它已成为连接Internet的标准接口。
原语在客户机-服务器环境下可以用来实现“请求-应答”交互式应用
listen 阻塞操作,等待入境连接请求
connect 与等待中的对等实体建立连接
accept 接受来自对等实体的入境连接请求
receive 阻塞操作,等待入境报文
send 给对等实体发送一个报文
disconnect 终止一个连接
首先是服务器提出连接请求,也就是listen,表示已经准备好接收入境连接,这时服务器进程被阻塞,直到有连接请求到来为止。
客户进程执行connect,指定跟谁连接(可能带有一个参数),操作系统随之发出一个数据包,请求连接,客户进程也被挂起直到应答
数据包到达了服务器,操作系统(服务器的)看到这是一个请求连接包,就检查是否存在一个监听进程,如果存在,就解除这个监听进程的阻塞,用accept创建连接,服务器随后发送一个响应,客户进程也得以恢复进程,这时两边都在运行并且建立起了连接
例子:消费者的电话和接线员
之后服务器执行receive,准备接受第一个请求(当然已经不是什么连接请求了),这个动作是紧跟着listen的,但是这个时候确认消息(反馈)往往还没到客户那里,所以这里服务器又卡住了
然后客户给了一个send,执行这边的receive等待服务器应答,请求数据包到达服务器之后,先解除了服务器自己的阻塞,然后开始处理客户的请求,之后将执行结果通过send返回给客户,然后客户这边被解除阻塞,检查服务器返回的结果,没问题可以继续发送请求
如果任务已经完成,就可以执行disconnect终止当前连接,然后客户就又卡了,又给服务器发送了一个包表明已经不需要连接,服务器收到后也发出自己的一个包disconnect,最终释放,客户进程解除阻塞,恢复运行,正式终止
会出现像是时间顺序出错和数据包丢失等等问题,后面解决。(并不仅仅是一次基于有确认数据报的通信过程而已),采用有确认的数据报服务而忽略了数据包的丢失情况
总而言之在两个进程之间呢是有一个可靠有序的字节流的,不能使用无连接协议
服务与协议的关系
服务是某一层向着上一层提供的一组原语而原语代表了操作,定义了某层准备代表其用户执行哪些操作,但是并不涉及如何实现这些操作,服务与两层之间的借口有关,上层是服务用户
协议是一组规则,规定了一层对等实体交换数据包或者报文的格式和含义,可以自由更改只要不改变呈现给用户的服务
两者完全分离
打比方的话,服务就是程序语言中的抽象数据和对象,定义了在对象上可以进行的操作,没有如何实现;协议跟服务的具体实现有关,但是对服务的用户不可见(是底层和更底层的关系)
一个典型的层有一个“send packet”的服务原语,有个参数是用户提供的指针,指向一个已经被装配好的数据包,这种情况下协议的改变可能会暴露给用户
在p2p模型中,任何的个体都可以是客户机也可以是服务器
原语不可分割
参考模型
已经讨论了抽象的层次网络,再来就是看一些网络实例,主要是osi和tcp/ip
osi:富影响力,概念清晰;设计复杂,用户少
tcp/ip:工作良好,用户多;概念混杂
osi参考模型(开放系统互连参考模型,涉及如何连接开放的系统,出于通信目的)
基本原则:
1.应该在需要一个不同抽象体的地方创建一层
2.每一层执行一个明确定义的功能
3.每一层的功能应该看齐于定义国际标准化协议
4.层与层之间边界的选择应该使跨越接口的信息流最小
5.层数足够多,保证不同的功能不会混杂在同一层中,也不能太多导致过于庞大
osi本身不是网络体系结构因为没有 定义服务和协议,只是指明了每一层干什么事儿,然而iso指定了标准,
应用层
包含了用户通常需要的协议,比如超文本传输协议(出现了http!hyper Text Transfer Protocol)
这是万维网(www)的基础
当浏览器需要一个web页面时,通过http将所要页面的名字发送给服务器,而后者将页面发回浏览器,其他一些协议可以用于文件传输和电子邮件和网络新闻
表示层(转换不同的表示方式)
此层之下的关注问题都是如何传递数据位,而这一层是传递信息的语法和语义,不同的计算机有不同的内部数据表示方法,为了让他们能够通信,必须以抽象的方式来定义两方来交换的数据结构,并且允许定义和交换更高层的数据结构(比如银行账户记录)
会话层
允许不同机器上的用户建立会话,提供各种服务,包括对话控制(记录谁来传递数据)、令牌管理(禁止双方同时执行同一个关键操作)、同步功能(在一个长传输过程中设置一些断点,以便在系统崩溃之后还能恢复到之前的状态)
传输层(端对端传输)
接收来自于上一层的数据,必要的时候将数据分割为较小的单元,将数据单元传递给网络层,确保这些数据单元正确到达(通过网络层),所有工作必须上下隔离且高效率地完成,底层技术变了也要是透明的
还决定了向会话层(实际上的最终网络用户)提供哪种类型的服务,比如点到点,传输报文和字节数据,
是真正的end to end(端到端)的一层,自始至终都是将数据从源端携带到接收方,也就是,源机器上的一个程序利用报文头和控制信息与目标机器上的一个类似程序进行会话,它下面的各层的协议都只涉及一台机器和其直接的邻居,而不会涉及到最终的源机器和目标机器,因为这可能被多个路由器隔离了,13是链式连接,47是端到端
网络层(主要通过算法进行路由选择)
主要功能是控制子网的运行,也就是传输的问题,问题在于如何将数据包从源端路由到接收方,路由可以建立在静态表的基础上,相当于网络内部的布局,路由也可以自动更新,避免故障组件,也可以在每次会话开始确定,比如在登录到一台远程机器的时候,也可以根据每一个数据包重新确定路径以反映当前的网络负载情况。
如果有太多的数据包,彼此之间就会相互阻碍,形成传输瓶颈,处理拥塞也是责任之一,一般这个问题要跟高层协议结合起来综合处理了就是,也就是说高层协议也必须要适应这种负载的处理才可以,网络服务质量(延迟,传输时间,抖动)也是属于网络层的问题
如果一个数据包必须达成网络(两个网络)之间的传输,就会出现问题,比如第二个网络的寻址方式不同,或者太大了根本接受不了;或者两者的协议根本就不一样,这些都是网络层的锅,它应该允许异构网络相互连接成为互联网络
广播式网络中路由问题简单,网络层比较单薄
数据链路层
将一个原始的传输设施变成没有漏检传输错误的安全线路,做法是将真正的错误掩盖起来,网络层就看不见了,发送方就得将数据拆分成数据帧(data frame),顺序发送之,通常为几百几千字节,接收方必须确认呢每一个帧并且发送确认帧
物理层
在一条通信信道上传输原始比特,确保1是10是0,问题关注于用什么样的电子信号、一个比特持续多少纳秒、传输是否双向、连接如何建立、结束后如何撤销、网络连接器有多少针和每一针的用途
tcp/ip模型(无缝连接多个网络)
这个是internet所用的
目的:网络能够在损失子网硬件的情况下继续工作,即使源机器和目标机器之间的一些机器或者传输路线不能工作,只要源机器和目标机器还在就能维持连接,不同应用程序对网络的需求差别很大,迫切需要灵活的网络体系结构
参考模型选择了数据包交换网络,以可运行在不同网络上的无连接网络层为基础
应用层
没有会话层和表示层,简单包含了所需要的回话和表示功能,因为大多数应用那两层也确实没屁用
包含了所有的高层协议,比如虚拟终端协议(Telnet)、文件传输协议(ftp)、电子邮件协议(smtp)等,dns(domain name system)域名系统、用于获取万维网页面的http以及也用于传送诸如语音或者电影实时媒体的rtp
传输层
定义了端到端的传输协议,第一个是传输控制协议(tcp),是可靠的、面向连接的传输协议,分割字节流饼干正确无误传输,目标机器从互联网层接收并且重新装配,tcp还负责流量控制,保证快速不会淹没慢速
第二个是 用户数据协议(udp),不可靠无连接的协议,用于一次性的基于客户机-服务器类型的“请求应答”查询应用,比如传输语音和视频
这个功能被开发之后,许多其他网络也实现了ip
互联网层
将整个网络体系结构贯穿在一起,差不多就是网络层啦,任务是允许主机将数据包注入到任何网络之中,并且让这些数据包独立到达接收方(可能是位于不同网络上的),
定义了官方的数据包格式和协议,被称为因特网协议(IP),与之相辅的是因特网控制报文协议(icmp),互联网的任务是将ip分组投递到对应的地方,所以还是涉及到了数据包的路由的问题,同时还要考虑拥塞的控制(虽然ip并不有效避免堵塞)
链路层(Link)
描述了链路必须完成什么功能才能满足无连接互联网络层的需求,这只是主机和传输线路之间的一个接口
真的是有点受不了这个课本的风格
虽然美其名曰是讲故事吧……但是怎么就听得这么难受呢……
而且最重要的是,看故事记笔记的话除了知识要点和掌握的东西还会记上很多莫名其妙的东西啊喂!
isp是internet的backbone,嗯,可以理解
用户在边界通过不同方法进行连接,这个说的似乎是网络结构,我管他呢
dsl,也就是电话线
fiber to the home(ftth)
本书使用的模型
osi和tcp/ip的区别已经说过了
我们于是根据黄金折中原理选择了对应的混合模型作为这本书的框架
分别是
5应用层
4传输层
3网络层
2数据链路层
1物理层
物理层规定了如何在不同的介质上以电气(或者是其他的模拟手段)信号传输比特
链路层关注的是如何在两台计算机之间直接发送有限长度的信息,并且具有一定级别的可靠性(以太网和802.11就是链路层协议的例子)
网络层主要处理如何将多条链路结合到网络中,以及如何将网络和网络联合成为互联网,以便我们在两个相隔遥远的计算机中间发送数据包,任务:找到传递数据包所走的路径(这是最难受的啊,这种屁话我光是学到这里就不知道看到多少遍了,我竟然有还是数学课本简单明了的错觉),顺带一提ip是我们学习的网路层中的主要协议案例
传输层增强了网络层的传递保证,具有更高的可靠性,提供了数据交付的抽象,比如满足不同应用需求的可靠字节流(tcp是传输层协议的一个重要实例)
应用层包含了使用网络的应用程序,许多网络应用程序都有用户界面,比如web浏览器,但也并非绝对,最关心的是应用程序中使用网络的那部分程序,web下就是http协议咯,应用层也有重要的支撑程序供其他应用程序使用,比如dns
osi与tcp/ip参考模型的比较(又来了话说这特喵的不是讲了么你大爷!)
共同点:
都以协议栈概念为基础,并且协议都是彼此独立的。
各层的功能也是大致相似的
例子:传输层和上面的各层都为希望进行通信的进程提供了端到端的独立于网络的传输服务
传输层之上的各层都是传输服务的用户,并且都是面向用户的
osi
osi模型的核心是三个概念
1.服务
2.接口
3.协议
每一层都为上一层提供了服务(定义了这一层的语义)
每一层的借口告诉上一层如何访问本层,规定了参数和结果
协议是本层自己内部的事情,可以是任何玩意儿,只要能够完成最终任务就可以了
简而言之这些层就像是所谓的对象一样,有一组方法或者是操作可以供外界来使用,语义定义了对象所拥有的服务的集合,参数和结果构成了对象的接口,内部代码就是其协议,对于外部不可见
所以osi有更好的隐蔽性,在技术发生了变化的时候也更容易被新协议所替换,技术改变的透明性就是最初采用分层协议的主要目的之一
osi参考模型在协议发明之前就已经产生,所以必然不会偏向于任何一组特定的协议,也就更加地具有了通用性,但是设计者(应用这个参考模型的人)也就没有太多的经验可以借鉴,对于每一层究竟应该怎样地设置哪些功能之类的
比如最开始的链路层只是处理点到点网络,广播式网络出现后就必须嵌入子层,并且在用osi和已有协议来构建网络时发现并不能很好地满足服务规范,就不得不添加对应的汇聚子层,以便提供足够的空间来弥补差异
但是tcp/ip却是先有了协议,而模型只是已有协议之后的一个描述而已,所以高度吻合,但是就并不适合跟其他的协议栈,不适合描述非tcp/ip网络
最基本的区别当然就在于——层数(废话不是瞎子都能看得出来),都有(互联)网络层、传输层和应用层, 但是其他就不一样了
还有一个区别在于无连接和面向连接的通信领域有所不同,osi同时支持两者的通信,但是传输层只支持面向连接的通信,这是由该层的特点所决定的(因为传输服务对用户可见),而后者只支持无连接模式,在传输层同时支持两种通信模式
osi模型和协议(我要吐了)
osi从来没有被迫切真实地实现过,时机不好,所谓的标准,是必须在新浪潮和商业需求中间所出现的才可以
技术缺陷,会话层和表示层几乎是空的,而数据链路层和网络层又包含了太多内容,还有重复功能的实现
怎么讲tcp/ip模型
没有明确区分服务、接口和协议的概念,但是规范和实现是很重要的
不通用(不可能用来描述蓝牙)
链路层位于网络层和数据链路层之间,并不是通常意义上的一层,只是接口
没有区分物理层和数据链路层,前者考虑铜线光纤和无线通信的传输特征,后者确定帧的开始和结束,按照可靠程度把帧从一边发送到另外一边
很多协议是自主形成的,成为一种障碍,
网络实例
我特喵的终于从上一章逃出来了
因特网
首先不是单个的网络,而是大量不同网络的集合,使用特定的公共协议,提供特定的公共服务,
经过了一大串莫名其妙的互联网发展历史之后,来到了所谓的internet
电话业务、有线电视、internet很多时候都是一体的
首先计算机需要连接到internet服务提供商也就是isp
常用的方法是家里的电话线,电话公司也就是isp,dsl是数字用户线也就是电话线,计算机与dsl调制解调器连接,另外一端是数字用户线接入复用器,负责模拟信号和数字数据包的转换
拨号上网
更高速率的就是宽带,食指更快网络的更快的带宽,不是任何指定的速度
客户数据包进入isp网络使用其服务位置称之为isp存点
相互连接的isp是对等的,连接到internet交换点
internet悖论,公开竞争客户的isp往往私下成为对等关系(合作的)
如果对应的两个isp对等就直接传递了,如果不是的话可能就传到最近的一个地方(距离中转商),通常并不是通过的internet的最短路径
是否连在互联网:1.运行tcp/ip协议栈2.有一个ip3.可以给其他机器发送ip数据包
老实讲这个课本的又讲故事又讲知识的形式我是真的受不了,虽然说是寓教于乐吧但是你确定这种外国式的幽默我们能够看得懂吗?我是永远觉得不管什么形式的快乐,直白易懂都始终是最重要的,至于其他的,大多数时候都要靠争取和仔细的谋划,所以我在复习了十几页之后终于是受不了了,这简直就不是人学的玩意儿好吗?!今天补一下之前随随便便进看过去的东西。
无线局域网
应用:办公室和笔记本之间都配备着短程无线电发射机和接收机,以便实现通信。
然后呢因为有各种各样的公司和产品,所以决定最好制定一个所谓的标准(注意所谓的wifi也就是一个标准,也就是所谓的ieee 802.11)
WiFi呢是运行在无需授权的频段上的
接入点(AP)被装在建筑物内,也称之为基站,而客户(笔记本电脑和移动电话)是另外一个组成部分,所有客户的通信都要通过接入点进行,而接入点连入到有线网络上,也可以与位于无线电范围的其他客户直接交谈,成为自组织网络,但是还是接入点式的时候比较多
802.11也就是所谓的wifi的传输会随着无线条件的变化而变得很复杂,可能会被物体反射,一个传输的多个回波可能会沿着不同的路径到达接收器,可能相互抵消或者是互为因果,接收到的信号也就会出现大幅波动,称之为多径衰落
解决这个问题的关键在于路径的多样性,也就是沿多条独立的路径发送信息,这样即便其中的无线条件由于多径衰落而变差,接收器还是有可能接收到信息,内置的路径就在物理层的数字调制方案,比如使用不同的频率,遵循不同天线之间的不同空中路径,或者是在不同的时间内重复比特
例子就是扩频设计,就是采用了更宽的宽带,更多的天线
还需要解决多个传输问题同时发生导致冲突的问题,因为可能干扰信号的接收,方法是在发送前等待一个时间间隔,如果已经听到别人在发送就推迟自己的发送,比如如果这个“别人”没有在这个自己的感知范围之内的话
还有一个问题是移动性,从一个点移到另一个点需要完成移交工作,解决方案是wifi网络可以由多个蜂窝组成,都有自己的接入点,并且通过分布式系统(往往是交换式以太网)连接,也可能会根据信号质量而连接另一个
还有安全问题,由于无线传输是广播性质的,附近的计算机很容易接收到发给他们的信息包,加油了有线等效保密(WEp)的加密方案,后来就是了wpa(出现了!)
网友评论