TCP/IP基础

      最后更新:2022-07-20 20:09:42 手机定位技术交流文章

      没有牢固的基础就无法彻底的分析出系统和网络的瓶颈。

      图片

      TCP/IP的十个问题

      TCP/IP的十个问题

      TCP/IP模型

      TCP/IP协议模型(Transmission Control Protocol/Internet Protocol)包含一系列网络协议,构成了互联网的基础,是互联网的核心协议。

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

      图片

      TCP/IP协议家族按层级从头到下,层层包装。最上面的是应用层,这里面有http,菲特普,等一下我们熟知的协议。第二层是传输层,著名的TCP和UDP协议都在这一级别。第三层是网络层,IP协议就在这里,它负责将数据添加到IP地址和其他数据来确定传输目标。第四层是数据链层,该层将一个以太网协议头到传输的数据,并进行CRC编码,准备最后的数据传输。

      图片上面的图清楚地显示了每个层在TCP/IP协议中的作用,TCP/IP协议通信的过程与数据堆栈和堆栈的过程相符。入栈的过程,数据传输器的每一层都保持在顶部和底部,增加一些传输信息,确保它能运到目的地.出栈的过程,数据接收器的每个层继续拆除头部和尾部,接收数据的最后传输。

      图片

      上面的图片以HTTP协议为例.

      二、数据链路层

      物理层负责0、1比特电流与物理装置的电压水平和光闪之间的交换。
      数据链层负责将0,1序列分成从一个节点到最近的节点传输的数据帧,这些数据帧由MAC(MAC,物理地址,一个主要机会有MAC地址)单独识别。

      图片

      • 框架封装: 包含源 MAC 地址和目标 MAC 地址的网络层数据的顶部和底部封装.

      • 透明传输:零位填充,转换字符。

      • 可靠的传输:它很少在非常低误差网络上使用,但无线网络Wi-Fi确保可靠的传输。

      • 错误检测(CRC):接收器检测了一个错误,如果发现一个错误,则将帧丢弃。

      三、网络层

      1.IP协议

      IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,所有IGMP数据都以IP数据格式传输.要注意的是,IP不是可靠的协议,这是说,IP协议不提供数据未经传输后处理的机制。这被认为是一个高级协议: TCP或UDP做。

      1.1 IP地址

      在数据链层中,我们通常通过MAC地址识别不同的节点,在IP层中,我们也有类似的地址标识符,即IP地址。

      32位IP地址分为网络和地址,这可以减少路由器中的路由表记录的数量,有了网络地址,您可以限制同一个网络地址的终端到同一个范围,因此路由表只需要维护一个网络地址的方向,你可以找到相应的终端。

      1.2 IP协议头

      图片

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

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

      2.ARP和RARP协议

      ARP是基于IP地址获取MAC地址的协议。

      ARP(Address Analysis)协议是一种分析协议,通过该协议,主机不知道该主机的哪个端口与IP相符。当主机发送IP包时,它首先检查自己的ARP缓存(IP-
      MAC地址存储在相应的表中。

      如果查询的IP-MAC值不存在,然后主机将ARP协议的广播包发送到网络上,在这个广播包中有一个IP地址要查询,所有直接接收包的主机将询问他们的IP地址,如果接收广播包的东道主发现它符合条件,然后准备一个包含您的MAC地址的ARP包,以便向主机发送ARP广播。

      在接收ARP包后,广播主机将更新自己的ARP缓存(即ARP包)。
      MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。

      RARP协议的工作与此相反,不应该夸大。

      3. ICMP协议

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

      例如, Host 不能访问, Router 不能访问等, ICMP协议将将错误信息包起来,然后发送回 Host 给 Host 提供处理错误的机会
      这就是为什么在IP层之上构建协议是安全的。

      四、ping

      可以说 Ping 是 ICMP 的最著名的应用程序,是 TCP / IP 协议的一部分。 "ping" 命令可以用于检查网络是否连接,并有助于分析和确定网络故障。

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

      图片

      这个单词 ping 来自声纳的定位,同样的是该程序的,它使用ICMP协议包来检测另一个主机是否可访问。 原则是发送一个ICMP的类型代码0

      请求的主机使用一个ICMP响应,类型代码为8。

      ping程序计算了间隔时间和发送的包数,用户可以判断网络的总体情况。 正如我们所看到的, ping提供传输时间和TTL数据。

      5號軌道

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

      Traceroute的原理是非常非常的有意思,在接收目标主机IP后,首先向目标主机发送TTL=1 UDP包,第一个路由器通过了这个包后,自动降低TTL到1,在TTL变为0之后,路由器丢弃了这个包,并同时产生
      无法访问的ICMP数据被报告给主机。主机接收此数据消息,然后向目标主机发送TTL=2 UDP数据消息,然后刺激第二个路由器向主机发送ICMP数据消息。这一直持续到它到达目的地为止。这样,跟踪路径获取所有路由器IP.

      图片

      六、TCP/UDP

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

      图片

      面向报文

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

      面向字节流

      在线程导向的应用程序中,虽然应用程序与TCP之间的交互是一次数据块(大小不同),但TCP将应用程序视作一系列不结构的线程。 TCP有一个缓冲器,所以当数据块的应用程序传输太长时,TCP可以将其缩短并再次传输。

      关于交通堵塞控制, 交通堵塞控制, 是交通堵塞控制的重点.

      TCP和UDP协议的一些应用

      图片

      什么时候应该使用TCP?

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

      什么时候应该使用UDP?

      当网络通信质量不高时,需要网络通信速度尽可能快,则可以使用UDP。

      七、DNS

      DNS(Domain Name
      System,域名系统),互联网是一个分布式数据库,它映射域名和IP地址。使用户更方便地上网,并且别忘了记住机器可以直接读取的IP字符串。通过主机名,最后,获取与主机名称相符的IP地址的过程称为域名分析(或主机名称分析)。DNS协议运行在UDP协议上,使用端口号53。

      建立及终止TCP连接

      1.三次握手

      TCP是面向连接的,在向另一个方向发送数据之前,首先,双方必须建立联系。在TCP/IP协议中,TCP提供可靠的连接服务,连接由三个握手启动。三个握手的目的是为了同步和交换连接双方的序列和确认号码
      TCP窗口大小信息。

      图片

      第一个握手:建立连接。 用户发送连接请求消息,将SYN定位为1,序列
      数为x,然后客户端输入SYN_SEND状态并等待服务器的确认;

      第二次握手: 服务器接收SYN消息.服务器从客户端接收SYN消息,必须核查本SYN声明段落,设置Acknowledgment Number为x+1(Sequence Number+1);同时,你必须亲自发送SYN请求信息,将SYN位置为1,Sequence
      数值是y;服务器端将所有上述信息置入消息字段(即SYN+ACK消息字段)并同时发送给客户端,在此点,服务器输入SYN_RECV状态;

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

      为什么要三次握手?

      为了防止一个无效的连接请求消息再次被发送到服务端,发生了一个错误。

      具体例子:“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,在网络的某个地方,这是很长时间的延迟。连接释放后延迟到一定时间,然后到达服务器。本来这是一个早已失效的报文段。然而,当服务器收到这个无效的连接请求声明后,客户端再次发送的新连接请求被误认为是错误的.然后向客户发送确认消息,同意建立连接。假设你不使用“三手”只要服务器发送确认,新的连接就建立了。由于客户端现在没有发出创建连接的请求,所以不要忽略服务器的确认,不会向服务器发送任何数据。但是服务器认为已经建立了一个新的传输连接,然后等待客户发送数据.这样,许多服务器资源被浪费。一种“三手”的方法可以防止上述现象。例如刚才那种情况,客户端不会向服务器的确认发送确认。服务器未能收到确认,你会知道客户没有请求联系。

      2.四次挥手

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

      图片

      第一次分手:主机1(可以是客户端,也可以是服务器端),设置Sequence
      编号发送 FIN消息到2号主机;1号主机此时输入 FIN_WAIT_1状态;这意味着1号主机没有发送给2号主机的数据;

      第二次分离:2号主机收到1号主机发送的 FIN消息,返回一个ACK消息给主机,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我同意你结束的请求;

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

      第四次分手:主机1收到主机2发送的FIN报文段,向2号主机发送ACK消息,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL,但仍未收到答复。证明服务器端正常关闭,那好,主机1也可以关闭。

      为什么要四次分手?

      TCP协议是一种面向连接、可靠和基于字节流的传输层通信协议。TCP是一个完全双重模式,这就意味着,当主机1发布财务报表时,这只是意味着1号主机没有发送数据,主机1告诉主机2,其 所有 数据 都 已 发 出去 ; 但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表明它已经知道1号主机没有发送数据,但是2号主机仍然可以向1号主机发送数据;当2号主机也发送 FIN消息时,这表明2号主机没有发送数据,就会告诉主机1,我没有送任何数据。之后, 他们每个人都会享受中断这个TCP连接.

      为什么等2MSL?

      MSL:消息段的最大寿命,在任何消息段被丢弃之前是网络中最长的。
      原因有二:

      • 确保TCP协议的全双plex连接可以可靠地关闭

      • 确保此连接的重复数据段从网络中消失

      第一点:如果主机1是直接关闭的,因此,由于IP协议或其他网络原因的不可靠,因此,2号主机没有收到1号主机对ACK的最后响应。然后2号主机在加班后会继续发送 FIN,此时,由于主机1已关闭,无法找到与重复 FIN 相符的连接.所以,主机1不是直接关闭的,相反,保持时间等待,当你再次得到芬时,可以保证另一方收到ACK,最后正确关闭连接。

      第二点:如果主机1是直接关闭的,然后再启动一个新的连接到主机2,我们不能保证这个新连接与新关闭的连接的端口号码不同。这意味着新的连接可能具有与旧连接相同的端口号码。通常没有问题。但有一个特殊情况:假设新的连接与已关闭的旧连接端口号码相同,如果先前的连接数据的一部分仍留在网络中,这些延迟数据只在建立一个新的连接后到达主机2。因为新连接与旧连接的端口号码相同,TCP协议认为延迟的数据属于新连接,这将数据包与真正的新的连接混淆。因此TCP连接必须在 TIME_WAIT状态下等待两次MSL,这确保从这个连接中的所有数据从网络中消失。

      九、TCP流量控制

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

      利用滑窗机制,便于实现发送者在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字节),然后,收到这个声明的一方重新设置连续计时器。

      十、TCP拥塞控制

      1.慢启动,避免交通堵塞

      发送方维持一个拥塞窗口 cwnd ( congestion window
      状态变量.拥挤窗口的大小取决于网络中的拥挤程度,并且正在动态变化。 传感器使发送窗口看起来像拥挤的窗口。

      发送者通过以下原则控制拥挤窗口: 在网络上没有拥挤时,拥挤窗口会增加,以便发送更多的子组;但在网络上拥挤时,拥挤窗口会有所减少,从而减少进入网络的子组的数量。

      慢开始算法:

      当主机开始发送数据时,如果大量数据立即被注入到网络中,可能造成网络拥塞,因为网络的负载状况现在不明确。
      因此,较好的方法是 先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。

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

      图片

      拥挤窗口的cwnd是每一个传输周期的倍数。 传输周期的时间实际上是返回和返回RTT的时间。

      不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。

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

      为了防止Cwnd的拥挤窗口过度增长导致网络拥挤,必须设置慢启动 ssthresh状态变量。 使用慢启动阈值 ssthresh如下:

      • 当 cwnd < ssthresh 时,使用上述的慢开始算法。

      • 当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。

      • 当cwnd = ssthresh时,可以使用慢启动算法和堵塞控制回避算法。

      拥塞避免

      让拥挤窗口的cwnd慢慢增长,即每当RTT经过一个环绕时间,它会增加发送者的拥挤窗口的cwnd1,而不是倍增
      因此,拥挤窗口 cwnd按照线性规则缓慢增长,比慢启动算法的拥挤窗口增长速度慢得多。

      图片

      无论在慢启动阶段还是避免拥堵阶段,只要发送者认为网络要拥堵(基于缺乏确认),设置慢启动 Gateway ssthresh在网络拥堵时发送
      一半的窗口值(但不低于2),然后重定克隆窗口 cwnd 为 1 并执行慢启动算法。

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

      下面的图示了具体的数值的拥挤控制过程。 发送窗口的大小与拥挤窗口相同。

      图片

      2.快重传和快恢复

      快重传

      快速重传输算法首先要求接收机在每次未排序消息后立即发送一次重复确认(以便发送者知道消息尚未到达另一个消息),而不是等待数据被发送给接收机。

      图片

      在接收M1和M2后,接收者分别发出确认。 现在假设接收者没有接收M3,而是接收M4。

      当然,接收机不能确认M4,因为M4是接收到的不一致消息段。 根据可靠传输的原则,接收机不能做任何事情,而且可以及时向M2发送确认。

      然而,根据快速再传输算法,接收机应及时向M2发送重复确认,允许
      发送方及早期知悉消息M3节未到达接收方。 发送方随后发送M5和M6。 在收到两份通知后,接收方还应发出M2的重复确认。 这样,发送方已收到全部通知
      M2的接收器的四个确认,其中三个是重复的确认。

      快速重发算法还规定发送者应立即重发另一方未收到的M3消息段,当他收到三次重复确认时,而不继续等待M3设置的重发时间表到期。

      由于发送器在最早的时机重新传输未确定的部分消息,快速的重新传输可以增加网络吞吐率约20%。

      快恢复

      快速恢复算法也与快速再传输相结合,该过程有两个主要点:

      • 当发件人连续收到三次确认时,将乘数减少算法应用以重新降低慢启动阈值的一半。

      • 与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为 慢开始门限ssthresh减半后的数值,然后开始执行阻塞回避算法("增加以增加"),让拥挤窗口生长线性缓慢.

      图片

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/30176.html

          热门文章

          文章分类