传输层

传输层(Transport)

◼ 传输层有2个协议

  • TCP(Transmission Control Protocol),传输控制协议
  • UDP(User Datagram Protocol),用户数据报协议

image-20210416140425583

UDP - 数据格式

  • UDP是无连接的, 减少了建立和释放连接的开销
  • UDP尽最大能力交付,不保证可靠交付
  • 因此不需要维护一些复杂的参数,首部只有8个字节(TCP的首部至少20个字节)

image-20210416141556574

◼ UDP长度(Length)

  • 占16位,首部的长度 + 数据的长度

UDP - 检验和(Checksum)

◼ 检验和的计算内容:伪首部 + 首部 + 数据

伪首部:仅在计算检验和时起作用,并不会传递给网络层

伪首部的作用: 为了更安全, 更严谨

image-20210416141855402

端口(Port)

◼ UDP首部中端口是占用2字节

  • 可以推测出端口号的取值范围是:0~65535

◼ 客户端的源端口是临时开启的随机端口

◼ 防火墙可以设置开启\关闭某些端口来提高安全性

image-20210416143755011

◼ 常用命令行

netstat –tulpn:查看处于监听状态的端口、占用端口的应用程序

telnet 主机 端口:查看是否可以访问主机的某个端口

例如:

telnet localhost 3306
Trying ::1…
Connected to localhost.
Escape character is ‘^]’.

TCP - 数据格式

image-20210416190112392

◼ 数据偏移

  • 占4位,取值范围是0x0101~0x1111
  • 用于计算首部长度
  • 乘以4:首部长度(Header Length)
  • 首部长度是20~60字节

为什么叫数据偏移?

因为TCP首部有多长, 就说明TCP数据部分要偏移多少字节

◼ 保留

  • 占6位,目前全为0

TCP - 小细节

image-20210416191811486

  • 有些资料中,TCP首部的保留(Reserved)字段占3位,标志(Flags)字段占9位
  • Wireshark中也是如此
  • 但其实两种说法都对, 因为9位的标志字段中有3个字段是没什么用的而且都是0

image-20210416192414386

TCP - 一个细节

◼ UDP的首部中有个16位的字段记录了整个UDP报文段的长度(首部+数据)

◼ 但是,TCP的首部中仅仅有个4位的字段记录了TCP报文段的首部长度,并没有字段记录TCP报文段的数据长度

◼ 分析

UDP首部中占16位的长度字段是冗余的,纯粹是为了保证首部是32bit对齐

TCP\UDP的数据长度,完全可以由IP数据包的首部推测出来

传输层的数据长度 = 网络层的总长度 – 网络层的首部长度 – 传输层的首部长度

TCP - 检验和(Checksum)

◼ 跟UDP一样,TCP检验和的计算内容:伪首部 + 首部 + 数据

伪首部:占用12字节,仅在计算检验和时起作用,并不会传递给网络层

image-20210416193912077

TCP - 标志位(Flags)

◼ URG(Urgent)

  • 当URG=1时,紧急指针字段才有效。表明当前报文段中有紧急数据,应优先尽快传送

◼ ACK(Acknowledgment)

  • 当ACK=1时,确认号字段才有效

◼ PSH(Push)

  • 基本不需要去关注

◼ RST(Reset)

  • 当RST=1时,表明连接中出现严重差错,必须释放连接,然后再重新建立连接

◼ SYN(Synchronization)

  • 当SYN=1、ACK=0时,表明这是一个建立连接的请求
  • 若对方同意建立连接,则回复SYN=1、ACK=1

◼ FIN(Finish)

  • 当FIN=1时,表明数据已经发送完毕,要求释放连接

TCP - 序号、确认号、窗口

◼ 序号(Sequence Number)

  • 占4字节
  • 首先,在传输过程的每一个字节都会有一个编号
  • 在建立连接后,序号代表:这一次传给对方的TCP数据部分的第一个字节的编号

◼ 确认号(Acknowledgment Number)

  • 占4字节
  • 在建立连接后,确认号代表:期望对方下一次传过来的TCP数据部分的第一个字节的编号

◼ 窗口(Window)

  • 占2字节
  • 这个字段有流量控制功能,用以告知对方下一次允许发送的数据大小(字节为单位)

TCP的几个要点

◼ 可靠传输

◼ 流量控制

◼ 拥塞控制

◼ 连接管理

  • 建立连接
  • 释放连接

TCP - 可靠传输 - 停止等待ARQ协议

◼ ARQ(Automatic Repeat–reQuest),自动重传请求

image-20210416212627634

image-20210416212831954

疑问

◼ 若有个包重传了N次还是失败,会一直持续重传到成功为止么?

  • 这个取决于系统的设置,比如有些系统,重传5次还未成功就会发送reset报文(RST)断开TCP连接

image-20210416225006633

TCP - 可靠传输 - 连续ARQ协议 + 滑动窗口协议

image-20210416213356798

◼ 如果接收窗口最多能接收4个包

但发送方只发了2个包

◼ 接收方如何确定后面还有没有2个包?

  • 等待一定时间后没有第3个包
  • 就会返回确认收到2个包给发送方

TCP - 可靠传输 - 连续ARQ协议 + 滑动窗口协议

image-20210416214147369

◼ 现在假设每一组数据是100个字节,代表一个数据段的数据

◼ 每一组给一个编号

TCP01_序号_确认号

TCP - 可靠传输 - SACK(选择性确认)

◼ 在TCP通信过程中,如果发送序列中间某个数据包丢失(比如1、2、3、4、5中的3丢失了)

◼ TCP会通过重传最后确认的分组后续的分组(最后确认的是2,会重传3、4、5)

◼ 这样原先已经正确传输的分组也可能重复发送(比如4、5),降低了TCP性能

◼ 为改善上述情况,发展出了SACK(Selective acknowledgment,选择性确认)技术

  • 告诉发送方哪些数据丢失,哪些数据已经提前收到
  • 使TCP只重新发送丢失的包(比如3),不用发送后续所有的分组(比如4、5)

TCP - 可靠传输 - SACK(选择性确认)

image-20210416220248909

◼ SACK信息会放在TCP首部的选项部分

  • Kind:占1字节。值为5代表这是SACK选项
  • Length:占1字节。表明SACK选项一共占用多少字节
  • Left Edge:占4字节,左边界
  • Right Edge:占4字节,右边界

image-20210416222741767

◼ 一对边界信息需要占用8字节,由于TCP首部的选项部分最多40字节,所以

  • SACK选项最多携带4组边界信息
  • SACK选项的最大占用字节数 = 4 * 8 + 2 = 34
  • 所以如果后面还有就只能重传了

持续更新…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值