还剩12页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
TCP/IP详解学习笔记⑴・基本概念为何会有协议TCP/IP在世界上各地,多种各样的电脑运行着各自不一样的操作系统为大家服务,这些电脑在体现同一种信息的时候所使用的措施是千差万别就仿佛圣经中上帝打乱了各地人的口音,让他们无法合作同样计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用只有把它们联合起来,电脑才会发挥出它最大的潜力于是人们就想方设法的用电线把电脑连接到了一起不过简朴的连到一起是远远不够的,就仿佛语言不一样的两个人互相见了面,完全不能交流信息因而他们需要定义某些共通的东西来进行交流,TCP/IP就是为此而生TCP/IP不是一种协议,而是一种协议族的统称里面包括了IP协议,IMCP协议,TCP协议,以及我们愈加熟悉的http、ftp、p°p3协议等等电脑有了这些,就仿佛学会了外语同样,就可以和其他的计算机终端做自由的交流了协议分层TCP/IPOSIApplicationX.400,FTAM,VTApplicationsPresentationSMTP,TELNET,FTPSessionTransportTransportTransmissionControlProtocolInternetInternetProtocolNetworicDauLink NetworkInterfacePhysicalHardwareTCP/IP提到协议分层,我们很轻易联想到ISO-OSI的七层协议经典架构,不过TCP/IP协议族的构造则稍有不一样如图所示TCP/IP协议族按照层次由上到下,层层包装最上面的就是应用层了,这里面有http,ftp,等等我们熟悉的协议而第二层则是传播层,著名的TCP和UDP协议就在这个层次(不耍告诉我你没用过udp玩星际)第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其他的数据(背面会讲到)以确定传播的目的第四层是叫数据链路层,这个层次为待传送的数据加入一种以太网协议头,并进行CRC编码,为最终的数据传播做准备再往下则是硬件层次了,负责网络的传播,这个层次的定义包括网线的制式,网卡的定义等等(这些我们就不用关怀了,我们也不做网卡),因此有些书并不把这个层次放在tcp/ip协议族里面,由于它几乎和tcp/ip协议的编写者没有任何的关系发送协议的主机从上自下将数据按照协议封装,而接受数据的主机则按照协议从得到的数据包解开,最终拿到需要的数据这种构造非常有栈的味道,因此某些文章也把tcp/ip协议族称为tcp/ip协议栈某些基本的常识在学习协议之前,我们应当具有某些基本知识互联网地址(地址)ip网络上每一种节点都必须有一种独立的Internet地址(也叫做IP地址)目前,一般使用的IP地址是一种32bit的数字,也就是我们常说的IPv4原则,这32bit的数字提成四组,也就是常见的的样式IPv4原则上,地址被分为五类,我们常用的是B类地址详细的分类请参照其他文档需要注意的是IP地址是网络号+主机号的组合,这非常重要域名系统域名系统是一种分布的数据库,它提供将主机名(就是网址啦)转换成IP地址的服务RFCRFC是什么?RFC就是tcp/ip协议的原则文档,在这里我们可以看到RFC那长长的定义列表,目前它一共有4000多种协议的定义,当然,我们所要学习的,也就是那么十几种协议而已端口号()port注意,这个号码是用在TCP,UDP上的一种逻辑号码,并不是一种硬件端口,我们平时说把某某端口封掉了,也只是在IP层次把带有这个号码的IP包给过滤掉了而已应用编程接口目前常用的编程接口有socket和TLL而前面的有时候也叫做“Berkeley socket”,可见Berkeley对于网络的发展有多大的奉献详解学习笔记()•数据链路层TCP/IP2数据链路层有三个目的•为IP模块发送和接受IP数据报•为ARP模块发送ARP祈求和接受ARP应答•为RARP发送RARP请求和接受RARP应答ip大家都听说过至于ARP和RARP,ARP叫做地址解析协议,是用IP地址换MAC地址的一种协议,而RARP则叫做逆地址解析协议,在tcp/ip协议的背面章节会简介它们(在局域网里面用ARP协议可以很轻易的搞瘫痪网络哦)数据链路层的协议还是诸多的,有我们最常用的以太网(就是平时我们用的网卡)协议,也有不太常见的令牌环,尚有FDDI,当然,尚有国内目前相称普及的PPP协议(就是adsl宽带),以及一种loopback协议3SYN_SENT-CLOSED,在发送超时的状况下,会返回到CLOSED状态4SYNJI攵至IJ-LISTEN,假如受至ijRST包,会返回到LISTEN状态5SYNJI攵到,FIN_WAIT_1,这个迁移是说,可以不用到ESTABLISHED状态,而可以直接跳转到FIN_WAIT_1状态并等待关闭等待状态
6.
4.2MSL书中给的图里面,有一种TIME_WAIT等待状态,这个状态又叫做2MSL状态,说的是在TIME_WAIT2发送了最终一种ACK数据报后来,要进入TIME_WAIT状态,这个状态是防止最终一次握手的数据报没有传送到对方那里而准备的(注意这不是四次握手,这是第四次握手的保险状态)这个状态在很大程度上保证了双方都可以正常结束,不过,问题也来了由于插口的2MSL状态(插口是IP和端口对的意思,socket),使得应用程序在2MSL时间内是无法再次使用同一种插口的,对于客户程序还好某些,不过对于服务程序,例如hltpd,它总是要使用同一种端口来进行服务,而在2MSL时间内,启动httpd就会出现错误(插口被使用)为了防止这个错误,服务器给出了一种安静时间的概念,这是说在2MSL时间内,虽然可以重新启动服务器,不过这个服务器还是要安静的等待2MSL时间的过去才能进行下一次连接状态
7.
5.FIN_WAIT_2这就是著名的车关闭的状态了,这是在关闭连接时,客户端和服务器两次握手之后的状态在这个状态下,应用程序尚有接受数据的能力,不过已经无法发送数据,不过也有一种也许是,客户端一直处在FIN_WAIT_2状态,而服务器则一直处在WAIT_CLOSE状态,而直到应用层来决定关闭这个状态同步打开和同步关闭
5.RST,RST是另一种关闭连接的方式,应用程序应当可以判断RST包的真实性,即与否为异常中断而同步打开和同步关闭则是两种特殊的TCP状态,发生的概率很小服务器设计
6.TCP前面曾经讲述过UDP的服务器设计,可以发现UDP的服务器完全不需要所谓的并发机制,它只要建立一种数据输入队列就可以不过TCP不一样,TCP服务器对于每一种连接都需要建立一种独立的进程(或者是轻量级的,线程),来保证对话的独立性因此TCP服务器是并发的并且TCP还需要配置一种呼入连接祈求队列(UDP服务器也同样不需要),来为每一种连接祈求建立对话进程,这也就是为何多种TCP服务器均有一种最大连接数的原因而根据源主机的IP和端口号码,服务器可以很轻松的区别出不一样的会话,来进行数据的分发掌握本章的状态迁移图才是学习本章的关键TCP/IP详解学习笔记(U)・TCP交互数据流,成块数据流目前建立在TCP协议上的网络协议尤其多,有telnet,ssh,有ftp,有http等等这些协议又可以根据数据吞吐量来大体提成两大类
(1)交互数据类型,例如telnet,ssh,这种类型的协议在大多数状况下只是做小流量的数据互换,例如说按一下键盘,回显某些文字等等
(2)数据成块类型,例如ftp,这种类型的协议规定TCP能尽量的运载数据,把数据的吞吐量做到最大,并尽量的提高效率针对这两种状况,TCP给出了两种不一样的方略来进行数据传播的交互数据流LTCP对于交互性规定比较高的应用,TCP给出两个方略来提高发送效率和减低网络承担
(1)捎带ACKo
(2)Nagle算法(一次尽量多的发数据)一般,在网络速度很快的状况下,例如用1接口进行telnet通信,当按下字母键并规定回显的时候,客户端和服务器将经历发送按键数据-服务器发送按键数据的ack-服务器端发送回显数据客户端发送回显数据的ACK的过程,而其中的数据流M^40bit+41bit+41bit+40bit=162bit,假如在广域网里面,这种小分组的TCP流量将会导致很大的网络承担捎带的发送方式LL ACK这个方略是说,当主机收到远程主机的TCP数据报之后,一般不立即发送ACK数据报,而是等上一种短暂的时间,假如这段时间里面主机尚有发送到远程主机的TCP数据报,那么就把这个ACK数据报“捎带”着发送出去,把本来两个TCP数据报整合成一种发送一般的,这个时间是200ms可以明显地看到这个方略可以把TCP数据报的运用率提高诸多算法
1.
2.Nagle上过bbs的人应当都会有感受,就是在网络慢的时候发贴,有时键入一串字符串后来,通过一段时间,客户端“发疯”同样忽然回显出诸多内容,就仿佛数据一下子传过来了同样,这就是Nagle算法的作用Nagle算法是说,当主机A给主机B发送了一种TCP数据报并进入等待主机B的ACK数据报的状态时,TCP的输出缓冲区里面只能有一种TCP数据报,并且,这个数据报不停地搜集后来的数据,整合成一种大的数据报,等到B主机的ACK包一到,就把这些数据“一股脑”的发送出去虽然这样的描述有些不精确,但还算形象和易于理解,我们同样可以体会到这个方略对于低减网络承担的好处在编写插口程序的时候,可以通过TCP_NODELAY来关闭这个算法并且,使用这个算法看状况的,例如基于TCP的X窗口协议,假如处理鼠标事件时还是用这个算法,那么“延迟可就非常大了的成块数据流
2.TCP对于FTP这样对于数据吞吐量有较高规定的规定,将总是但愿每次尽量多的发送数据到对方主机,就算是有点“延迟”也无所谓TCP也提供了一整套的方略来支持这样的需求TCP协议中有16个bit表达“窗口”的大小,这是这些方略的关键传播数据时的问题
2.
1.ACK在解释滑动窗口前,需要看看ACK的应答方略,一般来说,发送端发送一种TCP数据报,那么接受端就应当发送一种ACK数据报不过实际上却不是这样,发送端将会持续发送数据尽量填满接受方的缓冲区,而接受方对这些数据只要发送一种ACK报文来回应就可以了,这就是ACK的累积特性,这个特性大大减少了发送端和接受端的承担滑动窗口22滑动窗口本质上是描述接受方的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据假如发送方收到接受方的窗口大小为0的TCP数据报,那么发送方将停止发送数据,等到接受方发送窗口大小不为0的数据报的到来书中的P211和P212很好的解释了这一点有关滑动窗口协议,书上还简介了三个术语,分别是1窗口合拢当窗口从左边向右边靠近的时候,这种现象发生在数据被发送和确认的时候2窗口张开当窗口的右边缘向右边移动的时候,这种现象发生在接受端处理了数据后来3窗口收缩当窗口的右边缘向左边移动的时候,这种现象不常发生TCP就是用这个窗口,慢慢的从数据的左边移动到右边,把处在窗口范围内的数据发送出去(但不用发送所有,只是处在窗口内的数据可以发送)这就是窗口的意义图20-6解释了这一点窗口的大小是可以通过socket来制定的,4096并不是最理想的窗口大小,而16384则可以使吞吐量大大的增长.数据拥塞
2.3上面的方略用于局域网内传播还可以,不过用在广域网中就也许会出现问题,最大的问题就是当传播时出现了瓶颈(例如说一定要通过一种slip低速链路)所产生的大量数据堵塞问题(拥塞),为了处理这个问题,TCP发送方需要确认连接双方的线路的数据最大吞吐量是多少这,就是所谓的拥塞窗口拥塞窗口的原理很简朴,TCP发送方首先发送一种数据报,然后等待对方的回应,得到回应后就把这个窗口的大小加倍,然后持续发送两个数据报,等到对方回应后来,再把这个窗口加倍(先是2的指数倍,到一定程度后就变成现行增长,这就是所谓的慢启动),发送更多的数据报,直到出现超时错误,这样,发送端就理解到了通信双方的线路承载能力,也就确定了拥塞窗口的大小,发送方就用这个拥塞窗口的大小发送数据要观测这个现象是非常轻易的,我们一般在下载数据的时候,速度都是慢慢“冲起来的以上就是TCP数据传播的大体流程,虽然并不细致,不过足以描述TCP的工作原理,重点是TCP的流量控制原理,滑动窗口,拥塞窗口,ACK合计确认等知识点详解学习笔记(的超时与重传TCP/IP12ATCP超时重传是TCP协议保证数据可靠性的另一种重要机制,其原理是在发送某一种数据后来就启动一种计时器,在一定期间内假如没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止超时L超时时间的计算是超时的关键部分,TCP规定这个算法能大体估计出目前的网络状况,虽然这确实很困难规定精确的原因有两个
(1)定期长期会导致网络运用率不高
(2)定期太短会导致多次重传,使得网络阻塞因此,书中给出了一套经验公式,和其他的保证计时器精确的措施递推公式概说LL最早的TCP曾经用了一种非常简朴的公式来估计目前网络的状况,如下R-aR+(]-a)MRTP=Rb其中a是一种经验系数为
0.1,b一般为2注意,这是经验,没有推导过程,这个数值是可以被修改的这个公式是说用旧的RTT(R)和新的RTT(M)综合到一起来考虑新的RTT(R)的大小不过,我们又看到,这种估计在网络变化很大的状况下完全不能做出“敏捷的反应”(Jacoboson说的,不是偶说的,呵呵),于是就有下面的修正公式Err=M-AA-A+gErrD-D+h(\Err\-D)RTO=A+4D详细的解释请看书的228页,这个递推公式甚至把方差这种记录概念也使用了进来,使得偏差愈加的小并且,必须要指出的是,这两组公式更新,都是在数据成功传播的状况下才进行,在发生数据重新传播的状况下,并不使用上面的公式进行网络估计,理由很简朴,由于程序已经不在正常状态下了,估计出来的数据也是没故意义的的初始化
1.
2.RTORTO的初始化是由公式决定的,例如最初的公式,初始的值应当是1而修正公式,初始RTO应当是A+4D的更新
1.
3.RTO当数据正常传播的状况下,我们就会用上面的公式来更新各个数据,并重开定期器,来保证下一种数据被顺利传播要注意的是重传的状况下,RTO不用上面的公式计算,而采用一种叫做“指数退避”的方式例如当RTO为1S的状况下,发生了数据重传,我们就用RTO2S的定期器来重新传播数据,下一次用4S一直增长到64s为止.估计器的初始化L4在这里,SYN用的估计器初始化似乎和传播用的估计器不一样样(我也没有把握)造我的理解,在修正公式中,SYN的状况下,A初始化为0,D初始化为3S而在得到传播第一种数据的ACK的时候,应当按照下面的公式进行初始化A=M+
0.5D=A/21・5•估计器的更新和上面的讨论差不多,就是在正常状况下,用上面的公式计算,在重传的状况下,不更新估计器的多种参数原因还是由于估计不精确算法
1.
6.Karn这不算是一种算法,这应当是一种方略,说的就是更新RTO和估计器的值的时机选择问题,
1.
3.和
1.
5.所说得更新时机就是Karn算法.计时器的使用
1.7两句话1一种连接中,有且仅有一种测量定期器被使用也就是说,假如TCP持续发出3组数据,只有一组数据会被测量2ACK数据报不会被测量,原因很简朴,没有ACK的ACK回应可以供结束定期器测量
2.重传有了超时就要有重传,不过就算是重传也是有方略的,而不是将数据简朴的发送.重传时发送数据的大小
2.1前面曾经提到过,数据在传播的时候不能只使用一种窗口协议,我们还需要有一种拥塞窗口来控制数据的流量,使得数据不会一下子都跑到网路中引起“拥塞也曾经提到过,拥塞窗口最初使用指数增长的速度来增长自身的窗口,直到发生超时重传,再进行一次微调不过没有提到,怎样进行微调,拥塞防止算法和慢启动门限就是为此而生所谓的慢启动门限就是说,当拥塞窗口超过这个门限的时候,就使用拥塞防止算法,而在门限以内就采用慢启动算法因此这个原则才叫做门限,一般,拥塞窗口记做慢启动门限记做SS比%就下面我们来看看拥塞防止和慢启动是怎么一起工作的算法概要(直接从书中拷贝)3对一种给定的连接,初始化cwnd为1个报文段,ssthresh为65535个字节4TCP输出例程的输出不能超过cwnd和接受方通告窗口的大小拥塞防止是发送方使用的流量控制,而通告窗口则是接受方进行的流量控制前者是发送方感受到的网络拥塞的估计,而后者则与接受方在该连接上的可用缓存大小有关5当拥塞发生时(超时或收到反复确认),ssthresh被设置为目前窗口大小的二分之一(cwnd和接受方通告窗口大小的最小值,但至少为2个报文段)此外,假如是超时引起了拥塞,则cwnd被设置为1个报文段(这就是慢启动)6当新的数据被对方确认时,就增长cwnd,但增长的措施依赖于我们与否正在进行慢启动或拥塞防止假如cwnd不不小于或等于ssthresh,则正在进行慢启动,否则正在进行拥塞防止慢启动一直持续到我们回到当拥塞发生时所处位置的半时候才停止(由于我们记录了在环节2中给我们制造麻烦的窗口大小的二分之一),然后转为执行拥塞防止补充上面的拥塞防止公式在P238页这整个的流程让我联想到开车换档的过程.迅速重传和迅速恢复算法
2.2这是数据丢包的状况下给出的一种修补机制一般来说,重传发生在超时之后,不过假如发送端接受到3个以上的反复ACK的状况下,就应当意识到,数据丢了,需要重新传递这个机制是不需要等到重传定期器溢出的,因此叫做迅速重传,而重新传递后来,由于走的不是慢启动而是拥塞防止算法,因此这又叫做迅速恢复算法流程如下7当收到第3个反复的ACK时,将ssthresh设置为目前拥塞窗口cwnd的二分之一重传丢失的报文段设置cwnd为ssthresh加上3倍的报文段大小8每次收到另一种反复的ACK时,cwnd增长1个报文段大小并发送1个分组(假如新的cwnd容许发送)9当下一种确认新数据的ACK抵达时,设置cwnd为ssthresh(在第1步中设置的值)这个ACK应当是在进行重传后的一种来回时间内对环节1中重传确实认此外,这个ACK也应当是对丢失的分组和收到的第1个反复的ACK之间的所有中间报文段确实认这一步采用的是拥塞防止,由于当分组丢失时我们将目前的速率减半会引起重新传递么?
2.
3.1CMP答案是不会,TCP会坚持用自己的定期器,不过TCP会保留下ICMP的错误并且告知顾客.重新分组
2.4TCP为了提高自己的效率,容许再重新传播的时候,只要传播包括重传数据报文的报文就可以,而不用只重传需要传播的报文TCP/IP详解学习笔记
(13)・TCP坚持定期器,TCP保活定期器TCP一共有四个重要的定期器,前面已经讲到了一种一一超时定期器一一是TCP里面最复杂的一种,此外的三个是1坚持定期器2保活定期器32MSL定期器其中坚持定期器用于防止通告窗口为后来双方互相等待死锁的状况;而保活定期器则用于处理半开放连接.坚持定期器1坚持定期器的原理是简朴的,当TCP服务器收到了客户端的0滑动窗口报文的时候,就启动一种定期器来计时,并在定期器溢出的时候向向客户端查询窗口与否已经增大,假如得到非零的窗口就重新开始发送数据,假如得到0窗口就再开一种新的定期器准备下一次查询通过观测可以得知,TCP的坚持定期器使用1,2,4,8,16……64秒这样的一般指数退避序列来作为每一次的溢出时间糊涂窗口综合症TCP的窗口协议,会引起一种一般叫做糊涂窗口综合症的问题,详细体现为,当客户端通告一种小的非零窗口时丁服务器立即发送小数据给客户端并充斥其缓冲区,一来二去就会让网络中充斥小TCP数据报,从而影响网络运用率对于发送方和接受端的这种糊涂行为TCP给出了某些提议(或者是规定)4接受方不通告小窗口一般的算法是接受方不通告一种比目前窗口大的窗口(可认为0),除非窗口可以增长一种报文段大小(也就是将要接受的MSS)或者可以增长接受方缓存空间的二分之一,不管实际有多少5发送方防止出现糊涂窗口综合症的措施是只有如下条件之一满足时才发送数据(a)可以发送一种满长度的报文段;(b)可以发送至少是接受方通告窗口大小二分之一的报文段;(c)可以发送任何数据并且不但愿接受ACK(也就是说,我们没有尚未被确认的数据)或者该连接上不能使用Nagle算法ok,目前我们回忆一下,可以发现TCP的诸多规定都是为了在一次传送中发送尽量多的数据,例如捎带ACK数据报文的方略,Nagle算法,重传时发送包括原数据报文的方略,等等.保活定期器2保活定期器愈加的简朴,还记得FTP或者Http服务器均有Session Time机制么?由于TCP是面向连接的,因此就会出现只连接不传送数据的“半开放连接”,服务器当然要检测到这种连接并且在某些状况下释放这种连接,这就是保活定期器的作用其时限根据服务器的实现不一样而不通此外要提到的是,当其中一端假如瓦解并重新启动的状况下,假如收到该端前生的保活探察,则要发送一种RST数据报文协助另一端结束连接TCP/IP详解学习笔记
(14)・TCP连接的未来和性能(未写完)在TCP刚出世的时候,其重要工作环境是以太网和SLIP之类的低速网络伴随高速网络的出现,让TCP协议的吞吐量更大,效率更高的规定就愈来愈迫切为此,TCP增长了三个重要机制来对应目前的变化,他们是1途径MTU发现2窗口扩大选项和时间戳3T/TCP(增长了事务功能的TCP协议)途径发现L MTU顾名思义途径MTU指的是源主机到坟场主机之间的途径的可传送最大单元的大小其原理同样是使用设置了不许分片的IP数据报,并等待ICMP错误,来估算MTU的大小书中的P257简介了TCP怎样根据ICMP的报文来修改自己的MTU详细如下4当源主机接受到较新的ICMP差错报文时,就直接修改自己的最大发送报文段大小为发送ICMP差错报文的发送端的MTU与IP头和TCP头的差值5当源主机接受到较新的ICMP差错报文时,则必须尝试下一种MTU(多种不一样的网络设备均有一种MTU,各个MTU从大至I」小为“65535,17914,4464,4352,1500,1492,576,296”)6由于路由可以动态变化,因此每隔10分钟,发送端就可以用比较大的报文来侦测一下途径MTU.长肥管道2所谓的长肥管道,说的就是发送时延长,带宽宽的管道,衡量这一概念的原则是时延面积假如碰上了网络“又长又肥”,那么网络的运用率就会大幅度的减少,一般的计时措施和窗口面积就不够用了就需要更多的措施来弥补这个缺陷这就是时间戳和窗口扩大选项idnd3lm«3窗口扩大因时问或:kind-6kn=10时间数值时间段何显府答1字琳I字节1字片这些都是在经典TCP协议头之外定义的扩展选项,格式如下.时间戳选项21顾客在发送每一种TCP报文的时候都放置一种时间戳,接受方在确认中返回这个时间戳值发送方就可以根据这个时间戳来计算RTT1字节I字W4字*4字节从而使得RTT愈加精确,减少不必要的重传减低网络的负载.窗口扩大选项
2.2很奇怪的是为何窗口最大的扩展量只有14而不是64由于毕竟窗口扩大选项有一种字节那么长的数据可以用,不过,不管怎么样,还是记住为好窗口扩大选项可以让窗口扩大到2的30次方这就儿乎完美的处理了肥管道的问题联络linux里面的ifconfig・a命令,这个命令一般会得到如下的成果ethO Linkencap:Ethernet HWaddr00:01:4A:03:5B:EDinetinet6addr:fe80::201:4aff:fe03:5bed/64Scope:LinkUP BROADCASTRUNNING MULTICASTMTU:1500Metric:1RX packets:2819errors:0dropped:0overruns:0frame:0TX packets:76errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:1000RX bytes:
241609235.9KiB TXbytes:
95969.3KiBlo Linkencap:Local Loopbackinetinet6addr:::1/128Scope:HostUP LOOPBACKRUNNING MTU:16436Metric:1RX packets:2713errors:0dropped:0overruns:0frame:0TX packets:2713errors:0dropped:0overruns:0carrier:0collisions:0txqueuelemORX bytes:
35160323.3MiB TXbytes:
35160323.3MiB其中,ethO就是以太网接口,而lo则是loopback接口这也阐明这个主机在网络链路层上至少支持loopback协议和以太网协议以太网Ether-net的定是指数字设备企业Digital EquipmentCorp.、英特尔企业Intel Corp.和Xerox企业在1982年联合公布的一种原则,这个原则里面使用了一种称作CSMA/CD的接入措施而IEEE802提供的原则集
802.3尚有一部分定义到了
802.2中也提供了一种CSMA/CD的原则这两个原则稍有不一样,TCP/IP协议对这种状况的处理方式如下•以太网的IP数据报封装在RFC894中定义,而IEEE802网络的IP数据报封装在RFC1042中定义•一台主机一定要能发送和接受RFC894定义的数据报•一台主机可以接受RFC894和RFC1042的封装格式的混合数据报•一台主机也许可以发送RFC1042数据报假如主机能同步发送两种类型的分组数据,那么发送的分组必须是可以设置的,并且默认条件下必须是RFC894分组可见,RFC1042在TCP/IP里面处在一种配角的地位这两种不一样的数据报格式请参照教材ppp点对点协议是从SLIP的替代品他们都提供了一种低速接入的处理方案而每一种数据链路层协议,均有一种MTU最大传播单元定义,在这个定义下面,假如IP数据报过大,则要进行分片fragmentation,使得每片都不不小于MTU,注意PPP的MTU并不是一种物理定义,而是指一种逻辑定义个人认为就是用程序控制可以用netstat来打印出MTU的成果,例如键入netstat-inKernel InterfacetableIface MTUMet RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR FigethO150001774000587000BMRUlo16436026670002667000LRU就可以观测到ethO的MTU是1500而lo环回接口的MTU则是16436最终说说那个环回接口loopback o平时我们用
127.001来尝试自己的机器服务器好使不好使走的就是这个loopback接口对于环回接口,有如下三点值得注意•传给环回地址一般是
127.
0.
0.1的任何数据均作为IP输入•传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上这是由于广播传送和多播传送的定义包括主机自身•任何传给该主机IP地址的数据均送到环回接口这一章还是很简朴的,一般作为理解知识也就足够了,没必要抠的那么详细TCP/IP详解学习笔记3・IP协议,ARP协议,RARP协议把这三个协议放到一起学习是由于这三个协议处在同一层,ARP协议用来找到目的主机的Ethernet网卡Mac地址,IP则承载要发送的消息数据链路层可以从ARP得到数据的传送信息,而从IP得到要传播的数据信息协议LIPIP协议是TCP/IP协议的关键,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传播要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达后来的处理机制一一这被认为是上层协议一一TCP或UDP要做的事情因此这也就出现了TCP是一种可靠的协议,而UDP就没有那么可靠的区别这是后话,暂且不提协议头如图所示20字节挨个解释它是教科书的活计,我感爱好的只是那八位的TTL字段,还记得这个字段是做什么的么?这个字段规定该数据包在穿过多少个路由之后才会被抛弃(这里就体现出来IP协议包的不可靠性,它不保证数据被送达),某个ip数据包每穿过一种路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃这个字段的最大值也就是255,也就是说一种协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不一样,这个数字也不一样,一般是32或者是64,Tracerouter这个工具就是用这个原理工作的,tranceroute的-m选项规定最大值是255,也就是由于这个TTL在IP协议里面只有8bit目前的ip版本号是4,因此也称作IPv4目前尚有IPv6,并且运用也越来越广泛了
1.
2.IP路由选择当一种IP数据包准备好了的时候,1P数据包(或者说是路由器)是怎样将数据包送到目的地的呢?它是怎么选择一种合适的途径来〃送货〃的呢?最特殊的状况是目的主机和主机直连,那么主机主线不用寻找路由,直接把数据传递过去就可以了至于是怎么直接传递的,这就要靠ARP协议了,背面会讲到稍微一般一点的状况是,主机通过若干个路由器(router)和目的主机连接那么路由器就要通过ip包的信息来为ip包寻找到一种合适的目的来进行传递,例如合适的主机,或者合适的路由路由器或者主机将会用如下的方式来处理某一种IP数据包1假如IP数据包的TTL(生命周期)以到,则该IP数据包就被抛弃2搜索路由表,优先搜索匹配主机,假如能找到和IP地址完全一致的目的主机,则将该包发向目的主机3搜索路由表,假如匹配主机失败,则匹配同子网的路由器,这需要“子网掩码(L
3.)”的协,助假如找到路由器,则将该包发向路由器4搜索路由表,假如匹配同子网路由器失败,则匹配同网号(第一章有讲解)路由器,假如找到路由器,则将该包发向路由器5搜索陆游表,假如以上都失败了,就搜索默认路由,假如默认路由存在,则发包6假如都失败了,就丢掉这个包这再一次证明了,ip包是不可靠的由于它不保证送达L
3.子网寻址IP地址的定义是网络号+主机号不过目前所有的主机都规定子网编址,也就是说,把主机号在细提成子网号+主机号最终一种TP地址就成为网络号码+子网号+主机号例如一种B类地址
210.
30.
109.134o一般状况下,这个IP地址的红色部分就是网络号,而蓝色部分就是子网号,绿色部分就是主机号至于有多少位代表子网号这个问题上,这没有一种硬性的规定,取而代之的则是子网掩码,校园网相信大多数人都用过,在校园网的设定里面有一种的东西,这就是子网掩码子网掩码是由32bit的二进制数字序列,形式为是一连串的序口一连串的0,例如
255.
255.
255.0(二进制就是
11111111.
11111111.
11111111.00000000)对于刚刚的那个B类地址,由于
210.30是网络号,那么背面的
109.134就是子网号和主机号的组合,又由于子网掩码只有后八bit为0,因此主机号就是IP地址的后八个bit,就是134,而剩余的就是子网号码——109o
2.ARP协议还记得数据链路层的以太网的协议中,每一种数据包均有一种MAC地址头么?我们懂得每一块以太网卡均有一种MAC地址,这个地址是唯一的,那么IP包是怎样懂得这个MAC地址的?这就是ARP协议的工作ARP(地址解析)协议是一种解析协议,本来主机是完全不懂得这个IP对应的是哪个主机的哪个接口,当主机要发送一种IP包的时候,会首先查一下自己的ARP高速缓存(就是一种IP-MAC地址对应表缓存),假如查询的IP—MAC值对不存在,那么主机就向网络发送一种ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接受到这份广播的包的所有主机都会查询自己的IP地址,假如收到广播包的某一种主机发现自己符合条件,那么就准备好一种包含自己的MAC地址的ARP包传送给发送ARP广播的主机,而广播主机拿到ARP包后会更新自己的ARP缓存(就是寄存IP-MAC对应表的地方)发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作Interface:0x2Internet AddressPhysical AddressType00-0d-0b-43-a0-2f dynamic
192.
168.
11.200-01-4a-03-5b-ea dynamic一种经典的arp缓存信息如下,在任意一种系统里面用“arp-a”命令都会得到这样的成果这样的高速缓存是有时限的,一般是20分钟(伯克利系统的衍生系统)协议(略)
3.RARPTCP/IP详解学习笔记
(4)・ICMP协议,ping和Traceroute协议简介
1.IMCP前面讲到了,IP协议并不是一种可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应当由其他的模块来完毕其中一种重要的模块就是ICMP(网络控制报文)协议当传送IP数据包发生错误一一例如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机给主机一种处理错误的机会,这也就是为何说建立在IP层以上的协议是也许做到安全的原因ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和构成而前16bit就构成了ICMP所要传递的信息书上的图6—3清晰的给出了错误类型和代码的组合代表的意思尽管在大多数状况下,错误的包传送应当给出ICMP报文,不过在特殊状况下,是不产生ICMP错误报文的如下1ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送)2目的地址是广播地址或多播地址的IP数据报3作为链路层广播的数据报4不是IP分片的第一片5源地址不是单个主机的数据报这就是说,源地址不能为零地址、环回地址、广播地址或多播地址虽然里面的某些规定目前还不是很明白,不过所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的ICMP协议大体分为两类,一种是查询报文,一种是差错报文其中查询报文有如下几种用途6ping查询(不要告诉我你不懂得ping程序)7子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)8时间戳查询(可以用来同步时间)而差错报文则产生在数据传送发生错误的时候就不赘述了
2.ICMP的应用・・pingping可以说是ICMP的最著名的应用,当我们某一种网站上不去的时候一般会ping一下这个网站ping会同显出某些有用的信息一般的信息如下Reply from
10.
4.
24.1:bytes=32timelms TTL=255Reply from
10.
4.
24.1:bytes=32time1ms TTL=255Reply from
10.
4.
24.1:bytes=32time1ms TTL=255Reply from
10.
4.
24.1:bytes=32timelms TTL=255Ping statisticsfor
10.
4.
24.1:Packets:Sent=4,Received=4,Lost=00%loss,Approximate roundtrip timesin milli-seconds:Minimum—0ms,Maximum二0ms,Average—0msping这个单词源自声纳定位,而这个程序的作用也确实如此,它运用ICMP协议包来侦测另一种主机与否可达原理是用类型码为0的ICMP发请求,受到祈求的主机则用类型码为8的ICMP回应ping程序来计算间隔时间,并计算有多少个包被送达顾客就可以判断网络大体的状况我们可以看到,ping给出来了传送的时间和TTL的数据我给的例子不太好,由于走的路由少,有爱好地可以ping一下国外的网站例如sf.net,就可以观测到某些丢包的现象,而程序运行的时间也会愈加的长ping还给我们一种看主机到目的主机的路由的机会这是由于,ICMP的ping祈求数据报在每通过一种路由器的时候,路由器都会把自己的ip放到该数据报中而目的主机则会把这个ip列表复制到回应icmp数据包中发回给主机不过,无论怎样,ip头所能纪录的路由列表是非常的有限假如要观测路由,我们还是需要使用更好的工具,就是要讲到的Traceroute(windows下面的名字叫做tracert)®的应用
3.ICMP“TracerouteTraceroute是用来侦测主机到目的主机之间所经路由状况的重要工具,也是最便利的工具前面说到,尽管ping工具也可以进行侦测,不过,由于ip头的限制,ping不能完全的记录下所通过的路由器因此Traceroute恰好就弥补了这个缺憾Traceroute的原理是非常非常的故意思,它受到目的主机的IP后,首先给目的主机发送一种TTL=1(还记得TTL是什么吗?)的UDP(背面就懂得UDP是什么了)数据包,而通过的第一种路由器收到这个数据包后来,就自动把TTL减1,而TTL变为0后来,路由器就把这个包给抛弃了,并同步产生一种主机不可达的ICMP数据报给主机主机收到这个数据报后来再发一种TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据报如此往复直到抵达目的主机这样,traceroute就拿到了所有的路由器ip从而避开了ip头只o能记录有限路由IP的问题有人要问,我怎么懂得UDP到没抵达目的主机呢?这就波及一种技巧的问题,TCP和UDP协议有一种端口号定义,而一般的网络程序只监控少数的几种号码较小的端口,例如说80,例如说23,等等而traceroute发送的是端口号>30000(真变态)的UDP报,因此抵达目的主机的时候,目的主机只能发送一种端口不可达的ICMP数据报给主机主机接到这个汇报后来就懂得,主机到了,因此,说Traceroute是一种骗子一点也不为过:)Traceroute程序里面提供了某些很有用的选项,甚至包括了IP选路的选项,请察看man文档来理解这些,这里就不赘述了TCP/IP详解学习笔记
(5)・IP选路,动态选路,和某些细节
1.静态IP选路一种简朴的路由表LL选路是IP层最重要的一种功能之一前面的部分已经简朴的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由这里就不反复了首先来看看一种简朴的系统路由表Destination GatewayGenmask FlagsMetric RefUse Iface*U000ethO*U000ethOdefault UG000ethO对于一种给定的路由器,可以打印出五种不一样的flago2U表明该路由可用3G表明该路由是到一种网关假如没有这个标志,阐明和Destination是直连的,而对应的Gateway应当直接给出Destination的地址4H表明该路由是到一种主机,假如没有该标志,阐明Destination是一种网络,换句话说Destination就应当写成一种网络号和子网号的组合,而不包括主机号(主机号码处为0),例如5D表明该路由是为重定向报文创立的6M该路由已经被重定向报文修改U没啥可说的,G阐明这是一种网关,假如你要发数据给Destination,IP头应当写Destination的IP地址,而数据链路层的MAC地址就应当是Gateway的Mac地址了;反之,假如没有G标志,那么数据链路层和IP层的地址应当是对应的H阐明了Destination的性质,假如是H的,则阐明该地址是一种完整的地址,既有网络号又有主机号,那么再匹配的时候就既要匹配网络号,又要匹配主机号;反之,Destination就代表一种网络,在匹配的时候只要匹配一下网络号就可以了这样,IP选路的方式就可以愈加详细化了如下7首先用IP地址来匹配那些带H标志的DestinationIP地址8假如1失败就匹配那些网络地址9假如2失败就发送到Default网关顺便提一下那个GenMask(还记得子网掩码么),它指定了目的地址的子网号,例如第一条的子网就是
11102.其他有关路由表的知识一般,我们在配置好一种网络接口的时候,一种路由就被直接创立好了当然我们也可以手动添加路由用route add命令就可以了而当一种IP包在某一种路由器的时候发现没有路由可走,那么该路由器就会给源主机发送“主机不可达”或者“网络不可达”的ICMP包来报错注意,一般的操作系统默认是没有路由功能的,这需要自己配置这些历史原因就不细说了,的重定向报文和路由发现报文L
3.ICMP IP当IP包在某一种地方转向的时候,都回给发送IP报的源主机一种ICMP重定向报文,而源主机就可以运用这个信息来更新自己的路由表,这样,伴随网络通信的逐渐增多,路由表也就越来越完备,数据转发的速度也会越来越快我们需要注意的是9重定向报文只能由路由器发出11重定向报文为主机所用,而不是为路由器所用在主机引导的时候,一般会发送在网内广播一种路由祈求的ICMP报文,而多种路由器则会回应一种路由通告报文并且,路由其自身不定期的在网络内发布路由通告报文,这样,根据这些报文,每一种主机都会有机会建立自己的路由表而实现网络通信路由器在一份通告报文中可以通告多种地址,并且给出每一种地址的优先等级,这个优先等级是该IP作为默认路由的等级,至于怎么算的就不深究了路由器一般会在450-600秒的时间间隔内公布一次通告,而一种给定的通告报文的寿命是30分钟而主机在引导的时候会每三秒发送一次祈求报文,一旦接受到一种有效的通告报文,就停止发送祈求报文在TCP/IP详解编写的时候,只有Solaris
2.x支持这两种报文,大多数系统还不支持这两种报文(背面还会讲到某些有用的路由报文)动态选路协议前面的选路措施叫做静态选路,简要地说就是在配置接口的时候,以默认的方式生成路由表项并通过route来增长表项,或者通过ICMP报文来更新表项(一般在默认方式出错的状况下)而假如上诉三种措施都不能满足,那么我们就使用动态选路动态选路协议是用于动态选路的重要构成部分,不过他们只是使用在路由器之间,相邻路由器之间互相通信系统(路有选择程序)选择比较合适的路有放到关键路由表中,然后系统就可以根据这个关键路有表找到最合适的网路也就是说,动态选路是在系统关键网络外部进行的,它只是用某些选路的方略影响路由表,而不会影响到最终通过路由表选择路由的那一部分选路协议有一大类常用的叫做内部网关协议(IGP),而在IGP中,RIP就是其中最重要的协议一种新的IGP协议叫做开放最短路经优先(OSPF)协议,其意在取代RIP另一种最早用在网路骨干网上的IGP协议-HELLO,目前已经不用了如今,任何支持动态选路的路由器都必须同步支持OSPF和RIP,还可以选择性的支持其他的IGP协议选旅程序
2.
1.UnixUnix系统上面一般均有路由守护程序-------routed尚有一种叫做gategate所支持的协议要比routed多,routed只是支持RIPvlo版本而gate则支持RIPvl、v2,BGPvl等等
2.
1.RIP选路信息协议它的定义可以在RFC1058内找到,这种协议使用UDP作为载体(也就是UDP的上层协议)我们最关怀的就是RIP其中的一种段,叫做度量的段,这是一种以hop作为计数器(就是以走过多少路由为计数器)的段(IP协议里面也有一种TTL不是么)这个度量段将最终影响到路由表的建立参照图一般说来routed要承担如下的工作11给每一种已知的路由器发送rip祈求报文,规定其他路由器给出完整的路由表这种报文的命令字段为1,地址字段为0,度量地段为16(相称于无穷大)12接受祈求,假如接受到刚刚的那个祈求,就把自己的完整的路由表交给祈求者假如没有,就处理IP祈求表项,把表项中自己有的部分添上跳数,没有的部分添上16然后发给祈求者13接受回应更新自己的路由表使用hop数小的规则14定期更新路由表,一般是30s(真频繁)给相邻的路有启发一次自己的路由表这种形式可以使广播形式的这个协议看起来会工作的很好,不过,这里面其实有诸多隐藏的忧患,例如说RIP没有子网的概念,例如说环路的危险并且hop数的上限也限制了网络的大小因此,出现了诸多RIPvl的替代品,例如说RIPv2,例如说OSPF他们都是通过某种方略来影响路由表,因此就不说了TCP/IP详解学习笔记⑹・UDP协议简要简介
1.UDPUDP是传播层协议,和TCP协议处在一种分层中,不过与TCP协议不一样,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议协议头
2.UDP端口号
3.LUDP由于诸多软件需要用到UDP协议,因此UDP协议必须通过某个标志用以辨别不一样的程序所需要的数据包端口号的功能就在于此,例如某一种UDP程序A在系统中注册了3000端口,那么,后来从外面传进来的目的端口号为3000的UDP包都会交给该程序端口号理论上可以有2八16这样多由于它的长度是16个bit检查和
2.
2.UDP这是一种可选的选项,并不是所有的系统都对UDP数据包加以检查和数据(相对TCP协议的必须来说),不过RFC中原则规定,发送端应当计算检查和UDP检查和覆盖UDP协议头和数据,这和IP的检查和是不一样的,IP协议的检查和只是覆盖IP数据头,并不覆盖所有的数据UDP和TCP都包括一种伪首部,这是为了计算检查和而摄制的伪首部甚至还包括IP地址这样的IP协议里面均有的信息,目的是让UDP两次检查数据与否已经对的抵达目的地假如发送端没有打开检查和选项,而接受端计算检查和有差错,那么UDP数据将会被悄悄的丢掉(不保证送达),而不产生任何差错报文长度
2.
3.UDPUDP可以很长很长,可以有65535字节那么长不过一般网络在传送的时候,一次一般传送不了那么长的协议(波及到MTU的问题),就只好对数据分片,当然,这些是对UDP等上级协议透明的,UDP不需要关怀IP协议层对数据怎样分片,下一种章节将会稍微讨论某些分片的方略分片
3.IPIP在从上层接到数据后来,要根据IP地址来判断从那个接口发送数据(通过选路),并进行MTU的查询,假如数据大小超过MTU就进行数据分片数据的分片是对上层和下层透明,而数据也只是抵达目的地还会被重新组装,不过不用紧张,IP层提供了足够的信息进行数据的再组装在IP头里面,16bit识别号唯一记录了一种IP包的ID,具有同一种ID的IP片将会被重新组装;而13位片偏移则记录了某IP片相对整个包的位置而这两个表达中间的3bit标志则标示着该分片背面与否尚有新的分片这三个标示就构成了IP分片的所有信息,接受方就可以运用这些信息对IP数据进行重新组织(就算是背面的分片比前面的分片先到,这些信息也是足够了)由于分片技术在网络上被常常的使用,因此伪造IP分片包进行流氓袭击的软件和人也就层出不穷可以用Trancdroute程序来进行简朴的MTU侦测请参看教材和之间的交互式用
3.UDP ARP这是不常被人注意到的一种细节,这是针对某些系统地实现来说的当ARP缓存还是空的时候UDP在被发送之前一定要发送一种ARP祈求来获得目的主机的MAC地址,假如这个UDP的数据包足够大,大到IP层一定要对其进行分片的时候,想象中,该UDP数据包的第一种分片会发出一种ARP查询祈求,所有的分片都辉等到这个查询完毕后来再发送实际上是这样吗?成果是,某些系统会让每一种分片都发送一种ARP查询,所有的分片都在等待,不过接受到第一种回应的时候,主机却只发送了最终一种数据片而抛弃了其他,这实在是让人匪夷所思这样,由于分片的数据不能被及时组装,接受主机将会在一段时间内将永远无法组装的IP数据包抛弃,并且发送组装超时的ICMP报文(其实诸多系统不产生这个差错),以保证接受主机自己的接受端缓存不被那些永远得不到组装的分片充斥源站克制差错
4.ICMP当目的主机的处理速度赶不上数据接受的速度,由于接受主机的IP层缓存会被占满,因此主机就会发出一种“我受不了”的一种ICMP报文服务器设计
5.UDPUDP协议的某些特性将会影响我们的服务器程序设计,大体总结如下1有关客户IP和地址服务器必须有根据客户IP地址和端口号判断数据包与否合法的能力(这似乎规定每一种服务器都要具有)2有关目的地址服务器必须要有过滤广播地址的能力3有关数据输入一般服务器系统的每一种端口号都会和一块输入缓冲区对应,进来的输入根据先来后到的原则等待服务器的处理,因此难免会出现缓冲区溢出的问题,这种状况下,UDP数据包也许会被丢弃,而应用服务器程序自身并不懂得这个问题4服务器应当限制当地IP地址,就是说它应当可以把自己绑定到某一种网络接口的某一种端口上详解学习笔记⑺•广播和多播,协议TCP/IP IGMP单播,多播,广播的简介I.单播()II unicast单播是说,对特定的主机进行数据传送例如给某一种主机发送IP数据包这时候,数据链路层给出的数据头里面是非常详细的目的地址,对于以太网来说,就是网卡的MAC地址(不是FF-FF-FF-FF-FF-FF这样的地址)目前的具有路由功能的主机应当可以将单播数据定向转发,而目的主机的网络接口则可以过滤掉和自己MAC地址不一致的数据.广播()III unicast广播是主机针对某一种网络上的所有主机发送数据包这个网络也许是网络,也许是子网,还也许是所有的子网假如是网络,例如A类网址的广播就是netid.
255.
255.255,假如是子网,则是;假如是所有的子网(B类IP)则是则是广播所用的MAC地址FF-FF-FF-FF-FF-FF网络内所有的主机都会收到这个广播数据,网卡只要把MAC地址为FF-FF-FF-FF-FF-FF的数据交给内核就可以了一般说来ARP,或者路由协议RIP应当是以广播的形式播发的.多播()IV3multicast可以说广播是多播的特例,多播就是给一组特定的主机(多播组)发送数据,这样,数据的播发范围会小某些(实际上播发的范围一点也没有变小),多播的MAC地址是最高字节的低位为一,例如01-00-00-00-00-00多播组的地址是D类IP,规定是
224.
0.
0.0-
239.
255.
255.255o虽然多播比较特殊,不过究其原理,多播的数据还是要通过数据链路层进行MAC地址绑定然后进行发送因此一种以太网卡在绑定了一种多播IP地址之后,必定还要绑定一种多播的MAC地址,才能使得其可以像单播那样工作这个多播的IP和多播MAC地址有一种对应的算法,在书的pl33到pl34之间可以看到这个对应不是一一对应的,主机还是要对多播数据进行过滤个人的见解广播和多播的性质是同样的,路由器会把数据放到局域网里面,然后网卡对这些数据进行过滤,只拿到自己打算要的数据,例如自己感爱好的多播数据,自己感爱好的组播数据当一种主机运行了一种处理某一种多播IP的进程的时候,这个进程会给网卡绑定一种虚拟的多播mac地址,并做出来一种多播ip这样,网卡就会让带有这个多播mac地址的数据进来,从而实现通信,而那些没有监听这些数0据的主机就会把这些数据过滤掉,换句话说,多播,是让主机的内核轻松了,而网卡,对不起,您就累点吧某些文章也印证了这种想法,最明显的就是局域网监听的原理、实现与防备.某些验证性试验2这些试验并不是很复杂,我们只是要ping一下一般的ip和一种广播地址首先我ping一下自己所在的子网的某一台主机Reply from
192.
168.
11.1:bytes=32timelms TTL=255Reply from
192.
168.
11.1:bytes=32timelms TTL=255Reply from
192.
168.
11.1:bytes=32timelms TTL=255Reply from
192.
168.
11.1:bytes=32time=lms TTL=255可以看到,机器返回的是一台主机的回应成果,进而推测,假如我ping一种广播地址呢?成果如下Reply from
192.
168.
11.9:bytes=32time=lms TTL=255Reply from
192.
168.
11.174:bytes=32timelms TTL=64Reply from
192.
168.
11.174:bytes=32timelms TTL=64Reply from
192.
168.
11.174:bytes=32timelms TTL=64Reply from
192.
168.
11.218:bytes=32timelms TTL=64Reply from
192.
168.
11.174:bytes=32time1ms TTL=64可以看到,ping返回了某些随机的ip的成果,这些ip都是与主机在同一子网内的ip我们可以看到,广播实际上是给处在子网内的所有ip发信再来一种多播的例子,不过要实现这个多播并不轻易,由于我不懂得网络内有多少个多播组,就只好运用几种特殊的多播地址来验证了对于多播地址,有几种特殊的多播地址被占用,他们是
1224.
0.
0.1―该子网内所有的系统组2该子网内所有的路由器3-网络实现协议NTP专用IPo4专用IP因此只要ping这几种IP,就应当能得到某些成果,例如说我ping Reply from
192.
168.
11.1:bytes=32timelms TTL=255Reply from
192.
168.
11.1:bytes=32timelms TTL=255Reply from
192.
168.
11.1:bytes=32timelms TTL=255Reply from
192.
168.
11.1:bytes=32timelms TTL=255Reply from
192.
168.
11.1:bytes=32timelms TTL=255Reply from
192.
168.
11.1:bytes=32timelms TTL=255Replyfrom
192.
168.
11.1:bytes=32timelms TTL=255我们可以看到,这回ping只返回了一种ip的回应而这个就是我的网关的地址,这也验证了是所有路由器的多播(组播)地址协议
3.IGMPIGMP的作用在于,让其他所有需要懂得自己处在哪个多播组的主机和路由器懂得自己的状态一般多播路由器主线不需要懂得某一种多播组里面有多少个主机,而只要懂得自己的子网内尚有无处在某个多播组的主机就可以了只要某一种多播组尚有一台主机,多播路由器就会把数据传播出去,这样,接受方就会通过网卡过滤功能来得到自己想要的数据为了懂得多播组的信息,多播路由器需要定期的发送IGMP查询,IGMP的格式可以看书,各个多播组里面的主机要根据查询来答复自己的状态路由器来决定有儿种多播组,自己要对某一种多播组发送什么样的数据这种查询回应数据报的TTL一般是1,并且就算是出错也不产生ICMP差错(没必要)TCP/JP详解学习笔记
(8)・DNS域名系统前面已经提到了访问一台机器要靠IP地址和MAC地址,其中,MAC地址可以通过ARP协议得到,因此这对顾客是透明的,不过IP地址就不行,无论怎样顾客都需要用一种指定的IP来访问一台计算机,而IP地址又非常不好记,于是就出现了DNS系统系统简介
1.DNSDNS的全称是Domain NameSystem它负责把FQDN(就是以.”分隔结尾的名字)翻译成一种IP最初的DNS系统使用的是一种巨o大的hosts.txt文献(很吃惊,用这个就好使了?),可是一段时间后来,开发这就不得不用数据库来替代hosts.txt文献,最终发展到了目前的分布式数据库从书中的143页可以看到,DNS系统是一种巨大的树,最上方有一种无名树根,下一层是arpa,com,edu,gov,int,mil,us,cn等等,其中arpa,o是域名反解析树的顶端;而com,edu,等域名本来只用在美国(这就是技术特权啊),不过目前几乎全世界通用;而us,cn,等叫做国家域这个树里面的域名并不是统一管理的,网络信息中心(NIS)负责分派顶级域合委派其他制定地区域的授权机构一种独立管理的DNS子树叫做zone,最常见的区域就是二级域名,例如说.com.cn我们还可以把这个二级域名给划提成更小的区域,例如说DNS系统是一种分布式的数据库,当一种数据库发现自己并没有某查询所需要的数据的时候,它将把查询转发出去,而转发的目的地一般是根服务器,根服务器从上至下层层转发查询,直到找到目的为止DNS尚有一种特点就是使用高速缓存,DNS把查询过的数据缓存在某处,以便于下次查询时使用协议
2.DNSDNS报文定义了一种既可以查询也可以响应的报文格式详细格式可以看P145页对各个字段简朴解释如下1最前面的16个bit唯一的标示了问题号码,用于查询端区别自己的查询2紧接着的16个bit又可以做深入的细分,标示了报文的性质和某些细节,例如说是查询报文还是响应报文,需要递归查询与否(一般服务器都支持递归查询,并且不需要任何设置,BIND就是这样)3查问询题背面有查询类型,包括A,NS,CNAME,PTR,HINFO,MX,假如熟悉BIND的话,就懂得在zong的配置文献里面,每一条记录都记载了各自的类型,例如A就是IP地址,NS就是名字服务器4响应报文可以答复多种IP,也就是说,域名可以和多种IP地址对应,并且有诸多CNAME.反向查询3正向查询指的是通过域名得到IP的查询,而反向查询就是通过IP得到域名例如用host命令,host ip就可以得到服务器的域名,hostdomainName就得至lj IP稍微懂得一点数据构造的人都能意识到,在正向查询的域里面做反向查询,其做法只有遍历整个数据集合一■对于DNS来说,那就是遍历整个数据库,这将带来巨大的承担,因此DNS采用了另一种措施,使用另一棵子树来维护IP・〉域名的对应表这个子树的根节点是根addr.arpa,而一种IP例如
192.
168.
11.2)所具有的DNS地址就是addr.arpa(ip倒置)在DNS系统里面,一种反向地址对应一种PTR纪录(对应A纪录),因此反向查询又叫做指针(PTR)查询.其他问题的讨论4服务器高速缓存
4.
1.DNSBIND9默认是作为一种高速缓存服务器,其将所有的查询都转交到根服务器去,然后得到成果并放在当地的缓冲区,以加紧查询速度假如有爱好可以安装一种BIND9来尝试一下而自己定义的zone则可以规定其在缓存中的时间,一般是1天(就是配置文献中的ID)o用还是
4.
2.UDP TCPDNS服务器支持TCP和UDP两种协议的查询方式,并且端口都是53而大多数的查询都是UDP查询的,一般需要TCP查询的有两种状况I、当查询数据多大以至于产生了数据截断(TC标志为1),这时,需要运用TCP的分片能力来进行数据传播(看TCP的有关章节)
2、当主(master)服务器和辅(slave)服务器之间通信,辅服务器要拿到主服务器的zone信息的时候详解学习笔记⑼协议概述TCP/IP-TCP终于看到了TCP协议,这是TCP/IP详解里面最重要也是最精彩的部分,要花大力气来读前面的T都是某些简朴的协议,就不写笔记了,写起来也没啥东西TCP和UDP处在同一层一运送层,不过TCP和UDP最不一样的地方是,TCP提供了一种可靠的数据传播服务,TCP是面向连接的,也就是说,运用TCP通信的两台主机首先要经历一种“拨打电话”的过程,等到通信准备结束才开始传播数据,最终结束通话因此TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文,这一经时重申了诸多遍了把TCP保证可靠性的简朴工作原理摘抄如下•应用数据被分割成TCP认为最适合发送的数据块这和UDP完全不一样,应用程序产生的数据报长度将保持不变由TCP传递给IP的信息单位称为报文段或段(segment)(参见图1-7)在
18.4节我们将看到TCP怎样确定报文段的长度•当TCP发出一种段后,它启动一种定期器,等待目的端确认收到这个报文段假如不能及时收到一种确认,将重发这个报文段在第21章我们将理解TCP协议中自适应的超时及重传方略•当TCP收到发自TCP连接另一端的数据,它将发送一种确认这个确认不是立即发送,一般将推迟几分之一秒,这将在
19.3节讨论•TCP将保持它首部和数据的检查和这是一种端到端的检查和,目的是检测数据在传播过程中的任何变化假如收到段的检查和有差错,TP将丢弃这个报文段和不确认收到此报文段(但愿发端超时并重发)•既然TCP报文段作为IP数据报来传播,而IP数据报的抵达也许会失序,因此TCP报文段的抵达也也许会失序假如必要,TCP将对收到的数据进行重新排序,将收到的数据以对的的次序交给应用层•TCP还能提供流量控制TCP连接的每一方均有固定大小的缓冲空间TCP的接受端只容许另一端发送接受端缓冲区所能接纳的数据这将防止较快主机致使较慢主机的缓冲区溢出从这段话中可以看到,TCP中保持可靠性的方式就是超时重发,这是有道理的,虽然TCP也可以用多种各样的ICMP报文来处理这些,不过这也不是可靠的,最可靠的方式就是只要不得到确认,就重新发送数据报,直到得到对方确实认为止TCP的首部和UDP首部同样,均有发送端口号和接受端口号不过显然,TCP的首部信息要比UDP的多,可以看到,TCP协议提供了发送和确认所需要的所有必要的信息、这在P171-173有详细地简介可以想象一种TCP数据的发送应当是如下的一种过程•双方建立连接•发送方给接受方TCP数据报,然后等待对方确实认TCP数据报,假如没有,就重新发,假如有,就发送下一种数据报•接受方等待发送方的数据报,假如得到数据报并检查无误,就发送ACK(确认)数据报,并等待下一种TCP数据报的到来直到接受到FIN(发送完毕数据报)•中断连接可以想见,为了建立一种TCP连接,系统也许会建立一种新的进程(最差也是一种线程),来进行数据的传送详解学习笔记(连接的建立与中断TCP/IP10ATCPTCP是一种面向连接的协议,因此在连接双方发送数据之前,都需要首先建立一条连接这和前面讲到的协议完全不一样前面讲的所有协议都只是发送数据而已,大多数都不关怀发送的数据是不是送到,UDP尤其明显,从编程的角度来说,UDP编程也要简朴的多一-UDP都不用考虑数据分片书中用telnet登陆退出来解释TCP协议连接的建立和中断的过程,可以看到,TCP连接的建立可以简朴的称为三次握手,而连接的中断则可以叫做四次握手连接的建立L在建立连接的时候,客户端首先向服务器申请打开某一种端口(用SYN段等于1的TCP报文),然后服务器端发回一种ACK报文告知客户端祈求报文收至I」,客户端收到确认报文后来再次发出确认报文确认刚刚服务器端发出确实认报文(绕口么),至此,连接的建立完毕这就叫做三次握手假如打算让双方都做好准备的话,一定要发送三次报文,并且只需要三次报文就可以了可以想见,假如再加上TCP的超时重传机制,那么TCP就完全可以保证一种数据包被送到目的地.结束连接2TCP有一种尤其的概念叫做痴于c/ose,这个概念是说,TCP的连接是全双工(可以同步发送和接受)连接,因此在关闭连接的时候,必须关闭传和送两个方向上的连接客户机给服务器一种FIN为1的TCP报文,然后服务器返回给客户端一种确认ACK报文,并且发送一种FIN报文,当客户机答复ACK报文后(四次握手),连接就结束了.最大报文长度3在建立连接的时候,通信的双方要互相确认对方的最大报文长度(MSS),以便通信一般这个SYN长度是MTU减去固定IP首部和TCP首部长度对于一种以太网,一般可以到达1460字节当然假如对于非当地的IP,这个MSS也许就只有536字节,并且,假如中间的传播网络的MSS更佳的小的话,这个值还会变得更小的状态迁移图
4.TCP书P182页给出了TCP的状态图,这是一种看起来比较复杂的状态迁移图,由于它包括了两个部分一服务器的状态迁移和客户端的状态迁移,假如从某一种角度出发来看这个图,就会清晰许多,这里面的服务器和客户端都不是绝对的,发送数据的就是客户端,接受数据的就是服务器,客户端应用程序的状态迁移图
4.1客户端的状态可以用如下的流程来表达CLOSED-SYN_SENT-ESTABLISHED-FIN_WAIT_1-FIN_WAIT_2-TIME_WAIT-CLOSED以上流程是在程序正常的状况下应当有的流程,从军中的图中可以看到,在羹立连接时,当客户端收到SYN报文的ACK后来,客户端就打开了数据交互地连接而结束连接则一般是客户端积极结束的,客户端结束应用程序后来,需要经历FIN_WAIT_1,FIN_WAIT_2等状态,这些状态的迁移就是前面提到的结束连接的四次握手服务器的状态迁移图42服务器的状态可以用如下的流程来表达CLOSED-LISTEN-SYN收至IJ-ESTABLISHED,CLOSE_WAIT・LAST_ACK・CLOSED在建立连接的时候,服务器端是在第三次握手之后才进入破据交互状态,而关闭连接则是在关闭连接的第二次握手后来(注意不是第四次)而关闭后来还要等待客户端给出最终的ACK包才能进入初始的状态.其他状态迁移
4.3书中的图尚有某些其他的状态迁移,这些状态迁移针对服务器和客户端两方面的总结如下1LISTEN-SYN_SENT,对于这个解释就很简朴了,服务器有时候也要打开连接的嘛2SYN_SENT-SYN收到,服务器和客户端在SYN_SENT状态下假如收到SYN数据报,则都需要发送SYN的ACK数据报并把自己的状态调整到SYN收到状态,准备进入ESTABLISHED。
个人认证
优秀文档
获得点赞 0