传输层

在网络层之上,是传输层。由于网络层提供的尽力而为的服务,不保证数据传输的准确性,于是传输层提供了保证准确性的 TCP 协议。TCP 协议提供的是<b>面向字节流</b>和<b>面向连接</b>的服务,<b>面向字节流</b>指的是:应用层提供的数据是一串无结构的字节流,传输层可以对数据进行分段,数据没有长度限制;而<b>面向连接</b>指的是:发送端传输层和接收端传输层之间开始数据传输前有协调过程,且提供的是按序、可靠的传输服务。传输层的另外一个协议是 UDP 协议,UDP 协议提供的是<b>面向报文</b>和<b>面向无连接</b>的服务,<b>面向报文</b>指的是:应用层提供的一系列报文,传输层不对报文进行分割和拼装,报文长度受到限制;<b>面向无连接</b>指的是:发送端传输层和接收端传输层之间开始数据传输前没有协调过程,且提供的是不按序、不可靠的传输服务。

端口号

IP 地址是全网的统一编址,标识着互联网中不同的终端,具有全球意义,而端口号是在终端中统一编址,标识终端中不同的应用进程,具有本地意义。我们把 32 位 IP 地址加上 16 位的端口号成为 48 位<b>插口</b>。
端口号是由<b>互联网数字分配机构(The Internet Assigned Numbers Authority, IANA)</b>分配的,分为著名端口号、注册端口号和临时端口号三种类型。著名端口号的范围是 0 ~ 1023,由 IANA 统一分配,如 UDP 著名端口号: 53 用于 DNS 服务、67 / 68 用于 DHCP 服务,TCP 著名端口号:20 用于 FTP 数据连接服务,21 用于 FTP 控制连接服务等等;注册端口号的范围是 1024 ~ 49151,由用户向 IANA 申请注册;最后的临时端口号 49152 ~ 65535 用于本地分配。

UDP

UDP 提供的服务比较简单,因此 UDP 首部也比较简单,如下:

UDP 首部
  • 源端口和目的端口:16 位。用于标识发送进程和接收进程
  • 长度:16 位。以字节为单位给出 UDP 报文长度
  • 检验和:16 位。用于对包括数据的 UDP 报文进行检错

TCP

TCP 提供的是按序、可靠的传输服务,需要注意的是,TCP 协议没有对传输速率作任何保证。

TCP 首部
  • 源端口和目的端口:16 位。用于标识发送进程和接收进程
  • 序号: 32 位。TCP 连接中传送的字节流中的每一个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号
  • 检验和:16 位。用于对包括数据的TCP报文进行检错
  • 确认序号:32 位。指的是期望收到对方的下一个报文段的数据的第一个字节的序号。所有序号小于确认序号的报文都被正确接收了
  • TCP首部长度:4 位。以 4 个字节为单位,TCP 首部的
    最大长度为15×4=60字节,也称为数据偏移字段
  • 保留:6 位。保留为今后使用,但目前应置为 0
  • 紧急位(URG) :当 URG = 1 时,告诉系统此报文段中有紧急数据, 应尽快传送(相当于高优先级的数据)
  • 确认位(ACK):只有当 ACK = 1 时,确认序号字段才有效
  • 推送位(PSH):当接收到 PSH = 1 的 TCP 报文时,就尽快地交付接收应用进程
  • 复位(RST):当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接
  • 同步位(SYN):如果SYN = 1、ACK = 0,意味着是连接请求 TCP 报文;如果 SYN = 1、ACK = 1,意味着是同意建立连接的响应 TCP 报文。 即如果 SYN = 1,则处于 TCP 连接建立过程。
  • 终止位(FIN):当 FIN = 1,表明发送端已完成数据传输,请求释放 TCP 连接
  • 窗口:16 位。发送端允许发送的数据的字节数的上限,发送端实际发送的数据的字节数还受网络状态制约
  • 检验和:16位。用于对包括数据的 TCP 报文进行检错
  • 紧急指针: 16 位。指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)
  • 可选项:长度可变,最多 40 字节。目前TCP的增强功能都通过可选项实现

建立和释放连接的过程

建立连接的过程
释放连接的过程
发送窗口

发送窗口指的是发送端允许发送的序号范围,假设接收窗口大小为 WS,最后一次收到的确认序号为 A,则发送窗口是 A + 1 ~ A + 1 + WS

接收窗口

接收窗口指的是接收端的可用窗口长度,假设接收端的缓冲区长度为 L,已经确认但仍未向应用层提交的字节数为 X,则接收窗口是 L - X

差错控制机制

差错控制机制的本质是出错重传,一般来说,以下情况视为出错:

  • TCP 报文在传输过程中丢失
  • TCP 报文内容在传输过程中出错,被接收端丢弃
  • 由于错序使得 TCP 报文中字节的序号不属于接收窗口,被接收端丢弃

发送端确定某个 TCP 报文出错的依据有两个:一是发送端长时间未收到确认应答,重传定时器溢出;二是连续接收到 4 个确认序号相同的确认应答

对于偶而丢失 TCP 报文的情况:

  1. 发送端在发送窗口内按序发送
  2. 当接收到连续4个确认序号相同的应答帧,重传数据
  3. 定时器溢出,重传数据
  4. 一般情况下重传定时器溢出时间大于接收到4个确认序号相同的确认应答时间
偶尔丢失 TCP 报文

对于丢失大量 TCP 报文的情况:
必然导致重传定时器溢出

丢失大量 TCP 报文

拥塞控制机制

<b>拥塞</b>是指分组交换设备中经过某条链路的流量超出链路的传输能力,使得输出队列中等待输出的报文越来越多,以至于发生输出队列溢出,报文丢弃的情况
<b>拥塞窗口(CWND)</b>:网络能承载的发送端至接收端的流量

因此,发送端的实际窗口值 = MIN[CWND, 接收端公告的窗口字段值]

在 TCP 连接刚建立时,发送端采用<b>慢启动</b>的方式探测网络状态,具体过程如下:

  1. TCP 连接刚建立时,发送 1 个 TCP 报文
  2. 收到确认应答后,发送 2 个 TCP 报文
  3. 往后依次成倍增大,直到达到接收端公告的窗口值或探测到报文丢失

如果发送端重传定时器溢出,说明发生了较为严重的拥堵,此时调整方案如下:

  1. 重新开始慢启动,将当前拥塞窗口的一半作为慢启动阈值
  2. 一旦超过该阈值,流量线性增长,逐步接近拥塞点

如果连续收到多个重复确认应答,说明拥堵不是很严重,采用如下调整方案:

  1. 流量下降到当前拥塞窗口的一半
  2. 流量线性增长
拥塞控制机制

参考资料:
传输层的服务特性
端口号
TCP 的特点与格式
建立和释放连接过程
TCP 差错控制机制
TCP 拥塞控制机制

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

推荐阅读更多精彩内容

  • 传输层-TCP, TCP头部结构 ,TCP序列号和确认号详解 TCP主要解决下面的三个问题 1.数据的可靠传输...
    抓兔子的猫阅读 4,515评论 1 46
  • 【计算机网络】传输层 传输层协议概述 传输层协议为运行在不同host上的进程提供了一种逻辑通信机制。使得端到端不需...
    666真666阅读 1,996评论 0 4
  • 一、传输层的功能 1.1 OSI和DoD模型 TCP(Transmission Control Protocol)...
    yjaal阅读 831评论 0 0
  • 3.1传输层服务 3.1.1传输层服务概述 传输层服务和协议 ■传输层协议为运行在不同Host上的进程提供了一种逻...
    龟龟51阅读 751评论 0 0
  • TCP首部解析 源端口和目的端口:各占2字节。端口是运传层与应用层的服务接口。传输层的复用和分用功能都要通过端口才...
    暗夜望月阅读 481评论 0 0