2.TCP/IP协议系统

TCP/IP协议系统

文章目录

  • TCP/IP协议系统
    • 1.网络访问层
      • 1.1 协议与硬件
      • 1.2 网络访问层与OSI模型
      • 1.3 网络架构
      • 1.4 以太网
    • 2. 网际层
      • 2.1 路由网络如何发送数据
      • 2.2 网际层的功能
      • 2.3 网际协议(IP协议)
        • 2.3.1 IP报头字段
        • 2.3.2 IP寻址
        • 2.3.3 特殊的IP地址
      • 2.4 地址解析协议(ARP)
      • 2.5 逆向ARP(RARP)
      • 2.6 Internet控制消息协议(ICMP)
    • 3. 子网划分和CIDR
      • 3.1 子网
      • 3.2 子网掩码
      • 3.3 CIDR无类别域间路由
    • 4. 传输层
      • 4.1 传输层重要概念
        • 4.1.1 面向连接和无连接的协议
        • 4.1.2 端口和套接字
        • 4.1.3 多路复用和多路分解
      • 4.2 TCP和UDP
        • 4.2.1 TCP:面向连接的传输协议
          • 4.2.1.1 TCP数据格式
          • 4.2.1.2 TCP连接(三次握手)
          • 4.2.1.3 TCP以段为单位发送数据
          • 4.2.1.4 利用窗口控制提高速度
          • 4.2.1.5 关闭连接(四次挥手)
        • 4.2.2 UDP:无连接传输协议
      • 4.3 其他传输层协议
      • 4.4 防火墙和端口
    • 5. 应用层
      • 5.1 网络服务
        • 5.1.1 文件和打印服务
        • 5.1.2 名称解析服务
        • 5.1.3 远程访问
        • 5.1.4 Web服务
      • 5.2 API和应用层

1.网络访问层

定义了与网络硬件交互访问传输介质的过程。

1.1 协议与硬件

网络访问层很不统一,它管理为物理网络准备数据所必须的服务与功能。

  • 与计算机网络适配器的连接
  • 根据合适的访问方式调整数据传输
  • 数据转化为电子流或模拟脉冲的形式,以在传输介质上进行传输;
  • 对接收到的数据进行错误检查
  • 给发送的数据添加错误检查信息,从而让接收端计算机能够对数据进行错误检查。

1.2 网络访问层与OSI模型

TCP/IP的网络访问层大致对应OSI模型的物理层数据链路层

对于OSI模型:

  • 物理层:负责将数据帧转化为适合于传输介质的比特流;在接收端物理层把这些脉冲(比特流)重新组合为数据帧。
  • 数据链路层:执行两个独立的任务,相应地划分为两个子层:
    • 介质访问控制(MAC):提供与网络适配器连接的接口;
    • 逻辑链路控制(LLC):对经过子网传递的帧进行错误检查

网络适配器的物理地址通常也称为MAC地址,这是因为物理寻址是由MAC子层负责的。

1.3 网络架构

网络架构具有一系列的规范来管理介质访问、物理寻址、计算机与传输介质的交互。在决定网络架构时,实际上在决定如何设计网络访问层。

这些规范包括以下几个方面的考量:

  • 访问方式:定义计算机如何共享传输介质的一组规则。
  • 数据帧格式:来自网际层的IP级数据报以预定义的格式封装成数据帧,封装在报头的数据必须提供在物理网络上传递数据所需要的信息。
  • 布线类型:网络中所使用的线缆类型对于其他设计参数具有一定的影响。
  • 布线规则

网络访问层的软件必须伴随特定的硬件设计。

网络访问层包括如下一些网络架构:

  • IEEE 802.3:以太网,在许多办公室和家庭使用的基于线缆的网络;
  • IEEE 802.11:无线网络,在办公室、家庭和咖啡厅使用的无线LAN网络技术。其中,Wi-Fi是一个创建于IEEE 802.11标准的无线局域网技术;
  • IEEE 802.16:WiMAX,用于长距离的移动无线连接的技术;
  • 点到点协议:PPP,用于电话线路的Modem连接的协议。
    ……

1.4 以太网

以太网普及的原因:

  • 价格适中。以太网线缆比较便宜,易于安装;以太网网络适配器和硬件组件相对来说也比较便宜。
  • 相比于等效的无线技术,有线以太网的速度通常更快。
  • 有线以太网比无线技术在安全问题上,线缆提供了一道天然屏障。

典型的以太网中,所有的计算机共享同一个公共的传输介质。

以太网使用CSMA/CD(载波监听多路访问/冲突检测)来判断计算机何时可以把数据传输到访问介质。

CSMA/CD具体的方法是,所有计算机都监视传输介质,在传输之前等待线路空闲。如果有两个计算机尝试同时发送数据,就会发生冲突,计算机就会停止发送数据,等待一个随机的时间间隔,然后再尝试发送。

现代以太网中,像网络交换机这样的设备会对流量进行管理,减少冲突的发生,从而使以太网的运行更具效率。

以太网帧:

当以太网软件从网际层接收到数据报之后,执行以下操作:

1.把网际层的数据分解成较小的块;

2.把数据块打包成帧。

以太网帧的内容:

  • 前导码:表示帧起始的一系列比特(8字节,最后一字节是帧起始符);
  • 目的地址:接收帧的网络适配器的6字节物理地址;
  • 源地址:发送帧的网络适配器的6字节物理地址;
  • 可选VLAN标记:2字节,目的是允许多个虚拟LAN通过同一个网络交换机运行;
  • 长度:2字节字段,表示数据字段的长度;
  • 数据:帧中传输的数据;
  • 帧校验序列(FCS):帧的4字节校验和。

FCS是检验数据传输的常见方式。
发送方计算机计算帧的循环冗余码校验(CRC)值,把这个值写入帧。接收方计算机重新计算CRC然后检查FCS字段,以查看两者是否匹配。
如果两个值不匹配,则说明传输过程中发生了数据丢失或改变,此时一个较高级别的协议会要求重新传输这一帧。

相关定义
FCS:帧校验序列(Frame Check Sequence),以太网帧中的一个字段,包含一个基于CRC的校验值,用来检查数据。
CRC:循环冗余校验(Cyclical Redundancy Check),一种计算校验和的方法,用于检查数据帧中内容的正确性

3.把数据帧传输到对用OSI模型物理层的较低组件,后者把帧转换成比特流,并且通过传输介质发送出去。

以太网上的其他网络适配器接收到这个帧并检查帧的目的地址是否与自身的物理地址相匹配,如果匹配,适配器软件就会处理接收到的帧,把数据传递给协议栈中较高的层。

2. 网际层

物理寻址方式适合单个局域网网段,但是,在路由式网络中,不能利用物理地址实现数据传输。

  • 根据物理地址传输数据所需的发现过程不能跨越路由器接口来运行;
  • 内置在网络适配器中的物理地址不能在地址空间引入逻辑框架。

因此TCP/IP隐藏了物理地址,以一种逻辑化、层次化的寻址方案对网络进行组织。这种逻辑化的寻址方案由网际层的IP协议维护。

地址解析协议(ARP)是另一种网际层协议,它维护一个表格,用于把IP地址映射到物理地址。

2.1 路由网络如何发送数据

在路由网络中,发送数据的策略如下:

1.如果目的地址在源计算机的网段中,源计算机就把数据包直接发送给目的计算机。IP地址被ARP解析成物理地址,数据被直接发送到目的网络适配器。

2.如果目的计算机与源计算机不在同一个网段上

  • 直接将数据发送到网关;
  • 数据通过网关被路由到较高级别的网段,再次重复上述过程;
  • 数据报经过一系列网关被转发到目的网段,目的IP地址被ARP解析为物理地址,数据被发送到目的网络适配器。

网关:是位于局域网网段上的一个设备,能够把数据报转发到其他网段。
网关地址通常由TCP/IP配置来定义。
网关地址使用ARP解析为一个物理地址,数据被发送到网关的网络适配器。

2.2 网际层的功能

为了能够在复杂的路由式网络中传输数据,网际层协议必须具有以下功能:

  • 识别局域网中所有计算机;
  • 提供一种方式来判断何时必须通过网关来发送消息;
  • 提供一种与硬件无关的方式来识别目的网段,从而让数据报能够高效率地经过路由器到达正确的网段;
  • 提供一种方式把目标计算机的逻辑IP地址转化为物理地址,让数据能够传输给目的计算机的网络适配器。

2.3 网际协议(IP协议)

IP协议提供了一种分层的、与硬件无关的寻址系统,具有在复杂路由网络中传输数据所需的服务。

TCP/IP网络上的每一个网络适配器都有唯一的IP地址。

注意IP地址的唯一性是对网络适配器而言的。而计算机可能由多个网卡,因此就会有多个IP地址。
另外,在某些操作系统中,可以给一个网络适配器指定多个IP地址。

主机与节点:

  • 主机:配置有IP地址,但是不进行路由控制的设备。
  • 路由器:配置有IP地址又具有路由控制能力的设备。
  • 节点:主机和路由器的统称。
2.3.1 IP报头字段
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
版本 IHL 服务类型 总长度
标识 标记 分段偏移
生存时间 协议 报头校验和
源IP地址
目的IP地址
IP选项(可选) 填充
数据
更多数据...?
  • 版本:4位,表示所使用的IP版本。目前的IP版本是4,相应的二进制位0100;
  • 网际报头长度(IHL):4位,表示IP报头以32位字为单位的长度。IP报头的最小长度是5个32位字,则IHL为5,相应的二进制位1010;
  • 服务类型:8位,用于对等待通过路由器的数据报进行优先级划分,而目前大多数IP实现是把这个字段全填0;
  • 总长度:16位,表示IP数据报的总长度,这个长度包括IP报头和数据载荷;
  • 标识:16位,IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。

当数据报由于长度超过网络的MTU(Maximum Transmission Unit,最大传输单元)时,IP会把消息拆分到多个数据报,并对这些数据报分配相同的标识号,接收端利用这些数值将接收到的消息重组为原始消息。

  • 标记:3位

    • 第一位不使用,其值总为0;
    • 第二位DF(不分段),表示是否允许分段,0表示允许,1表示不允许;
    • 第三位MF(更多分段),表示是否还有分段正在传输,设置为0表示没有更多分段需要发送,或该数据报没有分段。
  • 分段偏移:13位,给出在较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。偏移量以8个字节为偏移单位,也就是说,每个分片的长度一定时8字节的整数倍。

  • 生存时间(TTL):8位,表示数据报在被抛弃之前能够保留的时间或路由器跳数,时间以秒为单位,跳数即hop。当IP包进行传输时,先会对该字段赋予某个特定的值,当IP包经过一个路由器时,TTL会至少减1,当TTL减到0时,IP包会被抛弃。这个字段可以防止路由环路而导致IP包在网络中不停被转发。

一跳(1 hop)是指利用数据链路层以下分层的功能传输数据帧的一个区间。IP包正是在网络中一个跳间被转发。跳数代表数据报到达目的地之前必须经过的路由器的数量。IP路由又称多跳路由。

  • 协议:8位,表示接收数据载荷的协议,即标识了上层所使用的协议。

    • ICMP协议标识:1(00000001);
    • IGMP协议标识:2(00000010);
    • TCP协议标识:6(00000110);
    • UDP协议标识:17(00010001);
  • 报头校验和:16位,用于检验报头的有效性。数据报经过的每一个路由器都会对这个值进行重新计算,因为TTL字段的值是在递减的。

  • 源IP地址:32位,数据报的源IP地址。

  • 目的IP地址:32位,数据报的目的IP地址。

  • IP选项:长度不固定,支持一些可选的报头设置,主要用于测试、调试和安全的目的。

  • 填充:提供一些额外的0,使IP选项加上填充后的长度使32位的倍数。

  • IP数据载荷:包含传递给传输层的数据。

2.3.2 IP寻址

IP地址是一个32位二进制地址,被分为4个8位段(八位组)。

人们不习惯使用32位二进制地址或8位的二进制八位组,而IP地址最常用的表达方式是点分十进制形式。即将每个八位组都以相应的十进制数值表示,4个十进制数以句点分隔。每个十进制数都位于0-255之间。

IP地址中的一部分是网络ID,一部分是主机ID。指定网络ID和主机ID的方案使用的是地址分类系统

地址分类系统把IP地址划分为不同的地址类。绝大多数IP地址属于以下几类:

  • A类地址:IP地址的前8位表示网络ID,后24位表示主机ID;
  • B类地址:IP地址的前16位表示网络ID,后16位表示主机ID;
  • C类地址:IP地址的前24位标识网络ID,后8位标识主机ID。

规定,32位二进制地址开头

  • 以0开头,为A类地址;
  • 以10开头,为B类地址;
  • 以110开头,为C类地址。

A类、B类和C类网络的地址范围:

地址类 二进制地址前几位值 点分十进制地址中的第一个字段值 排除地址
A 0 0 ~ 127 10.0.0.0 ~ 10.255.255.255、 127.0.0.0 ~ 127.255.255.255
B 10 128 ~ 191 172.16.0.0 ~ 172.31.255.255
C 110 192 ~ 223 192.168.0.0 ~ 192.169.255.255

注意,有一些地址范围作为排除地址被列出,有些IP地址范围没有分配给网络,因为他们被保留为特殊用途。

2.3.3 特殊的IP地址

有少量的IP地址有特殊的含义,不会分配给特定的主机。

  • 全0的主机ID,表示网络本身。比如129.152.0.0表示网络ID为129.152的B类网络。

  • 全1的主机ID,表示广播。比如129.152.255.255表示网络ID为129.152的B类网络的广播地址。广播是向网络中所有主机发送的消息。

  • 127开头的地址是环回地址。目的地址是环回地址的消息是由本地TCP/IP软件发送的,其目的是测试TCP/IP软件是否工作正常。例如ping工具常使用的环回地址是127.0.0.1。

  • RFC 1597(之后被RFC 1918取代)保留了一些IP地址范围用于私有网络。目前这些私有地址主要用于网络地址转换(NAT)设备背后的受保护网络。

  • 169.254.0.0 ~ 169.255.255.255保留用于自动配置。

2.4 地址解析协议(ARP)

局域网上的计算机使用网际层的ARP把IP地址映射为物理地址。

TCP/IP的实现方式让ARP和关于物理地址转换的任何细节对用户来说几乎是透明的。

网段上的每台主机在内存上都保存着一个称为ARP表或ARP缓存的表格ARP缓存网段上其他主机IP地址与物理地址关联起来。当主机需要向网段上的其他主机发送数据时,它会查看ARP缓存来获得接收方的物理地址。

ARP缓存是动态变化的。

  • 如果接收数据的地址不在当前的ARP缓存中,主机就会发送ARP请求帧的广播。ARP请求帧包含未解析的IP地址,还包含发送这个请求的主机的IP地址和物理地址。

  • 网段上的其他主机接收到这个ARP请求,拥有这个未解析IP地址的主机会向发出请求的主机发送自己的物理地址。

  • 这个新解析的IP地址与物理地址的对应关系就会被添加到请求主机的ARP缓存中。

  • 通常ARP缓存里的条目在一个预定的时间之后就会过期,条目就会从表中删除。主机下一次向这个条目所包含的IP地址发送数据时,解析过程会再次重复。

2.5 逆向ARP(RARP)

当我们知道IP地址而不知道物理地址,可以使用ARP;

而在知道物理地址而不知道IP地址,可以使用RARP。

RARP经常和BOOTP协议共同使用来启动无盘工作站。

2.6 Internet控制消息协议(ICMP)

发送到远程计算机的数据通常会经过一个或多个路由器,这些路由器在把数据传输到目的地址的过程中可能产生多种问题。

路由器利用ICMP消息把问题通知给源IP。

ICMP还有其他调试和排错的功能。

常见的ICMP消息:

  • Echo Request(回显请求)和Echo Reply(回显应答):用于测试。ping命令测试与其他主机的连通性时,向某IP地址发送一个数据报,并且要求目的计算机在响应数据报中返回所发送的数据。ping使用的命令实际上就是ICMP的Echo Request和Echo Reply。

ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序。

  • Source Quench(源抑制):路由器来不及处理大量流量的情况下(路由器过载),路由器会向源IP发送源抑制消息,让它降低发送数据的速度。

  • Destination Unreachable(目的不可到达):如果路由器收到一个不能被传递的数据报,ICMP会向源IP返回一个Destination Unreachable消息。

  • Time Exceeded(超时):当数据报由于TTL达到0而被丢弃时,ICMP会向源IP发送这个消息。

  • Fragmentation Needed(需要分段):如果一个数据报的DF位设为1,但是路由器需要对数据报分段才能转发,此时ICMP就会向源IP发送这个消息。

3. 子网划分和CIDR

子网划分就是利用IP地址系统把物理网络分解成更小的逻辑实体(子网)的一种手段。

但是,随着CIDR(Classless Inter-Domain Routing,无类别域间路由)和IPv6等技术的出现,子网划分的传统方法逐渐失去了市场,但是CIDR和IPv6的技术都是借用了基本的子网划分原理。

3.1 子网

IP地址分类系统可以让我们划分地址中的网络部分和主机部分,但是这种分类系统的灵活性不够,很多网络被划分成更小的单元,并且真实世界的分类网络也快消耗殆尽。ISP(Internet 服务供应商)和网络管理员需要更灵活的方式对分类网络进行划分,让数据报能够到达服务于更小的地址空间的路由器。

子网划分可以将网络分解成更小的单元,称为子网的较小单元。

地址分类网络的局限性主要在于不能对网络级别之下的地址空间做任何的逻辑划分。

子网划分就是在网络ID之下提供第二层逻辑组织。路由器能够把数据报发送给网络里的某个子网地址,当数据报到达子网之后,就会被ARP解析为物理地址。

TCP/IP的设计者借用了主机ID里的一些位来形成子网地址。一个名为子网掩码的参数指明了地址中多少位用于子网ID、保留多少位作为实际的主机ID。

3.2 子网掩码

32位二进制值。

子网掩码的每一位代表IP地址中的一个位,用1表示IP地址中属于网络ID或子网ID的位,用0表示IP地址中属于主机ID的位。

如,1111.1111.1100.0000

  • 网络ID寻找网络
  • 子网ID寻找网络中的子网
  • 主机ID寻找子网中的主机

子网掩码同样经常以点分十进制的形式表示,便于人们使用。上例可写为255.255.192.0。

注意全0或全1的网络/子网和主机ID是不能分配的。因此计算子网容纳主机数记得减2。

3.3 CIDR无类别域间路由

CIDR是一种更加流畅灵活的技术,可以在路由表上定义地址块。

CIDR系统不依赖预定义的8位、16位或32位网络ID,不需要地址分类系统,而是使用CIDR前缀来指定地址中作为网络/子网ID的位数。这个前缀有时也称为VLSM(变长子网掩码)

CIDR前缀可以位于地址空间的任何位置,让管理员能够以更灵活的方式定义子网。

CIDR标记使用斜线(/)分隔符,后面跟着一个十进制数来表示地址中网络部分所占的位数。例如,205.123.196.183/25。

CIDR不仅可以划分子网,还有能把多个连续的C类网络聚合或组合为一个条目(超网掩码)。

超网:将几个较小的网络合并为一个较大网络范围的技术。

例如,一个ISP可以分配204.21.128.0 ~ 204.21.255.255的全部C类地址。二进制表示起始和终点地址为11001100.00010101.10000000.00000000和11001100.00010101.11111111.11111111,他们的前17位相同,因此超网掩码是11111111111111111000000000000000,点分十进制形式为255.255.128.0。地址块是使用地址范围内最低的地址外加超网掩码来指定,因此,CIDR网络地址即204.21.128.0/17。

4. 传输层

传输层为网络应用程序提供了一个接口,并且对网络传输提供了可选的错误检测、流量控制和验证功能。

传输层协议的功能:

  • 为网络应用程序提供接口:为应用程序提供访问网络的途径。设计者希望不仅能够向目的计算机传递数据,还能够向目的计算机上的特定应用程序传递数据。

  • 多路复用/多路分解多路复用表示发送端从不同的应用程序和计算机接受数据,再把数据传递到目的计算机上接收数据;多路分解表示在接收端,传输层必须能够从网络层接收数据,把它转发到多个程序,它可以让一台计算机同时支持多个网络程序。多路复用/多路分解的另一个作用是可以让一个应用程序同时维持与多个计算机的连接。

  • 错误检测、流量控制和验证:精细的质量保证系统会提高传输的可靠性,但需要以增加网络流量和处理时间为代价。因此传输层提供了两种到达目标网络的方式。

    • 传输控制协议(TCP):TCP提供了全面的错误控制和流量控制,能够保证数据正确传输它是一个面向连接的协议。
    • 用户数据报协议(UDP):UDP只提供了非常基本的错误检测,用于不需要TCP全面控制功能的场合,它是一个无连接的协议。

4.1 传输层重要概念

4.1.1 面向连接和无连接的协议

1.面向连接的协议:

会在通信计算机之间建立并维护一个连接,并且在通信过程中监视连接的状态。

通过网络传输的每个数据包都会收到一个确认,发送端计算机会记录状态信息来确保每个数据包都被正确接收,并且需要时重发数据。当数据传输结束后,发送端和接收端计算机都会以适当的方式关闭连接。

2.无连接的协议:

以单向方式向目的计算机发送数据包,也不用向目的计算机正式通知数据的传输状态。目的计算机也不会在接收数据后向源计算机返回状态信息。

4.1.2 端口和套接字

在TCP/IP系统中,应用程序可以使用端口号通过TCP或UDP协议模块指定数据目的地。

端口预定义的内部地址,充当从应用程序到传输层,或从传输层到应用程序之间的通路

套接字是一个由IP地址和端口号组成的地址

例如,套接字地址111.121.131.141.21指向IP地址为111.121.131.141的计算机的端口21。

周知的端口是由互联网数字分配机构(IANA,当前由ICANN来管理)分配给特定程序的端口。

4.1.3 多路复用和多路分解

套接字寻址系统使得TCP或UDP能够执行传输层的另一个重要的任务,即多路复用/多路分解。

将传输层报文段中的数据放置到正确的套接字的工作称为多路分解,确切地说,多路分解其实是多路分发,或者说是数据流的分解。数据交付到特定套接字的工作也就是将数据放到正确的存储位置的过程。

从源主机的不同套接字中收集数据块,井为每个数据块封装上首部信息(在多路分解时使用)从而生成报文段,然后将报文段传递到网络层的工作称为多路复用

简单概括,多路复用就是把多个来源的数据合并成一个输出,多路分解就是把从一个来源接收的数据发送到多个输出。

多路复用/多路分解让TCP/IP协议栈较低层的协议不必关心哪个程序在传输数据,只要处理数据即可。

4.2 TCP和UDP

TCP是为了可靠性,UDP是为了速度。

TCP适用于必须支持交互式会话的应用程序,比如SSH和FTP;UDP适用于自己实现错误检测或不需要过多无错检测的应用程序。

注意,UDP较简单的质量控制并不意味着低质量,应该合理根据需求选择传输层协议。

4.2.1 TCP:面向连接的传输协议

特性:

  • 面向流的处理:TCP以流的方式处理数据。面向流的处理意味着TCP可以一个字节一个字节地接收数据,而不是一次接收一个预定格式的数据块。TCP把接收到的数据组成长度不定的段,再传递到网络层。

通常所说的TCP流是指TCP的字节流传输,其传输的数据是连续有序的字节,所以说TCP是一个流式协议,指的是其数据传输是流式的。

  • 重新排序:如果数据以错误的顺序到达目的地址,TCP模块能够对数据重新排序来恢复原始顺序。

  • 流量控制:确保数据传输不会超过目的计算机接收数据的能力。

  • 优先级与安全:美国国防部对TCP的规范要求可以为TCP连接设置可选的安全级别和优先级。

  • 适当的关闭:TCP像重视建立连接一样重视关闭连接的工作,以确保再连接被关闭之前,所有的数据段都被发送和接收。

4.2.1.1 TCP数据格式

2.TCP/IP协议系统_第1张图片

  • 源端口:16位,分配给计算机上应用程序端口号

  • 目的端口:16位,分配给目的计算机上应用程序端口号

  • 序列号:32位,又称序号,是指发送数据的位置。每发送一次数据,就累加该数据字节数的大小。如果SYN为1,序列号就是初始序列号(ISN),用于对序列号进行同步,数据分段的第一个字节的序列比ISN的值大1;如果SYN不为1,序列号就是当前数据分段的第一个字节的序列号。

序列号不会从0或1开始,而是在建立连接时由计算机生成的随机数作为其初始值。

  • 确认号:32位,用于确认已经接收到的数据分段,其值是下一次应该收到的数据的序列号,即上一个接收到的数据的序列号加1。实际上,确认号表示,当前已经接收到确认应答号前一位为止的全部数据

  • 数据偏移:4位,表示报头的长度,也就是表示TCP所传输的数据部分应该从TCP包的哪一位开始计算。其单位是4字节,也就是说如果数据偏移值为5,表示TCP报头的长度是20字节。

  • 保留:6位,为TCP将来的发展预留空间,一般为0。

  • 控制标记:8位,每个标记各占1位,表示数据分段的特殊信息。

    • CWR(Congestion Window Reduced)(补充):拥塞窗口缩减标记;
    • ECE(ECN-Echo)(补充):ECN标记,置1会通知对方,从对方到这边的网络有拥塞;
    • URG(Urgent Flag):紧急指针有效性标志,为1表示当前数据分段是紧急的;
    • ACK(Acknowledgement Flag):确认序号有效性标志,为1表示确认应答的字段变为有效。TCP规定除了最初建立连接时的SYN包之外,ACK为必须为1。
    • PSH(Push Flag):PUSH标记,为1表示需要将收到的数据立刻传给上层应用协议,为0表示不需要立即传,而先进行缓存。
    • RST(Reset Flag):重置连接标记,为1表示TCP连接中出现异常,必须强制断开连接。
    • SYN(Synchronize Flag):同步序列标记,用于建立连接。
    • FIN(Fin Flag):传输数据结束标记,用于断开连接。
  • 窗口:16位,用于流量控制,通知从相同TCP首部的确认应答号开始能够接收的数据大小,TCP不允许发送超过此处所示大小的数据。

  • 校验和:16位,用于检查数据分段的完整性。

  • 紧急指针:16位,是指一个偏移量指针。在URG位为1时有效,指向标记紧急信息开始的序列号。

  • 选项:指定一些可选设置里面的小设置。

  • 填充:根据需要填充0。

  • 数据

4.2.1.2 TCP连接(三次握手)

TCP一大功能就是为应用程序提供访问网络的接口,这个接口由TCP端口提供。为了通过端口提供连接,必须打开TCP和应用程序的接口,TCP支持两种接口打开状态:

  • 被动打开:某个应用程序进程通知TCP准备通过TCP端口接收数据。这样就会打开TCP到应用程序的连接,从而为参与连接请求做准备。

  • 主动打开:程序要求TCP发起与另一台计算机的连接,这就是主动打开状态。

在通常的情况下,想接收连接的应用程序会将自身以及其TCP端口置于被动打开的状态。在客户端计算机上,客户端的TCP状态可能是关闭的,当用户在一个程序中发起向服务器的连接时,客户端的TCP状态变为主动打开。切换为主动打开状态的计算机上的TCP软件会开始交换一些用于建立连接的信息。这种信息交换称为“三次握手”。

客户端:向网络中其他计算机请求或接受服务的计算机。
服务器:向网络中其他计算机提供服务的计算机。

TCP连接双方需要知道对方的初始序列号(ISN),序列号的同步过程称为三次握手。

  1. 初始状态:客户端处于Closed的状态,服务端处于Listen状态。

  2. 第一次握手:客户端给服务端发送一个数据分段(SYN报文),其中SYN为1,ACK为0,序列号为客户端的ISN初始序列号,此时客户端的状态变为SYN-SENT。

  3. 第二次握手:服务器收到SYN报文后,返回一个SYN报文,其中SYN为1,ACK为1,序列号为服务器生成的ISN,确认号为收到客户端序列号加1,表示已收到客户端的SYN,此时服务器的状态变为SYN-RCVD。

  4. 第三次握手:客户端收到服务器的SYN报文之后,会向服务器发送一个ACK报文。其中SYN为0,ACK为1,序列号为序列中的下一个号码,确认号为收到客户端SYN报文中序列号加1,表示已经收到服务端发来的SYN报文。此时客户端的状态变为ESTABLISHED状态。服务器收到发来的ACK报文后也会进入ESTABLISHED状态,完成TCP连接的建立。

注意:在第一次和第二次握手的过程中是不允许携带数据,防止有人恶意攻击服务器。第三次握手可以携带数据,因为在客户端进行第三次握手时,已经处于ESTABLISHED的状态了。

TCP连接失败服务器的处理方式:

  • 若服务器没有收到SYN,则服务器不做处理;
  • 若服务器在返回SYN和ACK后,长时间没有收到ACK,则服务器会在超时后发送RST,重置连接,释放资源。

半连接队列:服务器在收到SYN后进入SYN-RCVD状态,此时连接双方没有完全建立连接。服务器在这种状态下会将收到的消息放入队列中,这种队列称为半连接队列。

4.2.1.3 TCP以段为单位发送数据

在TCP建立连接的同时,也可以确定发送数据包的单位(最大消息长度MSS, Maximum Segment Size)。

TCP在传送大量数据时,是以MSS的大小将数据进行分割发送,因此MSS最好是IP中不被分片处理的最大数据长度。

MSS的信息包含在TCP首部的“选项”中,告诉对方自己接口所能够适应的MSS大小,最终TCP连接的MSS值取连接双方较小值

4.2.1.4 利用窗口控制提高速度

TCP以1个段为单位,每发一个段就进行一次确认应答的处理。避免包的往返时间过长影响通信性能,TCP引入窗口的概念,发送端计算机在发送一个段后不必要一直等待确认应答,而是继续发送。

窗口大小就是无需等待确认应答而可以继续发送数据的最大值。

在窗口内的数据即使没有收到确认应答也可以被发送出去,但是在整个窗口的确认应答没有到达之前,如果其中的数据出现丢包,那么发送端也要负责重传。为此,发送端主机得设置缓存保留这些待被重传的数据,直到收到他们的确认应答。收到确认应答后,缓存区的数据会被释放。

收到确认应答后,窗口会滑动到确认应答中的序列号的位置,这样可以顺序地将多个段同时发送提高通信性能。这种机制称为“滑动窗口控制”。

4.2.1.5 关闭连接(四次挥手)
  1. 第一次挥手:客户端主动调用close时,向服务端发送结束报文段FIN报,同时进入FIN_WAIT1状态;

  2. 第二次挥手:服务器会收到结束报文段FIN报,服务器返回确认报文段ACK并进入CLOSE_WAIT状态,此时如果服务端有数据要发送的话,客户端依然需要接收。客户端收到服务器对结束报文段的确认,就会进入到FIN_WAIT2状态,开始等待服务器的结束报文段;

  3. 第三次挥手:服务器端数据发送完毕后,当服务器真正调用close关闭连接时,会向客户端发送结束报文段FIN包,此时服务器进入LAST_ACK状态,等待最后一个ACK的带来;

  4. 第四次挥手:客户端收到服务器发来的结束报文段, 进入TIME_WAIT, 并发出送确认报文段ACK;服务器收到了对结束报文段确认的ACK,进入CLOSED状态,断开连接。而客户端要等待2MSL的时间,才会进入到CLOSED状态

4.2.2 UDP:无连接传输协议

UDP具有有限的错误检验功能。

UDP数据报中包含一个校验和,接收端计算机可以利用它来检验数据的完整性。这种校验和的检查功能一般是可选的,而且能够被接收端的计算机禁用,以加快对接收数据的处理。

UDP数据报中有一个伪报头,包含着数据报的目的地址,从而提供了检查数据报错误传输的手段。

UDP没有像TCP那样提供数据的重新排序功能。在大型网络中,数据分段可能会经过不同路径,由于路由器缓存而存在明显的延时,这时重新排序会变得十分重要。但是,对于局域网,没有重新排序一般也不会导致不可靠接收。

UDP不会重新传输丢失或损坏的数据报、不会重新排序混乱的接收数据、不会消除重复的数据报、不会确认数据的接收、不会建立或断开连接。

UDP数据格式:

2.TCP/IP协议系统_第2张图片

  • 源端口:16位,包含发送数据报的应用程序的UDP端口,也是接收端应用程序发送响应的返回地址。源端口信息可以不提供,则源端口16位全部置0,发送后不会有响应。

  • 目的端口:16位。

  • 长度:16位,以字节为单位表示UDP数据报的长度,包括UDP报头和数据载荷。

  • 校验和:16位,用于确认数据报在传输过程中是否损坏。

4.3 其他传输层协议

  • 数据报拥塞控制协议(DCCP)

  • 流控制传输协议(SCTP)

  • 实时传输协议(RTP):提供传输实时音频和视频的架构。

4.4 防火墙和端口

防火墙是一个保护局域网使其不被来自Internet互联网未授权的用户访问的系统。

防火墙最基本的特性之一是阻断对特定TCP和UDP端口的访问。

防火墙不仅能阻止外部用户访问网络内部的服务,也能阻止内部用户访问网络外部的服务。

5. 应用层

应用层是位于传输层之上的网络组件的一个松散集合。这些组件从逻辑相似性来说并不相同,有些是收集网络配置信息的简单工具,有些是支持桌面操作系统的用户界面系统或应用程序接口(API),有些为网络提供服务。

5.1 网络服务

应用层很多组件都是为用户提供的网络服务。

5.1.1 文件和打印服务

网络服务器提供的两个常见的服务是文件服务和打印服务。

  • 打印服务器负责操作打印机,满足在这台打印机上打印文档的请求。

  • 文件服务器操作数据存储设备(如硬盘),满足对该设备进行数据读取和写入的请求。

文件服务和打印服务经常会被统一考虑,也就是用一台计算机,甚至是同一个服务,来提供文件和打印服务功能。

相关协议:

  • 文件服务系统:
    • 网络文件系统(NFS):针对UNIX/Linux
    • 通用Internet文件系统(CIFS)和服务器信息块(SMB):针对Microsoft
  • 文件传输工具:
    • 文件传输协议(FTP)
    • 简单文件传输协议(TFTP)
5.1.2 名称解析服务

名称解析就是把预定义的、方便用户使用的名称映射为IP地址的过程。

DNS(域名系统)服务为互联网提供了名称解析,也能为独立的TCP/IP网络提供名称解析。DNS使用名称服务器解决DNS名称查询。

名称服务器服务程序运行于名称服务器计算机的应用层,并与其他名称服务器交换名称解析信息。

其他常见的名称解析系统有,网络信息服务(NIS)、NetBIOS名称解析,还有一些名称服务利用了轻量级目录访问协议(LDAP)。

5.1.3 远程访问

为了把本地环境和网络集成到一起,有些网络操作系统使用重定向器(请求者)。

重定向器截获本地计算机上的服务请求,查看这个请求是否可以在本地实现,还是转发但网络上的其他计算机。如果请求时去往其他计算机上的服务,重定向器就把请求转发到网络上。

重定向器为需要访问网络资源的用户提供了通用的解决方案,就好像这些服务位于本地环境中一样。

5.1.4 Web服务

HTTP(超文本传输)协议是应用层的一个协议,是万维网生态系统的核心。

5.2 API和应用层

API(应用编程接口)是预定义的编程组件的集合,应用程序可以利用它访问操作系统的其他部分,也就是与操作系统进行通信。

网络协议栈是API概念的典型应用,网络API提供了程序与协议栈的接口,应用程序可以利用API的函数打开和关闭连接、从网络中读取和写入数据。

你可能感兴趣的:(TCP/IP,tcp/ip,网络,网络协议)