####TCP、IP背景
**关键词:ARPANET,UNIX,分组交换技术,
*ARPANET(阿帕网),也是全球互联网的鼻祖。阿帕网的成功也充分证明了基于分组交换技术的通信方法的可行性。
*20世纪70年代前半叶,ARPANET中的一个研究机构研发出了TCP/IP。
*大事件表↓
→1969年 ARPANET诞生。开发分组交换技术
→1972年 ARPANET取得初步成功。扩展到50个节点。
→1975年 TCP/IP诞生。
→1982年 TCP/IP规范出炉。UNIX是最早开始实现TCP/IP协议的。
→1983年 ARPANET决定正式启用TCP/IP为通信协议。
####TCP、IP标准化
**关键词:网际协议族,标准化,OSI,RFC,
*TCP/IP具体含义:字面意义上指TCP与IP两种协议,不严格。因为有时也确实就是指这两种协议,但是有时指利用IP进行通信时所用到的协议群统称。
*网际协议族(Internet Protocol Suite):组成网际协议的一组协议。
*TCP/IP协议群↓
→应用协议: HTTP,SMTP,FTP,TELNET,SNMP
→传输协议: TCP,UDP
→路由控制协议: RIP,OSPF,BGP
→网际协议: IP,ICMP,ARP
*TCP/IP标准化过程特点(即与其它标准化过程的不同)↓(被人打趣道:“TCP/IP简直就是先开发程序,后写规格标准”)
→壹,具有开放性
→贰,注重实用性,即被标准化的协议能否被实际运用
*TCP/IP与OSI相比,OSI未能达到普及原因:↓
→壹,未能尽早地制定可行性较强的协议
→贰,未能提出应对技术快速革新的协议
→叁,未能及时进行后期改良的方案
*TCP/IP规范:RFC
*TCP/IP标准化流程...(略)
*RFC获取方法...(略)
####互联网基础知识
*“互联网”是指由ARPANET发展而来、互连全世界的计算机网络。现在“互联网”是一个专有名词,对应的英文单词“The Internet”早已成为固有名词。
*Internet指网际网,The Internet指互联网。(首字母大写)
*互联网与TCP/IP的关系:互联网进行通信时,需要相应的网络协议,TCP/IP就是为使用互联网而开发制定的协议族。所以,互联网的协议就是TCP/IP。
*互联网的机构↓
→互联网中的每个网络都是由骨干网(BackBone)和末端网(Stub)组成
→每个网络之间通过NOC(NetWork Operation Center,网络操作中心)相连
→如果网络的运营商不同,它的网络连接方式和使用方法也会不同,连接这种异构网络需要有IX(Internet Exchange,网络交换中心)的支持
→总之,互联网就是众多异构的网络通过IX互连的一个巨型网络
####TCP/IP与OSI参考模型
上图是我参考书中在Processon在线画的,哈哈,还不错吧,晚安,,,
编辑时间:二〇一六年十二月二十九日 23:19:46
*OSI参考模型和TCP/IP侧重点比较:↓
→OSI参考模型注重:“通信协议必要的功能是什么”
→TCP/IP注重:“在计算机上实现协议应该开发哪种程序”
*TCP/IP分层模型→硬件(物理层):最底层负责数据传输;
*TCP/IP分层模型→网络接口层(数据链路层):↓
→有时人们也将网络接口层和硬件层合并起来称作网络通信层;
→网络接口层利用以太网中的数据链路层进行通信;
→可以当做让NIC起作用的“驱动程序”
*TCP/IP分层模型→互联网层(网络层):↓
→TCP/IP分层中的互联网层与传输层的功能通常由操作系统提供,尤其是路由器,它必须得实现通过互联网层转发分组数据包的功能;
*IP↓
→IP是跨越网络传送数据报,使整个互联网都能收到数据的协议。传送数据报期间它使用IP地址作为主机的标识。
→IP还隐含着数据链路层的功能。通过IP,相互通信的主机之间不论经过怎样的底层数据链路都能实现通信。
→IP数据分组交换的一种协议,但是它不具有重发机制,属于非可靠性传输协议。
*ICMP↓
→ICMP作用:IP数据包在发送途中一旦发生异常无法到达端目标地址时,需要给发送端发送一个异常通知,ICMP就是为这一功能而指定的。
→有时也被用来诊断网络的健康情况。
*ARP↓
→从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议。
*TCP/IP分层模型→传输层:↓
→功能:让应用程序之间实现通信。
→计算机内同一时间运行着多个程序,为了区分哪些程序与哪些程序在进行通信,识别这些应用程序的是端口号。
*TCP↓
→面向有连接的传输层协议。
→可靠性传输协议:能够正确处理在传输过程中丢包、传输顺序乱掉等异常。
→还能够有效利用带宽,缓解网络拥堵。
→为了建立和断开连接,有时需要至少7次的发包收包,导致网络流量的浪费。
→为了提高网络的利用率,TCP协议中定义了各种各样复杂的规范,因此不利于视频会议(音频、视频的数据量既定)等场合使用。
*UDP↓
→面向无连接的传输层协议。
→不可靠型
→使用场景:分组数据较少或多播、广播通信以及视频通信等多媒体领域。
*TCP/IP分层模型→应用层(会话层以上的分层):↓
→TCP/IP应用的架构绝大多数属于客户端/服务端模型,在这种通信模式中,提供服务的程序会预先被部署到主机上,等待接收任何时刻客户可能发送的请求。
→客户端可以随时发送请求给服务端。有时服务端可能会有处理异常、超出负载等情况,这时客户端可以在等待片刻后重发一次请求。(请求有异常吗?有的话,我等会再请求一次。)
*WWW↓
→浏览器与服务器之间通信所用的协议是HTTP(HyperText Transfer Protocol);所传输的数据的主要格式是HTML。
→WWW中的HTTP属于OSI应用层的协议,而HTML属于表示层的协议。
*电子邮件(E-Mail)↓
→指在网络上发送信件;
→使用SMTP协议(Simple Mail Tranfer Protocol);
*MIME(Multipurpose Internet Mail Extensions),多用途互联网邮件扩展类型↓
→属于OSI参考模型的表示层;
*文件传输(FTP)↓
→定义:指将保存在其它计算机硬盘上的文件转义到本地的硬盘上(或者相反,本地硬盘→其它计算机硬盘上);
→该过程使用的协议叫做FTP(File Transfer Protocol);
→传输过程中可以选择用二进制方式还是文本方式;
→在FTP中进行文件传输时会建立两个TCP连接,分别是发出传输请求时所要用到的控制连接与实际传输数据时所要用到的数据连接(控制连接、数据连接),这两个连接的控制管理属于会话层的功能;
*远程登录(TELNET与SSH)↓
→指登录到远程的计算机上,使那台计算机上的程序得以运行的一种功能。
→TCP/IP网络中远程登录常用TELNET和SSH这两种协议;
→其它可以实现远程登录的协议:BSD UNIX系统中的rlogin的r命令协议,X Windows System中的X协议;
####TCP/IP分层模型与通信示例(如果以上的内容是纯理论的话,我觉得这一节更好理解点,)
*数据包首部的层次化↓
→图
→每个分层中都有一个首部,首部包含了该层的必要信息,如发送的目标地址以及协议相关信息;
→通常,包首部内是为协议提供的信息,数据为所要发送的内容;
→如上图,在下一层中的角度看,从上一分层收到的包全部都被认为是上一层(原书将'上一层'写为'本层',我改错了的话请指教)的数据。
*数据包→包、帧、数据报、段、消息↓
→这5个述语,都是用来表述数据的单位,
→包: 可以说是全能性述语;
→帧: 用于表示数据链路层中包的单位;
→数据包: 是IP和UDP等网络层以上的分层中包的单位;
→段: 表示TCP数据流中的信息;
→消息: 指应用协议中数据的单位;
→[拓展]述语:国内解释,述语又称“动语”(在这里这5个词语明显不是动词);在日语里谓语一直写作述语,而作者是日本的,所以这里'述语'我理解为谓语。
→[拓展]谓语:谓语是对主语动作或状态的陈述或说明。
*数据包→包首部就像是协议的脸
→网络中传输的数据包由两部分组成:1,协议所要用到的首部。2,上层传过来的数据。
→首部的结构由协议的具体规范详细定义(例如,识别上一层协议的域应该从包的哪一位开始取多少个比特、如何计算校验和/并插入包的哪一位等。)明确标明协议应该如何读取数据;
→反过来,看到首部,也就能够了解该协议必要的信息以及所要处理内容;
→相互通信的两端计算机如果在识别协议的序号以及校验和计算方法上不一样,就根本无法实现通信;
→总结:看到包首部就如同看到协议的规范,打趣道:"首部就像是协议的脸"
*本章下面的内容都是讲这个通信示例,通信主要分3个大阶段来讲↓(个人觉得还是挺重要的,是本章的一个总结具体说明,更利于理解)
→壹:发送数据包(具体包括:[应用程序处理][TCP模块的处理][IP模块的处理][网络接口的处理])有附图
→贰:经过数据链路的包(只是附图)
→叁:数据包接收处理(具体包括:[网络接口的处理][IP模块的处理][TCP模块的处理][应用程序处理])和发送处理顺序正好相反
→通信示例情景:假设甲给乙发送电子邮件,内容为:"早上好"。而从TCP/IP通信上看,是从一台计算机A向另一台计算机B发送电子邮件。
*TCP/IP通信过程→壹:应用程序处理
→1,启动应用程序新建邮件,将收件人邮箱填好,输入邮件内容"早上好",点击"发送",开始TCP/IP通信
→1.1本人亲自去QQ邮箱给自己小号发了一封,发送后提示:"邮件投递成功","收件人"→[xxx@qq.com],"投递状态"→[已投递到对方邮箱],"时间"→[yyyyMMdd HHmmss]
→2,应用程序中会进行编码处理。例如,日文电子邮件使用ISO-2022-JP或UTF-8进行编码。这些编码相当于OSI的表示层功能。
→3,编码转换後,实际邮件不一定会马上被发送出去,因为有些邮件的软件有一次同时发送多个邮件的功能,有可能会有用户点击"收信"按钮以后才一并接收新邮件的功能。
像这种何时建立通信连接何时发送数据的管理功能,从某种宽泛的意义上看属于OSI参考模型中会话层的功能。
→3.1应用在发送邮件的那一刻建立TCP连接,从而利用这个TCP连接发送数据。它的过程首先是将应用的数据发送给下一层的TCP,再做实际的 转发处理。
→3.2扩展,群发趣事:有一次,林徽因从美国给徐志摩发电报,说自己孤单苦闷。徐志摩大喜,次日一早就去回发电报安慰她。电报局的员工看了说:先生,今天早晨已经有四位先生给这位女士打电报了——原来,林徽因给好几个男人发了同样内容的电报。这就是史上最早的群发。
→3.3体验,早些年的体验,用的Foxmail邮箱,记得是收邮箱的时候,就自己没事"收信"刷一下,总觉得同事给自己的邮件不会自己跳到"未读邮件"那一栏...
*TCP/IP通信过程→贰:TCP模块的处理
→1,TCP根据应用的指示(相当于OSI参考模型的会话层),负责建立连接、发送数据以及断开连接。TCP提供将应用层发来的数据顺利发送至对端的可靠传输;
→1.1为了实现TCP的这一功能,需要在应用层数据的前端附加一个TCP首部;
→1.3TCP首部中包括源端口号和目标端口号(用以识别发送主机跟接收主机上的应用)、序号(用以发送的包中哪部分是数据)以及校验和(用以判断数据是否损坏)。
→1.4扩展,校验和:Check Sum,用来检验数据的读取是否正常进行的方法;
→2,随后将附加了TCP首部的包再发送给IP
*TCP/IP通信过程→叁:IP模块的处理
→1,IP将TCP传过来的TCP首部和TCP数据合起来当做自己的数据,并在TCP首部的前端加上自己的IP首部;
→1.1因此,IP数据包中的IP首部后面紧跟着TCP首部,然后才是应用的数据首部和数据本身。
→1.2IP首部中包含接收端IP地址以及发送端IP地址。
→1.3紧随IP首部的还有用来判断其后面数据是TCP还是UDP的信息;
→2,IP包生成后,参考路由控制表,再决定接受此IP包的路由或主机。
→3,随后,IP包将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正的发送数据;
→3.1如果尚不知道接收端的MAC地址,可以利用ARP(Address Resolution Protocol)查找。
只要知道了对端的MAC地址,就可以将MAC地址和IP地址交给以外网的驱动程序,实现数据传输;
*TCP/IP通信过程→肆:网络接口(以外网驱动)的处理
→1,从IP传过来的IP包,对于以外网驱动来说不过是数据。给这条数据附加上以外网首部并进行并发处理。
→1.1以太网首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议;
→2,根据上述信息产生的以太网数据包将通过物理层传输给接收端。
→2.1发送处理中的FCS由硬件计算,添加到包的最后。(设置FCS的目的是为了判断数据包是否由于噪声而破坏)
*经过数据链路的包↓
→看上图↑,分组数据包(一下简称包),经过以外网的数据链路时的大致流程一目了然。不过请注意,该图对各个包首部做了简化;
→包流动时,从前往后依次被附加了[以太网包首部]、[IP包首部]、[TCP(或者UDP)包首部]、[应用自己的包首部和数据]。而包最后则追加了以太网包尾(Ethernet Trailer)。
→每个包首部中至少都会包含两个信息:1→[发送端和接收端地址]、2→[上一层的协议类型]
→经过每个协议分层时,都必须有识别发送端和接收端的信息。以太网会用[MAC地址],IP会用[IP地址],TCP/UDP则会用端口号作为识别两端主机的地址。
即使在应用程序中,像电子邮件地址这样的信息也是一种地址标识。这些地址信息都在每个包经由各个分层时,附加到协议对应的包首部里边。
→每个分层的包首部中还包含一个识别位,它是用来识别上一层协议的种类信息。
例如:[以太网的包首部中的以太网类型][IP中的协议类型以及TCP/UDP中两个端口的端口号等都祈祷识别协议类型的作用][应用的首部信息中,有时也会包含一个用来识别其数据类型的标签]
*TCP/IP通信过程→伍:网络接口(以外网驱动)的处理(从此是数据包接收处理,即是发送流程的逆序过程)
→1,主机收到以太网包以后,首先从以太网的包首部找到MAC地址判断是否为发给自己的包。如果不是发给自己的包则丢弃数据;
→1.1很多NIC产品可以设置为即使不是发给自己的额包也不丢弃数据。这可以用于监控网络流量;
→2,如果接收到了恰好是发给自己的包,就查找以太网包首部中的类型域从而确定以太网协议所传送过来的数据类型;
→2.2这个例子中数据类型显然是IP包,因此再将数据传给处理IP的子程序,如果这时不是IP而是其它诸如ARP的协议,就把数据传给ARP处理。
→2.3总之,如果以太网包首部的类型域包含了一个无法识别的协议类型,则丢弃数据;
*TCP/IP通信过程→六:IP模块的处理
→0,IP模块收到IP包首部及后面的数据部分之后,也做类似的处理;
→1,如果判断得出包首部中的IP地址与自己的IP地址匹配,则可接收数据并从中查找上一层的协议;
→1.1如果上一层是TCP就将IP包首部之后的部分传给TCP处理;
→1.2如果是UDP则将IP包首部后面的部分传给UDP处理;
→1.3对于有路由器的情况下,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送达的主机或路由器以后再转发数据;
*TCP/IP通信过程→柒:TCP模块的处理
→1,在TCP模块中,首先会计算一下校验和,判断数据是否被破坏,然后检查是否按照序号接收数据,最后检查端口号,确定具体的应用程序;
→2,数据接收完毕后,接收端则发送一个"确认回执"给发送端(如果这个回执信息未能达到发送端,那么发送端会认为接收端没有接收到数据而一直反复发送)
→3,数据被完整的接收以后,会传给有段口号识别的应用程序;
*TCP/IP通信过程→捌:应用程序的处理
→1,接收端应用程序会直接接收发送端发送的数据;
→2,通过解析数据可以获知邮件的收件人地址是乙的地址(如果主机B上没有乙的邮箱,那么主机B返回给发送端一个"无此收件地址"的报错信息);
→3,为了剧情的发展,很显然,主机B上恰好有乙的收件箱,所以主机B和收件人乙能够收到电子邮件的正文,邮件会被保存到本机的硬盘上。(这里有点看不懂了···)
→3.1如果保存也能正常进行,那么接收端会返回一个"处理正常"的回执给发送端。反之,一旦出现磁盘满、邮件未能成功保存等问题,会发送一个"处理异常"的回执给发送端;
→4,由此,用户乙就可以利用主机B上的邮件客户端,接收并阅读由主机A上的用户甲发送过来的电子邮件→"早上好".
再补两张图本章就可以完结了,
正在画"TCP/IP各层对邮件的收发处理"图,进度70%了,下次编辑就可以加上了。
图画刚开始还是蛮不顺的,考虑每部分在画布上的大小,每部分里面的注释...
最近工作上比较忙,这章内容拖的很久了。。。
晚安;