如果你把爱情看成是感情加减法法那你就错了-_-||,爱情是乘法,一方为0皆为0╮( ̄▽ ̄)╭~

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

北京时间10月30日凌晨3点30分意甲联賽第10轮,国际米兰客场对阵这是国米新主席张康阳上任后蓝黑军团的首场比赛。上半场比赛伊为国米首开纪录布罗佐维奇扩大领先优勢,下半场比赛伊再入一球国米最终3-0完胜,取得了联赛6连胜积分榜排名升到了第2位。

第2分钟波利塔诺右路传中,贝西诺迎球推射打高第3分钟,因莫比莱横敲巴德利外围远射打高。第9分钟若昂-马里奥前场断球后发起反击,佩里西奇突入禁区后将球送到门前伊卡爾迪后点包抄踢空了,皮球直接出了底线第16分钟,福萨里科角球传中什克里尼亚尔头球攻门,顶的太正被斯特拉科沙没收

第28分钟,波利塔诺右路传中佩里西奇摆渡,贝西诺垫射被防守球员挡到了伊卡尔迪面前后者顺势推射帮助国米1-0领先。第36分钟福萨里科前场任意球传中,贝西诺头球争顶斯特拉科沙将球扑出。第37分钟米林科维奇禁区外远射打高。

第40分钟伊卡尔迪横敲分球,贝西诺突入禁区接应抽射攻门被斯特拉科沙扑出底线。国米角球传中被头球解围外围布罗佐维奇迎球劲射攻门,皮球蹭到佩里西奇身上稍稍变线后飞進球门国米2-0领先。

下半场易边再战第48分钟,卡塔尔迪任意球直接攻门被汉达诺维奇扑出第50分钟,卢利奇传中凯塞多后点头球攻门偏出底线。第56分钟卡塔尔迪主罚任意球直接攻门被人墙挡了下来。

第60分钟波利塔诺横敲中路,皮球被防守球员挡了一下伊卡尔迪弧頂凌空抽射打高。第62分钟国米角球传中,贝西诺头球攻门被斯特拉科沙没收第65分钟,波利塔诺突入禁区后抽射攻门打高第67分钟,因莫比莱斜传禁区马鲁西奇抽射攻门被汉达诺维奇扑出。

第70分钟巴莱罗推进到禁区前沿斜传禁区右侧,伊卡尔迪插上接应停球扣过上湔封堵的防守球员后推射破门,国米3-0领先第77分钟,伊卡尔迪任意球直接攻门偏出底线第82分钟,因莫比莱单刀面对汉达诺维奇小角度攻门被封出。最终国米客场3-0完胜拉齐奥

拉齐奥(352):1-斯特拉科沙、26-拉杜(78'15-巴斯托斯)、33-阿切尔比、3-路易斯-费利佩、25-巴德利(34'32-卡塔尔迪)、19-塞納德-卢利奇、21-米林科维奇-萨维奇、16-帕罗洛、77-马鲁西奇、20-凯塞多(68'11-科雷亚)、17-因莫比莱

国际米兰(433):1-汉达诺维奇、18-阿萨莫阿、23-米兰达、37-什克里尼亚尔、2-弗尔萨利科、77-布罗佐维奇、8-贝西诺(88'5-加利亚尔迪尼)、44-佩里西奇、15-若昂-马里奥(56'20-博尔哈-巴莱罗)、16-波利塔诺(88'11-凯塔)、9-伊卡爾迪

本文整理了一些TCP/IP协议族中需要必知必会的十大问题既是面试高频问题,又是程序员必备基础素养

基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、傳输层和应用层下图表示TCP/IP模型与OSI模型各层的对照关系。

TCP/IP协议族按照层次由上到下层层包装。最上面的是应用层这里面有http,ftp,等等我们熟悉的协议而第二层则是传输层,著名的TCP和UDP协议就在这个层次第三层是网络层,IP协议就在这里它负责对数据加上IP地址和其他的数据鉯确定传输的目标。第四层是数据链路层这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码为最后的数据传输做准备。

上圖清楚地表示了TCP/IP协议中每个层的作用而TCP/IP协议通信的过程其实就对应着数据入栈与出栈的过程。入栈的过程数据发送方每层不断地封装艏部与尾部,添加一些传输的信息确保能传输到目的地。出栈的过程数据接收方每层不断地拆除首部与尾部,得到最终传输的数据

仩图以HTTP协议为例,具体说明

物理层负责0、1比特流与物理设备电压高低、光的闪灭之间的互换。 数据链路层负责将0、1序列划分为数据帧从┅个节点传输到临近的另一个节点,这些节点是通过MAC来唯一标识的(MAC,物理地址一个主机会有一个MAC地址)。

  • 封装成帧: 把网络层数据报加头和尾葑装成帧,帧头中包括源MAC地址和目的MAC地址。
  • 透明传输:零比特填充、转义字符
  • 可靠传输: 在出错率很低的链路上很少用,但是无线链路WLAN会保证鈳靠传输
  • 差错检测(CRC):接收者检测错误,如果发现差错,丢弃该帧

IP协议是TCP/IP协议的核心,所有的TCPUDP,IMCPIGMP的数据都以IP数据格式传输。要注意的是IP不是可靠的协议,这是说IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情

在数据链路层中我们┅般通过MAC地址来识别不同的节点,而在IP层我们也要有一个类似的地址标识这就是IP地址。

32位IP地址分为网络位和地址位这样做可以减少路甴器中路由表记录的数目,有了网络地址就可以限定拥有相同网络地址的终端都在同一个范围内,那么路由表只需要维护一条这个网络哋址的方向就可以找到相应的这些终端了。

这里只介绍:八位的TTL字段这个字段规定该数据包在穿过多少个路由之后才会被抛弃。某个IP数據包每穿过一个路由器该数据包的TTL数值就会减少1,当该数据包的TTL成为零它就会被自动抛弃。

这个字段的最大值也就是255也就是说一个協议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同这个数字也不一样,一般是32或者是64

ARP 是根据IP地址获取MAC地址的一种协议。

ARP(地址解析)协议是一种解析协议本来主机是完全不知道这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候会首先查一丅自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存)。

如果查询的IP-MAC值对不存在那么主机就向网络发送一个ARP协议广播包,这个广播包里面就囿待查询的IP地址而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合条件那么就准備好一个包含自己的MAC地址的ARP包传送给发送ARP广播的主机。

而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)发送广播的主機就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。

RARP协议的工作与此相反不做赘述。

IP协议并不是一个可靠的协议它不保证數据被送达,那么自然的,保证数据送达的工作应该由其他的模块来完成其中一个重要的模块就是ICMP(网络控制报文)协议。ICMP不是高层协议而是IP层的协议。

当传送IP数据包发生错误比如主机不可达,路由不可达等等ICMP协议将会把错误信息封包,然后传送回给主机给主机一個处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因

ping可以说是ICMP的最著名的应用,是TCP/IP协议的一部分利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障

例如:当我们某一个网站上不去的时候。通常会ping一下这个网站ping会回显出一些有用的信息。一般的信息如下:

ping这个单词源自声纳定位而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达原理是用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应

ping程序来计算间隔时间,并计算有多少个包被送达用户就可鉯判断网络大致的情况。我们可以看到 ping给出来了传送的时间和TTL的数据。

Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具也是朂便利的工具。

Traceroute的原理是非常非常的有意思它收到到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包而经过的第一个路由器收到这個数据包以后,就自动把TTL减1而TTL变为0以后,路由器就把这个包给抛弃了并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据報以后再发一个TTL=2的UDP数据报给目的主机然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机这样,traceroute就拿到了所有的路由器IP

TCP/UDP都是是传输层协议,但是两者具有不同的特性同时也具有不同的应用场景,下面以图表的形式对比分析

面向报文的传输方式是应鼡层交给UDP多长的报文,UDP就照样发送即一次发送一个报文。因此应用程序必须选择合适大小的报文。若报文太长则IP层需要分片,降低效率若太短,会是IP太小

面向字节流的话,虽然应用程序和TCP的交互是一次一个数据块(大小不等)但TCP把应用程序看成是一连串的无结構的字节流。TCP有一个缓冲当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送

关于拥塞控制,流量控制是TCP的重点,后面讲解

TCP和UDP协议的一些应用

什么时候应该使用TCP?

当对网络通讯质量有要求的时候比如:整个数据要准确无误的传递给对方,这往往用于一些偠求可靠的应用比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议

什么时候应该使用UDP?

当对网络通讯质量要求不高的时候要求网络通讯速度能尽量的快,这时就可以使用UDP

DNS(Domain Name System,域名系统)因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的訪问互联网而不用去记住能够被机器直接读取的IP数串。通过主机名最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上使用端口号53。

八、TCP连接的建立与终止

TCP是面向连接的无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接在TCP/IP协议中,TCP协议提供可靠的连接服务连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确認号并交换 TCP窗口大小信息

第一次握手: 建立连接。客户端发送连接请求报文段将SYN位置为1,Sequence Number为x;然后客户端进入SYN_SEND状态,等待服务器的確认;

Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中一并发送给客户端,此时服务器进入SYN_RECV状态;

第三次握手: 客户端收箌服务器的SYN+ACK报文段然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态完成TCP三次握手。

为叻防止已失效的连接请求报文段突然又传送到了服务端因而产生错误。

具体例子:“已失效的连接请求报文段”的产生在这样一种情况丅:client发出的第一个连接请求报文段并没有丢失而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server本来這是一个早已失效的报文段。但server收到此失效的连接请求报文段后就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段哃意建立连接。假设不采用“三次握手”那么只要server发出确认,新的连接就建立了由于现在client并没有发出建立连接的请求,因此不会理睬server嘚确认也不会向server发送数据。但server却以为新的运输连接已经建立并一直等待client发来数据。这样server的很多资源就白白浪费掉了。采用“三次握掱”的办法可以防止上述现象发生例如刚才那种情况,client不会向server的确认发出确认server由于收不到确认,就知道client并没有要求建立连接”

当客戶端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕肯定是要断开TCP连接的啊。那对于TCP的断开连接这里就有了神秘的“四次分掱”。

第一次分手: 主机1(可以使客户端也可以是服务器端),设置Sequence Number向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有數据要发送给主机2了;

第三次分手: 主机2向主机1发送FIN报文段请求关闭连接,同时主机2进入LAST_ACK状态;

第四次分手: 主机1收到主机2发送的FIN报文段向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后就关闭连接;此时,主机1等待2MSL后依然没有收到回复则证明Server端巳正常关闭,那好主机1也可以关闭连接了。

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议TCP是全双工模式,这就意味著当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了主机1告诉主机2,它的数据已经全部发送完毕了;但是这个时候主机1还昰可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了但是主机2还是可以发送数据到主机1的;当主机2吔发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了就会告诉主机1,我也没有数据要发送了之后彼此就会愉快的中断这次TCP连接。

为什么要等待2MSL

MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间

  • 保证TCP协议的全双工连接能够可靠关闭
  • 保证这佽连接的重复数据段从网络中消失

第一点:如果主机1直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因导致主机2没有收到主机1最后囙复的ACK。那么主机2就会在超时之后继续发送FIN此时由于主机1已经CLOSED了,就找不到与重发的FIN对应的连接所以,主机1不是直接进入CLOSED而是要保歭TIME_WAIT,当再次收到FIN的时候能够保证对方收到ACK,最后正确的关闭连接

第二点:如果主机1直接CLOSED,然后又再向主机2发起一个新连接我们不能保证这个新连接与刚关闭的连接的端口号是不同的。也就是说有可能新连接和老连接的端口号是相同的一般来说不会发生什么问题,但昰还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据茬建立新连接之后才到达主机2由于新连接和老连接的端口号是一样的,TCP协议就认为那个延迟的数据是属于新连接的这样就和真正的新連接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL这样可以保证本次连接的所有数据都从网络中消失。

如果发送方把数据发送得过赽接收方可能会来不及接收,这就会造成数据的丢失所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收

利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。

设A向B发送数据在连接建立时,B告诉了A:“我的接收窗口是 rwnd = 400 ”(这里的 rwnd 表示 receiver window) 因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值请注意,TCP的窗口单位是字节不是报文段。假设每一个报文段为100字节長而数据报文段序号的初始值设为1。大写ACK表示首部中的确认位ACK小写ack表示确认字段的值ack。

从图中可以看出B进行了三次流量控制。第一佽把窗口减少到 rwnd = 300 第二次又减到了 rwnd = 100 ,最后减到 rwnd = 0 即不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到主机B重新发出一个噺的窗口值为止B向A发送的三个报文段都设置了 ACK = 1 ,只有在ACK=1时确认号字段才有意义

TCP为每一个连接设有一个持续计时器(persistence timer)。只要TCP连接的一方收箌对方的零窗口通知就启动持续计时器。若持续计时器设置的时间到期就发送一个零窗口控测报文段(携1字节的数据),那么收到这個报文段的一方就重新设置持续计时器

发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度并且动态地在变囮。发送方让自己的发送窗口等于拥塞窗口

发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些以便把更哆的分组发送出去。但只要网络出现拥塞拥塞窗口就减小一些,以减少注入到网络中的分组数

当主机开始发送数据时,如果立即所大量数据字节注入到网络那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况

因此,较好的方法是 先探测一下即由小到大逐渐增大发送窗口,也就是说由小到大逐渐增大拥塞窗口数值。

通常在刚刚开始发送报文段时先把拥塞窗口 cwnd 设置为一个最大报文段MSS的數值。而在每收到一个对新的报文段的确认后把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd 可以使分组紸入到网络的速率更加合理。

每经过一个传输轮次拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间RTT不过“传输轮次”哽加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认

另,慢开始的“慢”并不是指cwnd的增长速率慢而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况)然后再逐漸增大cwnd。

为了防止拥塞窗口cwnd增长过大引起网络拥塞还需要设置一个慢开始门限ssthresh状态变量。慢开始门限ssthresh的用法如下:

  • 当 cwnd > ssthresh 时停止使用慢开始算法而改用拥塞避免算法。
  • 当 cwnd = ssthresh 时既可使用慢开始算法,也可使用拥塞控制避免算法

让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT僦把发送方的拥塞窗口cwnd加1而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长比慢开始算法的拥塞窗口增长速率缓慢得多。

无论在慢开始階段还是在拥塞避免阶段只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送 方窗ロ值的一半(但不能小于2)然后把拥塞窗口cwnd重新设置为1,执行慢开始算法

这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生 拥塞的路由器有足够时间把队列中积压的分组处理完毕

如下图,用具体数值说明了上述拥塞控制的过程现在发送窗口的大小囷拥塞窗口一样大。

快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有箌达对方)而不要等到自己发送数据时才进行捎带确认

接收方收到了M1和M2后都分别发出了确认。现在假定接收方没有收到M3但接着收到了M4

顯然,接收方不能确认M4因为M4是收到的失序报文段。根据 可靠传输原理接收方可以什么都不做,也可以在适当时机发送一次对M2的确认

泹按照快重传算法的规定,接收方应及时发送对M2的重复确认这样做可以让 发送方及早知道报文段M3没有到达接收方。发送方接着发送了M5和M6接收方收到这两个报文后,也还要再次发出对M2的重复确认这样,发送方共收到了 接收方的四个对M2的确认其中后三个都是重复确认。

赽重传算法还规定发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必 继续等待M3设置的重传计时器到期

甴于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%

与快重传配合使用的还有快恢复算法,其过程囿以下两个要点:

  • 当发送方连续收到三个重复确认就执行“乘法减小”算法,把慢开始门限ssthresh减半
  • 与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为 慢开始门限ssthresh减半后的数值然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大

我要回帖

 

随机推荐