三.传输层

第一节 传输层的基本服务

传输层功能

传输层的核心任务应用进程之间提供端到端逻辑通信服务
回顾:只有主机才有传输层,网络核心中的路由器、交换机、集线器等只用到下三层的功能

  1. 对应用层报文进行段和重组
  2. 面向应用层实现用和分解
  3. 实现端到端的量控制
  4. 塞控制
  5. 传输层
  6. 对报文进行差错检测
  7. 实现进程间的端到端可靠数据传输控制

记:分复流拥寻差错-可靠

传输层寻址与端口

一台计算机中,不同应用进程用进程标识符(进程ID)来区分
网络环境下:
TCP/IP 体系结构网络的解决方法:
在传输层使用协议端口号,通常简称为端口(port), 在全网范围内利用IP地址+端口号唯一标识一个通信端点

传输层端口号为16位整数,可以编号65536个(2的16次方)
常用端口:端口号小于256的端口

传输层端口号:
1、服务器端使用的端口号:熟知端口号和登记端口号
2、客户端使用的端口号临时性,在客户进程运行时由操作系统随机选取唯一的未被使用的端口号:


image.png
image.png

无连接服务与面向连接服务

image.png

第二节 传输层的复用与分解

复用与分解

多路复用:在源主机,传输层协议从不同的套接字收集应用进程发送的数据块,并为每个数据块封装上首部信息(包括用于分解的信息)构成报文段,然后将报文段传递给网络层
多路分解: 在目的主机,传输层协议读取报文段中的字段,标识出接收套接字,进而通过该套接字,将传输层报文段中的数据交付给正确的套接字

多路复用与多路分解(复用与分解/复用与分用): 支持众多应用进程共用同一个传输层协议,并能够将接收到的数据准确交付给不同的应用进程

无连接的多路复用与多路分解

用户数据报协议(User Datagram Protocol, UDP):Internet提供无连接服务的传输层协议
UDP套接字二元组:<目的IP地址,目的端口号>

面向连接的多路复用与多路分解

传输控制协议(Transmission Control Protocol, TCP): Internet提供面向连接服务的传输层协议
TCP套接字四元组: <源IP地址,源端口号,目的IP地址,目的端口号>

image.png

第三节 停-等协议与滑动窗口协议

可靠数据传输基本原理

image.png

基于不可靠信道实现可靠数据传输采取的措施
差错检测:利用编码实现数据报传输过程中的比特差错检测
确认: 接收方向发送方反馈接收状态。ACK(肯定确认);NAK(否定确认)
重传:发送发重新发送接收方没有正确接收的数据
序号:确保数据按序提交(对数据进行编号,即便不按序到达,可以按序提交)
计时器:解决数据丢失问题

TCP提供可靠数据传输服务
UDP不提供可靠数据传输服务

停-等协议

最简单的自动重传请求协议是停等协议

image.png
image.png

滑动窗口协议

流水线协议:管道协议,允许发送方在没有收到确认前连续发送多个分组
最典型的流水线协议:滑动窗口协议
1、 增加分组序号
2、发送方和接收方可以缓存多个分组

发送方的发送窗口:发送方可以发送未被确认分组的最大数量
接收方的接收窗口: 接收方可以缓存到正确到达的分组的最大数量

发送:


image.png
image.png
image.png
image.png

接收:


image.png
image.png
image.png
image.png

滑动窗口协议:根据窗口的大小,可以具体分为:
回退N步协议:GBN协议(Go-Back-N)
选择重传协议:SR协议(Selective Repeat)

GBN协议: 发送窗口>=1; 接收窗口=1
发送端缓存能力高,可以在没有得到确认前发送多个分组
接收端缓存能力很低,只能接收一个按序到达的分组,不能缓存未按序到达的分组

image.png

GBN发送方响应的3类事件:

  1. 上层调用
  2. 收到1个ACk,GBN采用累积确认方式,即发送方收到ACK时,表明接收方正确接收序号n以及序号小于n的所有分组
  3. 计时器超时,发送方只使用一个计时器

SR协议: 发送窗口>1 接收窗口>1
发送端缓存能力高
接收端缓存能力高

image.png

SR发送方响应事件:

  1. 上层调用
  2. 计时器超时。发送方对每个分组进行计时
  3. 收到ACK。SR协议采用逐个确认方式

image.png

第四节 用户数据报协议(UDP)

用户数据协议(User Datagram Protocal, UDP): Internet 传输层协议,提供无连接、不可靠、数据报尽力传输服务

UDP特点

  1. 应用进程容易控制发送什么数据以及何时发送,会出现分组的丢失和重复
  2. 无需建立连接
  3. 无连接状态
  4. 首部开销小,只有8个字节
    A: 对数据包不进行检查与修改
    B:传输数据前不需要建立连接
    C: 具有较好的实时性、效率高

UDP数据报结构

0-15-31: 32位二进制


image.png

UDP首部四个字段: 每个字段长度都是2字节,共8个字节
源端口号和目的端口号:UDP实现复用和分解
长度:指示UDP报文段中的字节数(首部和数据的总和)
校验和:接收方使用检测数据报是否出现差错
应用数据字段:应用层数据占用

UDP校验和

UDP校验和:提供差错检测功能
UDP的校验和用于检测UDP报文段从源到目的地传送过程中,其中的数据是否发生了改变


image.png

UDP校验和计算规则
1、所有参与运算的内容按16位对齐求和
UDP校验和计算的内容包括3部分:UDP伪首部、应用数据


image.png
image.png
image.png
  1. 求和过程中遇到溢出(即进位)都被回卷(即进位与和的最低位再相加)
    image.png
  1. 最后得到的和取反码,就是UDP的校验和,填入UDP数据报的校验和字段
image.png

第五节 传输控制协议(TCP)

传输控制协议(Transmission Control Protocol ,TCP): Internet 传输层协议
提供面向连接、可靠、有序、字节流传输服务
第一:应用进程先建立连接
第二:每一条TCP连接只有两个端点
第三:可靠交付:无差错、不丢失、不重复、按序到达
第四:全双工通信
第五:面向字节流
流:字节序列,应用程序和TCP的交互是一个个数据块,TCP把他们看做是无结构字节流

TCP报文段结构

image.png
image.png

1、源端口号字段、目的端口号字段:占16位、复用和分解上层应用的数据

image.png

2、序号字段、确认序号字段:占32位
序号字段:TCP序号是对每个应用层数据的每个字节进行编号
确认序号字段:期望从对方接受数据的字节序号,即该序号对应的字节尚未收到

image.png
  1. 首部长度字段:占4位,指出TCP端的首部长度,以4字节为计算单位 (如果是固定首部20字节则首部长度为5)

  2. 保留字段:占6位。保留为今后使用,目前值为0

  3. URG/ACK/PSH/Rst?SYN/FIN 各占1位、为标志位字段;
    各占1位、取值为0或者1
    紧急URG = 1,紧急指针字段有效,优先传送 指出本TCP报文段中紧急数据共有多少个字节
    确认ACK=1 确认序号字段有效;ACK=0;确认序号字段无效
    推送PSH=1,尽快将报文段中的数据交付接收应用进程,不要等缓存满了再交付
    复位RST=1 TCP连接出现严重差错,释放连接,再重新建立TCP连接
    同步SYN=1 该TCP报文段是一个建立新连接请求控制段或者同意建立连接的确认段
    终止FIN=1 TCP报文段的发送端数据已经发送完毕,请求释放连接

  4. 接收窗口字段:占16位,想对方通过我方接收窗口的大小


    image.png
  5. 校验和字段:占16位
    计算方法与UDP校验和的计算方法相同,TCP协议号是6


    image.png

9.选项字段长度可变,最短为0字节,最长为40字节

  1. 填充字段:取值全为0,目的是为了整个首部长度是4字节的整倍数

要点

  1. 序号字段:TCP的序号是对每个应用层数据的每个字节进行编号
  2. 确认序号字段:期望从对方接收数据的字节序号,即该序号对应的字节尚未收到,用ack_seq表示
  3. TCP段的首部总长度最短是20字节, 最长60字节(加上选项字段长度)

TCP连接管理

TCP连接管理:连接建立与连接拆除
以客户端上的一个应用进程与服务器上的一个应用进程建立一条TCP连接为例

一、建立连接
第一次握手:


image.png

客户向服务器发送连接请求段:(SYN=1, seq=x)
SYN = 1; 建立连接请求控制段
seq=x; 表示传输的报文段第1个数据字节的序列号是x,此序列号代表整个报文段的序号
客户端进入SYN_SEND(同步发送)

第二次握手:


image.png

服务端发回确认报文段:(SYN=1, ACK=1,seq=y,ack_seq=x+1)
SYN=1 同意建立新连接的确认段
ack_seq = x + 1; 表示已经收到序列号为x的报文段,准备接受序列号为x+1的报文段
seq=y : 服务器告诉客户确认报文段的序列号是y
服务器由LISTEN进入SYN_RCVD(同步收到)

第三次握手


image.png

客户端对服务器的同意连接报文段进行确认:(ACK=1,seq=x+1, ack_seq=y+1)
seq=x+1 : 客户端此次的报文段的序列号是x+1;
ack_seq = y+1 : 客户端期望接收服务器序列号y+1的报文段
当客户端发送ACK时,客户端进入ESTABLISHED状态
当服务端收到ACK后,也进入ESTABLISHED状态
第三次握手可携带数据

image.png

二、连接拆除:四次挥手


image.png

第一次挥手


image.png

客户端向服务器发送释放连接报文段:(FIN=1, seq=u)
FIN=1.发送端数据发送完毕,请求释放连接
seq=u 传输的第一个数据字节的序号是u
客户端状态由ESTABLISHED进入FIN_WAIT_1(终止等待1状态)

第二次挥手


image.png

服务器向客户发送确认段:(ACK=1, seq=v, ack_seq=u+1)
ACK=1; 确认字号段有效
ack_seq=u+1 : 服务器期望接受客户数据序号为u+1
seq=v: 服务器传输的数据序号是v

服务器状态由ESTABLISHED进入CLOSE_WAIT(关闭等待)
客户端收到ACK段后,由FIN_WAIT_!进入FIN_WAIT_2

第三次挥手


image.png

服务器向客户发送释放连接报文段:(FIN=1, ACK=1, seq=v+1, ack_seq=u+1)
FIN =1: 请求释放连接
ACK = 1:确认字号段有效
ack_seq=u+1: 表示服务器期望接受客户数据序列号为1
seq=v+1 表示自己传输的第一个数据字节的序号是v+1
服务器状态由CLOSE_WAIT进入LAST_ACK(最后确认状态)

第四次挥手:


image.png

客户向服务器发送确认段:(ACK=1,seq=u+1,ack_seq=w+1)
ACK=1: 确认字号段有效
ack_seq=v+1+1 : 表示客户期望接受服务器数据序号为v+1+1
seq=u+1 表示客户传输的数据的序号是u+1
客户端状态由FIN_WAIT_2进入TIME_WAIT 等待2MSL时间,进入CLOSED状态
服务器再收到最后一次ACK后,由LAST_ACK进入CLOSED

image.png

TCP可靠数据传输

一、可靠:保证接收方应用进程从缓冲区读出的字节流与发送发发出的字节流是完全一样的
二、TCP实现可靠数据传输服务的工作机制
1、应用层数据被分割成TCP认为最适合发送的数据块
2、序号,发送方对发送的数据包进行编号,确保数据按序提交给接收方 采用累积确认
3、确认,接收方向发送方反馈接收状态,确认是否正确接收数据
4、差错检测,利用差错编码实现数据包传输过程中的比特差错检测(甚至纠正)
5、重传,发送方重新发送接收方没有正确接收的数据
6、计时器,在发送方引入计时器,解决数据丢失问题

1、应用层数据被分割成TCP认为最适合发送的数据块
image.png

最大报文段长度:1500字节
报文段中封装的应用层数据的最大长度:1480字节 = 1500 - 最短的首部长度


2、序号,发送方对发送的数据包进行编号,确保数据按序提交给接收方
image.png
3、确认,接收方向发送方反馈接收状态,确认是否正确接收数据
image.png
image.png

TCP生成ACK的策略

  1. 具有所期望序号的报文段按序到达,所有在期望序号及以前的报文段都已被确认。TCP延迟500ms发送ACK


    image.png
  2. 具有所期望序号的报文段按序到达,且另一个按序报文段在等待ACK传输,TCP接收方立即发送单个累积ACK,确认以上两个按序到达报文段


    image.png
  3. 拥有序号大于期望序号的失序报文段到达,TCP接收方立即发送重复ACK,指示下一个期望接收字节的序号


    image.png
  4. 收到一个报文段,部分或完全填充接收数据间隔


    image.png
4、 差错检测,利用差错编码实现数据包传输过程中的比特差错检测(甚至纠正)
5、重传,发送方重新发送接收方没有正确接收的数据
6、计时器,在发送方引入计时器,解决数据丢失问题
image.png

image.png

TCP流量控制

流量控制:协调发送方与接收方的数据发送与接收速度
在通信过程中,接收方设置报文段的接收窗口字段来将窗口大小通知给发送方

TCP拥塞控制

一、网络拥塞:太多的主机``以太快的速度向网络中发送太多的数据,超出了网络处理能力,导致大量数据分组拥挤在中间设备队列中等待转发,网络性能显著下降的现象
二、拥塞控制:通过合理调度、规范、调整向网络中发送数据的主机数量、发送速率、数据量、以避免拥塞或消除已发生的拥塞

三、概念补充介绍

  1. 拥塞窗口(CongWin): 连接开始,为1MSS ; 1个最大报文段长度(MAximum Segment Size, MSS)
  2. 阈值(Threshold):临界值 16MSS

四、TCP拥塞控制算法


image.png
  1. 慢启动


    image.png
image.png

image.png
  1. 拥塞避免算法


    image.png
image.png

阈值之前:慢启动阶段
阈值之后:拥塞避免阶段


image.png
  1. 快速重传
    快速重传:接收端收到3次重复确认,则推断被重复确认的报文段已经丢失于是立即发送被重复确认的报文段
怎样算是报文段丢失了? 计时器超时

l例如: 发生计时器超时,当前拥塞窗口24MSS,当前阈值为16MSS
新的阈值:为当前拥塞窗口的一半,新的阈值=24/2=12MSS
新的拥塞窗口:直接调整为1MSS 新的拥塞窗口=1MSS
调整好新的阈值和新的拥塞窗口之后,使用慢启动。拥塞避免算法增加拥塞窗口大小

image.png
  1. 快速恢复
    快速恢复算法: 当发送3次重复确认时,网络拥塞程度不是很严重。
    阈值和拥塞窗口的调整方法:不在重新从慢启动阶段开始,而是直接从新的阈值开始,直接进入拥塞避免阶段
怎样算是报文段丢失了? 收到三次重复确认

例如:发送3次重复确认时,当前拥塞窗口为24MSS,当前阈值为16MSS
新的阈值:为当前拥塞窗口的一半
新的拥塞窗口:调整为新的阈值
调整好新的阈值和新的拥塞窗口后,使用拥塞避免算法增加拥塞窗口大小

image.png


image.png

五、窗口调整的基本策略(Additive Increase,Multiplicative Decrease, AIMD):
网络未发生拥塞时:逐渐"加性"增大窗口
网络拥塞时“乘性”减小窗口

六、拥塞预防策略:流量整型技术:规范主机向网络发送数据的流量

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • 运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是...
    srtianxia阅读 2,406评论 0 2
  • 【计算机网络】传输层 传输层协议概述 传输层协议为运行在不同host上的进程提供了一种逻辑通信机制。使得端到端不需...
    666真666阅读 2,002评论 0 4
  • 六、TCP可靠传输的实现 首先介绍以字节为单位的滑动窗口。为了讲述可靠传输原理的方便,假定数据传输只在一个方向进行...
    dmmy大印阅读 1,690评论 0 1
  • 注:本文的图片均来源于谢希仁《计算机网络》第六版的课件PPT 1.重点内容 (1)运输层为相互通信的应用进程提供逻...
    zuyuxia阅读 1,097评论 0 1
  • 本书结构是自顶向下的,所以请按下列顺序阅读: 1.计算机网络自顶向下--应用层2.计算机网络自顶向下--运输层3....
    牛富贵儿阅读 2,756评论 0 3