传输层重点协议

负责数据能够从发送端传输接收端

TCP协议

TCP,即Transmission Control Protocol,传输控制协议。要对数据的传输进行一个详细的控制

TCP协议端格式

0 16

32

16位源端口号

16位目的端口号

32位序号

32位确认号

4位

首部长度

保留

(6位)

U

R

G

A

C

K

P

S

H

S

Y

N

F

I

N

16窗口大小

16位校验和

16位紧急指针

选项

数据

  • 源/目的端口号:表示数据是从哪个进程来,到哪个进程去;
  • 32位序号/32位确认号:
    • 32位序号:报文端中第一个数据字节在字节流中的位置编号
    • 32位确认号:期望从对方收到的下一个字节的序号;累计应答
  • 4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最大长度是 15 * 4 = 60
  • 6位标志位: 0/1
    • URG:紧急指针是否有效
    • ACK:确认号是否有效
    • PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走
    • RST:对方要求重新建立连接;我们把携带RST标识的称为复位报文段
    • SYN:请求建立连接;我们把携带SYN标识的称为同步报文段
    • FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段
  • 16位窗口大小:流量窗口大小
  • 16位校验和:发送端填充,CRC校验,负责验证数据完整性。
    • 接收端校验不通过,则认为数据有问题。
    • 此处的检验和不光 包含TCP首部,也包含TCP数据部分。
  • 16位紧急指针:标识哪部分数据是紧急数据;
  • 40字节头部选项:暂时忽略;

TCP原理:

TCP数据传输,安全和效率

保证可靠安全的前提下,尽量提高效率

安全机制

确认应答机制(安全机制)

说明:发送的数据,接收端需要返回确认接受到数据报的应答

发送端发送数据:

使用32位序列号,保存;

接受端应答:

ACK:确认应答,标记为1

32位确认号:下次期望接受的数据序列号(同时表明之前的报文已全部接受)

超时重传机制(安全机制)

说明:发送端超过一定时限,没有接收到ACK应答包,进行重传;

没有接收的两种情况:

  • 数据报丢失;接收端没有接收到数据
    • 发送端重新发送
  • ack应答包丢失;接收端接收到数据
    • 发送端重新发送,接收端接收到许多重复数据;
    • TCP协议通过序列号,识别重复包,并丢弃;

一定时限:

应答时间受网络环境影响

超时时间过长,影响重传效率

超时时间过短,频发发送重复包(传输效率不高)

动态计算最大超时时间——指数增长,累计一定重传次数,强制关闭连接

  • Linux中(BSD Unix和Windows也是如此),超时以500ms为一个单位进行控制,每次判定 超时重发的超时时间都是500ms的整数倍。
  • 如果重发一次之后,仍然得不到应答,等待 2*500ms 后再进行重传
  • 如果仍然得不到应答,等待 4*500ms 进行重传。依次类推,以指数形式递增。
  • 累计到一定的重传次数,TCP认为网络或者对端主机出现异常,强制关闭连接。

连接管理机制(安全机制)

建立连接(三次握手)

建立连接:本质是双方保存一个连接状态

1.客户端发送syn(建立连接请求)

        申请建立客户端到服务端的连接

2.服务端返回syn+ack

        ack:对客户端发送syn的应答

        syn:申请建立服务端到客户端的连接

3.客户端返回ack

        对服务端syn的应答

断开连接:四次挥手

1.客户端发送fin到服务端

         申请关闭客户端到服务端的连接

2.服务端返回ack

        服务端转改置为 close_wait(进程通知高层应用进程)

3.服务端发送fin到客户端

        申请关闭服务端到客户端的连接

        客户端收到后,状态置为time_wait

4.客户端接返回ack

        服务端状态置为closed(已关闭)

        客户端等待一定时间,状态置为closed

滑动窗口(效率机制)

以并行的方式发送数据包,减少等待时间(叠加多个段的等待时间),提高数据传输效率

窗口大小

指无需等待确认应答,可以继续发送数据的最大值

滑动窗口大小 = min(流量窗口,拥塞窗口大小)

窗口越大,则网络的吞吐率就越高;

数据都保存在缓冲区

发送端保存在发送缓冲区;可能需要重传

接受端保存在接受缓冲区;可能需要去重

发生丢报

数据报抵达,ack丢失

可以通过后续的ack确认

数据报丢失

  • 当数据报丢失,接受端会重复发送同一确认号的ack;
  • 若发送端重复接收到三次同样确认号的ack,就会将相应的数据重新发送;(高速重发控制-快重传)
  • 接受端接收到重发的数据后,将其按序号,放入接收缓冲区,并发送下一确认号

流量控制(安全机制)

TCP支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做流量控制(Flow Control)

接收端处理数据速度有限。

若发送端发的太快,导致接收端的缓冲区被打满,发送端持续发送就会造成丢包;

丢包引发重传等一系列反应;

理解:

  • 接收端接受数据能力有限,将自身接收缓冲区剩余大小,放入TCP首部窗口大小部分,通过ack报通知发送端;
  • 发送端接收后,根据窗口大小,结合自身阻塞窗口,控制数据发送速度;
    • 若窗口大小为0,发送不会发送数据,但会定期发送窗口探测数据报,让接收端告知窗口大小

实际上,TCP首部40字节选项中还包含了一个窗口扩大因子M,实际窗口大小是 窗口字段的值左移 M 位

拥塞控制(安全地址)

网络状态不明情况,贸然发送大量数据,可能会造成网络阻塞;

慢启动机制

先发少量数据,探明网络环境;之后根据环境决定传输速度;(动态变化)

通过阻塞窗口实现

慢启动:初始慢,增长速度快(指数型)

到达阈值后,线性增长;

  • 当TCP开始启动的时候,慢启动阈值等于窗口(阻塞窗口)最大值(上次);
  • 在每次超时重发的时候,慢启动阈值会变成原来的一半,同时拥塞窗口置回1;

少量的丢包,我们仅仅是触发超时重传;

大量的丢包,我们就认为网络拥塞;

TCP通信开始,网络吞吐率(滑动窗口决定)逐渐上升,一旦网络阻塞,吞吐下降(阻塞窗口下降)

延迟应答(效率机制)

滑动窗口大小决定吞吐率,min(阻塞,流量)

接受端返回流量窗口代表接收缓冲区的可用空间大小;

接受端处理数据速度可能较快,数据处理后,缓冲区大小变大,此时返回流量窗口可能更大,滑动窗口可能更大,吞吐率可能更大!

所有包都可以延迟应答?

  • 数量限制:每隔N个包就应答一次;
  • 时间限制:超过最大延迟时间就应答一次;

捎带应答(效率机制)

客户端或服务端,每一端,都可发送接收数据

可以将ack应答包(接收端)同发送的数据报(发送端)合并一同发送给对方

其他特性:面向字节流

其他特性:缓冲区

全双工:对于一个连接,可读可写;

由于缓冲区,tcp程序的读写,可多次执行;

写100个字节数据时,可以调用一次write写100个字节,也可以调用100次write,每次写一 个字节;

读100个字节数据时,也完全不需要考虑写的时候是怎么写的,既可以一次read 100个字 节,也可以一次read一个字节,重复100次;

其他特性:无大小限制(针对运输层)

粘包问题(包:指应用层的数据包)

应用层需要约定统一协议:明确包与包之间的边界;

无明确边界:

传输层:若基于TCP协议(面向字节流,一直收发数据,按照序号放在缓冲区中)

应用层:只是一连串的字节数据,无法得知完整的应用层数据包

明确两个包之间的边界:

1.固定大小的包:读写按照固定的大小读写

2.变长的包:

a:在包头位置,约定包的总长度字段,可以获知包的结束位置

b:约定包和包之间的分割符(不与数据信息冲突即可)

UDP不存在粘包问题

面向数据报,整块接收,整块发送;

本身具有明确边界;

若向上层交付数据,报文长度任然存在;

基于TCP应用层协议

http

https

ssh:Linux

Telnet:远程控制协议

FTP:文件传输

SMTP:邮件传输

UDP协议

UDP协议端格式

0 15

16 31

16位源端口号

16位目的端口号

8

16位UDP长度

16位UDP检验和

数据(若存在)

UDP特性

无连接;

知道(目的)IP,(目的)端口号,直接进行传输,无需连接

不可靠

只负责发送数据;

没有任何安全机制,是否接收不保证

面向数据报

缓冲区

UDP的socket既能读,也能写,这个概念叫做 全双工

大小受限

UDP协议首部中有一个16位的最大长度。一个UDP能传输的数据最大长度是64K(包含UDP首 部)

适用场景

实时性要求高,允许少量丢包

基于UDP的应用层协议

NFS:网络文件系统(几乎无人使用)

TFTP:简单文件传输协议

DHCP:动态主机配置协议

BOOTP:启动协议(用于无盘设备启动)

DNS:域名解析协议

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值