目录
什么是IP和TCP?
TCP/IP模型
数据链路层
网络层
IP协议
IP地址
IP协议头
ARP 和RARP 协议
ICMP协议
别针
追踪路线
TCP/UDP
面向消息
面向字节流
什么时候应该使用TCP?
什么时候应该使用UDP?
域名系统
建立和终止TCP 连接
3次握手
为什么我们要握手三次?
挥手四次
为什么我们分手了4次?
为什么我要等待2MSL?
TCP流量控制
TCP拥塞控制
慢启动,避免堵车
慢启动
避免交通拥堵
快速重传和快速恢复
快速重传
快速恢复
什么是 IP 和 TCP?
互联网协议(IP) 是互联网的寻址系统,具有将数据包从源设备传送到目标设备的核心功能。 IP 是建立网络连接的主要方法,构成了互联网的基础。 IP 不负责数据包排序或错误检查。此类功能需要另一个协议(通常是TCP)。
TCP/IP 关系类似于通过电子邮件向某人发送写在拼图上的消息。一旦消息被写下来,谜题就解开了。个别邮件可能会通过不同的邮政路线投递,其中一些可能需要更长时间。如果拼图块通过不同的路线到达,顺序可能会被打乱。互联网协议确保片段到达其目标地址。 TCP 协议可以比作拼图组装器,它在另一端以正确的顺序组装拼图,请求重新传输丢失的拼图,并通知发送者拼图已收到。从发送第一个拼图之前到发送最后一个拼图之后,TCP 一直与发送方保持连接。
IP 是一种无连接协议。也就是说,每个数据单元都被单独寻址并从源设备路由到目的地设备,并且目的地不将确认信息发送回源。这就是传输控制协议(TCP) 等协议发挥作用的地方。 TCP 与IP 结合,维护发送方和目的地之间的连接并保证数据顺序。
例如,当您通过TCP 发送电子邮件时,会建立连接并发生三向握手。首先,源服务器通过向目标服务器发送SYN“初始请求”数据包来启动会话。然后目标服务器通过发送SYN-ACK 数据包同意该过程。最后,源服务器可以向目标服务器发送ACK数据包以确认该过程,然后发送消息内容。电子邮件消息最终被分成多个数据包,每个数据包通过一系列网关发送到互联网,并通过目标设备上的TCP 重新组装成原始内容。电子邮件
目前Internet 上使用的IP 主要版本是Internet 协议版本4 (IPv4)。由于IPv4 可以包含的大小和地址总数的限制,更新的协议诞生了。一种名为IPv6 的新协议提供了更多的地址,并且正在得到采用。
TCP/IP 模型
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 协议
IP协议是TCP/IP协议的核心,所有的TCP、UDP、IMCP、IGMP数据均以IP数据格式发送。需要注意的是,IP 不是可信协议。这意味着IP协议不提供数据未发送后处理的机制。这很可能是上层协议TCP 或UDP 所做的事情。
IP 地址
数据链路层通常通过MAC地址来识别不同的节点。在IP层,我们有一个类似的地址标识符,即IP地址。通过将32 位IP 地址拆分为网络位和地址位,网络地址允许具有相同网络地址的设备被限制在同一范围内。然后路由表就可以简单地维护这个网络地址的方向来找到相应的终端。
A类IP地址:0.0.0.0至127.0.0.0
B 类IP 地址:128.0.0.1 至191.255.0.0
C 类IP 地址:192.168.0.0 至239.255.255.0
IP 协议头
这里只介绍8位TTL字段。该字段指定数据包在被丢弃之前必须经过的路由数。 IP 数据包每次通过路由器时,数据包的TTL 值都会减1。当数据包的TTL变为0时,该数据包将被自动丢弃。该字段的最大值为255。这意味着协议报文经过路由器255次后就会被丢弃。该数字因系统而异,通常为32 或64。
ARP 及 RARP 协议
ARP 是一种从IP 地址获取MAC 地址的协议。 ARP(地址解析)协议是一种解析协议。本质上,主机并不知道这个IP对应于哪台主机的哪个接口。主机首先检查自己的ARP 缓存(即)。IP-MAC地址映射表缓存)。
如果查询到的IP-MAC值对不存在,则主机向网络发送ARP协议广播报文。这个广播包中包含了要查询的IP地址,任何直接接收到这个广播包的主机都会查询自己的IP地址。 IP地址。当主机收到广播数据包并确定其满足条件时,它会创建一个包含其MAC 地址的ARP 数据包,并将其发送给发送ARP 广播的主机。
当广播主机收到ARP 数据包时,它会更新其ARP 缓存(存储IP-MAC 映射表的位置)。发送广播的主机使用新的ARP 缓存数据来为数据包传输准备数据链路层。
RARP 协议的工作原理与此相反,因此我们不再赘述。
ICMP 协议
IP协议并不保证数据一定会送达,所以保证数据送达的工作当然必须由其他模块来完成。重要模块之一是ICMP(互联网控制消息)协议。 ICMP 不是一个高层协议;它是一个IP 层协议。
发送IP 数据包时发生错误。例如主机不可达、路由不可达等,ICMP协议会将错误信息打包并发送给主机。为主机提供处理错误的机会是构建在IP 层之上的协议具有潜在安全性的原因。
Ping
Ping 可能是ICMP 最著名的应用程序,它是TCP/IP 协议的一部分。使用ping命令检查网络是否连通,可以帮助您分析和识别网络故障。
例如:如果您无法访问我们的网站之一。通常,您会ping 该网站。 ping 将回显一些有用的信息。一般信息如下:
ping 这个词来自声纳定位,这个程序就是这样做的,使用ICMP 协议数据包来发现另一台主机是否可达。作为一般规则,您使用类型代码0 的ICMP 发送请求,接收请求的主机使用ICMP 类型代码8 进行响应。
使用ping 程序计算间隔并统计发送的数据包数量。用户可以判断网络的整体状态。您可以看到ping 给我们提供了传输时间和TTL 数据。
Traceroute
Traceroute是发现主机和目的主机之间路由情况的一个重要的也是最有用的工具。
Traceroute的原理很有趣,在收到目的主机的IP后,当第一个经过的路由器收到这个数据包时,首先向目的主机发送一个TTL=1的UDP数据包。当TTL减1,TTL变为0后,路由器丢弃该报文,同时生成ICMP数据报,表示主机不可达。主机收到该数据报后,向目的主机发送TTL=2的UDP数据报,目的主机则刺激第二个路由器向该主机发送ICMP数据报。如此重复多次,直到到达目标主机。这样traceroute就会得到所有路由器的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(域名系统)是Internet 上的分布式数据库,用于将域名和IP 地址相互映射。这使得用户可以更方便地访问互联网,而无需记住机器可以直接读取的IP字符串。通过主机名获得最终与主机名对应的IP地址的过程称为域名解析(或主机名解析)。 DNS 协议运行在UDP 协议之上,使用端口号53。
TCP 连接的建立与终止
三次握手
TCP 是面向连接的。在一方可以向另一方发送数据之前,必须在两方之间建立连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手来初始化的。三向握手的目的是同步双方的序列和确认号,并交换TCP窗口大小信息。
初始握手:建立连接。客户端发送SYN位为1、序列号为x的连接请求报文段,进入SYN_SEND状态,等待服务器的确认。第二次握手:服务器收到SYN报文段。当服务器从客户端接收到SYN报文段时,它必须确认该SYN报文段,并将确认号设置为x + 1(序列号+ 1),并且还必须发送SYN请求信息本身。将SYN 位置设置为1,序列号设置为y 会使服务器将上述所有信息在一个报文段(即SYN + ACK 报文段)中发送给客户端。此时服务器进入SYN_RECV。状态。第三次握手:客户端收到服务器发送的SYN + ACK 报文段。然后它将确认号设置为y +1 并将ACK 段发送到服务器。发送该报文段后,客户端和服务器均处于ESTABLISHED状态并完成TCP 3次握手。
为什么要三次握手?
防止突然向服务器发送无效的连接请求段而导致错误。
一个具体的例子:“无效的连接请求报文段”是指客户端发送的初始连接请求报文段没有丢失,而是长时间保留在特定的网络节点上,导致到达服务器时出现一些延迟。自连接释放以来的时间。原来这是一个早已过期的报文段。然而,当服务器收到这个无效的连接请求报文段时,它错误地认为这是客户端再次发送的一个新的连接请求。因此,它向客户端发送确认消息段并同意建立连接。假设不使用“三次握手”,只要服务器发送确认,就会建立新的连接。由于客户端还没有发出建立连接的请求,因此不会关注服务器的检查,也不会向服务器发送任何数据。但服务器认为新的传输连接已经建立,正在等待客户端发送数据。这样就浪费了服务器的很多资源。采用“三次握手”的方法,可以防止上述现象的发生。例如,在前面的情况下,客户端不会向服务器发送任何确认确认。由于服务器无法收到确认,因此它知道客户端没有请求建立连接。 ”
四次挥手
客户端和服务器通过三次握手建立TCP连接后,数据传输完成后必须终止TCP连接。 TCP 中有四种神秘的断开连接。
第一次拆分:主机1(客户端或服务器)设置序列号并向主机2 发送FIN 段。此时主机1进入FIN_WAIT_1状态。这意味着没有数据要发送到主机1。该请求被发送到主机2。第二次分裂:主机2收到主机1发送的FIN报文段,并向主机1返回ACK报文段。确认号是序列号加1。主机1 进入FIN_WAIT_2 状态,主机2 告诉主机1,“我同意关闭请求”。 第三次断开连接:主机2 向主机1 发送FIN 段,请求其关闭连接,主机2 进入LAST_ACK 状态:第4次断开:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,主机2收到主机1发来的ACK报文段后,如果主机1没有收到响应,则进行此次连接。等待2MSL,就知道服务器端已经成功关闭。
为什么要四次分手?
TCP协议是一种面向连接、可靠、基于字节流的传输层通信协议。 TCP 处于全双工模式。这意味着当主机1发送FIN报文段时,没有数据要发送给主机1,但此时主机1的数据已经全部发送完毕。主机1 仍然可以接收来自主机2 的数据。如果主机2 返回一个ACK 段,我们就已经知道主机1 没有数据要发送,但如果主机2 可以向主机1 发送数据,情况也是如此。当FIN报文段发送出去时,表示主机2没有数据要发送,它告诉主机1自己没有数据要发送,然后双方都愿意中止TCP连接。
为什么要等待 2MSL?
MSL:最大段寿命。数据段在被丢弃之前可以在网络中保留的最长时间。有两个原因。一是保证TCP协议中的一个全双工连接关闭,二是保证该连接的重复数据段从网络中消失。
第一点:如果主机1直接CLOSED,由于IP协议的不可靠性或者其他网络原因,主机2将收不到主机1回复的最后一个ACK。超时后,主机2 继续发送FIN。此时,主机1处于CLOSED状态,因此无法找到与重传的FIN对应的连接。因此,主机1并没有直接进入CLOSED状态,而是在再次收到FIN时,保持TIME_WAIT,检查对方是否收到了ACK,最后优雅地关闭连接。第二点:如果主机1直接CLOSED,然后向主机2发起一个新的连接,则不能保证这个新连接的端口号会与刚刚关闭的连接的端口号不同。即,新连接和旧连接可以具有相同的端口号。一般来说,不会出现该问题,但特殊情况仍然存在。也就是说,假设新连接的端口号与已关闭的旧连接的端口号相同,并且来自先前连接的数据仍在该端口号上。由于新旧连接具有相同的端口号,因此TCP协议假定延迟的数据属于新连接。它与新连接的实际数据包混淆。因此,TCP连接在TIME_WAIT状态下等待的时间必须是MSL的两倍,这可以确保该连接上的所有数据都从网络中擦除。
TCP 流量控制
如果发送方发送数据的速度太快,接收方没有时间接收数据,可能会导致数据丢失。所谓流量控制,就是防止发送方发送过快,并保证接收方及时收到。
滑动窗口机制使您可以轻松控制TCP 连接上的发送方流量。
假设A向B发送数据。连接建立后,B 告诉A,“我的接收窗口是rwnd=400”(这里的rwnd 是指接收窗口)。因此,发送方的发送窗口不能超过接收方指定的接收窗口值。请注意,TCP 的窗口单位是字节,而不是段。假设每个报文段长度为100字节,数据报文段序列号初始设置为1。大写的ACK表示报头中的确认位ACK,小写的ack表示确认字段ack的值。
正如您所看到的,B 执行了三个流量控制。第一次窗口减小到rwnd=300,第二次减小到rwnd=100,最后窗口减小到rwnd=0。这意味着发送方将无法再发送数据。发送方暂停传输的这种状态将持续到主机B 重新发送新的窗口值为止。 B 发送给A 的所有三个消息段的ACK=1。仅当ACK=1 时,确认号字段才有意义。 TCP 为每个连接都有一个持久计时器。每当TCP 连接的一侧收到来自另一侧的零窗口通知时,就会启动持久计时器。一旦持续定时器设定的时间到了,就发送零窗口控制测量消息段(携带1字节数据),该消息段的接收者重置持续定时器。
TCP 拥塞控制
慢开始和拥塞避免
发送方维护一个拥塞窗口cwnd(拥塞窗口)状态变量。拥塞窗口的大小取决于网络拥塞程度并动态变化。发送方使发送窗口与拥塞窗口相同。发送方控制拥塞窗口的原理是,只要网络不发生拥塞,拥塞窗口就会增大,以便可以发送更多的数据包。然而,当网络发生拥塞时,拥塞窗口会减小,以减少注入网络的数据包数量。
慢开始
如果主机开始发送数据并立即将大量数据字节注入网络,则可能会发生网络拥塞,因为此时网络上的负载未知。所以更好的方法是先检测出来。即发送窗口从小值逐渐增大到大值。即,将拥塞窗口值从小值逐渐增大到大值。通常,当开始发送分段时,拥塞窗口cwnd首先被设置为最大分段MSS的值。收到新段的确认后,拥塞窗口最多增加1 个MSS 值。使用此方法逐渐增加发送方的拥塞窗口cwnd 可以实现更合理的数据包注入网络的速率。
每轮传输后,拥塞窗口cwnd 加倍。发送一轮所需的时间实际上是往返时间RTT。然而,在“发送回合”中,连续发送拥塞窗口cwnd允许的所有段并接收最后发送的字节的确认更为重要。注意,慢启动中的“慢”并不意味着cwnd的增长速度慢;当TCP开始发送报文段时,它被设置为cwnd=1,并且发送方最初只发送一个报文段(目的是测试网络。为了防止拥塞窗口cwnd变得太大而导致网络拥塞,慢启动阈值ssthresh状态变量也必须设置。慢启动阈值ssthresh的用法如下:
对于cwnd ssthresh,使用上述的慢启动算法。对于cwnd ssthresh,停止使用慢启动算法,改用拥塞避免算法。如果cwnd=ssthresh,则可以使用慢启动算法或拥塞控制避免算法。
拥塞避免
慢慢增加拥塞窗口cwnd。也就是说,每次RTT 过去时,发送方的拥塞窗口cwnd 不会加倍,而是加一。这样,拥塞窗口cwnd按照线性规律缓慢增大。这比慢启动算法中拥塞窗口增加的速率要慢得多。
无论是慢启动阶段还是拥塞避免阶段,只要发送方确定网络拥塞(基于没有收到确认消息),就必须设置慢启动阈值ssthresh为发送方窗口值的一半。到。当发生拥塞时(但不止一次)。接下来,将拥塞窗口cwnd 重置为1 并运行慢启动算法。目的是快速减少从主机发送到网络的数据包数量,使拥塞的路由器有足够的时间处理队列中积压的数据包。上面用具体数字来解释拥塞控制过程,如下图所示。现在发送窗口的大小与拥塞窗口的大小相同。
快重传和快恢复
快重传
快速重传算法首先允许接收方在收到乱序消息段后立即发送,而不是等待发送(以快速通知发送方该消息段尚未被接收方收到重复确认)。必须发送。检查数据。
接收方收到M1和M2后,分别发送确认消息。现在假设接收方收到M4,但没有收到M3。很明显,接收方无法响应M4,因为它是接收到的乱序段。遵循可靠传输的原则,接收方不能做任何事情,也不能及时向M2发送确认。然而,根据快速重传算法,接收方必须及时重复发送M2确认。这使得发送方能够尽早知道段M3 尚未到达接收方。发送方然后发送M5和M6。接收方收到这两条消息后,也再次发送M2重复确认。这样,发送方总共收到了接收方对M2 的四次确认,其中最后3 次是重复确认。快速重传算法是这样的:发送方只要连续收到3个确认,就会发送对方还没有收到的报文段M3,直到M3设定的重传定时器超时,它还规定必须立即重传,无需等待。快速重传可将整体网络吞吐量提高约20%,因为发送方会尽快重传未确认的消息段。
快恢复
快速重传还可以与快速恢复算法结合使用。这个过程中有两点很重要:
当发送方收到三个连续的重复确认时,它会运行“乘减”算法并将慢启动阈值ssthresh 减半。与慢启动的区别在于,慢启动算法当前并未运行(即拥塞窗口cwnd当前未设置为1),但慢启动阈值ssthresh设置为减半后cwnd值会发生变化。的价值。然后启动拥塞避免算法(“加性增加”)并且拥塞窗口缓慢且线性增加。
#上面的IP和TCP是什么?相关内容来源网络仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92257.html