精华内容
下载资源
问答
  • IP协议

    千次阅读 多人点赞 2018-09-17 13:35:05
    IP协议 IP 协议作为通信子网的最高层,提供无连接的数据报传输机制。IP协议是点到点的,核心问题是寻径。它向上层提供统一的IP数据报,使得各种物理帧的差异性对上层协议不复存在。 IP协议的作用 寻址和...

    IP协议

    IP 协议作为通信子网的最高层,提供无连接的数据报传输机制。IP协议是点到点的,核心问题是寻径。它向上层提供统一的IP数据报,使得各种物理帧的差异性对上层协议不复存在。

    IP协议的作用

    • 寻址和路由
    • 传递服务:提供不可靠,无连接的服务。

      为什么说IP协议不可靠和、无连接
      不可靠:是指不能保证IP数据报能成功到达目的地,是一种尽力而为的传输服务,路由器对IP报错误处理方式是丢包,并发送ICMP给源地址。
      无连接:是指IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。

    • 数据分段和重组
      IP是网络层上的主要协议,同时被TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。

      在TCP/IP协议族中,网络层IP提供的是一种不可靠的服务。也就是说,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。而另一方面,TCP在不可靠的IP层上提供了一个可靠的运输层。为了提供这种可靠的服务,TCP采用了超时重传、发送和接收端到端的确认分组等机制。由此可见,运输层和网络层分别负责不同的功能。(详见TCP UDP)

    IP协议的工作原理

    IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP 数据报格式传输。IP提供不可靠、无连接的数据报传送。
    不可靠(unreliable)的意思是它不能保证IP 数据报能成功地到达目的地。IP 仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP 有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP 消息报给信源端。任何要求的可靠性必须由上层来提供(如TCP)。
    无连接(connectionless)这个术语的意思是IP 并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP 数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。

    当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),如图所示。TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP segment)。IP传给网络接口层的数据单元称作IP数据报(IP datagram)。通过以太网传输的比特流称作帧(Frame)。
    下图中帧头和帧尾下面所标注的数字是典型以太网帧首部的字节长度。以太网数据帧的物理特性是其长度必须在46~1500字节之间。由于现在几乎所有的计算机系统都采用8bit的字节,因此我们在本书中使用字节(byte)这个术语。
    这里写图片描述
    数据进入协议栈时的封装过程

    UDP数据与TCP数据基本一致。唯一的不同是UDP传给IP的信息单元称作UDP数据报(UDP datagram),而且UDP的首部长为8字节。
    由于TCP、UDP、ICMP和IGMP都要向IP传送数据,因此IP必须在生成的IP首部中加入某种标识,以表明数据属于哪一层。为此,IP在首部中存入一个长度为8bit的数值,称作协议域。1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议。
    类似地,许多应用程序都可以使用TCP或UDP来传送数据。运输层协议在生成报文首部时要存入一个应用程序的标识符。TCP和UDP都用一个16bit的端口号来表示不同的应用程序。TCP和UDP把源端口号和目的端口号分别存入报文首部中。
    (网络接口分别要发送和接收IP、ARP和RARP数据,因此也必须在以太网的帧首部中加入应用程序某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个16 bit的帧类型域。)

    IP协议数据报文格式

    一个IP数据报由首部和数据两部分组成。首部的前一部分长度是固定的20个字节,后面部分的长度则是可变长度。下面介绍首部各字段的意义。
    这里写图片描述

    这里写图片描述

    一个IP数据报由首部和数据两部分组成。首部的前一部分长度是固定的20个字节,
    后面部分的长度则是可变长度。下面介绍首部各字段的意义。

    IP数据报首部的固定部分
    1. 版本
    版本字段占4bit,指IP协议的版本。通信双方使用的IP协议的版本必须一致。版本有IPV4 和IPV6
    2. 首部长度
    首部长度字段占4bit,可表示的最大数值是15个单位(一个单位为4字节),因此IP的首部长度的最大值是60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后一个填充字段加以填充。这样,数据部分永远在4字节的整数倍时开始,这样在实现起来会比较方便。首部长度限制为60字节的缺点是有时(如采用源站选路时)不够用。但这样做的用意是要用户尽量减少额外的开销。
    3. 服务类型
    服务类型字段共8bit长,用来获得更好的服务,其意义见图6的上面部分所示。
    服务类型字段的前三个比特表示优先级,它可使数据报具有8个优先级中的一个。
    第4个比特是D比特,表示要求有更低的时延。第5个比特是T比特,表示要求有更高的吞吐量。第6个比特是R比特,表示要求有更高的可靠性,即在数据报传的过程中,被结点交换机丢弃的概率要更小些。第7个比特是C比特,是新增加的,表示要求选择价格更低廉的路由。最后一个比特目前尚未使用。
    4. 总长度
    总长度指首部和数据之和的长度,单位为字节。总长度字段为16bit,因此数据报的最大长度为65535字节。这在当前是够用的。
    当很长的数据报要分段进行传送时,“总长度”不是指未分段前的数据报长度,而是指分段后每个段的首部长度与数据长度的总和。
    5. 标识
    标识字段的意义和OSI的IPDU中的数据单元标识符的意义一样,是为了使分段后的各数据报段最后能准确地重装成为原来的数据报。请注意:这里的“标识”并没有顺序号的意思,因为IP是无连接服务,数据报不存在按序接收的问题。
    6. 标志
    标志字段占3bit。目前只有前两个比特有意义。
    标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面还有分段的数据报。MF=0表示这已是若干数据报段中的最后一个。
    标志字段中间的一位记为DF(Don’t Fragment)。只有当DF=0时才允许分段。
    7. 段偏移
    段偏移字段的意义和OSI的IPDU中规定的相似,只是表示的单位不同。这里是以8个字节为偏移单位。可见IP数据报的段偏移字段(13bit长)和OSI的IPDU的段偏移字段(16bit长)是相当的。
    8. 寿命
    寿命字段记为TTL(Time To Live),其单位为秒。寿命的建议值是32秒。但也可设定为3-4秒,或甚至255秒。
    9. 协议
    协议字段占8bit,它指出此数据携带的运输层数据是使用何种协议,以便目的主机的IP层知道应将此数据报上交给哪个进程。常用的一些协议和响应的协议字段值(写在协议后面的括弧中)是:UDP(17),TCP(6),ICMP(1),GGP(3),EGP(8),IGP(9),OSPF(89),以及ISO的TP4(29)。
    10. 首部检验和
    此字段只检验数据报的首部,不包括数据部分。不见眼数据部分是因为数据报每经过一个结点,结点处理机就要重新计算一下首部检验和(一些字段,如寿命、标志、段偏移等都可能发生变化)。如将数据部分一起检验,计算的工作量就太大了。
    首部校验和(16bit)字段只校验数据报的首部,不包括数据部分。这里不采用CRC检验码而采用简单的计算方法
    实现对IP分组首部的差错检测
    计算校验和时,该字段置全0
    采用反码算数运算求和,和的反码作为首部校验和字段
    逐跳计算、逐跳校验
    11. 地址
    源站IP地址字段和目的站IP地址字段都各占4字节。

    IP分片

    最大传输单元(MTU)
    网络链路存在MTU (最大传输单元)—链路层数据帧可封装数据的上限
    不同链路的MTU不同

    这里写图片描述
    IP分片与重组
    大IP分组向较小MTU链路转发时, 可以被“分片” (fragmented)

    1个IP分组分为多片IP分组
    IP分片到达目的主机后进行“重组”(reassembled)
    IP首部的相关字段用于标识分片以及确定分片的相对顺序

    总长度、标识、标志位和片偏移
    这里写图片描述
    分片相关的字段
    这里写图片描述

    标识字段占16位:标识一个IP分组

    IP协议利用一个计数器,每产生IP分组计数器加1,作为该IP分组的标识
    标志位字段占3位:

    DF (Don’t Fragment)
    DF =1:禁止分片
    DF =0:允许分片

    MF (More Fragment)

    MF =1:非最后一片
    MF =0:最后一片(或未分片)
    这里写图片描述

    片偏移字段占13位:一个IP分组分片封装原IP分组数据的相对偏移量
    片偏移字段以8字节为单位

    展开全文
  • 太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    万次阅读 多人点赞 2020-05-07 09:30:15
    OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。 二、 TCP/IP 基础 1. TCP/IP 的具体含义 从字面意义上讲,有人可能会认为...

     

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    一图看完本文

     

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

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    计算机网络体系结构分层

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    计算机网络体系结构分层

    不难看出,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 为网际协议群。

    互联网进行通信时,需要相应的网络协议,TCP/IP 原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    网际协议群

    2. 数据包

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

    以上五个术语都用来表述数据的单位,大致区分如下:

    • 包可以说是全能性术语;
    • 帧用于表示数据链路层中包的单位;
    • 数据包是 IP 和 UDP 等网络层以上的分层中包的单位;
    • 段则表示 TCP 数据流中的信息;
    • 消息是指应用协议中数据的单位。

    每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    数据包首部

    网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的数据。包首部就像协议的脸。

    3. 数据处理流程

    下图以用户 a 向用户 b 发送邮件为例子:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    数据处理流程

    • ① 应用程序处理
    • 首先应用程序会进行编码处理,这些编码相当于 OSI 的表示层功能;
    • 编码转化后,邮件不一定马上被发送出去,这种何时建立通信连接何时发送数据的管理功能,相当于 OSI 的会话层功能。
    • ② TCP 模块的处理
    • TCP 根据应用的指示,负责建立连接、发送数据以及断开连接。TCP 提供将应用层发来的数据顺利发送至对端的可靠传输。为了实现这一功能,需要在应用层数据的前端附加一个 TCP 首部。
    • ③ IP 模块的处理
    • IP 将 TCP 传过来的 TCP 首部和 TCP 数据合起来当做自己的数据,并在 TCP 首部的前端加上自己的 IP 首部。IP 包生成后,参考路由控制表决定接受此 IP 包的路由或主机。
    • ④ 网络接口(以太网驱动)的处理
    • 从 IP 传过来的 IP 包对于以太网来说就是数据。给这些数据附加上以太网首部并进行发送处理,生成的以太网数据包将通过物理层传输给接收端。
    • ⑤ 网络接口(以太网驱动)的处理
    • 主机收到以太网包后,首先从以太网包首部找到 MAC 地址判断是否为发送给自己的包,若不是则丢弃数据。
    • 如果是发送给自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块,如 IP、ARP 等。这里的例子则是 IP 。
    • ⑥ IP 模块的处理
    • IP 模块接收到 数据后也做类似的处理。从包首部中判断此 IP 地址是否与自己的 IP 地址匹配,如果匹配则根据首部的协议类型将数据发送给对应的模块,如 TCP、UDP。这里的例子则是 TCP。
    • 另外吗,对于有路由器的情况,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送往的主机或路由器之后再进行转发数据。
    • ⑦ TCP 模块的处理
    • 在 TCP 模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。最后检查端口号,确定具体的应用程序。数据被完整地接收以后,会传给由端口号识别的应用程序。
    • ⑧ 应用程序的处理
    • 接收端应用程序会直接接收发送端发送的数据。通过解析数据,展示相应的内容。

     

    三、传输层中的 TCP 和 UDP

    TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。

    • TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。TCP 为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。
    • UDP 是不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。在 UDP 的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。
    • TCP 和 UDP 的优缺点无法简单地、绝对地去做比较:TCP 用于在传输层有必要实现可靠传输的情况;而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。

    1. 端口号

    数据链路和 IP 中的地址,分别指的是 MAC 地址和 IP 地址。前者用来识别同一链路中不同的计算机,后者用来识别 TCP/IP 网络中互连的主机和路由器。在传输层也有这种类似于地址的概念,那就是端口号。端口号用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址。

    1.1 根据端口号识别应用

    一台计算机上同时可以运行多个程序。传输层协议正是利用这些端口号识别本机中正在进行通信的应用程序,并准确地将数据传输。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    通过端口号识别应用

    1.2 通过 IP 地址、端口号、协议号进行通信识别

    • 仅凭目标端口号识别某一个通信是远远不够的。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    通过端口号、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 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。

    下面来看看三次握手的流程图:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    三次握手

    • 第一次握手:客户端将标志位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 四次挥手(重点)

    • 四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
    • 由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。

    下面来看看四次挥手的流程图:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    四次挥手

    • 中断连接端可以是客户端,也可以是服务器端。
    • 第一次挥手:客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。
    • 第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。
    • 第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。
    • 第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。

    上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况,

    具体流程如下图:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    同时挥手

    3.3 通过序列号与确认应答提高可靠性

    • 在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知。这个消息叫做确认应答(ACK)。当发送端将数据发出之后会等待对端的确认应答。如果有确认应答,说明数据已经成功到达对端。反之,则数据丢失的可能性很大
    • 在一定时间内没有等待到确认应答,发送端就可以认为数据已经丢失,并进行重发。由此,即使产生了丢包,仍然能够保证数据能够到达对端,实现可靠传输。
    • 未收到确认应答并不意味着数据一定丢失。也有可能是数据对方已经收到,只是返回的确认应答在途中丢失。这种情况也会导致发送端误以为数据没有到达目的地而重发数据。
    • 此外,也有可能因为一些其他原因导致确认应答延迟到达,在源主机重发数据以后才到达的情况也屡见不鲜。此时,源主机只要按照机制重发数据即可。
    • 对于目标主机来说,反复收到相同的数据是不可取的。为了对上层应用提供可靠的传输,目标主机必须放弃重复的数据包。为此我们引入了序列号。
    • 序列号是按照顺序给发送数据的每一个字节(8位字节)都标上号码的编号。接收端查询接收数据 TCP 首部中的序列号和数据的长度,将自己下一步应该接收的序列号作为确认应答返送回去。通过序列号和确认应答号,TCP 能够识别是否已经接收数据,又能够判断是否需要接收,从而实现可靠传输。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    序列号和确认应答

    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 引入了窗口这个概念。确认应答不再是以每个分段,而是以更大的单位进行确认,转发时间将会被大幅地缩短。也就是说,发送端主机,在发送了一个段以后不必要一直等待确认应答,而是继续发送。如下图所示:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    •  
    • 窗口控制
    • 窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。上图中窗口大小为4个段。这个机制实现了使用大量的缓冲区,通过对多个段同时进行确认应答的功能。

    3.7 滑动窗口控制

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    滑动窗口

    • 上图中的窗口内的数据即便没有收到确认应答也可以被发送出去。不过,在整个窗口的确认应答没有到达之前,如果其中部分数据出现丢包,那么发送端仍然要负责重传。为此,发送端主机需要设置缓存保留这些待被重传的数据,直到收到他们的确认应答。
    • 在滑动窗口以外的部分包括未发送的数据以及已经确认对端已收到的数据。当数据发出后若如期收到确认应答就可以不用再进行重发,此时数据就可以从缓存区清除。
    • 收到确认应答的情况下,将窗口滑动到确认应答中的序列号的位置。这样可以顺序地将多个段同时发送提高通信性能。这种机制也别称为滑动窗口控制。

    3.8 窗口控制中的重发控制

    在使用窗口控制中, 出现丢包一般分为两种情况:

    • ① 确认应答未能返回的情况。在这种情况下,数据已经到达对端,是不需要再进行重发的,如下图:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    部分确认应答丢失

    • ② 某个报文段丢失的情况。接收主机如果收到一个自己应该接收的序列号以外的数据时,会针对当前为止收到数据返回确认应答。如下图所示,当某一报文段丢失后,发送端会一直收到序号为1001的确认应答,因此,在窗口比较大,又出现报文段丢失的情况下,同一个序列号的确认应答将会被重复不断地返回。而发送端主机如果连续3次收到同一个确认应答,就会将其对应的数据进行重发。这种机制比之前提到的超时管理更加高效,因此也被称为高速重发控制。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    高速重发控制

     

    四、网络层中的 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组,每组以 “.” 隔开,再将每组数转换成十进制数。如下:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    1.2 IP 地址由网络和主机两部分标识组成

    • 如下图,网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP 地址的“主机标识”则不允许在同一个网段内重复出现。由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的 IP 地址都不会相互重叠。即 IP 地址具有了唯一性。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    IP地址的主机标识

    • 如下图,IP 包被转发到途中某个路由器时,正是利用目标 IP 地址的网络标识进行路由。因为即使不看主机标识,只要一见到网络标识就能判断出是否为该网段内的主机。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    IP地址的网络标识

    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 地址,因此也不存在可靠传输。
    • 相比于广播,多播既可以穿透路由器,又可以实现只给那些必要的组发送数据包。请看下图:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    •  
    • IP 多播
    • 多播使用 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 位是网络地址的情况为例,如下:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    • 第二种表示方式是,在每个 IP 地址后面追加网络地址的位数用 “/ ” 隔开,如下:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    2. 路由

    • 发送数据包时所使用的地址是网络层的地址,即 IP 地址。然而仅仅有 IP 地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表。
    • 该路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫做静态路由控制,而后者叫做动态路由控制。
    • IP 协议始终认为路由表是正确的。然后,IP 本身并没有定义制作路由控制表的协议。即 IP 没有制作路由控制表的机制。该表示由一个叫做“路由协议”的协议制作而成。

    2.1 IP 地址与路由控制

    • IP 地址的网络地址部分用于进行路由控制。
    • 路由控制表中记录着网络地址与下一步应该发送至路由器的地址。
    • 在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    路由控制表与 IP 包发送

    3. 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 地址。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    4.4 全局单播地址

    • 全局单播地址是指世界上唯一的一个地址。它是互联网通信以及各个域内部通信中最为常用的一个 IPv6 地址。
    • 格式如下图所示,现在 IPv6 的网络中所使用的格式为,n = 48,m = 16 以及 128 - n - m = 64。即前 64 比特为网络标识,后 64 比特为主机标识。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    全局单播地址

    4.5 链路本地单播地址

    • 链路本地单播地址是指在同一个数据链路内唯一的地址。它用于不经过路由器,在同一个链路中的通信。通常接口 ID 保存 64 比特版的 MAC 地址。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    链路本地单播地址

    4.6 唯一本地地址

    • 唯一本地地址是不进行互联网通信时所用的地址。
    • 唯一本地地址虽然不会与互联网连接,但是也会尽可能地随机生成一个唯一的全局 ID。
    • L 通常被置为 1
    • 全局 ID 的值随机决定
    • 子网 ID 是指该域子网地址
    • 接口 ID 即为接口的 ID

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    唯一本地地址

    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 隧道

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    夹着 IPv4 网络的两个 IPv6 网络

    • 如上图的网络环境中,网络 A 与网络 B 之间无法直接进行通信,为了让它们之间正常通信,这时必须得采用 IP 隧道的功能。
    • IP 隧道可以将那些从网络 A 发过来的 IPv6 的包统合为一个数据,再为之追加一个 IPv4 的首部以后转发给网络 C。
    • 一般情况下,紧接着 IP 首部的是 TCP 或 UDP 的首部。然而,现在的应用当中“ IP 首部的后面还是 IP 首部”或者“ IP 首部的后面是 IPv6 的首部”等情况与日俱增。这种在网络层的首部后面追加网络层首部的通信方法就叫做“ IP 隧道”。

     

    作者:涤生_Woo

    链接:https://www.jianshu.com/p/9f3e879a4c9c

     

    展开全文
  • 网络层之IP协议详解

    万次阅读 2018-05-27 11:11:30
    IP协议是TCP/IP协议簇中的核心协议,也是TCP/IP的载体。所有的TCP,UDP,ICMP及IGMP数据都以IP数据报格式传输。 IP提供不可靠的,无连接的数据传送服务。 (1)不可靠指它不能保证IP数据报能成功到达目的地。 IP...

    网络层,说简单点,就是在复杂的网络环境中确定一个合适的路径。
    我们来了解一下网络层中一个重要的协议–IP协议。

    IP协议

    1、概念

    IP协议是TCP/IP协议簇中的核心协议,也是TCP/IP的载体。所有的TCP,UDP,ICMP及IGMP数据都以IP数据报格式传输。
    IP提供不可靠的,无连接的数据传送服务。
    (1)不可靠指它不能保证IP数据报能成功到达目的地。
    IP仅提供最好的传输服务。当发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息给信源。任何要求的可靠性必须由上层来提供。
    (2)无连接指IP并不维护任何关于后续数据报的状态信息。
    每个数据报的处理是相互独立的。IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B)每个数据报都是独立的进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。

    2、简介

    这里写图片描述
    上图中:
    主机:是配有IP地址, 但是不进行路由控制的设备;
    路由器: 即配有IP地址, 又能进行路由控制;
    节点: 主机和路由器的统称;

    3、协议头格式

    这里写图片描述
    解析:

    字段解释
    4位版本号(version)指定IP协议的版本, 对于IPv4来说,就是4
    4位头部长度(header length)IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节
    8位服务类型(Type Of Service)3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置0). 4位TOS(最小延时, 最大吞吐量, 最高可靠性, 最小成本),只能选其一. ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要
    16位总长度(total length)IP数据报整体占多少个字节
    16位标识(id)唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id是相同的
    3位标志字段第一位保留,第二位置为1表示禁止分片, 这时候如果报文长度超MTU, IP模块就会丢弃报文. 第三位表示”更多分片”, 如果分片了的话, 最后一个分片置为1, 其他是0
    13位分片偏移(framegament offset)是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置
    8位生存时间(Time To Live, TTL)数据报到达目的地的最大报文跳数
    8位协议表示上层协议的类型
    16位头部校验和使用CRC进行校验, 来鉴别头部是否损坏
    32位源地址和32位目标地址表示发送端和接收端
    选项字段不定长, 最多40字节

    4、网段划分

    为什么要进行网段划分呢?
    我们寻找某台主机时,在同一个网段的主机网络号都是相同的,我们可以根据网络号确定一个区域,再通过主机号寻找目的主机。因此,我们需要知道:

    1. IP地址分为两个部分, 网络号和主机号
    2. 网络号: 保证相互连接的两个网段具有不同的标识
    3. 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;
    4. 不同的子网其实是把网络号相同的主机放到一起.
    5. 如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复。
    6. 主机号为1的一般都为路由器接口。

    所以,通过合理设置网络号的主机号,就可以保证在相互连接的网络中,每台主机的IP地址都不相同。
    但是,手动管理子网内的IP,是一个相当麻烦的事情。
    因此出现了一种叫做DHCP的技术,能够自动给子网内新增主机节点分配IP地址,避免了手动管理IP的不方便。且一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器。

    5、IP地址划分类

    所有IP 地址可以分为五类,如下:
    这里写图片描述

    分类地址范围
    A类0.0.0.0到127.255.255.255
    B类128.0.0.0到191.255.255.255
    C类192.0.0.0到223.255.255.255
    D类224.0.0.0到239.255.255.255
    E类240.0.0.0到247.255.255.255

    但是随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就分配完了,而A类却浪费了大量地址。
    针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing)

    子网划分

    我们都知道,IP地址是以网络号和主机号标识网络上的主机的,只有在同一网络号下的主机才可以“直接”互通,不同网络号的主机要通过网关互通。

    为了使同一个网络下有多个子网,就产生了子网掩码。

    了解一下这个新概念:
    子网掩码

    1. 区分网络号和主机号
    2. 是一个32位的正整数. 通常用一串 “0” 来结尾
    3. 将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号
    4. 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关

    那么如何确定子网掩码呢?

    将一个网络划分为多个子网,网络号就要占用原来的主机位。
    例如:
    C类地址,21位标识网络号,8位标识主机号,要将其划分为4个子网,则需占用2位原来的主机标识位。
    此时,网络号由之前的21位变为23位,子网掩码为:255.255.255.224
    如下图:
    这里写图片描述

    特殊的IP地址

    1. 将IP地址中的主机地址全部设为0, 就是网络号, 代表这个局域网
    2. 将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包
    3. 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

    那么IP地址的数量没有限制吗?
    我们知道,IP(IPV4)地址是一个四字节32位的正整数,那么一共只有2的32次方个IP地址,大概是43亿左右,而 TCP/IP协议规定, 每个主机都需要有一个IP地址,
    那也就是说网络中最多只可以接入43亿主机吗?

    实际上,由于一些特殊的IP地址的存在,数量就不足43亿了。另外,IP地址并非是按照主机台数配置的,而是每个网卡都需要配置一个或多个IP地址。

    上文讲的子网划分,在一定程度上缓解了IP地址不够用的问题,提高了利用率,减少了浪费,但IP地址的绝对上限并没有增加,仍然不够用,会有三种方式来解决IP地址不够用的问题:
    1. 动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中得到的IP地址不一定是相同的
    2. NAT技术
    3. IPv6: IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及。
    注意:IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议

    私有IP地址和公网IP地址

    1、私有IP地址
    如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,对与组建局域网的私有IP地址有如下规则:
    (1)10.*,前8位是网络号,共16,777,216个地址
    (2)172.16. 到 172.31.,前12位是网络号,共1,048,576个地址
    (3)192.168.*,前16位是网络号,共65,536个地址
    2、公网IP
    如1中,包含在范围中的, 都成为私有IP, 其余的就称为全局IP(或公网IP)。
    观察下图:
    这里写图片描述
    可以知道:
    (1)一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).
    (2)路由器LAN口连接的主机,都从属于当前这个路由器的子网中.
    (3)不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1)
    (4)子网内的主机IP地址不能重复,但是子网之间的IP地址可以重复,所以,不同子网中的两个主机不可以进行访问。
    (5)子网中的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换,替换成WAN口IP,逐级替换,最终数据包中的IP地址成为一个公网IP,这种技术被称为NAT(Network Address Translation,网络地址转换)。

    路由

    路由,简单来说,就是在复杂的网络结构中, 一跳一跳找出一条通往终点的路线。

    所谓 “一跳” 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。

    IP数据包的传输过程
    (1)当IP数据包, 到达路由器时, 路由器会先查看目的IP;
    (2)路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
    (3)依次反复, 一直到达目标IP地址;
    那么如何知道当前这个数据包该发送到哪里呢?
    这就依靠每个节点内部维护一个路由表,如果目的IP命中了路由表,就直接转发。
    我们可以用命令route 查看路由表:
    这里写图片描述
    观察上图:
    我的主机有一个网络接口,连到192.168.1.0/24网络;
    注意:路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址
    分析一下上图各字段的含义:

    字段含义
    Destination目的网络地址
    Genmask⼦⽹掩码
    Gateway下⼀一跳地址
    Iface发送接⼝
    FlagsU标志表示此条目有效(可以禁⽤某些条⽬),G标志表示此条目的下⼀跳地址是某路由器的地址,没有G标志表示目的网络地址是与本机接⼝直接相连的网络,不必经路由器转发

    路由转发过程:
    (1)拿到将要发送数据包的目的地址
    (2)先和第一行的子网掩码进行与运算,与第一行的目的网络地址不符,再和下一行的子网掩码做与运算,若匹配,因为是直接相连的网络,直接发到目的主机,不需要经路由器转发
    (3)若直到最后一行之前,发现都不匹配,按缺省路由条目,从eth0接口将该IP地址发给路由器,该路由器的路由表决定下一跳的地址。

    展开全文
  • SOME/IP协议_SD&SI详解(ServiceDiscovery & ServiceInterface) 前言 SOME/IP是目前汽车行业实现SOA架构最核心的通信协议,本文将围绕SOME/IP的ServiceDiscovery机制和Service Interface工作场景着重分享...

    @[supper_runner](SOME/IP协议详解_SD&SI(Service Discovery & ServiceInterface))
    #个人学习记录与分享,欢迎指正。
    #本文链接:https://blog.csdn.net/supper_runner/article/details/120857413

    1. 前言

    SOME/IP是目前汽车行业实现SOA架构最核心的通信协议,本文将围绕SOME/IP的ServiceDiscovery机制和Service Interface工作场景着重分享SOME/IP面向服务的实现方法,以及SOME/IP通信机制的优势。大家感兴趣的话后面可以分享一下SOME/IP 的序列化、SOME/IP的ETS协议栈一致性测试和应用服务定义方法。

    2. SOME/IP的特点

    SOME/IP全称Scalable service-Oriented MiddlewarE over IP,全称很好的概括了SOME/IP协议的特征,但是对于SOME/IP刚接触的朋友直接去理解这四个特征可能会过于抽象,可大概看一眼,先了解下面SD的机制章节和Service Interface章节后再行理解。

    2.1.Scalable——可伸缩的

    得益于SOME/IP中间件的功能,服务与硬件能够很好的解耦,其对于服务的管理拓展性和可裁剪性都非常好,在系统中增加较少一些服务,甚至增加减少一些ECU对于整个系统来说影响很小,理论上带宽允许的情况下,可以无限增加服务数量(当然服务ID的范围为2字节,此原则不可违反)。

    2.2.service-Oriented——面向服务的

    SOME/IP协议以服务的单位管理整车信息,服务可以包含各种可调用方法(Method)和事件通知组(EventGroup),通过Service Interface将信息进行传递共享,可以做到按需分配服务,按需分配信息,从而提高通信线路利用率。

    (该图为借用图片,已难以溯源,仅用于学习分享,如有侵权请联系删除)
    在这里插入图片描述

    3.3.MiddlewarE——中间件

    SOME/IP作为服务于分布式系统的通信协议,可将应用层与Endpoint信息、硬件驱动等底层信息进行松耦合管理,使得应用模块在查找所需服务或提供自身服务时,可以完全不关心底层信息,很好的实现了中间件的功能。
    OSI七层模型

    2.4.over IP——基于IP协议

    SOME/IP位于OSI七层模型的5-7层(应用层),需要运行于TCP/IP协议栈之上,即所有的SOME/IP报文都是IP报文,都是TCP/UDP报文。

    3.SD机制

    SD机制是SOME/IP实现服务信息共享的核心机制,如其全称ServiceDiscovery,它实现了服务发现的功能。
    要了解SD需要首先了解SOME/IP的通信架构,SOME/IP服务于分布式系统,采用服务器客户端无规则分布模式,即任何一个车内以太网节点都可能是Server或是Client,甚至是同时作为Server和Client。服务发现分为两个过程,一个是查找和提供服务的过程,即FindService和OfferService,一个是订阅和响应的过程,即Subscribe和SubscribeACK。SOME/IP通过这四种报文来实现服务发现。SD报文格式如下:
    在这里插入图片描述

    SD的概括性通信模式图如下:
    在这里插入图片描述

    3.1.FindService & OfferService服务查找

    使用场景

    FindService由Client端启动时发出,OfferService由Server端发出,分别用于查找所需的服务,和通告所提供的服务。要想了解这两种报文的发送机制,不得不提及SOME/IP的启动行为。SOME/IP协议栈在进行启动时会进入三个阶段。分别是Initial Wait Phase、Repetition Phase、Main Phase。

    Initial Wait Phase

    在SOME/IP协议栈启动初始,进入Initial Wait Phase,该阶段仅在ECU内部进行初始化不进行对外通信,不会有任何SOME/IP报文发出。

    Repetition Phase

    协议栈内部初始化完成之后,进入Repetition Phase,该阶段处于发出快发阶段。对于Server端,将开始发送OfferService报文,发送机制为周期倍增模式,直至达到REPETITIONS_MAX次数,然后进入Main Phase。
    对于Client端,将开始发送FindService报文查找所需服务,发送机制同样是周期倍增模式,直至达到REPETITIONS_MAX次数,然后进入Main Phase,若Client端在此阶段查找到所需服务则立即跳转入Main Phase。

    Main Phase

    进入Main Phase后Client端不再发送FindService,但Server端以CYCLIC_OFFER_DELAY继续发送OfferService,直至ECU休眠或关机。

    报文特征

    FindService& OfferService的报文格式的Entry部分与订阅报文略有区别,格式如下,每个字段都有其相应作用,篇幅有限只能分享几个小知识点,无法一一赘述,感兴趣的朋友可以自行查看协议。
    在这里插入图片描述

    知识点总结

    <1> OfferService的TTL字段可以为0,此时表示StopOfferService。
    <2> FindService的InstanceID字段为0xFFFF时有特殊含义,表示查找该Service的所有服务实例。
    <3>MajorVersion必须完全一致才兼容,MinorVersion向后兼容。
    <4>FindService报文一般不携带节点信息.
    <5>FindService报文包含的信息为所需的服务ID和服务实例ID。
    <6>FindService报文以组播形式在局域网内进行服务搜索。
    <7>OfferService报文必须携带节点信息。
    <8>OfferService报文包含的信息为所提供的服务ID和服务实例ID。
    <9>OfferService报文以组播形式在局域网内进行服务多播。
    <10>收到FindService包含的服务是己身提供服务时,Server端应第一时间进行OfferService应答。
    

    3.2.Subscribe & SubscribeACK服务订阅

    使用场景

    订阅发生在Main Phase,Client端在收到所需服务的OfferService之后,判断该服务是否包含所需的事件组,若包含,则向该OfferService包含的节点信息发送Subscribe报文。当Server端收到订阅请求之后,若服务有效应理解发送SubscribeACK,进行应答(订阅TCP服务需要先建立TCP连接)。

    报文特征

    Subscribe报文的Entry格式如下:
    在这里插入图片描述

    知识点总结

    <1>Subscribe以单播形式发送。
    <2>Subscribe必须携带Client端的节点信息,节点信息数量大于0,小于3,在Endpoint中指明Client的Transport Protocol、Port以及Transport Protocol。
    <3>Subscribe报文TTL等于0时,表示StopSubscribe。
    <4>Subscribe报文订阅的最小单位时是事件组。
    <5>Initial Data Requested Flag [1 bit],请求发送initial Event的标志位。(当前业内不使用)
    <6>Counter [uint4]:用于区分相同用户相同事件组的订阅,加一累计。(当前业内不使用)
    <7>SubscribeACK以单播形式发送。
    <8>SubscribeACK只有在包含多播事件组时才会包含Endpoint信息,其中包含Multicast Transport Protocol和Port,Transport Protocol默认为UDP。
    <9>SubscribeACK报文TTL等于0时,表示SubscribeNACK,即拒绝订阅。
    <10>若要订阅TCP服务需要先建立TCP连接。
    

    4. Service Interface

    Service Interface是各个SWC交换服务信息的媒介,应用层通过发送和解析Service Interface来实现信息传递、远程调用算法、远程控制硬件和信息读取。Service Interface共分为四种,每种的使用场景各不相同,分别是R&R Method、F&F Method、Event和Field。下面我将4种服务接口的使用场景和报文解析分别列举讲解。Service Interface报文格式如下:
    在这里插入图片描述

    4.1.R&R Method

    使用场景

    R&R Method全称Request&Response Method,工作机制为请求应答机制。当Client搜索到所需服务后,在服务的有效生存时间内,Client端根据功能需求发出Request,对于R&R Method,Server端必须给予Response应答,若Request存在差错,如Service ID无法识别、Interface Version不正确、数据格式不正确等等,Server端需要进行Error应答,并指明错误信息。
    R&R Method用于短数据的传输、远程算法的调用、远程设备的控制等等场景。
    在这里插入图片描述

    报文特征

    R&R Method报文包含的关键信息有:

    Service ID——所请求的服务;
    Method ID——所请求的方法;
    Length——这里的Length指从Length字段的下一个字节起始的SOME/IP报文字节数;
    Interface Version——接口版本号;
    Message Type——消息类型。
    

    对于R&R Method,其Method ID的第一个bit必须为零,且0不能作为Method ID,因此其取值范围为0x0001-0x7FFF,另R&R Method的充要标志是Message Type为0。ReturnCode用于Error信息的错误指示。

    4.2.F&F Method

    使用场景

    F&F Method全称Fire&Forget Method,工作机制为请求应答机制。当Client搜索到所需服务后,在服务的有效生存时间内,Client端根据功能需求发出Request,对于F&F Method,Server端不能够给予Response应答,若Request存在差错,如Service ID无法识别、Interface Version不正确、数据格式不正确等等,Server端也不需要进行Error应答。
    F&F Method一般用于不需要Response答复执行结果的场景,比如需要Server发送某一个Event,若执行成功,Client会收到Event,因此不需要Response答复,此场景设计一个F&F Method即可。
    在这里插入图片描述

    报文特征

    F&F Method报文格式包含的关键信息有:

    	Service ID——所请求的服务;
    	Method ID——所请求的方法;
    	Length——这里的Length指从Length字段的下一个字节起始的SOME/IP报文字节数;
    	Interface Version——接口版本号;
    	Message Type——消息类型。
    

    对于F&F Method,其Method ID的第一个bit同样必须为零,且0不能作为Method ID,因此其取值范围为0x0001-0x7FFF,另F&F Method的充要标志是Message Type为1。ReturnCode为0。

    4.3.Event

    使用场景

    Event用于Server端向已定阅的Client端发送通知,一般用于状态值的通知或触发性事件的通知。发送模式一般分为On Change和Cycle两种,可以根据功能进行TCP发送、UDP单播发送和UDP多播发送。
    在这里插入图片描述

    报文特征

    Event报文格式包含的关键信息有:

    	Service ID——该通知所归属的服务;
    	Event ID——该通知的编号;
    	Length——这里的Length指从Length字段的下一个字节起始的SOME/IP报文字节数;
    	Interface Version——接口版本号;
    	Message Type——消息类型。
    

    对于Event,其Event ID的第一个bit必须为1,且0x8000不能作为Method ID,因此其取值范围为0x8001-0xFFFE(0xFFFF没有见过使用,SOME/IP中全F常表示特殊含义,了解的朋友可以分享一下),另Event的重要标志是Message Type为2。ReturnCode为0。

    4.4.Field

    Field在报文结构上就是由Method和Event组成,所以报文结构不在赘述,Field接口更侧重于域值的管理,对于AUTOSAR架构而言,在系统配置中单独设立了一个接口用于Field的配置,对于Linux常用的vsomeip协议栈而言,Field的发送可以直接通过调用Method和Event的发送和解析接口实现,Field暴露的服务接口由Notifier、Getter、Setter三种,如下:

    4.4.1.Notifier

    在这里插入图片描述
    Notifier报文是Event格式,用于服务器端对域值的主动通知,在网络中传输时与Event报文没有区别,尽在内部软件层面存在接口区分。推荐使用On Change模式进行发送。

    4.4.2.Getter

    Getter报文使用R&R Method格式,用于Client端主动获取域值,Server端收到Getter请求后应使用Getter Response将当前域值发送给Client端,Getter请求报文一般不携带参数。
    在这里插入图片描述

    4.4.3.Setter

    Setter报文使用R&R Method格式,用于Client端主动更改域值,Server端收到Getter请求后应使用Setter Response将更新后的域值发送给Client端,Setter请求报文必须携带参数。

    5. 结语

    SOME/IP的知识即有很连贯的逻辑性,又同时包含了很多琐碎的知识,一篇文章很难全部说清楚,更多时候要在实操中学习,这边文章仅对SD和Service Interface做了分享,感兴趣的话可以收藏起来,后续有时间的话,本人再更新下SOME/IP 的序列化、SOME/IP的ETS协议栈一致性测试和应用服务定义实操相关的知识,搞清楚报文的每一个字段可以很好的帮助理解哦,欢迎大家批评指正,一起进步。

    展开全文
  • TCP/IP协议分层模型详解

    万次阅读 多人点赞 2019-10-29 15:19:48
    TCP/IP协议 分层模型 数据包传输 网络协议
  • 网络层协议详解(主要是IP协议、ICMP协议和ARP协议) 一、网络层的功能 定义了基于IP协议的逻辑地址; 连接不同的媒介类型; 选择数据通过网络的最佳路径。 二、IP数据包格式 第一层 版本:该字段包含的是IP的版本...
  • TCP/IP网络协议详解

    千次阅读 2021-03-30 18:54:59
    OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。 二、 TCP/IP 基础 2.1 TCP/IP 的具体含义 从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP ...
  • TCP/IP协议簇之HTTP协议

    千次阅读 2020-09-30 16:06:02
    1.HTTP协议概述及特点 1.1 HTTP协议概述 1.2 HTTP协议特点 2. HTTP报文格式 2.1 HTTP请求报文 2.2HTTP响应报文 3.HTTP请求/响应头参数 3.1 通用请求首部 3.2常用请求头部参数 3.3常用响应头部参数 ...
  • TCP/IP协议栈详解

    千次阅读 2018-04-03 11:55:10
    TCP/IP协议族 1.1 简介 TCP/IP协议族由5层组成:物理层、数据链路层、网络层、运输层和应用层。前四层与OSI模型的前四层相对应,提供物理标准、网络接口、网际互联、以及运输功能。而应用层与OSI模型中最高的三层相...
  • TCP/IP协议理论

    千次阅读 2017-08-28 19:35:28
    参考文献: 《TCP-IP详解卷一:协议》 《用TCP-IP进行网际互联第一卷:...OSI结构仅仅停留在理论阶段,没有以实践作为依据,实现起来过去复杂,所以TCP/IP协议栈简化了。 从底层到顶层剖析TCP/IP协议栈 1...
  • TCP/IP协议,HTTP协议等相关概念的学习

    万次阅读 多人点赞 2018-05-14 10:36:50
     TCP是Tranfer Control Protocol的简称,TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接...
  • TCP/IP协议集详解

    万次阅读 2018-04-04 23:30:43
    一、应用层1、Telnet:常用于服务器远程控制,它使用虚拟终端机的形式,提供以字符串命令为主的双向交互功能。由于传统的Telnet会话数据没有加密,目前很多服务器都改用了更安全的SSH注:SSH (Secure Shell)是一种...
  • RFC791(IP协议)——概述

    千次阅读 2019-02-15 22:48:20
    下图说明了IP协议再整个协议分层中所处的位置: IP协议一侧对接的是高层的主机对主机类型的协议,另一侧对接的是本地网络协议。这里的“本地网络协议”可以是建筑内的小型网络,也可以是像阿帕网的大型网络。 2.2 ...
  • TCP/IP协议学习总结

    万次阅读 多人点赞 2021-10-28 11:37:44
    TCP/IP协议学习总结网络基础知识连接人与人的计算机网络协议随处可见的协议协议的必要性计算机中的协议分组交换协议协议分层与OSI参考模型协议的分层OSI参考模型OSI协议与OSI参考模型OSI参考模型中各个分层的作用7层...
  • IP协议报文头部解析

    千次阅读 2020-04-18 22:11:55
    IP协议是TCP/IP协议族中最为核心的协议。它提供不可靠、无连接的服务,也即依赖其他层的协议进行差错控制。在局域网环境,IP协议往往被封装在以太网帧中传送。而所有的TCP、UDP、ICMP、IGMP数据都被封装在IP数据报中...
  • TCP/IP协议栈到底是内核态的好还是用户态的好?

    万次阅读 多人点赞 2018-06-02 08:10:51
    “TCP/IP协议栈到底是内核态的好还是用户态的好?”这根本就是一个错误的问题,问题的根源在于,干嘛非要这么刻意地去区分什么内核态和用户态。 引子 为了不让本人成为干巴巴的说教,在文章开头,我以一个实例...
  • TCP/IP协议的基本工作原理

    万次阅读 2017-10-13 09:23:38
    摘要TCP/IP协议,或称为TCP/IP协议栈,或互联网协议系列。TCP/IP协议栈(按TCP/IP参考模型划分),TCP/IP分为4层,不同于OSI,他将OSI中的会话层、表示层规划到应用层。TCP/IP是互联网的核心协议,也是大多数网络...
  • tcp/ip协议三次握手、四次挥手

    千次阅读 多人点赞 2021-08-24 22:03:23
    tcp/ip协议三次握手、四次挥手TCP报文格式两次握手三次握手四次挥手 TCP报文格式 32位序号:随机生成,唯一标识当前报文的序号是多少,seq表示 32位确认序号:对上一条发送的信息进行一个消息的确认,ack表示 ACK:...
  • OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。 二、TCP/IP 基础 ① TCP/IP 的具体含义 从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两...
  • TCP/IP协议集简介

    千次阅读 2018-07-08 20:27:08
    目前使用最广泛的网络协议就是TCP/IP协议。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护...
  • UDP协议与IP协议浅析

    千次阅读 2017-04-05 16:06:21
    TCP/IP协议栈主要分为四层:应用层、传输层、网络层、数据链路层,每层都有相应的协议,如下图 所谓的协议就是双方进行数据传输的一种格式。整个网络中使用的协议有很多,所幸的是每一种协议都有RFC文档。在这里只对...
  • TCP/IP协议簇总结

    千次阅读 2019-06-25 16:18:16
    里面包括IP协议、IMCP协议、TCP协议。 IP协议 ICMP协议(网络控制文协议) 将IP数据包不能传送的错误信息传送给主机 查询报文 ping查询:主机是否可达,通过计算间隔时间和传送多少个包的数量子网掩码时间戳...
  • Hart/Hart-IP协议 介绍、分析和应用

    千次阅读 2017-03-04 20:23:20
    HART协议最初是由美国Rosemount公司开发,已应用了多年。为了满足体量增长快速的工业数据传输,通过以太网来访问数据,HART通信基金会的HART协议规范增添了这个...Hart-IP为访问一些智能设备和过程信息提供了新的选项。
  • TCP/IP协议栈之lwIP

    千次阅读 2019-04-22 22:47:32
    weight IP)最初由瑞典计算机科学院(Swedish Institute of Computer Science)的Adam Dunkels开发,现在由Kieran Mansley领导的一个全球开发团队开发、维护的一套用于嵌入式系统的开放源代码TCP/IP协议栈,...
  • TCP/IP协议学习之IP协议首部格式

    千次阅读 2016-01-27 19:12:58
    注:本文系学习《TCP/IP协议卷一》一书的学习笔记,为了描述精准,部分句子使用书中原文,或稍有不同但含义一样,这些句子会加粗标志。 IP协议是TCP/IP协议族中最核心的协议,所有TCP,UDP,ICMP,IGMP等协议的数据都...
  • 深入理解网络协议,需要观察它们的工作过程并使用它们,即观察两个协议实体之间交换的报文序列,探究协议操作的细节,使协议实体执行某些动作,观察这些动作及其影响。
  • 最详细的http协议、tcp/ip协议

    万次阅读 多人点赞 2018-07-02 16:49:43
    Git详细使用命令https://blog.csdn.net/qq_41517936/article/details/98780052 微信小程序开发 --- 每天的学习进度https://blog.csdn.net/qq_41517936/article/details/98991262 微信小程序开发--- 初始小程序...
  • TCP/IP协议漏洞实验

    千次阅读 2018-06-03 15:06:35
    实验题目:Attack Lab: Attacks on TCP/IP Protocols 实验学时:6 日期:2016.5.2 实验目的: 体会TCP/IP协议的漏洞,并针对这些漏洞做出相应攻击,感受网络安全方面所面临的挑战,理解为何网络安全措施是必要的。...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    ◆ 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup; ◆ 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who; ◆ 其它...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 328,905
精华内容 131,562
关键字:

当前使用的ip协议版本是