计算机网络——深入理解TCP/IP

1.TCP协议

1.1 TCP首部:squirrel:

计算机网络——深入理解TCP/IP

  • src port:源端口占16bit,范围为0-65535。

  • dst port:目的端口占16bit,指明接收者所用的端口号

  • Sequence number:序列号占32bit,用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。如果将字节流看作在两个应用程序间的单向流动,则 TCP 用顺序号对每个字节进行计数。序号是 32bit 的无符号数,序号到达 (2^32) - 1 后又从 0 开始。当建立一个新的连接时, SYN 标志变 1 ,顺序号字段包含由这个主机选择的该连接的初始顺序号 ISN ( Initial Sequence Number )

  • Acknowledgement number:确认号占32bit,即发送确认的一端所期望收到的下一个顺序号。因此,确认序号应当是上次已成功收到数据字节顺序号加 1 。只有 ACK 标志为 1 时确认序号字段才有效

    面试题:确认号为什么是上次成功收到数据字节顺序号加1呢?:fire: :fire::fire:
    其实确认号本身定义也能说明问题,即发送确认的一端所期望收到的下一个序列号,说明本次接收的数据字节没问题,并且指明下一个期望收到的序列号!还有就是用在超时重传机制中,比如发送方发送了5个数据包:1,2,3,4,5,但是2丢了,此时接收方并不会对3确认,而是立马进行对1数据包ack 的重传,即期望收到数据包2!

  • Offset:报头长度占4位,给出报头中 32bit 字的数目。需要这个值是因为任选字段的长度是可变的。即TCP 最多有 60(15 * 4) 字节的首部

  • Resrvd:保留区域,6位,保留给将来使用,目前必须置为 0

  • Control Flags(6位)控制位包括:

    URG:为 1 表示紧急指针有效,为 0 则忽略紧急指针值
    ACK:为 1 表示确认号有效,为 0 表示报文中不包含确认信息,忽略确认号字段
    PSH:为 1 表示是带有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满
    RST:用于复位由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1 的报文,那么一定发生了某些问题
    SYN:同步序号,为 1 表示连接请求,用于建立连接和使顺序号同步( synchronize )
    FIN:用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流

  • Window Size:窗口大小占16bit,表示从确认号开始,本报文的接收方可以接收的字节数,即接收方接收窗口大小。窗口大小是一个 16bit 字段,因而窗口大小最大为 65535(2^16 - 1)

  • Checksum:校验和占16bit,对整个的 TCP 报文段(包括 TCP 头部和 TCP 数据),以 16 位字进行计算所得。这是一个强制性的字段,要求由发送端计算和存储,并由接收端进行验证可靠性:boom::boom::boom:

    计算机网络——深入理解TCP/IPTCP校验和覆盖TCP首部和TCP数据,而IP首部中的校验和只覆盖IP的首部,不覆盖IP数据报中的任何数据。
    TCP的校验和是必需的,而UDP的校验和是可选的。
    TCP和UDP计算校验和时,都要加上一个12字节的伪首部。
    伪首部共有12字节,包含如下信息:源IP地址、目的IP地址、保留字节(置0)、传输层协议号(TCP是6)、TCP报文长度(报头+数据)。
    伪首部是为了增加TCP校验和的检错能力:如检查TCP报文是否收错了(目的IP地址)、传输层协议是否选对了(传输层协议号)等。

  • Urgent Pointer:紧急指针占16bit,是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。 只有当URG 标志置 1 时紧急指针才有效

  • Option and Pad:选项和填充,最多占40字节。
    计算机网络——深入理解TCP/IP
    选项的第一个字段kind说明选项的类型。有的TCP选项没有后面两个字段,仅包含1字节的kind字段。第二个字段length(如果有的的话)指定该选项的总长度,该长度包括kind字段和length字段占据的2字节。第三个字段info(如果有的话)是选项的具体信息。常见的TCP选项有7中,如下图

计算机网络——深入理解TCP/IP

 kind 为 2:最大报文段长度MSS(Maximum Segment Size)**
指明自己期望对方发送TCP报文段时数据字段的长度。数据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度。MSS不宜设的太大也不宜设的太小。若选择太小,极端情况下,TCP报文段只含有1字节数据,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据片。在终点要把收到的各个短数据片装配成原来的TCP报文段。当传输出错时还要进行重传,这些也都会使开销增大。因此MSS应尽可能大,只要尽量在IP层传输时不需要再分片就行。对以太网而言,MSS值是14601500-40)字节。在连接建立过程中,双方都把自己能够支持的MSS写入这一字段。MSS只出现在SYN报文中。即:MSS出现在SYN=1的报文段中

计算机网络——深入理解TCP/IP

1.2 TCP 流协议

发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系,这就是字节流的概念,应用程序对数据的发送和接收是没有边界限制的。UDP则相反,发送端应用程序每执行一次写操作,UDP模块就将其封装成一个UDP数据报并发送。接收端必须及时针对每一个UDP数据报执行读操作(通过recvfrom系统调用),否则就会丢包(这经常发生在较慢的服务器上)。
推荐阅读 TCP字节流与UDP数据报

1.3 TCP 可靠传输的机制:squirrel:

1.序列号

2.校验和

3.流量控制 和 拥塞控制 :boom: :boom: :boom:

:one:流量控制

在网络传输中,发送方发送数据的速度很快,接收方来不及读取其缓冲区就很快overflow了。Flow control的目的就是在于避免这一情况的出现,是一种同步发送方发送速度和接收方读取速度的方式,即发送方发送数据应避免使得接收方的缓冲区溢出(overflow),而造成接收方对数据的丢弃。简单来说,flow control提供一个速度匹配(speed-matching)机制,即令发送方发送数据的速度和接收方读取数据的速度匹配。

  1. sender维护一个变量,这个变量叫做receive window,即rwnd,记录receive buffer的剩余空间,注意这个值是接收方报文段中的Window size字段,另外在TCP的首部中的40字节选项中还包含了一个窗口扩大因子M,实际的窗口大小是窗口字段的值左移M位。
  2. sender还会维护另外两个变量,分别叫做LastByteSentLastByteAcked
  3. receiver维护两个变量,叫做LastByteReadLastByteRcvd
    计算机网络——深入理解TCP/IP

本质上讲,flow control的实现就是,receiver把自己的buffer还剩下多少空间以值rwnd(tcp首部中Window size字段)的形式发回给sender,然后sender通过比较三个值:rwnd, LastByteSent和LastByteAcked之间的关系来控制自己发送数据的速度。即要满足以下关系:


下图只是个极端情况,即接收方发送报文段的window size字段为0,发送方需要定期的发送一个试探窗口,目的是为了取探测接收端的窗口大小:
计算机网络——深入理解TCP/IP

:two:拥塞控制

官方定义:控制sender向connection传输数据的速率,使这个速率为网络拥堵状况的函数。 即拥塞控制更是一种网络全局的控制,不仅要考虑接收方的缓冲区大小,还要考虑整个网络的拥塞状况!sender端要维护一个拥塞窗口,即cwnd

拥塞控制算法如下 :eyes::eyes::eyes:
计算机网络——深入理解TCP/IP

计算机网络——深入理解TCP/IP

总结一下:

  • 流量控制和拥塞控制两者是相辅相成的。即sender的发送速率要满足:
  • 流量控制是一种端到端的控制,而拥塞控制更是对整个网络情况的一种全局的控制!

4.ARQ协议

5.超时重传

2.IP协议

2.1 IP协议主要功能:squirrel:

l. 寻址与路由:boom:

  • 用IP地址来标识Internet的主机:在每个IP数据报中,都会携带源IP地址和目标IP地址来标识该IP数据报的源和目的主机。IP数据报在传输过程中,每个中间节点(IP 网关)还需要为其选择从源主机到目的主机的合适的转发路径(即路由)。IP协议可以根据路由选择协议提供的路由信息对IP数据报进行转发,直至抵达目的主机。
  • IP地址和MAC地址的匹配,ARP协议。数据链路层使用MAC地址来发送数据帧,因此在实际发送IP报文时,还需要进行IP地址和MAC地址的匹配,由TCP/IP协议簇中的ARP(地址解析协议)完成。

2.分片与重组

  • IP数据报通过不同类型的通信网络发送,IP数据报的大小会受到这些网络所规定的最大传输单元(MTU)的限制。

  • 将IP数据报拆分成一个个能够适合下层技术传输的小数据报,被分段后的IP数据报可以独立地在网络中进行转发,在到达目的主机后被重组,恢复成原来的IP数据报。

2.2 IP首部:squirrel:

计算机网络——深入理解TCP/IP

  • Version: 版本字段占4 bit(0100表示使用的 IPv4协议)对等层之间要使用同一种IP协议

  • Header Length: 头部长度字段占4 bit ,可表示最大数值1111,即最大为60字节,也就是说明IP数据包头部长度为20-60字节,而且有固定的20字节!

  • Type of Service:服务类型字段占8 bit ,定义IP封包在传送过程中要求的服务类型,TOS包括共8位,包括3 bit的优先权字段(取值可以从000-111所有值),4 bit的TOS子字段和1 bit未用位但必须置0。具体如下

分类 作用
开头3位
111–Network Control(网络控制);
110–Internetwork Control(网间控制);
101–Critic(关键);
100–Flash Override(疾速);
011–Flash(闪速);
010–Immediate(快速);
001–Priority(优先);
000–Routine(普通);
优先级6和7一般保留给网络控制数据使用,如路由。
优先级5推荐给语音数据使用。
优先级4由视频会议和视频流使用。
优先级3给语音控制数据使用。

优先级1和2给数据业务使用。
优先级0为默认标记值。
中间4位 1000
0100
0010
0001
0000

最小时延
最大吞吐量
最高可靠性
最小代价
一般服务
4 bit中只能置其中1 bit
最后1位 1 bit未用位但必须置0
  • Total Length :IP数据包总长度字段占 16 bit,即2^16 - 1 = 65535 字节,值为首部和数据之和的长度,数据报的最大长度为65535字节(MTU最大传送单元);总长度字段是IP首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。尽管以太网的最小帧长为46个字节(将在本章后面介绍),但是IP数据可能会更短。如果没有总长度字段,那么IP层就不知道46字节中有多少是IP数据报的内容。

  • identifier:标识字段占16 bit。标识字段唯一地标识主机发送的每一份数据报。通常每发送一份消息它的值就会加1。同一个数据报的所有分片都具有相同的标识值。

  • flag: 标志字段占3bit。位1保留,位2表禁止分片(DF),若设置了此位,IP模块将不对数据报进行分片,在此情况下若IP数据报超过MTU,IP模块将丢弃数据报并返回一个ICMP差错报文;位3标识分片(MF),表示后面还有若干个数据报,除了数据报的最后一个分片,其他分片都要把它设置为1。

  • offset:片位移字段占13bit。分片相对原始IP数据报数据部分的偏移。实际的偏移值为该值左移3位后得到的,所以除了最后一个IP数据报分片外,每个IP分片的数据部分的长度都必须是8的整数倍。

identifier,flag和offset主要用于IP Package分片的


  • TTL:生存时间字段占8bit。数据报到达目的地之前允许经过的路由器跳数。TTL值被发送端设置,常设置为64。数据报在转发过程中每经过一个路由该值就被路由器减1.当TTL值为0时,路由器就将该数据包丢弃,并向源端发送一个ICMP差错报文。TTL可以防止数据报陷入路由循环。

    字节面试题:一个IP数据包在网络节点中传输可能陷入死循环嘛?:fire: :fire::fire:
    不可能呀,因为由上面这个TTL字段呀,就算极端情况下陷入死循环,也必因为IP数据报的TTL减到0而最终失效,所以不可能陷入死循环


  • protocol:协议字段占8bit。区分IP协议上的上层协议。在Linux系统的/etc/protocols文件中定义了所有上层协议对应的协议字段,ICMP为1,TCP为6,UDP为17。

  • checksum首部校验和字段占16bit。由发送端填充接收端对其使用CRC算法校验,检查IP数据报头部在传输过程中是否损坏。
    计算方式如下:在发送端的时候,将校验和全部设置为0,然后把数据报首段数据全部进行反码相加,得到的值为校验和,放入首部的校验和字段;然后在接收端的时候,将数据报首段数据和校验和一起全部反码相加,最后若是得到零,则保留,若不是零,则说明数据报在传输过程中发生了改变,则丢弃该数据报.

    IP/ICMP/IGMP/TCP/UDP等协议的校验和算法都是相同的,此处通过IP数据报校验和来说明
    计算机网络——深入理解TCP/IP

2.3 IP地址详解

  • IP地址:P地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的 32 位的标识符。注意,每个IP地址都是独一无二的,就像人的身份证号码一样。IP数据包在网络中转发过程

  • IP地址分类:

    分类 网络数量 范围 特殊说明
    A类地址 126(2^7-2) 1.0.0.1-127.255.255.254 1.0.0.0127.255.255.255广播地址
    B类地址 16384(2^14) 128.0.0.0-191.255.255.254
    C类地址 2097152(2^21) 192.0.0.0-223.255.255.254

D类地址是组播地址,E类地址是将来和实验使用

如果告诉你一个带网络前缀的IP地址,那么你应该可以根据它推算出该地址的子网掩码,默认网关地址,默认广播地址,网络地址,受限广播地址,本机网络地址,以及如何平均划分子网空间。举个例子,已知分配给创新实验室的地址块中的一个地址为193.6.7.0/24,请回答下列问题:
(1)该网络的网络前缀是多少?
答案:24
解析:193.6.7.0/24 加粗部分就是网络前缀
(2)该网络的子网掩码是多少?
答案:255.255.255.0
解析:子网掩码是根据网络前缀推算的,255.255.255.0转换成二进制表示为11111111.11111111.11111111.00000000,网络前缀代表的是该地址的网络位,前面说到一个IP地址是由32位二进制数表示的,网络前缀为24就表示从左往右数前24位为该网络的网络位,剩下的后8位为该网络的主机位。而子网掩码就是网络位全为1,主机位全为0,比如说如果本题中给出的网络前缀变成26,意思就是该网络的子网掩码为11111111.11111111.11111111.11000000,换算成十进制数就是255.255.255.192
(3)该网络的默认网关地址为多少?
答案:193.6.7.254/24
解析 :默认网关地址是主机位除最后一位全置1后得到的,根据网络前缀24可知前24位为网络位,后8位为主机位,因此该网络的默认网关地址就是IP地址193.6.7.11111110(加粗的部分为主机位),换算成十进制数即193.6.7.254/24(注意,但凡是跟IP地址格式一样的都要加网络前缀,跟子网掩码格式一样的就不用加),假如本题的网络前缀变成26,那么主机位就变成32-26=6位了,即默认网关地址为193.6.7.00 111110 =》193.6.7.62/26
(4)该网络的默认广播地址是多少?
答案:193.6.7.255/24
解析:默认广播地址和默认网关地址可以一起记,因为默认广播地址就是主机位全为1,假如本题的网络前缀变成26,默认广播地址为193.6.7.00 111111 => 193.6.7.63/26
(5)该网络的网络地址是多少?
答案:193.6.7.0/24
解析:网络地址是IP地址与子网掩码转换成二进制数再相与运算得来的结果

2.4. IP路由详解

1. 什么是路由?

百度百科中路由是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。

计算机网络——深入理解TCP/IP

从PC1去往PC2,中间经过路由器,路由器RTA根据目的IP指导数据包转发的过程就称为路由。路由器负责为数据包选择一条最优路径,并进行转发。

2.什么是路由器?

路由器实质上是一种将网络进行互联的专用计算机,路由器是网络层的设备,(交换机是数据链路层的设备)用于指导IP报文转发。路由器也可以称之为网关设备。路由器的每个接口对应不同的网段,可以隔离广播域。当数据包需要在不同网段间转发时需要通过路由器做转发,路由器收到数据包后,会根据数据包中的目的IP地址选择一条最优的路径,并将数据包转发到下一个路由器,路径上最后的路由器负责将数据包送交目的主机。

3. 什么是路由表?

计算机网络——深入理解TCP/IP
每个路由器中都保存着一张路由表,表中每条路由项都指明了数据包要到达某网络或某主机应通过路由器的哪个物理接口发送,以及可到达该路径的哪个下一个路由器,或者不再经过别的路由器而直接可以到达目的地。

4. 路由器如何依据路由表转发数据包呢?——最长匹配原则

推荐阅读 :www.360doc.com/content/17/1216/02/1...
路由器在转发数据时,需要选择路由表中的最优路由

当数据报文到达路由器时:

  • 路由器首先提取出报文的目的IP地址,然后查找路由表,将报文的目的IP地址与路由表中某表项的掩码字段做“与”操作,“与”操作后的结果跟路由表该表项的目的IP地址比较,相同则匹配上,否则就没有匹配上。

  • 当与所有的路由表项都进行匹配后,路由器会选择一个掩码最长的匹配项

计算机网络——深入理解TCP/IP

如图所示,路由表中有两个表项到达目的网段10.1.1.0,下一跳地址都是20.1.1.2。如果要将报文转发至网段10.1.1.1,则10.1.1.0/30符合最长匹配原则

5. 路由表生成原理

推荐阅读:blog.csdn.net/sinat_36118270/artic...
四种方式:直连路由,静态路由,动态路由,缺省路由

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!