计算机网络(四):传输层

中国大学MOOC网站北京交通大学计算机网络课程笔记

1. 传输层定义与功能

定义

Transport Layer 也称为运输层。在OSI中,传输层利用网络层提供的服务,并通过传输层地址提供给高层用户传输层地址提供给高层用户传输数据的通信端口,使系统间高层资源的共享不必考虑数据通信方面和不可靠的数据传输方面的问题。

在这里插入图片描述

功能

对一个进行的对话或连接提供可靠的传输服务,在通向网络的单一物理连接上实现该连接的复用,在单一连接上提供端到端的序号与流量控制、差错控制及恢复等服务。

通信的主体

网络通信的主体是应用进程
进程(Process)是程序在计算机上的一次执行活动。是操作系统进行资源分配的单位。

端到端的通信

传输层为相互通信的应用进程提供了逻辑通信——端到端通信。传输层一个重要功能便是复用和分佣。
在这里插入图片描述

端口

为了使运行不同操作系统的计算机的应用进程能够互相通信,必须用统一的方法对TCP/IP体系的应用进程进行标识。方法就是在传输层使用协议端口号(protocol port number),通常简称为端口(port)。端口号只要本地唯一便可以。
客户-服务器通信方式时,必须先知道对方服务器的IP地址和端口号。
在这里插入图片描述


2. 传输层协议

TCP/IP的传输层有两个不同的协议:

  • 用户数据报协议UDP(User Datagram Protocol)
  • 传输控制协议TCP(Transmission Control Protocol)
    在这里插入图片描述

2.1 UDP协议

(1) 特点

  • 是无连接的。
  • 尽最大努力交付,不保证可靠,不适用拥塞控制。
  • 是面向报文的。应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。
  • 支持一对一、一对多、多对一和多对多的交互通信。
  • UDP的首部开销小,只有8个字节

(2)用户数据报
用户数据报UDP有两个字段:数据字段和首部字段。首部字段有8个字节,由4个字段组成。分别是源端口、目的端口、长度和校验和。校验和是加上了伪首部的信息做的校验。但伪首部并不参与传输。
在这里插入图片描述

2.2 TCP协议

(1) 特点

  • 是面向字节流的
  • 是面向连接的传输层协议
    • 每一条TCP连接只能有两个端点(endpoint)。
    • 每一条TCP连接只能是点对点的(一对一)。
  • TCP提供全双工通信。
  • TCP提供可靠交付的服务。包括确认机制、流量控制、拥塞控制。

(2) TCP连接表示
TCP连接用套接字表示。
套接字(socket) = (IP地址:端口号)

(3) TCP报文段
在这里插入图片描述
TCP报文由首部和数据部分组成。首部格式如上图所示,前20字节的部分固定不变。由以下部分组成:
源端口: 2个字节。发送方的应用进程端口号。
目的端口: 2个字节。接收方应用进程端口号。
序号: 4个字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
确认号: 4个字节。是期望收到对方的下一个报文段的数据的第一个字节的序号。
数据偏移(即首部长度): 4位。它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。以4字节位计算单位。
保留: 6位。保留以后使用。当前置0.
标志位:

  • 紧急 URG: 当URG=1时,表明紧急指针字段有效。它告诉系统次报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
  • 确认 ACK: 只有当ACK=1时确认号字段才有效。当ACK=0时无效。
  • 推送 PSH(push): 收到 PSH = 1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
  • 复位 RST (reset): 当RST = 1 时,表明TCP连接中出现问题,必须释放连接重连。
  • 同步 SYN: SYN = 1 表示这是一个连接请求或连接接收报文。
  • 终止 FIN: 用来释放一个连接。FIN=1表明此报文段的发送端的数据已发送完毕,并要求释放连接。

窗口: 2个字节。用来让对方设置发送窗口的依据,单位为字节。
检验和: 2个字节。检验首部和数据。检验时,要加上同UDP报文一样的伪首部。
紧急指针: 2个字节。指出在本报文段中紧急数据共有多少个字节(紧急数据放在报文段数据的最前面)。
选项字段: 长度可变。
填充: 为了使真个首部长度是4字节的整数倍。


3. 停止等待协议ARQ

基本原理:每发送完一个分组就停止,等待对方确认。
一般有4种可能发生的情况:
在这里插入图片描述
第一种情况发送没有任何差错,A发送出报文,B接收到报文返回确认,A收到确认后发送下一个数据。这样反复,直到数据全都发送完毕。
在这里插入图片描述
第二种情况数据产生了丢包情况,这个时候A发送数据片后,会有个计时器,当超过时间没收到B的确认时,A就会重新发送该数据片,直到收到确认后在发送下一数据片。
因此:

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

在这里插入图片描述
第三种情况是数据收到,确认没有收到。这时候A会重新发送数据。B收到重复的数据后会丢弃然后重传确认。这样反复直到A收到确认发送下一个分组。
在这里插入图片描述
第四种情况是确认迟到。处理和第三种情况一样。A收到多次确认信号,丢弃后面的即可。

这种可靠传输协议常称为自动重传请求ARQ。因为ARQ重传的请求是自动进行的。


4. 连续ARQ协议

停止等待重传ARQ虽然简单,但是信道利用率太低。因此有了连续发送ARQ协议。发送方可以连续发送多个数据的分组,不必每发完一个就停顿下来等待对方的确认。

(1)发送窗口
可连续发送而不需等待确认的分组数。窗口大小是动态调节的,以字节为单位。
在这里插入图片描述
(2)累计确认
接收方不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。
优点是容易实现,即使确认丢失也不必重传。
缺点是不能向发送方反映出接收方已经正确收到的所有分组的信息。
(3)Go-Back-N
如果一段数据分组中间有一段丢失,即使后面都收到了,发送方也会从丢失的那段开始重新发送后面所有的分组。这就叫做Go-Back-N。
所以当通信线路质量不好时,连续ARQ协议会带来负面的影响。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上是TCP滑动窗口发送数据的示意图。
(4)发送缓存和接收缓存
发送缓存暂时存放:

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

接收缓存暂时存放:

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

5. 重传时间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


6. 连接的建立和释放

6.1 三次握手

在这里插入图片描述
第一次握手: 建立连接时,客户端发送SYN包(SYN = 1, seq = x),并进入SYN_SEND状态,等待服务器确认;
第二次握手: 服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包(SYN = 1, ack = x + 1, seq = y),即SYN + ACK 包,此时服务器进入SYN_RECV状态;
第三次握手: 客户端收到服务器的SYN + ACK包,向服务器发送确认包ACK(ack = y + 1, seq = x + 1),此包发送完后,客户端进入ESTABLISHED状态,服务器收到该包后也进入此状态,连接建立。完成三次握手。
三次握手确认双方的seq序列号

6.2 四次挥手

在这里插入图片描述

第一次挥手: 客户端发送一个FIN(FIN=1, seq=u),用来关闭客户端到服务器的数据传送,客户端进入FIN-WATI-1状态,不再发送数据。
第二次挥手: 服务器收到FIN包后,发送确认包ACK(ACK = 1, ack = u + 1, seq = v)。服务器进入CLOSE-WAIT状态。如果有数据未发送完继续发送。
第三次挥手: 服务器发送一个FIN包(FIN = 1, ACK = 1, seq = w, ack = u + 1)。服务器关闭到客户端的数据传送,进入LAST-ACK状态。
第四次挥手: 客户端收到FIN包后,进入TIME-WAIT(等待2MSL后关闭)状态,接着发送一个确认包ACK给服务器(ACK = 1, seq = u + 1, ack = w + 1)。服务器收到后关闭,四次挥手结束。

等待2MSL时间

  • 确保有足够的时间让对方收到ACK包
  • 避免新旧连接混淆

服务器出现大量CLOSE-WAIT状态的原因
==对方关闭socket连接,我方忙于读或写,没有及时关闭连接。

  • 检查代码,特别是释放资源的代码
  • 检查配置,特别是处理请求的线程配置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值