如何理解tcp/ip三次握手的含义及工作过程,tcpip三次握手原理

文:涤生_Woo下周就开始和大家成体系的讲hadoop了,里面的每一个模块的技术细节我都会涉及到,希

文:狄升_吴

从下周开始,我们将系统地带您了解Hadoop 并解释每个模块的技术细节。我希望你喜欢它。当然,您也可以对您喜欢的技术进行评论和留言。我也希望我们能够共同进步。

今天是星期五。我们聊点别的吧。首先,让我们看一下照片。

c816fbec2ea54a71a7aba85513d9e345~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=qDpvlHTYU8wmdc6QxlaURjshYJk%3D阅读这篇带有1张照片的文章

一、 计算机网络体系结构分层

84c6d3cd9c8545518a6e38e1ea4bdd8c~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=4JytlBq4GWjiZH9IreFGHTDmWxM%3D 计算机网络体系结构分层

5f15df1d8c2f4c8cad9bc20261c24a53~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=iWb2XivfupqfdvOwoMnDIs4ncbs%3D 计算机网络体系结构的分层

不难看出,TCP/IP 和OSI 在其分层模块上略有不同。 OSI参考模型侧重于“通信协议需要什么功能”,而TCP/IP侧重于“应该开发什么样的程序来在计算机上实现该协议”我把

二、 TCP/IP 基础

1. TCP/IP的具体含义

从字面意义上讲,有些人可能会认为TCP/IP 指的是TCP 和IP 协议。在现实生活中,有时会提到这两个协议。然而,这通常只是使用IP 进行通信时必须使用的一组协议的通用术语。具体来说,IP或ICMP、TCP或UDP、TELNET或FTP、HTTP都是TCP/IP协议。它们与TCP或IP密切相关,是互联网的重要组成部分。 TCP/IP 一词泛指这些协议,因此TCP/IP 有时也称为Internet 协议簇。

通过互联网进行通信时,需要相应的网络协议。 TCP/IP 是最初开发用于Internet 的协议系列。因此,Internet的协议是TCP/IP,TCP/IP就是Internet的协议。

c6528a1a7d764812afa584fec10d60c1~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=MBSAOMA9Mvhbinwx2s8BQCi4E%2Bw%3D 互联网协议组

2. 数据包

包、帧、数据包、段、消息

上述所有五个术语都用于表示数据单位,并且可以大致区分如下:

数据包可以说是一个万能的术语。帧用于表示数据链路层数据包的一个单元。数据包代表网络层数据包的一个单元,例如IP段或UDP段。数据流;指消息应用协议中的数据单元。每层都会向发送的数据添加一个标头。标头包含该层所需的信息,例如目标地址和协议相关信息。通常,提供给协议的信息是数据包头,发送的内容是数据。从下一层的角度来看,所有从更高层接收到的数据包都被视为本层的数据。

d1d5720c658a4479a7894bdaa072a05b~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=ON3A5g8Eov1KHfELaZDjFskD5oE%3D 数据包标头

网络内发送的数据包由两部分组成。一个是协议使用的标头,另一个是高层发送的数据。报头的结构由协议规范详细定义。数据包的标头清楚地表明协议应如何读取数据。另一方面,标头告诉您有关协议和正在处理的数据的必要信息。包装的第一部分就像合同的正面。

3. 数据处理流程

在下图中,作为示例,用户a 正在向用户b 发送电子邮件。

97371a5927844849a7119ab0ddcee8d5~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=g%2FHf3ClYTUL7L0wYNuy07UTos1o%3D 数据处理过程

申请处理

首先,应用程序执行编码过程。这些编码对应的功能是在转换编码后管理何时建立通信连接以及何时发送数据。对应于OSI 层功能的会话。 TCP模块处理

TCP 根据应用程序的指令建立连接、发送数据和断开连接。 TCP 提供从应用层发送到对等点的数据的可靠传输。要实现此功能,必须在应用层数据前端添加TCP 标头。 IP模块处理

仅根据目标的端口号来识别通信是不够的。

a1e68263714a4b5d8a8e8669d9decbb7~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=6O36jm2LSyiLvVN8jbdddt3tft4%3D 3fadfcf257a84b4f994eac669144a7eb~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=pgyJOwoxdt1r4u6L6o0Ly%2FGrLqQ%3D 通过端口号、IP 地址和协议号进行通信识别

、中的通信是在两台计算机上进行的。目标端口号相同,均为80。这可以根据源端口号来区分。

和的目的端口号和源端口号完全相同,但源IP地址不同。

另外,如果IP地址和端口号相同,还可以通过协议号(TCP和UDP)来区分。

1.3 确定端口号

标准建立的端口号:此方法也称为静态方法。这意味着每个应用程序都分配有一个端口号。但是,这并不意味着您可以使用任何端口号。例如,常用的应用协议如HTTP、FTP、TELNET等都有固定的端口号。这些端口号称为众所周知的端口号,范围从0 到1023。除了众所周知的端口号之外,还有几个官方注册的端口号,范围从1024到49151。但是,这些端口号可用于任何通信目的。定时分配方法:服务器必须确定侦听的端口号,但接收服务的客户端不必确定端口号。使用此方法,客户端应用程序不必自己设置端口号,将所有分配留给操作系统。动态分配的端口号范围为49152 至65535。 1.4 端口号和协议

端口号由所使用的传输层协议决定。因此,不同的传输层协议可以使用相同的端口号。此外,这些已知的端口号与传输层协议无关。只要端口一致,就会将同一个应用程序分配给进程。 2.UDP

UDP不提供复杂的控制机制,使用IP提供无连接的通信服务。然后,当应用程序发送的数据被接收时,它被直接发送到网络。当网络发生拥塞时,UDP无法做控制流量之类的事情来避免网络拥塞。另外,如果数据包在传输过程中丢失,UDP 不负责重传。如果数据包无序到达,则没有纠正功能。如果您需要像上面那样的细粒度控制,则应该使用UDP 在应用程序端进行。 UDP常用于以下方面: 1. 总数据包数量较少的通信(DNS、SNMP 等) 2. 视频、音频等多媒体通信(即时消息) 3. 仅限于特定网络的应用程序通信。 LAN等。 4.广播通信(广播、组播)。 3.TCP协议

TCP 和UDP 之间的区别非常重要。完全实现数据传输过程中的各种控制功能,还可以控制丢包重传,控制乱序数据包的顺序。这些都不能与UDP 一起使用。此外,TCP 是一种面向连接的协议,仅在存在通信对等方时才发送数据,从而减少了通信流量的浪费。这些TCP 机制即使在IP 等无连接网络上也能实现高度可靠的通信(主要通过校验和、序列号、确认、重传控制、连接管理和窗口控制等机制实现)。 3.1 三方握手(分)

TCP 提供面向连接的通信传输。面向连接是指在数据通信开始之前,两端都做好准备工作。所谓三次握手是指建立TCP连接时,客户端和服务器必须总共发送3次数据包来确认连接的建立。在socket编程中,这个过程是由客户端建立连接触发的。我们来看一下三方握手流程图。

8ff64468a42644cd9b8a80dfbc165083~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=P9UuD6wUc8B%2Fs0FUGmrHz%2FvI5Gg%3D 三向握手

初次握手:客户端将标志SYN设置为1,随机生成值seq=J,向服务器发送数据包,进入SYN_SENT状态,等待服务器确认。第二次握手:服务器收到数据包后,从标志位SYN=1开始识别出客户端正在请求建立连接,将标志位SYN和ACK都设置为1(ack=J+1)并随机生成。当seq=K时,服务器进入SYN_RCVD状态,向客户端发送数据包以确认连接请求。第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1。如果正确,则将标志位ACK设置为1(ack=K+1),并将数据包发送到服务器端。服务器检查ack是否为K+1并且ACK是否为1。如果正确,则客户端和服务器处于ESTABLISHED 状态,可以开始发送数据。 3.2 挥手4次(分)

TCP 连接通过挥手四次来终止。这意味着当TCP连接断开时,客户端和服务器必须总共发送4个数据包来确认断开。在socket编程中,这个过程是由客户端或服务器执行close来触发的。 TCP 连接是全双工的,因此每个方向必须单独关闭。这个原理只是指一方完成数据传输任务后,发送FIN来终止该方向的连接。数据朝这个方向流动。也就是说,不再接收数据,但可以在该TCP 连接上发送数据,直到FIN 也沿该方向发送为止。先关闭的一方执行主动关闭,另一方执行被动关闭。我们来看一下四波流程图。

ddfeced6937d4e24a4a1c19e5e6a86c9~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=TBgzVWI2bj6wY99jooI5HB%2Bwyo8%3D 摇动4次

断开连接的一方可以是客户端,也可以是服务器。第一次挥手:客户端发送FIN=M,完成客户端向服务器发送数据,客户端进入FIN_WAIT_1状态。这意味着“客户端没有数据要发送”,但如果服务器有数据尚未发送,则无需急于关闭连接,可以继续发送数据。第二次挥手:服务器收到FIN后,首先发送ack=M+1,告诉客户端已经收到请求,但还没有准备好。请继续等待消息。此时客户端进入FIN_WAIT_2状态,继续等待服务器端的FIN报文。第三次挥手:当服务器确定数据已经发送完毕后,就向客户端发送FIN=N消息,告诉客户端“好的,数据已经发送完毕,准备关闭连接了”。服务器将处于LAST_ACK 状态。第四次挥手:收到FIN=N消息后,客户端知道它可以关闭连接,但它还不信任网络,服务器可能不知道是否应该关闭连接,因为我是。担心它不起作用,当连接结束时它会进入TIME_WAIT 状态。发送ack=N+1。如果服务器没有收到ACK,它可以重新发送。一旦服务器收到ACK,它就知道可以关闭连接。 2MSL 如果客户端等待后没有收到响应,则知道服务器已成功关闭。客户端还可以关闭连接。终于,四次握手结束了。以上是一侧主动关闭、另一侧被动关闭的情况,但现实中也存在同时发起主动关闭的情况。

具体流程如下。

f93d7ee923e2407cbaa61c381413cb15~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=dDKq6X1a73Mz%2FqS20UNfut1pgwM%3D 同时挥手

3.3 通过序列号和确认提高可靠性

使用TCP,当来自发送方的数据到达接收主机时,接收主机会返回一条通知,表明它已收到该消息。该消息称为确认(ACK)。发送方发送数据后,等待对方的确认。确认意味着数据已成功到达另一端。否则,数据丢失的可能性很高。在一定时间内未等待确认

认应答,发送端就可以认为数据已经丢失,并进行重发。由此,即使产生了丢包,仍然能够保证数据能够到达对端,实现可靠传输。未收到确认应答并不意味着数据一定丢失。也有可能是数据对方已经收到,只是返回的确认应答在途中丢失。这种情况也会导致发送端误以为数据没有到达目的地而重发数据。此外,也有可能因为一些其他原因导致确认应答延迟到达,在源主机重发数据以后才到达的情况也屡见不鲜。此时,源主机只要按照机制重发数据即可。对于目标主机来说,反复收到相同的数据是不可取的。为了对上层应用提供可靠的传输,目标主机必须放弃重复的数据包。为此我们引入了序列号。序列号是按照顺序给发送数据的每一个字节(8位字节)都标上号码的编号。接收端查询接收数据 TCP 首部中的序列号和数据的长度,将自己下一步应该接收的序列号作为确认应答返送回去。通过序列号和确认应答号,TCP 能够识别是否已经接收数据,又能够判断是否需要接收,从而实现可靠传输。a9d0159b8f7a49c39cf8c7c30889d8b0~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=3Vmr6k8dglkxXd6M6y%2F6QEIrQ2Q%3D序列号和确认应答
3.4 重发超时的确定
重发超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔。如果超过这个时间仍未收到确认应答,发送端将进行数据重发。最理想的是,找到一个最小时间,它能保证“确认应答一定能在这个时间内返回”。TCP 要求不论处在何种网络环境下都要提供高性能通信,并且无论网络拥堵情况发生何种变化,都必须保持这一特性。为此,它在每次发包时都会计算往返时间及其偏差。将这个往返时间和偏差时间相加,重发超时的时间就是比这个总和要稍大一点的值。在 BSD 的 Unix 以及 Windows 系统中,超时都以0.5秒为单位进行控制,因此重发超时都是0.5秒的整数倍。不过,最初其重发超时的默认值一般设置为6秒左右。数据被重发之后若还是收不到确认应答,则进行再次发送。此时,等待确认应答的时间将会以2倍、4倍的指数函数延长。此外,数据也不会被无限、反复地重发。达到一定重发次数之后,如果仍没有任何确认应答返回,就会判断为网络或对端主机发生了异常,强制关闭连接。并且通知应用通信异常强行终止。3.5 以段为单位发送数据
在建立 TCP 连接的同时,也可以确定发送数据包的单位,我们也可以称其为“最大消息长度”(MSS)。最理想的情况是,最大消息长度正好是 IP 中不会被分片处理的最大数据长度。TCP 在传送大量数据时,是以 MSS 的大小将数据进行分割发送。进行重发时也是以 MSS 为单位。MSS 在三次握手的时候,在两端主机之间被计算得出。两端的主机在发出建立连接的请求时,会在 TCP 首部中写入 MSS 选项,告诉对方自己的接口能够适应的 MSS 的大小。然后会在两者之间选择一个较小的值投入使用。3.6 利用窗口控制提高速度
TCP 以1个段为单位,每发送一个段进行一次确认应答的处理。这样的传输方式有一个缺点,就是包的往返时间越长通信性能就越低。为解决这个问题,TCP 引入了窗口这个概念。确认应答不再是以每个分段,而是以更大的单位进行确认,转发时间将会被大幅地缩短。也就是说,发送端主机,在发送了一个段以后不必要一直等待确认应答,而是继续发送。如下图所示:1eb295ebc84648ed9d40ac145a9e68e8~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=bw%2FCWLS%2BtxGa9cnqntlDre6jBiY%3D窗口控制窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。上图中窗口大小为4个段。这个机制实现了使用大量的缓冲区,通过对多个段同时进行确认应答的功能。3.7 滑动窗口控制
330dbabae44f420bbda231462ed78eb3~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=YXDNdiiVCJJ%2Bl4qDcYEzO4eQ7dU%3D滑动窗口
上图中的窗口内的数据即便没有收到确认应答也可以被发送出去。不过,在整个窗口的确认应答没有到达之前,如果其中部分数据出现丢包,那么发送端仍然要负责重传。为此,发送端主机需要设置缓存保留这些待被重传的数据,直到收到他们的确认应答。在滑动窗口以外的部分包括未发送的数据以及已经确认对端已收到的数据。当数据发出后若如期收到确认应答就可以不用再进行重发,此时数据就可以从缓存区清除。收到确认应答的情况下,将窗口滑动到确认应答中的序列号的位置。这样可以顺序地将多个段同时发送提高通信性能。这种机制也别称为滑动窗口控制。3.8 窗口控制中的重发控制
在使用窗口控制中, 出现丢包一般分为两种情况:
① 确认应答未能返回的情况。在这种情况下,数据已经到达对端,是不需要再进行重发的,如下图:86adf8e14af64ee6ae0db1c0be8802f7~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=JeSfwpE%2FcExtOTlx%2BiH7%2FwltRwo%3D部分确认应答丢失
② 某个报文段丢失的情况。接收主机如果收到一个自己应该接收的序列号以外的数据时,会针对当前为止收到数据返回确认应答。如下图所示,当某一报文段丢失后,发送端会一直收到序号为1001的确认应答,因此,在窗口比较大,又出现报文段丢失的情况下,同一个序列号的确认应答将会被重复不断地返回。而发送端主机如果连续3次收到同一个确认应答,就会将其对应的数据进行重发。这种机制比之前提到的超时管理更加高效,因此也被称为高速重发控制。fefa938ed5d949a3955d9798d5dc69ec~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=%2BcsB%2FNhzcYUEdEOht31jpnD2FiI%3D高速重发控制

四、网络层中的 IP 协议

IP(IPv4、IPv6)相当于 OSI 参考模型中的第3层——网络层。网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点通信”。
网络的下一层——数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。
IP 大致分为三大作用模块,它们是 IP 寻址、路由(最终节点为止的转发)以及 IP 分包与组包。
1. IP 地址
1.1 IP 地址概述
在计算机通信中,为了识别通信对端,必须要有一个类似于地址的识别码进行标识。在数据链路中的 MAC 地址正是用来标识同一个链路中不同计算机的一种识别码。
作为网络层的 IP ,也有这种地址信息,一般叫做 IP 地址。IP 地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址”。因此,在 TCP/IP 通信中所有主机或路由器必须设定自己的 IP 地址。
不论一台主机与哪种数据链路连接,其 IP 地址的形式都保持不变。
IP 地址(IPv4 地址)由32位正整数来表示。IP 地址在计算机内部以二进制方式被处理。然而,由于我们并不习惯于采用二进制方式,我们将32位的 IP 地址以每8位为一组,分成4组,每组以 “.” 隔开,再将每组数转换成十进制数。如下:
3b46a3388685443187cc45dd3597d495~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=GeYy9g0rsxhUUzv3m420te0jTwo%3D1.2 IP 地址由网络和主机两部分标识组成
如下图,网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP 地址的“主机标识”则不允许在同一个网段内重复出现。由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的 IP 地址都不会相互重叠。即 IP 地址具有了唯一性。
58c464f075584a73ae6f57fc850e35dc~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=3ccjtuChVifDkm0O134s0ysoBNY%3DIP地址的主机标识
如下图,IP 包被转发到途中某个路由器时,正是利用目标 IP 地址的网络标识进行路由。因为即使不看主机标识,只要一见到网络标识就能判断出是否为该网段内的主机。
2bf4d4f439ae462bbc5d6a92517e7f09~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=kzYy7GGjxtLVUiGCB3A3ETKkKp4%3DIP地址的网络标识
1.3 IP 地址的分类
IP 地址分为四个级别,分别为A类、B类、C类、D类。它根据 IP 地址中从第 1 位到第 4 位的比特列对其网络标识和主机标识进行区分。
A 类 IP 地址是首位以 “0” 开头的地址。从第 1 位到第 8 位是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0 是 A 类的网络地址。A 类地址的后 24 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为16,777,214个。
B 类 IP 地址是前两位 “10” 的地址。从第 1 位到第 16 位是它的网络标识。用十进制表示的话,128.0.0.0~191.255.0.0 是 B 类的网络地址。B 类地址的后 16 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为65,534个。
C 类 IP 地址是前三位为 “110” 的地址。从第 1 位到第 24 位是它的网络标识。用十进制表示的话,192.0.0.0~223.255.255.0 是 C 类的网络地址。C 类地址的后 8 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为254个。
D 类 IP 地址是前四位为 “1110” 的地址。从第 1 位到第 32 位是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255 是 D 类的网络地址。D 类地址没有主机标识,常用于多播。
在分配 IP 地址时关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为 0 或全部为 1。因为全部为 0 只有在表示对应的网络地址或 IP 地址不可以获知的情况下才使用。而全部为 1 的主机通常作为广播地址。因此,在分配过程中,应该去掉这两种情况。这也是为什么 C 类地址每个网段最多只能有 254( 28 – 2 = 254)个主机地址的原因。
1.4 广播地址
广播地址用于在同一个链路中相互连接的主机之间发送数据包。将 IP 地址中的主机地址部分全部设置为 1,就成了广播地址。
广播分为本地广播和直接广播两种。在本网络内的广播叫做本地广播;在不同网络之间的广播叫做直接广播。
1.5 IP 多播
多播用于将包发送给特定组内的所有主机。由于其直接使用 IP 地址,因此也不存在可靠传输。
相比于广播,多播既可以穿透路由器,又可以实现只给那些必要的组发送数据包。请看下图:
a3bc7d465a034dc0a84e542a0a644c1a~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=ZZ8U98LRNF75XO7QDXjlU7vw%2BP0%3DIP多播使用 D 类地址。因此,如果从首位开始到第 4 位是 “1110”,就可以认为是多播地址。而剩下的 28 位可以成为多播的组编号。
此外, 对于多播,所有的主机(路由器以外的主机和终端主机)必须属于 224.0.0.1 的组,所有的路由器必须属于 224.0.0.2 的组。
1.6 子网掩码
现在一个 IP 地址的网络标识和主机标识已不再受限于该地址的类别,而是由一个叫做“子网掩码”的识别码通过子网网络地址细分出比 A 类、B 类、C 类更小粒度的网络。这种方式实际上就是将原来 A 类、B 类、C 类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。
子网掩码用二进制方式表示的话,也是一个 32 位的数字。它对应 IP 地址网络标识部分的位全部为 “1”,对应 IP 地址主机标识的部分则全部为 “0”。由此,一个 IP 地址可以不再受限于自己的类别,而是可以用这样的子网掩码自由地定位自己的网络标识长度。当然,子网掩码必须是 IP 地址的首位开始连续的 “1”。
对于子网掩码,目前有两种表示方式。第一种是,将 IP 地址与子网掩码的地址分别用两行来表示。以 172.20.100.52 的前 26 位是网络地址的情况为例,如下:
ee5656c5251943ee9f409cad926872a3~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=JJaGPnRG%2FFKz70krwwlKKZKfsWI%3D第二种表示方式是,在每个 IP 地址后面追加网络地址的位数用 “/ ” 隔开,如下:
f804167ff6a7491ab2e2b6476ae1e2dc~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=5SrkR8CaucLdcwyxCqOjWZnRh%2F4%3D2. 路由
发送数据包时所使用的地址是网络层的地址,即 IP 地址。然而仅仅有 IP 地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表。
该路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫做静态路由控制,而后者叫做动态路由控制。
IP 协议始终认为路由表是正确的。然后,IP 本身并没有定义制作路由控制表的协议。即 IP 没有制作路由控制表的机制。该表示由一个叫做“路由协议”的协议制作而成。
2.1 IP 地址与路由控制
IP 地址的网络地址部分用于进行路由控制。
路由控制表中记录着网络地址与下一步应该发送至路由器的地址。
在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。
d7325ccf5fb042ff9f652cf611fbacec~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=oP6L4S8PRZQVHvKCX0TJdpvIhM8%3D3. IP 分包与组包
每种数据链路的最大传输单元(MTU)都不尽相同,因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的 MTU 也就不同。
任何一台主机都有必要对 IP 分片进行相应的处理。分片往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理。
经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行。路由器虽然做分片但不会进行重组。
3.1 路径 MTU 发现
分片机制也有它的不足。如路由器的处理负荷加重之类。因此,只要允许,是不希望由路由器进行 IP 数据包的分片处理的。
为了应对分片机制的不足,“路径 MTU 发现” 技术应运而生。路径 MTU 指的是,从发送端主机到接收端主机之间不需要分片是最大 MTU 的大小。即路径中存在的所有数据链路中最小的 MTU 。
进行路径 MTU 发现,就可以避免在中途的路由器上进行分片处理,也可以在 TCP 中发送更大的包。
4. IPv6
IPv6(IP version 6)是为了根本解决 IPv4 地址耗尽的问题而被标准化的网际协议。IPv4 的地址长度为 4 个 8 位字节,即 32 比特。而 IPv6 的地址长度则是原来的 4 倍,即 128 比特,一般写成 8 个 16 位字节。
4.1 IPv6 的特点
IP 得知的扩大与路由控制表的聚合。性能提升。包首部长度采用固定的值(40字节),不再采用首部检验码。简化首部结构,减轻路由器负担。路由器不再做分片处理。支持即插即用功能。即使没有DHCP服务器也可以实现自动分配 IP 地址。采用认证与加密功能。应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能。多播、Mobile IP 成为扩展功能。4.2 IPv6 中 IP 地址的标记方法
一般人们将 128 比特 IP 地址以每 16 比特为一组,每组用冒号(“:”)隔开进行标记。而且如果出现连续的 0 时还可以将这些 0 省略,并用两个冒号(“::”)隔开。但是,一个 IP 地址中只允许出现一次两个连续的冒号。4.3 IPv6 地址的结构
IPv6 类似 IPv4,也是通过 IP 地址的前几位标识 IP 地址的种类。在互联网通信中,使用一种全局的单播地址。它是互联网中唯一的一个地址,不需要正式分配 IP 地址。8d45616b00a04f2d88fbbd38dd3eeb57~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=ZGo4j0dAJuALnqUkfdGMSrSzfg4%3D4.4 全局单播地址
全局单播地址是指世界上唯一的一个地址。它是互联网通信以及各个域内部通信中最为常用的一个 IPv6 地址。格式如下图所示,现在 IPv6 的网络中所使用的格式为,n = 48,m = 16 以及 128 – n – m = 64。即前 64 比特为网络标识,后 64 比特为主机标识。b9b2cadf2fdb491db681b871511991d2~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=QKlGl0UJIMXZneEdqmBkS%2BnUIuU%3D全局单播地址
4.5 链路本地单播地址
链路本地单播地址是指在同一个数据链路内唯一的地址。它用于不经过路由器,在同一个链路中的通信。通常接口 ID 保存 64 比特版的 MAC 地址。27e0f16d62ad4646af216f39ba315003~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=tB6iRRMUvwFb9oXvPRdG%2F3ypM44%3D链路本地单播地址
4.6 唯一本地地址
唯一本地地址是不进行互联网通信时所用的地址。唯一本地地址虽然不会与互联网连接,但是也会尽可能地随机生成一个唯一的全局 ID。L 通常被置为 1全局 ID 的值随机决定子网 ID 是指该域子网地址接口 ID 即为接口的 ID6d82efd8f3bb455c9ec416b343e0d19f~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=YuzOfodwRWL%2B%2B%2BOVFnrDCcJV%2Btw%3D唯一本地地址
4.7 IPv6 分段处理
IPv6 的分片处理只在作为起点的发送端主机上进行,路由器不参与分片。IPv6 中最小 MTU 为 1280 字节,因此,在嵌入式系统中对于那些有一定系统资源限制的设备来说,不需要进行“路径 MTU 发现”,而是在发送 IP 包时直接以 1280 字节为单位分片送出。4.8 IP 首部(暂略)
5. IP 协议相关技术
IP 旨在让最终目标主机收到数据包,但是在这一过程中仅仅有 IP 是无法实现通信的。必须还有能够解析主机名称和 MAC 地址的功能,以及数据包在发送过程中异常情况处理的功能。5.1 DNS
我们平常在访问某个网站时不适用 IP 地址,而是用一串由罗马字和点号组成的字符串。而一般用户在使用 TCP/IP 进行通信时也不使用 IP 地址。能够这样做是因为有了 DNS (Domain Name System)功能的支持。DNS 可以将那串字符串自动转换为具体的 IP 地址。这种 DNS 不仅适用于 IPv4,还适用于 IPv6。5.2 ARP
只要确定了 IP 地址,就可以向这个目标地址发送 IP 数据报。然而,在底层数据链路层,进行实际通信时却有必要了解每个 IP 地址所对应的 MAC 地址。ARP 是一种解决地址问题的协议。以目标 IP 地址为线索,用来定位下一个应该接收数据分包的网络设备对应的 MAC 地址。不过 ARP 只适用于 IPv4,不能用于 IPv6。IPv6 中可以用 ICMPv6 替代 ARP 发送邻居探索消息。RARP 是将 ARP 反过来,从 MAC 地址定位 IP 地址的一种协议。5.3 ICMP
ICMP 的主要功能包括,确认 IP 包是否成功送达目标地址,通知在发送过程当中 IP 包被废弃的具体原因,改善网络设置等。IPv4 中 ICMP 仅作为一个辅助作用支持 IPv4。也就是说,在 IPv4 时期,即使没有 ICMP,仍然可以实现 IP 通信。然而,在 IPv6 中,ICMP 的作用被扩大,如果没有 ICMPv6,IPv6 就无法进行正常通信。5.4 DHCP
如果逐一为每一台主机设置 IP 地址会是非常繁琐的事情。特别是在移动使用笔记本电脑、只能终端以及平板电脑等设备时,每移动到一个新的地方,都要重新设置 IP 地址。于是,为了实现自动设置 IP 地址、统一管理 IP 地址分配,就产生了 DHCP(Dynamic Host Configuration Protocol)协议。有了 DHCP,计算机只要连接到网络,就可以进行 TCP/IP 通信。也就是说,DHCP 让即插即用变得可能。DHCP 不仅在 IPv4 中,在 IPv6 中也可以使用。5.5 NAT
NAT(Network Address Translator)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。除转换 IP 地址外,还出现了可以转换 TCP、UDP 端口号的 NAPT(Network Address Ports Translator)技术,由此可以实现用一个全局 IP 地址与多个主机的通信。NAT(NAPT)实际上是为正在面临地址枯竭的 IPv4 而开发的技术。不过,在 IPv6 中为了提高网络安全也在使用 NAT,在 IPv4 和 IPv6 之间的相互通信当中常常使用 NAT-PT。5.6 IP 隧道
eafc5c9c523b4cde9543182e3ec61ba6~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1723188126&x-signature=00HJgJDBpemNOHGaj8Gy7OHS6dY%3D夹着 IPv4 网络的两个 IPv6 网络
如上图的网络环境中,网络 A 与网络 B 之间无法直接进行通信,为了让它们之间正常通信,这时必须得采用 IP 隧道的功能。IP 隧道可以将那些从网络 A 发过来的 IPv6 的包统合为一个数据,再为之追加一个 IPv4 的首部以后转发给网络 C。一般情况下,紧接着 IP 首部的是 TCP 或 UDP 的首部。然而,现在的应用当中“ IP 首部的后面还是 IP 首部”或者“ IP 首部的后面是 IPv6 的首部”等情况与日俱增。这种在网络层的首部后面追加网络层首部的通信方法就叫做“ IP 隧道”。

原创文章,作者:共创,如若转载,请注明出处:https://www.sudun.com/ask/94503.html

(0)
共创的头像共创
上一篇 2024年8月2日 下午3:21
下一篇 2024年8月2日 下午3:22

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注