【计算机网络】传输层

对着背影说爱祢 提交于 2019-12-05 10:17:40

计算机网络 传输层

这里面的二进制反码求和校验算法参考了:https://blog.csdn.net/dingmin1860/article/details/48268927

  • ARQ 自动重发请求
  • 连续ARQ协议

介绍

传输层是分界层次,以上是面向应用,以下是面向数据传输

根据用户的需求不同~

可靠,面向连接,TCP

不可靠,非面向连接,UDP。快,传输代价小。

端口

16位,0-65535

0-1023 保留的

1024-5000 临时的

通用端口号

FTP 21/TCP
DNS 53/UDP
HTTP 80/TCP
SMTP 25/TCP

为什么需要传输层

网络层已经提供传输服务,不可靠,会丢失分组。

需要端主机系统自己实现可靠传输。

几个概念

面向连接服务

无连接服务

可靠服务

反馈重发

传输层的两个协议

  • 用户数据报协议 user datagram protocol
  • 传输控制协议 transmission control protocol
  • 传送的数据单位:报文

UDP

用户数据报协议 user datagram protocol

特点

  1. 无连接
  2. 传输单位是报文
  3. 首部小
  4. 不可靠
  • 接收方不需要发送确认信息
  • 不保证数据完整到达目的地
  • 减轻网络的通信负担

UDP首部格式

源端口(16位)、目的端口(16)、校验和(16)、消息长度(16)、数据

端口号:16位,允许65535个不同的端口号

校验和:校验范围 UDP数据报头+报文主体+伪报头

消息长度:单位 字节,8字节的UDP头+数据部分,最大长度65535

UDP校验和

伪首部(12字节)

4(字节) 4 1 1 2
源IP地址 目的IP地址 0 17 UDP长度

校验和的计算范围:伪首部+UDP首部+数据

12(字节) 2 2 2 2
伪首部 源端口 目的端口 消息长度 校验和 数据

计算方法如IP校验和:二进制反码运算

UDP不仅检查了端口号,还检查了IP地址

TCP

传输控制协议 transmission control protocol

特点

面向连接

三次握手协议建立连接

在不稳定的IP网络上建立连接

客户端:主动打开网络连接,发送一个SNY分节,初始化序列号为x

服务器端:被动打开端口,发送SNY y,和ACK x+1

客户端:发送ACK y+1

可靠

反馈重发机制

三种策略

  1. 停止等待方式

收到一个ACK才能发送下一个包

  • 连续工作方式(取决于接收端有没有缓存)
  1. 拉回方式(有累积确认ACK) go back n
  2. 选择重发方式
ARQ机制:滑动窗口

计时器

发送方没有在规定时间内收到ACK,则认为超时并且重新发送该数据包。

存在问题:收到重复报文。

接收方可以通过报文序号来去除重复的分组。

连续ARQ协议

  • 发送方一次可以发送多个分组
  • 接收方一般采用累积确认的方式:对按序到达的最后一个分组发送确认
滑动窗口sliding windows

滑动窗口不仅可以实现连续ARQ协议,还可以进行流量控制(发送方和接收方的速度相匹配)

  • 发送方只发送“发送窗口”内的数据
  • 接收方只接收“接收窗口”内的数据

面向字节流

滑动窗口

按照字节数进行确认

持续计时器

只要TCP连接的一方A收到对方的零窗口通知,就会启动该持续计时器。

若计时器到期,A发送零窗口探测报文。对方收到后,给出现在的窗口值。

流量控制

发送方发送速率不要太快,既要让接收方来得及接收(防止数据丢失),也不要使网络发生拥塞。

滑动窗口机制在TCP上可以实现流量控制(双方按照一致的速率发送数据)

拥塞控制

基本原理

某段时间内,需求超过资源所能提供的可用部分,网络的性能就会变坏。--->拥塞

解决思路

增加资源,减少需求

TCP拥塞控制

TCP首部格式

最小长度20字节

UDP vs. TCP

拥塞控制 vs. 流量控制

(列了大纲,会补充更新的~!)

二进制反码求和校验算法

参考:https://blog.csdn.net/dingmin1860/article/details/48268927

首先,IP、ICMP、UDP和TCP报文头都有检验和字段,大小都是16bit,算法基本上也是一样的。

在发送数据时,为了计算数据包的检验和。应该按如下步骤:

1、把校验和字段设置为0;

2、把需要校验的数据看成以16位为单位的数字组成,依次进行二进制反码求和;

3、把得到的结果存入校验和字段中

在接收数据时,计算数据包的检验和相对简单,按如下步骤:

1、把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段;

2、检查计算出的校验和的结果是否为0;

3、如果等于0,说明被整除,校验和正确。否则,校验和就是错误的,协议栈要抛弃这个数据包。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!