计网传输层知识点总结

本文详细介绍了传输层服务、套接字编程、TCP和UDP的区别与功能,涉及三次握手、四次挥手、TCP的可靠性、流量控制、拥塞控制以及复用与分用的概念。通过实例展示了TCP和UDP在应用中的行为和优化策略。
摘要由CSDN通过智能技术生成

5.1 概述和传输层服务

传输层的功能类似于一道门,处于应用层和网络层中间(Api),实现端到端的数据传输。我们知道一个电脑可能有多个进程同时在使用网络连接,那么网络包达到主机之后,怎么区分自己属于那个进程?这就需要靠传输层的作用了。

传输层协议能提供应用的多路复用/分用服务、可靠数据传送、带宽保证及延迟保证等。
image.png
这张ppt的内容相当于本章的核心内容解读

5.2 套接字编程

在网络编程中,一般是应用socket(套接字),此处的内容可以参考博客

在一般的工作面试中会经常考察套接字编程的知识,主要是看面试者对于网络编程的了解程度,紧接着问在具体场景下的问题。

image.png
先了解一下常用的C/S(客户端服务器)模式特点

  • 服务器进程一直在监听套接字等待客户的连接请求
  • 客户端创建本地套接字,与服务器的监听套接字通信
  • 收到连接请求之后创建连接套接字(原来的继续监听)
  • 服务器进程回到监听套接字上继续等待
  • 结束后释放相关资源

这里再简单说一下客户端和服务端建立连接的一整个过程。

  • 首先是服务器端创建套接字绑定服务端口,然后一直监听客户端的请求,而客户端创建套接字发送connect请求之后通过TCP协议建立连接。
  • 接下来是,客户端发送写请求,假设内容是“hello,I‘m client”,然后是服务器端先读请求再处理请求,假设这里的处理就是显示该内容到显示器。接着,服务器端写一个“hi,I’m server”发给客户端,客户端同样可以先读取然后处理请求显示,原理类似。
  • 由于请求可能不止一个,所以客户端和服务器端需要循环处理,也就是会有一个回溯的箭头,这样双方就可以一次发送和接受多条消息了。
  • 完了之后,两者可以自行关闭连接。

对于主机可以使用IP地址标识,那么主机上的进程如何标识自己?
一个IP地址主机有很多的网络服务,所以需要给与端口来区分不同进程
端口号一般是两个字节16位(0-65535),以下是基本的端口知识:
image.png

故进程标识需要两个信息

  • 主机的IP地址
  • 该进程与主机关联的端口

PS:这里可以先从套接字的角度了解一下TCP三次握手和四次挥手的过程
image.png

image.png

5.3 传输层的复用和分用

  1. 发送端复用
    传输层从多个套接字收集数据,交给网络层发送
  2. 接收端分用
    传输层将网络层的数据交付给正确的套接字(目的端口)
    image.png
    复用相当于发送方将收集到的套接字标识放到报文段中,由于套接字对应的AP往往不止一个,所以会重复封装成TCP/UDP报文,放在一起然后打包给网络层,实现IP复用
    而分用相当于接收方需要区分传输层报文段中的套接字标识,将报文段交给正确的套接字

e.g., UDP分用

image.png
这里的UDP分用,使用二元组的形式,但是对于服务器端来说,只要报文的<目的IP地址,目的端口号>是一致,那么服务器使用同样的套接字响应服务,不做区分(如下图)
image.png

e.g., TCP分用
image.png
这里说明的很清楚,除了监听及之前的部分和UDP的内容一致以外,TCP为了保障的可靠性,在连接的时候为每个客户创建唯一的连接套接字(四元组),注意这里的四元组中的目的端口号仍然是监听套接字的端口号,但这可以使得客户进程的信息不相互干扰(如下图,服务器往往是多线程的)。
image.png

5.4 无连接服务:UDP

服务

  • 通过端口实现进程之间的通信
  • 报文检错(可选):UDP校验和计算方法和之前的数据链路层一致,校验和字段可以置0

image.png

优点

  1. 简单,首部长度只有8个字节
  2. 发送和接受快

适用范围
3. 容忍丢包不能延迟:如流媒体
4. 单次请求或者响应:如dns
5. 基于UDP的应用层:应用层实现可靠

关于UDP的报文长度范围

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
image.png

在应用程序中我们用到的Data的长度最大是多少,直接取决于底层的限制。

我们从下到上分析一下:

  1. 在链路层,由以太网的物理特性决定了数据帧的长度为[ (46+18) , (1500+18) ],其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500(不包括帧头和帧尾),即MTU(Maximum Transmission Unit)为1500;
  2. 在网络层,因为IP包的首部要占用20字节,所以这时的MTU为1500-20=1480;
  3. 在传输层,对于UDP包的首部要占用8字节,所以这时的MTU为1480-8=1472;

同理,我们可以得到TCP的MTU是1480-20 = 1460

在用UDP局域网通信时,经常发生“Hello World”来进行测试,但是“Hello World”并不满足最小有效数据(64-46)的要求,为什么小于18个字节,对方仍然可用收到呢?
因为在链路层的MAC子层中会进行数据补齐,不足18个字节的用0补齐。但当服务器在公网,客户端在内网,发送小于18个字节的数据,就会出现接收端收不到数据的情况。

以太网EthernetII规定,以太网帧数据域部分最小为46字节,也就是以太网帧最小是6+6+2+46+4=64。除去4个字节的FCS,因此,抓包时就是60字节。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充以满足数据帧长不小于64字节。

5.5 面向连接的服务:TCP

概要
image.png

网络层中IP协议是尽力而为的去交付,无法保证数据的可靠性,这个问题就只能留给传输层TCP解决。

TCP报文段结构

image.png

首部长度 (4位) : 报文头长度 (单位: 位) /32
1000(转化为10进制为8,8*32/8 = 32,该报文报头长度为32个字节)
存在该字段是因为TCP报头中任选字段长度可变,报头不包含任何任选字段则长度为20字节(包括源端口2B,目的端口2B,序列号4B,确认序号4B,接收窗口2B,头长度4位,控制标志位12位,其中未使用6位,校验和2B,紧急指针2B)
4位所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节

image.png

image.png

TCP可靠数据传输

背景知识

image.png

image.png

有限状态机(FSM)
横线上方是引起的原因,下方是执行事件/动作

  1. 理想状态下(没有差错和丢包)
    image.png

  2. 有位差错的解决(发送方属于“停等”状态)
    image.png

发送方:

  • 需要对数据包进行检错编码,给与接收方检查报文的正确性
  • 等待ACK/NAK的信息,根据接收方的接受状态决定重传或者继续
    接收方:
  • 需要校验
    • 校验成功,返回ACK报文
    • 校验失败,返回NAK报文

这里没有考虑到ACK/NAK确认报文有可能会出错,此时发送方无法判断接收方是否接受成功,只能重传数据,那么有可能导致接收方反复接受相同的数据,需要特定添加控制字段辅助判断该数据是旧数据还是新数据,丢弃旧数据。

这里导入的控制字段就是所谓的序列号,标识数据传输序列。
image.png

有可能在接收方等待1的过程中,会收到0或者1的报文(ACK报文可能出错)
这里有一个间接ACK思路
image.png
这里的isACK(rcvpkt,1)表示我当前是上一次的确认消息,证明此次传输的0数据出错了。

  1. 面对报文丢失的场景3.0
    发送方的有限状态机image.png

接收方的有限状态机
image.png

GBN和SR算法了解即可,作为背景知识

TCP实现

image.png

image.png
这里的TCP是简化版本,具体的协议内容可见考研课

报文重传

为了避免超时重传的诸多问题,提出了快速重传来提高吞吐量
image.png
细节很多,需要仔细捋一捋

这里有关于超时重传时间的选择部分,主要是看对于重传时间的计算(RTTd公式中的RTTs是之前的)
image.png
这里举例说明如下
image.png

TCP流量控制

image.png

接收端的缓存有限,消费比较慢
image.png
需要通告可用的窗口大小,通过返回确认报文的时候通告窗口大小

image.png

接收方启发式:通告零窗口之后,仅当窗口大小显著增加之后才发送更新的窗口通告
发送方启发式:Nagle算法

滑动窗口

image.png

image.png

TCP连接控制

  • TCP的三次握手
    image.png

image.png

  • 四次挥手,关闭TCP连接
    image.png

image.png
注意关闭连接的时候客户端不能发送,但是为了等待发送方将数据发送完,然后客户端缓冲这些数据慢慢处理,直到服务器端发送FIN = 1的报文

最后需要等待2*MSL的时间有两个目的

  1. 等待旧的报文再网络中完全消失,不会影响到新的TCP连接。
  2. 防止服务端未收到ACK报文,超时重传而客户已关闭的局面发生。

TCP拥塞控制

理解网络拥塞

image.png

image.png

image.png

网络拥塞的解决
调节策略

AIMD(乘性减,加性增)
image.png

调节算法
  1. 慢启动
    image.png
    保持指数型增加直到达到上限

  2. 拥塞避免
    image.png

  3. 快重传:收到三次重复确认的ACK报文,发送方直接重传丢失的报文

  4. 快恢复:在快重传的基础上,发送方进入快速恢复状态,将拥塞窗口减半,并继续发送数据。

湖科大的算法总结图示
image.png

传输层的知识点就到这里,欢迎大家批评指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值