UNIX网络编程-第2章-2.1-2.10

2 篇文章 0 订阅
1 篇文章 0 订阅

第二章 传输层:TCP、UDP、和SCTP

2.1 概述

本章的焦点是传输层,包括TCP,UDP和SCTP。本章阐述以下相关主题:TCP的三路握手、TCP的连接终止序列、TCP的TIME_WAIT状态;SCTP的四路握手、和SCTP的连接终止;套接字层提供的TCP,UDP,SCTP的缓冲机制。

2.2 总图

TCP/IP协议描述总图
BPF : 伯克利分组过滤器,该接口提供对于数据链路层的访问能力,通常可以在源自Berkerly的内核中找到。
DLPI : 数据链路提供者接口,该接口也提供对于数据链路层的访问能力,通常随SVR4内核提供。
IGMP : 用于多播,在IPv4中可选。
ICMPv6: ICMPv6综合了ICMPv4,IGMP,和ARP的功能。

2.3 用户数据报协议(UDP)

特点:UDP不保证UDP数据包会到达其最终目的地,不保证各个数据包按序达到,不保证不重复到达,所有可靠性交给应用层保证。UDP数据包拥有记录边界,如果一个数据包正确的到达其目的地,那么该数据报的长度将随数据一起传递给接收短应用进程。而TCP是一个字节流协议,没有任何记录边界。

2.4 传输控制协议(TCP)

特点:面向链接,排序,支持重传,全双工
面向连接:TCP提供客户与服务器之间的连接,TCP客户首先与某个给定服务器建立一个连接,然后跨该连接与那个服务器交换数据,然后终止该链接。
TCP含有动态估算客户和服务器之间的往返时间RTT的算法。
提供流量控制:TCP总是告知对方在任何时刻他一次可以从对方接收多少字节的数据,这称为通告窗口。在任何时刻,该窗口指出接收缓冲区中当前可用空间的量,从而确保发送端发送的数据不会使得接收缓冲区溢出。该窗口时刻动态变化,当接收到TCP报文的时候,窗口减小,当TCP客户端读取报文的时候,该窗口增大。当TCP对应某个套接字的接收缓冲区已满,它必须等待应用从该缓冲区中读取数据,方能从对方接收数据。
因此,操作系统为每一个套接字保留一个窗口。

2.5 流量控制传输协议(SCTP)

特点:面向消息,可靠,排序,流量控制,全双工,多宿
面向消息:提供对各个记录的按序递送服务,与UDP一样,由发送端写入的每条记录的长度随数据一道传递给接收端应用。
多宿:SCTP能够在所链接的端点之间提供多个流,每个流各自可靠的按序递送消息。一个流上某个消息的丢失不会阻塞同一关联其他流上消息的递送。这种做法正好与TCP相反,TCP连接中若发生错误将会阻塞随后的数据传送直至错误被修复。

2.6 TCP连接的建立和终止

2.6.1 三路握手,TCP连接的建立过程:

(1)服务器必须做好准备,接受外来的连接。者通常通过调用socket,bind,和listen这三个函数来完成,我们称之为被动打开。
(2)客户通过connect发起主动连接,客户发送SYN分节通知服务器。该分节包括:发送数据的初始序列号。该分节不包含数据。该分节所在的IP数据包只包含一个IP首部,一个TCP首部,以及可能的TCP选项。
(3)服务器必须确认客户的SYN分节(发送ACK分节,响应客户端期望的发送数据的初始序列号的下一个序列号)。同时自己自己也发送一个SYN分节,它含有服务器在同一连接中发送的数据的初始序列。服务器在单个分节中完成对客户SYN的ACK以及发送自己的SYN。
(4)客户段发送对服务器的SYN的确认ACK分节,至此,客户端connect返回,服务器接受到来自对自己SYN分节的客户确认之后accept返回,三次握手完成,客户服务器TCP连接建立。
三路握手连接建立的图解:
TCP连接三次握手建立过程

2.6.2 TCP选项

TCP选项,每一个SYN分节可以有多个TCP选项:
MSS选项:该选项通告对方它的最大分节大小,即MSS,也就是它在本连接的每个TCP分节中愿意接受的最大数量。发送端使用接受端的MSS作为发送数据的最大分节大小。
窗口规模选项:TCP连接任何一端能够通告对端的最大窗口大小是65535,为了突破这个限制,可以使用TCP窗口规模选项。
时间戳选项:该选项可以防止失而复现的分组可能造成的数据损坏。

2.6.3 TCP连接终止
  TCP建立一个连接需要3个分节,终止一个连接需要4个分节。
  (1)某个应用程序首先调用close,我们称该端执行主动关闭,该段的TCP于是发送一个FIN分节,表示数据发送完毕。
  (2)接受这个FIN的对端执行被动关闭。这个FIN由TCP确认。他的接收也作为一个文件结束符传递给接收端应用进程(放在已排队等候该应用进程接收的任何其他数据之后),因为FIN的接受意味着接收端进程在相应连接上再无额外数据可接收。
  (3)一段时间后,接收到这个文件结束符的应用进程调用close关闭它的套接字。这将导致它的TCP也发送一个FIN分节。
  (4)接受这个最终FIN的原发送端TCP(即执行主动关闭的那一端确认这个FIN。

TCP连接终止的过程如下:
TCP连接的终止过程

2.6.4 TCP状态转换图
  在TCP整个生命周期中,客户端和服务器端一直处于不同的状态当中。
  其状态转换图如下:

TCP连接客户端和服务器的状态转换图

2.6.5 观察分组
  观察分组的状态图如下:

TCP分组交换过程

2.7 TIME_WAIT状态
在TCP连接的状态转换图中,我们看到,执行主动关闭的客户端最后处于TIME_WAIT状态,并在该状态等待2MSL(最长分节生命期)。
TIME_WATI状态有两个存在的理由:
(1)可靠的实现TCP全双工连接的终止。
(2)允许老的重复分节在网络中消逝。

TCP必须防止来自某个连接的老的重复的分组在该连接已经终止后再现,从而被误解成属于同一连接的某个新的化身。为做到这一点,TCP将不给处于TIME_WAIT状态的连接发起新的化身。既然TIME_WAIT状态的持续时间是MSL的两倍,这足以让某个方向上的分组最多存活MSL秒即被丢弃,另一个方向上的应答最多存活MSL秒也被丢弃。通过实施这个规则,我们就能够保证每成功建立一个TCP连接,接收到的数据报一定不是之前某个化身的老的分组。

2.8 SCTP关联的建立和终止

与TCP一样,SCTP也是面向连接的,因而也有关联建立与终止的过程,不过SCTP的握手过程不同与TCP的握手过程。
2.8.1 四路握手,SCTP关联的建立
  SCTP关联建立的过程如下:
(1)服务器必须准备好接受外来的关联。这通常调用socket,bind和listen这3个函数来完成,称为被动打开。
(2)客户通过connect调用或者发送一个隐式打开该关联的消息进行主动打开。在该过程中,客户SCTP发送一个INIT消息。该消息的作用是:
    告知服务器客户的IP地址清单,初始序列号,用于标志本关联中所有分组的起始标记,客户请求的外出流的数目,以及客户能够支持的外来流的数目。
(3)服务器发送INIT ACK分节确认客户INIT分节。INIT ACK分节中包含以下信息:
    服务器的IP地址清单,初始序列号,用于标志本关联所有分组的起始标记,服务器请求的外出流数目,服务器能够支持的外来流的数目,以及一个状态cookie。该状态cookie的作用是:包含服务器用于确信本关联有效所需的所有状态,它是数字化签名过的,以确保其有效性。
(4)客户以一个COOKIE ECHO分节,回射服务器的状态cookie。除COOKIE ECHO外,该消息可能在同一个分组中还捆绑了用户数据。
(5)服务器以一个COOKIE ACK消息确认客户回射的cookie是正确的,本关联于是建立。该消息可能在同一个分组中还捆绑了用户数据。
该四路握手建立的过程如下:

SCTP关联建立四路握手过程
SCTP的四路握手在很多方面类似与TCP的三路握手,差别主要在于作为SCTP整体一部分的cookie生产。INIT(随众多参数一起)承载一个验证标记Ta,和一个初始序列号J。在关联的有效期内,验证标记Ta必须在对端发送的每个分组中出现。初始序列号J用作承载用户数据DATA块的起始序列号。对端也在INIT ACK中承载一个验证标记Tz,在关联的有效期内,验证标记Tz也必须在其发送的每一个分组中出现。除了验证标记Tz和初始序号K外,INIT的接收端还在作为响应的INIT ACK中提供一个cookie C。该cookie包含设置本SCTP关联所需的所有状态,这样服务器的SCTP栈就不必保存所关联的有关信息。
在SCTP中使用四路握手是为了避免拒绝服务攻击。

2.8.2 关联终止
  当一端关闭某个关联的时候,另一端必须停止发送新的数据。关闭关联请求的接收端发送完已经排队的数据后,完成关联的关闭。
  终止关联的过程如图示:

SCTP关联终止过程
SCTP没有类似与TIME_WAIT的状态,因为SCTP使用了标记验证,旧的分组的验证标记必然和某一连接的化身的标记不同,从而避免了TCP在TIME_WAIT状态保持整个连接的做法。

2.8.3 SCTP的状态转换过程如下:

SCTP状态转换转换过程

2.8.4 观察分组
  观察分组的分组交换过程如下:

SCTP分组交换过程

2.9 端口号

端口号分类如下:
(1)众所周知的端口,由IANA管理,0-1023;
(2)已登记端口,1024-49151;
(3)临时端口,49152-65535;

注意,一个套接字对是一个四元组,唯一标志网络中的一台主机。

2.10 TCP端口号与并发服务器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值