计算机网络养成:第五天
内容导航
计算机基础-----计算机网络(打卡第41天)
> 分享之前,我再对之后的学习做一个调整,学习就是一个不断调整的过程,最开始的学习就是再着重学习Java se的知识,后面花了很多时间巩固,之后大概调整了一下学习的方式,但是最近经过不断看经验贴,决定再调整一下计划,之前是网络的学习占用了很大一部分时间,项目的学习占了很少一部分,并且算法的学习都有些停滞不前了,最近在写贪心和随机,但是实际上对于每一种算法还缺乏足够的练习,所以我对于接下来的学习安排:三个模块-----计算机基础(计算机网络,编译原理,操作系统),项目学习(不断建立se综合项目,添加新功能,主要是规范javadoc注释),算法编程学习【争取每日打卡】
好了,进入今天的分享,我们昨天学习了网络的协议分层,分析了延时的原因,模拟了传播的过程,接下来先整体上做一个收尾工作,之后就开启第二章的学习。
计算机网络的历史简述
-
早期【1960年之前】计算机网络在早期就是使用的之前分析的线路交换网络,线路交换的特点使得不适合计算机之间的通信----线路建立的时间过长,独享方式通信,不适合突发性很强的计算机,可靠性不高,不利于军事通信【一旦链路上的一个节点破坏,通信就断了】
-
【1961 — 1972】,早期的分组交换概念,美国分别3个小组独立展开研究,1967美国高级研究计划研究局考虑了ARPAnet,到69年第一个APRA节点开始工作,1972年进行了公众演示,网络控制协议是第一个端系统直接的主机—主机协议 ,第一个e -meil程序 BBN问世,APRA节点进一步增加到了15个
-
【1972---- 1980】专用网络和网络互联 ,APRA验证了分组交换的可行性,出现了很多对后来很重要的网络形式,比如Ethernet以太网络,ATM网络之类的,APRA节点数目进一步增加到了200个,但是网络十分混乱,各个公司都有自己的协议,实现公司内部网络的互联。但是各个ISP之间不能实现互联,之后就出现了国际的七重天ISO模型,但是这个模型要求重新安装设备,并且技术性很强,所以需要一种更好的协议来实现网络互联 ,【cerf and Kohn — 互联网之父】当时提出了覆盖的方式,【包容性】,就是所有的网络IP层次都是相同的,所以只要修改一下软件和物理层相关就可以通过原有的网络实现互联,IP的包容性很强
-
【1980 —1990】体系结构变化,网络数量激增,应用丰富 83年,所有的APRA节点全部宕机进行协议的升级,将原有的TCR分成TCP/UDP和IP层,就将端系统和网络交换设备区分开来,像路由器就最多到网络层的IP就可,不需要再转换为更高层的PDU,把一种节点成了两种节点,包容性很强,就不需要改变底层的结构。e -mail协议定义,DNS定义,完成了域名到Ip地址的转换,ftp协议定义,TCP拥塞控制,100 000主机连接到网络联邦
-
【1990—2000】商业化 Web 新的应用 , NSF支持的APRA将NSFnet和APRAnet分开,【最开始物理学家要发布数据,只能向所有人发送邮件,有了HTML之后就直接写一个网页之后,就可以不用向每一个client发送了,点开网页就可以观看】web应用浏览器网页,还有最开始UNIX免费使用,极大促进了互联网的发展,Wclient和W server通过HTTP协议进行通讯,90年代后期,出现了第一代杀手级应用,【p2p文件共享,社交网络】,进一步促进发展,安全问题不断修正,出现而来互联网的补丁对策,主干网的速率达到6bps
-
【2005 – 今天】end system激增,宽带接入快速部署,进入移动互联时代,高速无线无处不在,在线社交网络等新型应用的出现,互联网快速发展
第一章主要讲述了网络的组成,分别讲述了网络边缘和网络核心,分析了核心的交换方式,了解了互联网具有松散的结构层次,对整个互联网是网络的网络有了很深的认识,之后详细分析了分组交换的延迟问题,数据交换的过程,后面又分析了协议的分层和垂直的服务,SAP,PDU,primitive等
拓扑网络结构,防火墙,树算法进行运行,保证网络冗余不影响,这些更深层次的之后继续讲解
接下来就是自上而下分析网络的结构了,首先是最高层----应用层
应用层
应用层的协议原理
互联网中协议最多的层次是应用层,协议protocol就是对等层相互通讯所要遵守的规则的集合。网络应用有很多很多----E-mail,Web,文本消息,远程登录,P2P文件共享,即时通信,多用户网络游戏,流媒体(youtube,Netflix), Internet电话,搜索,社交网络…
创建一个新的网络应用
这个对于来说就是很容易理解的 ----首先是编程, 再不同的系统上运行,买一台主机部署,然后将客户端放在资源下载的商店中,就部署起来了。通过网络基础设施提供的服务,应用进程彼此通信,比如web,web的服务器软件与浏览器软件通信
网络核心中没有应用层软件,网络核心中因为协议分层就没有应用层的功能,网络应用只能再端系统上存在,快速网络应用开发和部署
网络应用的体系结构
之前就分析过了,网络应用或者end-system之间的架构为
- 客户/服务器模式 (C/S: client/server)
- 资源都在服务器,客户端没有任何的资源,可扩展性比较差,扩容到达阈值宕机,只有一个服务器,服务器的IP是固定的,服务器先运行,且服务器需要一直运行
- 客户端主动与服务器通信,与互联网有间歇性的连接,可能是动态的IP地址【连接的不同的局域网等,位置在不停变化】,不直接与其他客户端通信【通过服务器间接通信】
- 对等模式(P2P: Peer to Peer)
- P2P几乎没有一直运行的服务器,任意端系统之间可以相互进行通信,每一个节点即是客户端也是服务器
- 自扩展性–即peer节点带来新的服务能力,自然带来新的服务请求
- 参与的主机间间歇性连接且可以改变IP地址
- 缺点—但是管理起来困难,只能节点上线的时候才能提供服务能力
- 混合体:C/S和P2P的混合结构
- 比如Napster,文件搜索功能是集中C/S,通过中心服务器获取资源
- 但是其文件传输就是P2P结构,peer节点间
- 即时通讯服务中 在线检测时集中的: 当用户上线时,向中心服务器注册其IP地址,两个用户与中心服务器连接,找到连线好友的位置
- 但是其两个用户之间进行聊天确是P2P结构
进程通信
进程: 在主机上运行的应用程序
- 在同一个主机上,使用进程间通信机制通信【管道流,缓冲区等】—操作系统定义
- 不同主机,通过交换报文(Message)来进行通信,使用OS提供的服务,按照应用协议交换报文,借助传输层提供的服务
客户端进程: 发起通信的进程
服务端线程: 等待连接的进程,等待响应
注意:P2P架构的应用没有客户端线程和服务端线程的区分,peer,但是在每一个会话中还是要区分接受和发送方
分布式进程通信要解决的问题?
要有标识,寻址问题(服务用户)要找的到用户的位置
要对用户进行寻址(addressing),进程为了接收报文,必须要有一个标识【SAP】,发送也需要标识,在哪台设备上运行IP,在什么协议实体上运行(TCP/UDP),两种的端口号不一样,在哪个进程上传输port
- 主机的方式就是发送唯一的32位的IP地址,但是仅仅通过一个IP只能标识一个端系统,但是一个端系统上运行有很多进程,所以还有端口
- 所采用的传输层协议:TCP 或者UDP
- 端口号port(65536个),一些知名端口号,比如HTTP:TCP 80 Mail TCP 25 ftp TCP 2 所以一个进程使用IP + port来标识端节点
- 本质上主机之间的通信由两个端节点构成
传输层—应用层提供的服务时如何(服务)primitive,什么时候通信,怎么通信
位置:层间界面的SAP(TCP/IP, socket)
形式::应用程序接口API(socket API)
-
层间接口必须携带信息
- 需要传输的报文,对本层来说就是SDU
- 谁传输的?对方的应用进程的标识–IP + TCP/UDP端口号
- 传给谁?对方的应用进程的标识,IP +port
如何减少信息量?
这里产生一个问题,每次穿过层的信息量都要这么多,效率就有点低下了,比如两个end system要持续通信,如何减少信息量?
纯属曾提供的服务,层间信息的代表socket套接字完美解决问题
-
用一个代号标识通信双方或者单方:socket
-
就像OS打开文件返回的句柄一样,对句柄的而操作,就是对文件的操作;这里对socket的操作,就是对端系统的操作
-
TCP socket【层间传输信息就是 TCP socket 和message SDU】经常寄东西
- TCP服务:两个进程之间的通信需要建立在连接的基础上,两个京城通信会持续一段时间,关系稳定
- 可能使用==一个整数 ----- socket【就像文件操作时代表文件的代号符】==来标识两个应用实体之间的通信关系 ,这样层间信息量就减少了,TCP套接字包含源IP,目标IP,目标端口和源端口 ,TCP socket就是包含这些信息的一个本地标识,只是本地知晓,目标主机不能识别改标识,下一层也不能识别UDP就要少一点,标识本身 ,操作socket就是操纵整个会话关系,socket就像文件的本地标识符一样
-
UDP socket【层间传输的信息就是UDP socket , SDU,对方的IP和port】不经常寄东西,所以不指明收件方,发送的时候要指明
- UDP的服务: 两个服务之间的通信不需要建立连接关系,每个报文都是独立传输的,前后报文可能给不同的分布式进程
- 因此,只能用一个整数来标识本应用实体的标识,因为这个报文可能会传送给另外一个分布式进程
- 因为UDP的socket包含的信息更少 二元组【本地IP,本地端口】,所以层间的信息最少
- 但是传输报文时必须提供对方的IP,port,接收时需要上传对方的IP,port
-
传输层实体(TCP或者UDP)根据这些信息进行TCP报文段segment的封装
-
源端口号,目标端口号,数据等
-
将IP地址下交IP实体,用于封装IP数据段,源IP,目标IP
套接字Socket就像一个门户一样,进程通过套接字发送报文或者从套接字接收报文,套接字就是守候在应用层和传输层之间的门户【接口】传输层给提供的服务
如何利用传输层提供的服务,实现应用进程之间的报文交换,实现应用(用户使用服务)
也就是通过传输层的socket接口,来实现应用层的协议和功能
- 定义了应用层协议:包括报文的格式,解释,时序等
- 编制程序,使用os提供的API,调用网络基础设施提供的通信服务传输报文,实现应用的时序
应用层协议
-
定义了运行在不同端系统上的应用进程如何相互交换报文【交换报文的类型,请求和应答,各种报文的类型语法,报文中各字段的描述;字段的语义:字段取值的含义;进程何时,如何发送报文
-
应用协议仅仅时一个应用的组成部分: Web应用: HTTP协议,web客户端,服务端,HTML;
-
公开协议:由RFC文档定义,允许互相操作,如HTTP,SMTP
-
专有协议:协议不公开,如Skype
传输层提供服务的指标
- 数据丢失率 :有些应用要求100%的数据传输,比如文件 — 文件传输
- 延迟:一些应用由于有效性考虑,对数据传输有严格的时间限制
- 吞吐: 一些应用如多媒体必须要最小限度的吞吐,从而使应用有效运转。一旦超过瓶颈带宽,就不能良好提供服务
- 安全性: 机密,完整性
传输层提供的服务
- Tcp服务 – 可靠的服务:流量控制,拥塞控制,不能提供的服务比如时间保证,最小吞吐,安全;面向连接
- UDP服务:不可靠的数据传输,不能提供的服务:可靠,流量,拥塞,时间,带宽保证,建立连接
为什么要有UDP?
- UDP能过区分不同的进程,而IP不能,传输层的服务比网络层高,区分了主机中进程
- 无需建立连接,省去了建立连接的时间,适合事务性应用如自媒体
- 不提供可靠性工作,例如检错重发,适合那些要求实时但容错的应用,要实现可靠性,必须要时间
- 没有拥塞控制,能够按照设定的速度发送数据,而TCP的发送速度不定
安全TCP
-
TCP和UDP都没有加密,明文通过互联网传输,甚至密码都是,抓包工具抓取就什么都知晓
-
SSL在TCP上实现,提供加密的TCP连接,私密性,数据完整性,端到端的鉴别都可以保证
-
使用SSL库,SSL库又使用的TCP通信
-
TCP上有SSL服务,可以加强安全性;比如我们输入的是https而不是http,就是加了SSL,