分类 计算机网络 下的文章

无线局域网的协议标准:802.11系列标准
采用星型拓扑 中间结点是接入点AP(Access Point) 在mac层使用CSMA/CA协议
AP必须拥有一个不超过32字节的服务集标识符SSID(Service Set IDentifier) 和 一个通信信道 一个基本服务集BSS所覆盖的地理范围叫做一个基本服务区BSA(Basic Service Area)

一个基本服务集时相互独立的 也可以通过接入点连接到一个分配系统DS(Distribution System) 然后再连接到另一个基本服务集 就构成了扩展的服务集ESS(Extended Service Set)

无线互联网服务提供者WISP(Wireless Internet Service Provider)

密码验证方式:

  • WEP(Wired Equivalent Privacy) 安全较弱
  • WPA(Wifi Protected Access) 无线局域网受保护的接入
  • WPA2 WPA2第二个版本

类似P2P的方式 各终端都可以自发的建立一个网络 叫自组网络
任何在一个自组网络中的机器都要负责维护和转发消息

移动自组网络的一个子集: 无线传感器网络WSN(Wireless Sensor NetWork)
无线传感器网络主要应用领域就是各种物联网IoT(Internet of Things)

  • 固定接入 电脑
  • 移动接入 手机
  • 便携接入 Wifi
  • 游牧接入 手机
  • 802.11局域网的物理层 对应的速率不一样
  • 802.11b
  • 802.11a
  • 802.11g
  • 802.11n

802.11在MAC层运用了类似CSMA的协议的一部分 每次发送一帧还要等待确认

因此802.11运用了CSMA/CA Collision Avoidance 碰撞避免 尽量减少碰撞发生概率
MAC层的设计:

  • 分布协调功能DCF(Distributed Coordination Function) 让各个站通过争用信道来获取发送权
  • 点协调功能PCF(Point Coordination Function) 用接入点AP集中控制整个BSS内的活动 用类似探询的方法把发送数据权轮流交给各个站 从而避免了碰撞的产生

无线个人局域网

  • 蓝牙
  • 低速WPAN(标准:IEEE 802.15.4)ZigBee

蜂窝移动通信网

  • 第一代蜂窝一代通信1G
  • 2G
  • 3G 几个标准:美国的CDMA2000(中国电信) 欧洲的WCDMA(中国联通) 中国提出的TD-SCDMA(中国移动)
  • 4G 两个标准 LTE(Long-Term Evolution) LTE-A(LTE-Advanced)

基站的分布范围是六边形所以很像蜂窝 可以最大限度的频率复用 相隔一定距离的不同小区可以用相同的频率而不互相干扰 每一个小区的基站使用不同的频率

无线网络控制器负责对收到的IP数据报进行转发 如果要接入网络的话RNC就把移动站发来的IP数据报转发给GPRS核心网络 即SGSN GGSN

移动IP

上网的时候对由归属代理给手机分发一个移动IP 手机每次转移地方的时候跟归属代理报告当前的外地代理是哪里 以及让之前的外地代理注销 这样子同新方只需要发送IP地址的数据报 然后就会被归属代理截获然后更改成具体目的地址的数据包

GSM切换

移动用户在拨打电话中、以及平时可能会因为移动而更换基站 基站更换一般可能是信号不好,基站负载过高等原因
手机每隔一定频率就会检测基站的信号强度来决定最合适的基站

无线网络协议对高层的影响

有时候可能通信方正在更换基站而导致TCP报文频繁丢失 导致发送方采用拥塞控制减小发送窗口 但是这种调整是无效的 所以对应的采取措施就是:
本地恢复 本地节点对无线接入端丢失的报文直接进行重发 而无需发送端重发
让TCP知道接收方式无线网络
采用拆分网络 在有线信道上采用一段TCP 在无线信道上采用另一段TCP 拆分TCP连接可以有效提高整个连接性能。

RTSP(Real-Time Streaming Protocol) 实时流式协议 控制流媒体的传送(暂停 播放 快进等)

交互式音频/视频

实时运输协议RTP(Real-Time Transport Protocol) RTP为实时应用提供端到端的运输、但不提供任何服务质量的保证。

实时运输控制协议RTCP(RTP Control Protocol) 是为了配置RTP的协议

计算机网络的通信面临两大类威胁:

  • 被动攻击 : 截获信息、流量分析
  • 主动攻击 : 篡改、恶意程序、计算机病毒、计算机蠕虫、特洛伊木马、逻辑炸弹、后门入侵、流氓软件
  • 拒绝服务DOS(Denial of Service)

安全的计算机网络

  • 保密性
  • 端点鉴别
  • 信息的完整性
  • 运行的安全性

20世纪70年代 美国的数据加密标准DES(Data Encryption Standard) 和 公钥密码体制(public key crypto-system) 是一个里程碑

DES因为密钥过短导致可被穷举破解(56位) 为了解决这个问题 后面又推出了三重DES(3DES)
之后又出现了高级加密标准
AES(Advanced Encryption Standard)

散列函数:
MD5(Message Digest(报文摘要 第五个版本))/SHA-1(Secure Hash Algorithm (安全散列算法))

实体鉴别:在通信前只需要验证一次

有可能遭受:中间人攻击 C在B和A通信中 截获B发送的内容 用自己的私钥冒充是A的私钥对信息进行加密 B让A发送信息要求对方把解密的公钥也发过来同样被C截获了 以上就是中间人攻击的原理

密钥分配

目前常用的密钥分配方式是设立密钥分配中心KDS(Key Distribution Center) 这是一个大家都信任的第三方分配中心

A要跟B通信 首先给KDS发送一个明文 表明要跟B通信 KDS会以A的密钥加密了A/B的登记信息 内容用密钥A进行加密(包含了通信密钥KAB) 在发送一个票据用密钥B进行加密的。
A把票据转发给B B用密钥B对报文进行解密则得到了KAB 也得到了通信对方是A

目前比较出名的是Kerberos V5

目前有:

  • 鉴别服务器AS(Authentication Server)
  • 票据授予服务器TGS(Ticket-Granting Server)

公钥的分配 认证中心CA(Certification Authority)

网络层安全协议 IPsec 协议族

头部不加密、只是数据部分加密
在一个方向要建立一个安全通道 如果要传送、回复 则要建立两个安全通道

安全关联SA所含的状态信息:

  • 一个32位的连接标识符 安全参数索引SPI(Security Parameter Index)
  • 安全关联SA的源点和终点的IP地址
  • 所使用的加密类型 DES/AES
  • 加密的密钥
  • 完整性检查的类型
  • 鉴别使用的密钥

一个电脑可能拥有很多条安全关联SA 就有一个重要的 安全关联数据库SAD(Security Association Database) 但是并非所有数据都要经过加密 部分不重要的数据可以不进行加密 所以我们还要一个数据库:安全策略数据库SPD(Security Policy Database)SPD 指明什么样的数据包需要进行IPsec处理 取决于源地址 源端口 目的地址 目的端口 协议的类型等

运输层安全协议

  • 安全套接字层SSL(Secure Socket Layer)
  • 运输层安全TLS (Transport Layer Security)

SSL协议是Netscape公司开发的一款安全协议 交给了IETF希望能够进行标准化 然后就诞生了TLS SSL是在应用层和运输层中间加了一个子层用来对数据进行加密或者解密的

SSL提供的安全服务可归纳为:

  • SSL服务器鉴别
  • SSL客户鉴别
  • 加密的SSL会话 对客户和服务器间发送的所有报文进行加密

通信过程:

  • 协商加密算法 浏览器A向服务器B发送浏览器的SSL版本号和一些可选的加密算法 B从选定自己所支持的算法(RSA/ECC)并告知A
  • 服务器鉴别
  • 会话密钥计算(由浏览器A随机产生一个秘密数、用服务器B的RSA公钥进行加密后发送给B)
  • 安全数据传输(数据检验等……)

域名系统DNS(Domain Name System)

  • 分布式系统
  • UDP方式(把带解析的域名放在udp报文中 发送到DNS服务器上 如果DNS不存在此域名解析结果则继续向下递归)

级别最高的写在最右边 级别最低的写在最左边 如:www.baidu.com .com最高 baidu.com次之 www.baidu.com 最低

域名类型:

  • 国际顶级域名 nTLD: cn中国 us美国 uk英国……
  • 通用顶级域名 gTLD: .com .net .org ……
  • 基础结构域名: .arpa 用于反向域名解析
  • 新顶级域名
  • 根域名服务器 服务器的最高层次的域名服务器 所有的根域名服务器 都知道所有的顶级域名服务器的域名和IP地址
    全世界有A-M个根域名服务器

根域名服务器不直接提供IP地址而是告诉DNS下一步应该找哪一个顶级域名服务器进行查询。

  • 顶级域名服务器 .com .net .cn……
  • 权限域名服务器 DNS提供商如DNSPOD
  • 本地域名服务器 本地DNS 如114

主机向本地域名服务器查询一般都是采用递归查询
主机向根域名服务器的查询一般都是采用迭代查询

本地域名服务器一般采用高速缓存 把取到的IP地址跟域名进行关联 定时会更新缓存。

文件传送协议FTP(File Transfer Protocol)

FTP基于TCP
TFTP基于UDP

  • 特点:操作都基于文件的副本(拷贝一份)
  • 联机访问

文件共享协议NFS(Netwrok File System) 基于TCP/IP

FTP的基本工作原理 在不同操作系统之间传输信息 的难点:

  • 计算机存储数据格式的不同
  • 文件的目录结构和文件命名的规定
  • 对于相同的文件存取功能 操作系统使用的命令不同
  • 访问控制方法不同

FTP主要是减少或消除在不同操作系统下处理文件的不兼容性。
FTP有两个端口一个是 控制端口 一个是传输端口

NFS仅对操作的数据进行传输 比如我只打开文件头就只传输文件头过来。

简单文件传送协议TFTP

特点:

  • 每次传送的数据包中有512字节的数据 但最后一次可不足512字节
  • 数据报文按序编号
  • 支持ASCII码或二进制传送
  • 可对文件进行读或写
  • 使用很简单的首部
    TFTP有类似TCP的停止等待协议 每发送完一个文件块后会等待对方的确认 规定时间内收不到确认就要重发数据

端口:69
若最后一个文件块刚好满足512则要再发一个仅含首部的空数据报。

远程终端协议

万维网WWW(World Wide Web)

统一资源定位符URL

URL组成:
<协议>://<主机>:<端口>/<路径>

HTTP1.0缺点每个请求将都要重新建立握手
HTTP1.1解决了此问题
HTTP1.1有两种工作方式: 非流水线工作方式(每个请求等待确认再去进行下一个请求)、流水线工作方式(无需等待确认直接进行下一个请求)

HTTP报文结构

  • 请求报文
    方法 URL 版本 (header)

首部字段名: 值
………………

body

  • 响应报文
    版本 状态码 短语 (header)

普通字段名: 值
………………

支持的方法:

  • OPTION 请求一些选项信息
  • GET 获取信息
  • HEAD 请求读取由URL所标志的信息头部
  • POST 给服务器添加信息
  • PUT 指明URL下存储一个文档
  • DELETE 删除
  • TRACE 回环测试报文
  • CONNECT 用于连接代理服务器

HTTP状态码

1xx 表示通知信息
2xx 表示成功
3xx 表示重定向
4xx 表示客户的差错 如请求报文错误
5xx 表示服务器的差错 如服务器失效无法完成请求

Cookie工作原理

HTTP报文中的Header返回Set-cookie 然后设置值 客户端就会存储到cookie中 并且接下来的报文中都会附加这个cookie

超文本标记语言(HyperText Markup Language)

XML(Extensible Markup Language) 可拓展标记语言 主要用于传输数据

动态万维网文档

在浏览的时候才创建
增加了一个机制 通用网关接口CGI(Common Gateway Interface) 是一个标准、定义了动态文档如何创建,输入数据应如何提供给应用程序,以及输出结果应如何使用。
cgi程序又称为cgi脚本 也称为cgi-bin

SMTP协议(Simple Mail Transfer Protocol)

邮件系统应该具有:

  • 邮件发送协议(SMTP)
  • 邮件读取协议(POP3 Post Office Protocol版本3)

用户可借助代理工具(QQ邮箱等)发送邮件
发送邮件时会跟SMTP服务器建立TCP连接 然后把邮件依次发送出去
收件人收信时运行计算机的用户代理 使用POP3协议读取发送给自己的邮件

SMTP协议过程

  • 建立连接
    建立完成后发送220 Service ready

STMP采用单对单协议 直接建立连接

先发送MAIL命令 后面跟发件人地址 如果服务器接受后返回状态码
然后进入RCPT命令 RCPT TO:收件人地址
发送完毕后客户端发送QUIT命令

常见的邮件读取协议有:POP3 和IMAP(Internet Message Access Protocol)

在邮件中夹杂附件可以使用MIME方法(互联网邮件扩充)
头部:

  • MIME-Version
  • Content-Description
  • Content-Id
  • Content-Transfer-Encoding
  • Content-Type

DHCP(Dynamic Host Configuration Protocol)

机器在刚开机的时候会像局域网发送一个 请求报文 然后DHCP服务器接收到此报文进行回应 然后客户机接收到后单独给此IP发送DHCP信息

简单网络管理协议SNMP

可以通过此协议对网络状态进行监控和管理

网路管理模型:

  • 管理器(网络运行中心NOC(Network Operations Center))
  • 被管设备

在每个被管设备中都要运行一个网络管理代理程序 来跟管理器进行通信

应用进程跨越网络的通信

美国加利福尼亚大学伯克利分校 为UNIX操作系统定义了一种API 叫为套接字接口(socket interface)

  • 当应用进程需要使用网络进行通信时,必须发送出socket系统调用 请求系统分配相关资源 然后返回一个"套接字描述符"

服务端 首先要调用bind来指明套接字的本地端口和IP地址,还必须调用listen来设置为被动监听方式 然后调用accept来获取到已连接到服务器的客户套接字 当我们accept到一个客户端的套接字 我们可以采用新建一个从进程传递此套接字 然后就由此进程维护即可。

发送数据用send
接收数据用recv
连接释放用close

UDP可忽略accept和listen

p2p(peer to peer)

没有中央服务器 采用的是对等方式传输 即是客户端也是服务端
采用分布式散列表DHT(Distributed Hash Table) 保存ip关系 利用散列函数把资源名k及其存放的结点ip地址N都分别映射为资源名标志符KID和结点标志符NID Chord 把多个结点串成一个环

通信层协议是进程到进程的通信

运输层的两个主要协议:

  • 用户数据报协议UDP(User Datagram Protocol) (不可靠 非双向)
  • 传输控制协议TCP (Transport Control Protocol) (可靠全双工)
应用层协议运输层协议
DNSUDP
TFTP(简单文件传送)UDP
RIP(路由信息协议)UDP
DHCPUDP
SNMP(简单网络管理协议)UDP
NFS(网络文件系统)UDP
IP电话UDP
流式多媒体通信UDP
多播UDP
SMTPTCP
TELNETTCP
HTTPTCP
FTPTCP

运输层使用协议端口号来进行分发报文
TCP/IP协议中用了一个16位端口号(655356-1)来标志一个端口
两个进程间需要相互通信则必须知道对方的IP地址和端口号

端口号又分为:

  • 服务器端口号
    FTP:21

TELNET:23
SMTP:25
DNS:53
TFTP:69
HTTP:80
SNMP:161
SNMP(trap):162
HTTPS:443
另一类是登记端口号:1024~49151

  • 客户端端口号
    常用:49152~65535 通信结束端口释放

UDP特点:

  • 无连接
  • 尽最大努力交付
  • 面向报文(不存在粘包)
  • 没有拥塞控制
  • 支持一对一、一对多、多对一、多对多
  • 首部开销小 8个字节 比TCP 20个字节短

UDP首部格式:

  • 源端口
  • 目的端口
  • 长度 最小值是8(只有头部)
  • 检验和 检测是否出错 出错则丢弃(与IP协议只检验头部不同的是,UDP检验头部和数据部分)

如果接送方收到报文中的目的端口号不正确、就丢弃该报文并且发送ICMP发送端口不可达的差错报文

TCP主要特点:

  • TCP是面向连接的运输层协议(所以传输前要建立通信)
  • 每一条TCP连接只能是点对对的
  • TCP提供可靠交付(无差错、不丢失、不重复、并且按序到达)
  • TCP提供全双工通信(都设有发送缓存、接收缓存)
  • 面向字节流(每次发送的数据块都堆积在一起每次获取不一定都是发送的时候的块 因为发送速率不同(粘包的根本原因))

TCP连接的端点叫做套接字或插口
根据RFC793定义:端口号拼接到IP地址后就叫套接字
套接字socket = (IP地址:端口号)

可靠传输的工作原理

为什么需要可靠传输:

  • 传输信道可能产生差错
  • 接收与传送速率不同。

停止等待协议

A发送数据B接收到数据并发送确认,每发送完一个分组就停止发送在有限的时间内等待对方确认、如果指定时间内没有收到确认则重新发送报文,称之为超时重传。

实现的要点:

  • 暂时保留已发送的分组的副本
  • 分组和确认分组都必须进行编号
  • 超时计时器 定义的超时时间应当比平均往返时间更长一些

当收到重复的报文,首先会丢弃这个分组然后再向客户端发送确认(因为之所以会重传是因为没有收到确认报文)

上述的协议称为自动重传请求ARQ(Automatic Repeat reQuest)

RTT(Round-Trip Time): 往返时延

发送方还可以不使用低效率的停止等待协议,可以一次性发送多个分组,然后再一次性的等待对方确认这就是连续ARQ协议和滑动窗口协议

连续ARQ协议

发送窗口:在发送队列中框起来的一个组、位于发送窗口内的分组连续发送出去不需要等待对方确认。

发送方每收到一个确认发送窗口向前滑动一个分组的位置,接收方只需要对【按序到达的的最后一个分组】发送确认,也就是说到此分组为止的所有分组已正确收到了。

但是这种协议也有缺点

比如:
A B C D E F
其中C报文漏了 那么就要发送窗口就要退到C的位置重新发送C D E F,如果通信信道不好的话此协议会带来负面影响

TCP报文段的首部格式

  • 源端口和目的端口各占2字节
  • 序号 占4字节 标记报文的序号
  • 确认号 占4字节 标记下一个报文对应的序号
  • 数据偏移 指的是数据段距离当前偏移多少也是数据报的开始位置
  • 保留 占6位 目前未使用
  • 紧急URG(URGent) 当URG = 1时 表明紧急字段有效 应尽快传送
  • 确认ACK(ACKnowledgment) 仅当ACK=1 时确认号字段才有效。 在连接建立后所有传送的报文段必须把ACK置1
  • 推送PSH(PuSH) 当置1时直接整个报文段发送出去而不用等缓存填满了再交付。
  • 复位RST(ReSeT) 当RST = 1时 表示TCP连接中出现严重差错 必须释放连接重新建立连接
  • 终止FIN 用来释放一个连接 当FIN=1时 表明此报文段的发送方的数据已经发送完毕要求释放链接
  • 窗口 占2字节 从确认号算起 目前允许对方发送的数据量。
  • 检验和 占2字节
  • 紧急指针 占2字节 仅当URG = 1时才有意义 指出紧急报文段中紧急数据的字节数
  • 选项 长度可变 最长可达40字节
  • 时间戳 防止序号重用(一定时间内)、计算往返时间RTT

TCP滑动窗口

发送缓存:

  • 发送应用程序传送给发送方TCP准备发送的数据
  • TCP已发送但尚未收到确认的数据

接收缓存:

  • 按序到达、但尚未被接收的应用程序读取的数据
  • 未按序到达的数据

发送方A会根据网络的拥堵情况适当减小发送窗口数值
一般来说接收方会把未按序到达的数据暂时存储等缺的数据补齐了再上交应用层
接收方可以在合适的时间进行确认 不一定收到就要确认
一般确认推迟的时间不超过0.5秒
因为TCP是全双工通信所以通信双方都有发送窗口和接收窗口

选择确认SACK

实现只针对缺少序号的数据进行重发
如果要使用SACK算法要在TCP头部选项中加入 允许SACK 的选项

TCP的流量控制

让发送方的发送速率不要太快,让接受方来得及接收。
在连接建立时客户端向服务端告知客户端的滑动窗口大小
只有ACK=1 确认号字段才有意义
每次发送确认报文的时候并且会告知服务端窗口号大小假如窗口号为0然后过了一会窗口号又有位置发送给服务端告知服务端窗口号空余 假设这个数据报在传输的途中丢了的话 怎么办呢

为了解决这种情况每个TCP连接都有一个持续计时器 当收到零窗口的时候每隔一段时间发送一个零窗口的探测报文

TCP传输效率

确认TCP传输的时机算法广泛采用Nagle算法
算法归纳:
发送应用进程把发送的数据逐个缓存起来,发送方会把第一个数据字节先发送出去,把后面到达的数据字节先缓存起来当发送方收到第一个确认包的时候再发送缓存中的数据。还规定当到达的数据已达到发送窗口大小的一半或已达到报文段的最大长度则直接发送。

拥塞控制

拥塞控制与流量控制的差别:
拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
流量控制则是指点对点通信量的控制,是个端到端的问题

拥塞控制两种方法:

  • 开环控制 设计网络时就事先将发生拥塞的因素考虑到
  • 闭环控制 基于反馈环路
    • 监测网络系统以便检测到拥塞在何处、何时发生。
    • 把拥塞发生的信息传送到可采取行动的地方
    • 调整网络系统的运行以解决出现的问题

TCP拥塞控制方法

四种:

  • 慢开始
  • 拥塞避免
  • 快重传
  • 快恢复

发送方维持一个拥塞窗口的状态变量cwnd(congestion window)
拥塞窗口大小取决于网络的拥塞程度 发送让自己的发送窗口等于拥塞窗口

检测是否拥塞:数据包有无确认(可能被路由器丢弃)

慢启动:由小到大逐渐增大发送窗口 每经过一次轮询拥塞窗口cwnd就加倍。
拥塞避免算法:让拥塞窗口cwnd慢慢增大 每次加1 而不是像慢启动那样成倍增加 我们首先是定一个门限值 当慢启动达到门限值时开始执行拥塞避免算法平滑的增加拥塞窗口直到出现网络超时则再对当前值/2等于新的门限值 以此类推
快重传:收到数据立即发送确认 接收方如果一连收到三个以上的重复确认则认定他的下一个数据报丢失了

接收方收到数据报会根据接收方情况重新设定接收方的拥塞窗口 rwnd

所以发送方窗口的大小为:min(cwnd,rwnd)

主动队列管理 AQM(Active Queue Management)

当路由器队列满了的时候后来到的数据包将会被丢弃,如果是TCP的数据包被丢弃那么发送方将会触发拥塞控制降低发送速率 导致利用率低,那么我们可以在路由器达到一定的值得时候就开始丢弃数据包而不用等到队列满了再丢弃。

AQM有不同的实现方法:
随机早期检测RED(Random Early Detection)
……

他的方法是 检测到网络拥塞的早期征兆(平均队列长度达到一定数值) 就以概率P丢弃个别的分组 让拥塞控制只在个别的TCP连接上进行 避免发生全局控制

TCP三次握手

1.首先创建传输控制块TCP
2.向B发送连接请求报文 SYN = 1 同时选择一个初始序号seq = x TCP规定SYN=1的报文不能携带数据只能发头部 进入SYN-SENT
3.B收到连接之后向A发送确认 SYN = 1 ACK(标志) = 1 ack(确认号)= x + 1 seq = y 进入SYN-RCVD
4.A收到B的确认后 ACK = 1 ack = y + 1 seq = x + 1 此报文可携带数据 如不携带数据则不消耗序号 A进入ESTABLISHED
5.B收到A的确认后也进入ESTABLISHED

为什么要三次握手 两次握手不行吗?
防止已失效的连接请求报文段突然又传送到了B 而产生错误
出现一种情况就是
A发出的连接请求报文因为网络节点而长时间滞留了,导致在连接释放后某个节点才到达B B收到了就误以为A又请求了 于是立刻建立连接。 采用三次握手可以防止上述情况发生

TCP四次挥手

1.A在报文上把终止位FIN = 1 seq = u u等于前面已传送过的最后一个字节的序号+1 A进入FIN-WAIT-1 FIN报文段即使不携带数据也消耗掉一个序列号
2.B收到了报文后返回ack = u+1 seq = v 等于B前面已发送过的数据的最后一个字节的序号+1 B进入了CLOSE-WAIT状态 TCP进入半关闭状态 即A没有数据要发送了也要接收B的数据 因为B到A的方向连接并未关闭
3.A收到B的确认后进入了FIN-WAIT-2 等待B发出的连接释放报文段
4.若B已经没有要向A发送的数据 其应用进程则通知TCP释放链接 B发出的连接FIN = 1 ack = u+1 B进入 LAST-ACK 等待A确认
5.A在收到B的连接释放报文后必须对此发送确认 ACK=1 ack = w+1 seq =u+1 然后进入time wait状态 等待时间计时器 设置的时间2MSL后 A才进入CLOSED状态 MSL 是最长报文段寿命(Maximum Segment Lifetime)

为什么要等待呢

  • 为了保证A发送的最后一个ACK报文段能到达B 这个ACK报文段可能丢失因而使在LAST ACK状态的B收不到已发送的FIN + ACK报文的确认 B会超时重传FIN+ACK报文段 如果没有这个计时器那么有可能B就无法进入CLOSED状态
  • 防止 已失效的连接请求报文段 出现在此

还要有一个保活计时器(keepalive timer) 防止客户端出现故障 还维护着这个链接 服务器每收到一次客户端的数据则刷新保活计时器 若没收到则要发送探测报文 如连续10个都没收到则关闭这个连接。