TCPIP协议簇中需要必知必会的十大问题

更新时间:2021-01-01 17:23  
 

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

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

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

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

  数据链路层负责将0、1序列划分为数据帧从一个节点传输到临近的另一个节点,这些节点是通过MAC来唯一标识的(MAC,物理地址,一个主机会有一个MAC地址)。

  封装成帧: 把网络层数据报加头和尾,封装成帧,帧头中包括源MAC地址和目的MAC地址。

  可靠传输: 在出错率很低的链路上很少用,但是无线链路WLAN会保证可靠传输。

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

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

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

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

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

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

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

  MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。

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

  当传送IP数据包发生错误。比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这

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

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

  ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的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就可以把它划分短一些再传送。

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

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

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

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

  第一次握手: 建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence

  Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;

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

  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连接。

  第一点:如果主机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的窗口单位是字节,不是报文段。假设每一个报文段为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字节的数据),那么收到这个报文段的一方就重新设置持续计时器。

  )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。

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

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

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

  设置为一个最大报文段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的确认。

  发送方及早知道报文段M3没有到达接收方。发送方接着发送了M5和M6。接收方收到这两个报文后,也还要再次发出对M2的重复确认。这样,发送方共收到了

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

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

  当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。

  与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为 慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

  文章出处:【微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

  文章出处:【微信号:HXSLH1010101010,微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

  2020年国内的5G爆发了,大家换手机了没?目前四大运营商都在积极发展5G,但普通消费者升级5G还需....

  12月21日,中国联通2021年工作会议在北京召开。工业和信息化部副部长刘烈宏出席会议并讲话,工信部....

  问:为什么要推进能源、铁路、电信、公用事业等行业竞争性环节市场化改革? 答:《建议》提出:“推进能源....

  对于动态相位调整,IP核要求上电时进行相位校正,通过置位DELAY_DATA_CAL信号来进行校正,....

  为贯彻落实党的十九届五中全会精神,加快第五代移动通信建设,保障5G发展频率资源使用,12月22日,工....

  今日A股开盘, 5G板块一路走强。截至收盘,移为通信、广和通、中兴通讯等多只个股涨停,宜通世纪、东方....

  本次研讨会议由5GDNA工业互联网组副组长、华为云核心网5G产业发展战略高级总监黄蔚蓝博士主持。中国....

  商用一年多以来,中国已建成全球最大规模的5G网络。“我国已累计建成5G基站71.8万个,推动共建共享....

  目前我国经济已进入中速增长平台,在国际环境发生重大变化的背景下,要在“十四五”期间持续保持经济平....

  今日,通信板块全面爆发,通信指数(申万)暴涨5.23%。移为通信强势封板20%,广哈通信、宜通世纪、....

  社会在对“疫情之惨痛”发出唏嘘之时,对人工智能特别是智能音在不久前举行的2021中国信通院ICT+深....

  对于6G技术,美国、日本等均是虎视眈眈,美国希望能重回主导地位,确立北美领导力;日本厂商在通信基站等....

  虽然5G到来仅有一年多的时间,但5G的潮流已经席卷全球。仅在我国,今年来已经新增58万个5G基站,推....

  最近,中国三大运营商都纷纷公布了5G基站建设方面的数量,而且都取得了比较大的突破。中国5G手机销量也....

  2020年2月13日,小米10发布,售价3999元起。结果一年没过,12月28日,小米11发布,售价....

  临近年关,近日各大运营商纷纷开始为明年的5G建设蓄力。中国联通、中国电信启动5G SA增补工程无线网....

  2020年12月25日,爱立信顺利完成了IMT-2020(5G)推进组5G端到端网络切片技术试验的异....

  2020年是“十三五”规划的收官之年,也是脱贫攻坚之年。“十三五”期间,站在创新驱动发展战略和“互联....

  2020年是中国广播电视网络有限公司(以下简称中国广电)是具有里程碑意义的一年。这一年,中国广电一步....

  第一类,高水平单位。以BAT这类巨型互联网企业、五大行、头部股份制银行、华为等用户为代表,他们对安全....

  近日,中国移动等运营商公布11月份主要运营数据,5G业务成为运营数据中亮点。其中,中国移动打破以往的....

  Imagination Technologies CEO: IP授权助力半导体新品上市 汽车和数据中心双轮驱动半导体应用拓展

  Imagination如何看待2020年受到疫情影响下的半导体市场发展?2021年半导体市场有哪些新....

  在5G建设与商用进程中,我国无疑是处于全球第一梯队的。进入2020年以来,我国在取得疫情防控攻坚战阶....

  回顾2020年,展望2021年,GSMA大中华区总裁斯寒(Sihan Chen)通过GSMA 智库最....

  因此,未来网络要适应与实体经济深度融合,每个行业、企业、用户,甚至未来每个应用都需要定制化网络,运营....

  中国所掌握的通讯技术在目前已经是较为成熟的,尽管是在美国多次阻拦之下,中国通讯技术的发展还是势不可挡....

  随着教育信息化的加速,高校校园网给教学方式、教育管理方式、师生的生活方式都带来了巨大的变化,这不仅提....

  有的时候需要查找一些官网的例程进行学习和参考,但是总感觉无从下手,今天就教大家怎么利用官网和Viva....

  2020年是全面建成小康社会和“十三五”规划收官之年,是5G大规模商用之年,也是中国铁塔转型升级、“....

  CCSA于2020年12月25日召开了“下一代光传送网产业与技术标准推进委员会(TC618)”成立大....

  受新冠肺炎疫情的影响,2020年全球经济增长放缓,多数行业受到重创。但是,阴霾之中有亮色,ICT行业....

  日前,“2020全球网络技术大会”上公布的一组数据显示,截至2020年11月,我国IPv6活跃用户数....

  据报道,根据举报,市场监管总局依法对阿里巴巴集团控股有限公司实施“二选一”等涉嫌垄断行为立案调查。

  其实不想用这个题目的,只因为TCP相关的东西比较吸引人的眼球,这篇文章的主题还是eBPF,而不是TC....

  4G网络建设从2015年开始逐步扩展到乡镇农村地区,为响应国家脱贫攻坚号召,近几年通过电信普遍服务和....

  据报道,项目将包含11个欧洲国家的35个以上的私人和集团运营的机场。项目由保加利亚的大型货运无人机研....

  路由器的基本功能 这里的路由器跟我们家庭用的路由器功能相似,但是容量不在一个数量级,家庭路由器的....

  由工业和信息化部指导,广州市政府、广东省工业和信息化厅、广东省通信管理局等多家单位联合主办,中国联通....

  随着2020年这一不平凡的一年即将接近尾声,电信行业也期待着构建一个连接无处不在、无人不享的真正互联....

  在24日举行的国新办新闻发布会上,工业和信息化部新闻发言人表示,2020年我国在5G建设方面可以说是....

  组织需要对常见存储网络协议(如iSCSI、FC、FCoE、NFS、SMB/CIFS、HTTP和NVM....

  因反 5G 的阴谋论,英国159 个基站遭到攻击,宕机总计高达 17 万小时

  北京时间 12 月 25 日午间消息 英国通信管理局(Ofcom)透露,到 2020 年为止,由于反....

  作为欧洲四大经济体之一,意大利对华为的态度一直备受关注(另外三个是英国、德国、法国),近日,在是否使....

  5G无线技术在制造设施方面具有广阔的前景,主要是因为它的速度和低延迟,因此一些早期采用者正在购买这项....

  2020年是不平凡的一年,疫情给整个社会留下了不可磨灭的印记;是“危”“机”之年,全球经济不确定之危....

  2009 年 1 月 3 日,第一个序号为 0 的创世区块诞生。几天后,序号为 1 的区块诞生,....

  运营商对 iPhone 12“信号门”测试:掉线 日消息 此前外媒报道,部分用户苹果 iPhone 12/Pro LTE 和 5G 网....

  1、2020年,中国已建成全球最大5G网络。中国电信和中国联通更是挑战不可能完成的任务,在没有任何借....

  经过20余年的发展和商业实践,紫光股份旗下的新华三集团已成为网络设备设计和制造的领导厂商,新华三40....

  在南京举行的“2020全球网络技术大会”(GNTC2020)的All IPv6专场峰会上,推进IPv....

  【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】MODBUS TCP

  在工业场景,modbus还是比较常用的通信协议。 modbus协议可以去下载。 在传统串口模式中,modbus都是分主机和从...

  网络有问题,首先我们会进行ping命令,所谓网络丢包是我们在使用ping命令(检测某个系统能否正常运行)对目的站进行询问时,...

  深度残差收缩网络是深度残差网络的一种新的升级版本,其实是深度残差网络、注意力机制(参照Squeeze-and-Excitation Ne...

  IGT-DSER智能网关模块,支持各种PLC、智能仪表、远程IO与数据库之间双向通讯,既可以读取设备的数据上报到MySQL...

  HarmonyOS物联网编程第四讲——HarmonyOS网络编程 本讲包含以下内容,具体代码、课件、代码实验指南请下载附件: ...

  【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】TCP/IP编程简述和TCP客户端demo

  请问你们的407+LWIP+TCP+无操作系统测试的发送速度是多少? ...

  TCP/IP 是用于因特网 (Internet) 的通信协议。 计算机通信协议(Computer Communication Protocol)计算机通信协议是...

  在程序框图里面我已经使用WHILE循环在一直读数据,然后又使用事件结构想实现发送数据的功能,但是现在点击以及布尔之后就会...