网站数据流分析怎么做,怎么自己做wordpress主题,方正宽带网络服务有限公司,app拉新前言
众所皆知的#xff0c;Linux的核心原型是1991年由托瓦兹(Linus Torvalds)写出来的#xff0c;但是托瓦兹为何可以写出Linux这个操作系统?为什么它要选择386的计算机来开发?为什么Linux的发展可以这么迅速?又为什么Linux是免费的?以及目前为何有这么多的 Linux版本(…前言
众所皆知的Linux的核心原型是1991年由托瓦兹(Linus Torvalds)写出来的但是托瓦兹为何可以写出Linux这个操作系统?为什么它要选择386的计算机来开发?为什么Linux的发展可以这么迅速?又为什么Linux是免费的?以及目前为何有这么多的 Linux版本(distributions)呢?了解这些东西后才能够知道为何Linux可以免除专利软件之争并且了解到Linux为何可以同时在个人计算机与大型主机上面大放异彩!所以在实际进入Linux 的世界前就让我们来谈一谈这些有趣的历史故事吧!
计算机网络体系结构
在计算机网络的基本概念中分层次的体系结构是最基本的。计算机网络体系结构的抽象概念较多在学习时要多思考。这些概念对后面的学习很有帮助。
网络协议是什么
在计算机网络要做到有条不紊地交换数据就必须遵守一些事先约定好的规则比如交换数据的格式、是否需要发送一个应答信息。这些规则被称为网络协议。
为什么要对网络协议分层
简化问题难度和复杂度。由于各层之间独立我们可以分割大问题为小问题。灵活性好。当其中一层的技术变化时只要层间接口关系保持不变其他层不受影响。易于实现和维护。促进标准化工作。分开后每层功能可以相对简单地被描述。
网络协议分层的缺点 功能可能出现在多个层里产生了额外开销。
为了使不同体系结构的计算机网络都能互联国际标准化组织 ISO 于1977年提出了一个试图使各种计算机在世界范围内互联成网的标准框架即著名的开放系统互联基本参考模型 OSI/RM简称为OSI。
OSI 第七层协议体系结构的概念清楚理论也较完整但它既复杂又不实用TCP/IP 体系结构则不同但它现在却得到了非常广泛的应用。TCP/IP 是一个四层体系结构它包含应用层运输层网际层和网络接口层用网际层这个名字是强调这一层是为了解决不同网络的互连问题不过从实质上讲TCP/IP 只有最上面的三层因为最下面的网络接口层并没有什么具体内容因此在学习计算机网络的原理时往往采用这种的办法即综合 OSI 和 TCP/IP 的优点采用一种只有五层协议的体系结构这样既简洁又能将概念阐述清楚有时为了方便也可把最底下两层称为网络接口层。
四层协议五层协议和七层协议的关系如下
TCP/IP是一个四层的体系结构主要包括应用层、运输层、网际层和网络接口层。五层协议的体系结构主要包括应用层、运输层、网络层数据链路层和物理层。OSI七层协议模型主要包括是应用层Application、表示层Presentation、会话层Session、运输层Transport、网络层Network、数据链路层Data Link、物理层Physical。
注五层协议的体系结构只是为了介绍网络原理而设计的实际应用还是 TCP/IP 四层体系结构。
TCP/IP 协议族
应用层
应用层( application-layer 的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程进程主机中正在运行的程序间的通信和交互的规则。
对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多如域名系统 DNS支持万维网应用的 HTTP 协议支持电子邮件的 SMTP 协议等等。
运输层
运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。
运输层主要使用以下两种协议
传输控制协议-TCP提供面向连接的可靠的数据传输服务。用户数据协议-UDP提供无连接的尽最大努力的数据传输服务不保证数据传输的可靠性。 每一个应用层TCP/IP参考模型的最高层协议一般都会使用到两个传输层协议之一
运行在TCP协议上的协议
HTTPHypertext Transfer Protocol超文本传输协议主要用于普通浏览。HTTPSHTTP over SSL安全超文本传输协议,HTTP协议的安全版本。FTPFile Transfer Protocol文件传输协议用于文件传输。POP3Post Office Protocol, version 3邮局协议收邮件用。SMTPSimple Mail Transfer Protocol简单邮件传输协议用来发送电子邮件。TELNETTeletype over the Network网络电传通过一个终端terminal登陆到网络。SSHSecure Shell用于替代安全性差的TELNET用于加密安全登陆用。
运行在UDP协议上的协议
BOOTPBoot Protocol启动协议应用于无盘设备。NTPNetwork Time Protocol网络时间协议用于网络同步。DHCPDynamic Host Configuration Protocol动态主机配置协议动态配置IP地址。
运行在TCP和UDP协议上
DNSDomain Name Service域名服务用于完成地址查找邮件转发等工作。
网络层
网络层的任务就是选择合适的网间路由和交换结点确保计算机通信的数据及时传送。在发送数据时网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP/IP 体系结构中由于网络层使用 IP 协议因此分组也叫 IP 数据报 简称数据报。
互联网是由大量的异构heterogeneous网络通过路由器router相互连接起来的。互联网使用的网络层协议是无连接的网际协议Intert Prococol和许多路由选择协议因此互联网的网络层也叫做网际层或 IP 层。
数据链路层
数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输总是在一段一段的链路上传送的这就需要使用专门的链路层的协议。
在两个相邻节点之间传送数据时数据链路层将网络层交下来的 IP 数据报组装成帧在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息如同步信息地址信息差错控制等。
在接收数据时控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。
一般的web应用的通信传输流是这样的 发送端在层与层之间传输数据时每经过一层时会被打上一个该层所属的首部信息。反之接收端在层与层之间传输数据时每经过一层时会把对应的首部信息去除。
物理层
在物理层上所传送的数据单位是比特。 物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送尽可能屏蔽掉具体传输介质和物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化对传送的比特流来说这个电路好像是看不见的。
TCP/IP 协议族
在互联网使用的各种协议中最重要和最著名的就是 TCP/IP 两个协议。现在人们经常提到的 TCP/IP 并不一定是单指 TCP 和 IP 这两个具体的协议而往往是表示互联网所使用的整个 TCP/IP 协议族。 互联网协议套件英语Internet Protocol Suite缩写IPS是一个网络通讯模型以及一整个网络传输协议家族为网际网络的基础通讯架构。它常被通称为TCP/IP协议族英语TCP/IP Protocol Suite或TCP/IP Protocols简称TCP/IP。因为该协定家族的两个核心协定TCP传输控制协议和IP网际协议为该家族中最早通过的标准。
划重点
TCP传输控制协议和IP网际协议 是最先定义的两个核心协议所以才统称为TCP/IP协议族
TCP的三次握手四次挥手
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议在发送数据前通信双方必须在彼此间建立一条连接。所谓的“连接”其实是客户端和服务端保存的一份关于对方的信息如ip地址、端口号等。
TCP可以看成是一种字节流它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中双方需要交换一些连接的参数。这些参数可以放在TCP头部。
一个TCP连接由一个4元组构成分别是两个IP地址和两个端口号。一个TCP连接通常分为三个阶段连接、数据传输、退出关闭。通过三次握手建立一个链接通过四次挥手来关闭一个连接。
当一个连接被建立或被终止时交换的报文段只包含TCP头部而没有数据。
TCP报文的头部结构
在了解TCP连接之前先来了解一下TCP报文的头部结构。 上图中有几个字段需要重点介绍下
1序号seq序号占32位用来标识从TCP源端向目的端发送的字节流发起方发送数据时对此进行标记。
2确认序号ack序号占32位只有ACK标志位为1时确认序号字段才有效ackseq1。
3标志位共6个即URG、ACK、PSH、RST、SYN、FIN等具体含义如下
ACK确认序号有效。FIN释放一个连接。PSH接收方应该尽快将这个报文交给应用层。RST重置连接。SYN发起一个新连接。URG紧急指针urgent pointer有效。
需要注意的是
不要将确认序号ack与标志位中的ACK搞混了。确认方ack发起方seq1两端配对。
三次握手
三次握手的本质是确认通信双方收发数据的能力
首先我让信使运输一份信件给对方对方收到了那么他就知道了我的发件能力和他的收件能力是可以的。
于是他给我回信我若收到了我便知我的发件能力和他的收件能力是可以的并且他的发件能力和我的收件能力是可以。
然而此时他还不知道他的发件能力和我的收件能力到底可不可以于是我最后回馈一次**他若收到了他便清楚了他的发件能力和我的收件能力是可以的。**
这就是三次握手这样说你理解了吗 第一次握手客户端要向服务端发起连接请求首先客户端随机生成一个起始序列号ISN(比如是100)那客户端向服务端发送的报文段包含SYN标志位(也就是SYN1)序列号seq100。第二次握手服务端收到客户端发过来的报文后发现SYN1知道这是一个连接请求于是将客户端的起始序列号100存起来并且随机生成一个服务端的起始序列号(比如是300)。然后给客户端回复一段报文回复报文包含SYN和ACK标志(也就是SYN1,ACK1)、序列号seq300、确认号ack101(客户端发过来的序列号1)。第三次握手客户端收到服务端的回复后发现ACK1并且ack101,于是知道服务端已经收到了序列号为100的那段报文同时发现SYN1知道了服务端同意了这次连接于是就将服务端的序列号300给存下来。然后客户端再回复一段报文给服务端报文包含ACK标志位(ACK1)、ack301(服务端序列号1)、seq101(第一次握手时发送报文是占据一个序列号的所以这次seq就从101开始需要注意的是不携带数据的ACK报文是不占据序列号的所以后面第一次正式发送数据时seq还是101)。当服务端收到报文后发现ACK1并且ack301就知道客户端收到序列号为300的报文了就这样客户端和服务端通过TCP建立了连接。
四次挥手
四次挥手的目的是关闭一个连接 比如客户端初始化的序列号ISA100服务端初始化的序列号ISA300。TCP连接成功后客户端总共发送了1000个字节的数据服务端在客户端发FIN报文前总共回复了2000个字节的数据。
第一次挥手当客户端的数据都传输完成后客户端向服务端发出连接释放报文(当然数据没发完时也可以发送连接释放报文并停止发送数据)释放连接报文包含FIN标志位(FIN1)、序列号seq1101(10011000其中的1是建立连接时占的一个序列号)。需要注意的是客户端发出FIN报文段后只是不能发数据了但是还可以正常收数据另外FIN报文段即使不携带数据也要占据一个序列号。第二次挥手服务端收到客户端发的FIN报文后给客户端回复确认报文确认报文包含ACK标志位(ACK1)、确认号ack1102(客户端FIN报文序列号11011)、序列号seq2300(3002000)。此时服务端处于关闭等待状态而不是立马给客户端发FIN报文这个状态还要持续一段时间因为服务端可能还有数据没发完。第三次挥手服务端将最后数据(比如50个字节)发送完毕后就向客户端发出连接释放报文报文包含FIN和ACK标志位(FIN1,ACK1)、确认号和第二次挥手一样ack1102、序列号seq2350(230050)。第四次挥手客户端收到服务端发的FIN报文后向服务端发出确认报文确认报文包含ACK标志位(ACK1)、确认号ack2351、序列号seq1102。注意客户端发出确认报文后不是立马释放TCP连接而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接所以服务端结束TCP连接的时间要比客户端早一些。
常见面试题
为什么TCP连接的时候是3次2次不可以吗
因为需要考虑连接时丢包的问题如果只握手2次第二次握手时如果服务端发给客户端的确认报文段丢失此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据而客户端一直没收到服务端的确认报文所以客户端就不知道服务端是否已经准备好了(可以理解为客户端未连接成功)这种情况下客户端不会给服务端发数据也会忽略服务端发过来的数据。
如果是三次握手即便发生丢包也不会有问题比如如果第三次握手客户端发的确认ack报文丢失服务端在一段时间内没有收到确认ack报文的话就会重新进行第二次握手也就是服务端会重发SYN报文段客户端收到重发的报文段后会再次给服务端发送确认ack报文。
为什么TCP连接的时候是3次关闭的时候却是4次
因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了服务端还有没有数据发客户端是不知道的。而服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经收到你的FIN报文了但我服务端还有一些数据没发完等这些数据发完了服务端才能给客户端发FIN报文(所以不能一次性将确认报文和FIN报文发给客户端就是这里多出来了一次)。
为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接
这里同样是要考虑丢包的问题如果第四次挥手的报文丢失服务端没收到确认ack报文就会重发第三次挥手的报文这样报文一去一回最长时间就是2MSL所以需要等这么长时间来确认服务端确实已经收到了。
如果已经建立了连接但是客户端突然出现故障了怎么办
TCP设有一个保活计时器客户端如果出现故障服务器不能一直等下去白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器时间通常是设置为2小时若两小时还没有收到客户端的任何数据服务器就会发送一个探测报文段以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应服务器就认为客户端出了故障接着就关闭连接。
最后
码字不易觉得有帮助的可以帮忙点个赞让更多有需要的人看到
又是一年求职季在这里我为各位准备了一套Java程序员精选高频面试笔试真题来帮助大家攻下BAT的offer题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案用于给大家作为参考需要的可以戳这里免费领取以下是部分内容截图 易觉得有帮助的可以帮忙点个赞让更多有需要的人看到**
又是一年求职季在这里我为各位准备了一套Java程序员精选高频面试笔试真题来帮助大家攻下BAT的offer题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案用于给大家作为参考需要的可以戳这里免费领取以下是部分内容截图