端口号:通常在一台主机上运行多个网络应用程序,IP地址标识一台主机,而端口号标识特定的进程。端口是一个16bits的数,其大小在0-65535之间。0-1023之间的端口号叫做周知端口号

套接字:从网络向进程传递数据和从进程向网络传递数据的门户。是同一台主机内 应用层和运输层之间的接口,

一个UDP套接字是由一个两元组全面标识的。该二元组包含一个目的IP地址和一个目的端口号。如果两个UDP报文段有不同的源IP地址或者源端口号,但是具有相同的目的IP地址和目的端口号。那么它们仍然会通过相同的套接字定位到相同的目的进程。

多路分解:将运输层报文段中的数据交付到正确的套接字的工作。

多路复用:从源主机不同的套接字中收集数据块,并为其增加头部信息生成报文段。

UDP:

可能使用UDP的情形:

  1. 无需建立连接
  2. 应用层能够更好的控制发送的数据和时间(TCP拥塞时会遏制发送方发送)
  3. 无连接状态(TCP需要保持连接状态,包括接收,发送缓存,拥塞控制参数和序号和确认数的参数)
  4. 分组首部开销小(TCP头部大小20字节,UDP8字节)

UDP报文报文结构

UDP头部共8字节:四个字段,每个字段两字节。

检验和:提供了差错检测功能。用于确定当UDP报文段从源到达目的地移动的时候,其中的比特是否发生了变化。提供检验和的原因是不能保证源和目的之间的所有链路都提供差错检测。并且有可能报文段在路由的过程中引入比特差错。因而UDP必须在端到端的基础上在运输层一共差错检测。

可靠数据传输:

  1. rdt1.0:完全可靠信道上的可靠数据传输
  2. rdt2.0,2.1,2.2:具有比特差错信道上的可靠数据传输。引入了自动重传协议(ARQ),它需要另外三种协议来处理存在的比特差错。差错检测;接收方反馈(肯定恢复ACK和否定回复(NCK));重传(接受方有差错的分组的时候,重传)。对于发送方,在等到ACK或者NCK的状态下,不能发送分组。这被称为停等协议。rdt2.0没有考虑到ACK和NCK也有可能受损。解决办法是:如果收到受损的ACK或者NCK,则重传一次分组。但是这样无法确定是一次新的分组还是重传的分组。解决办法是在分组中添加一个序号字段。接受方检验序号即可确定是重传的还是新发的。
  3. rdt3.0:除了比特受损之外,信号还会出现丢包。因而引入时间机制决定何时重传分组。

流水线可靠数据传输:rdt3.0是一个停等协议,性能受到很大影响,如果能一次发送多个分组,则性能很大提升

  1. 流水线:不以停等方式运行,允许发送方发送多个分组而无需等待确认。带来的影响如下:
  • 必须增加序号范围:因为每个输送中的分组必须有一个唯一的序号,也许有多个在输送中的未确认的报文。
  • 协议的发送方和接收方缓存多个分组
  • 解决差错恢复的方法:回退N步选择重传

2.回退N步:滑动窗口协议。

  • 发送方:超时重传已发送但没确认的分组。
  • 接收方:每接收到一个有序分组交付到上层,丢弃无序分组;累计确认收到的有序分组。

选择重传:一个单个分组的差错就可能引起GBN重传大量分组,许多分组根本没有必要重传。随着信道差错率的增加,流水线可能被这些没有必要重传的分组填满。

TCP:面向连接,提供全双工的服务,数据流可以双向,也可以点对点。

MSS():最大报文段长度。

序号:TCP的序号是数据流的字节数,不是分组的序号。表示该报文段数据字段是首字节的序号

确认号:确认号是第一个未收到的字节序号,表示希望接收到的下一个字节。

首部长度:通常选项字段为空,一般长度20字节。

标志字段:

  • ACK:指示确认字段中的值是有效的
  • RST,SYN,FIN:连接的建立与拆除
  • PSH:指示接收方立即将数据上交上层
  • URG:报文段中存在紧急的数据,

接受窗口:用于流量控制。

流量控制:某应用程序读取数据时相对缓慢,而发送方发送太多并且快,导致接收缓存溢出。流量控制就是用来进行发送速度和接收速度的匹配。

  • LastByteRead:接收方应用程序从接收缓存中读取的最后一个字节
  • LastByteRcvd:接收方应用程序接收到的最后一个应用程序。

防止内存溢出:应该保证LastByteRecv-LastByteRead<=RecvBuffer.

接收方计算RcvWindow:RcvWindow=RcvBuffer-(LastByteRecv-LastByteRead).然后将RcvWindow记录在TCP报文中。发送方轮流跟踪两个变量,LastByteRecv和LastByteRead,这两个变量的差就是已发送但未确认的分组。通过将其控制在RecvWindow之内,就可以实现流量控制。

连接管理:

3次握手:

  1. 客户端向服务端发送SYN报文段,不包含应用层数据。首部的一个标志位(即SYN比特)被置位,客户端随机化选择(避免攻击)一个起始序号x)
  2. 服务器为该Tcp连接分配tcp缓存和变量,返回一个SYNACK报文段,
  3. 客户机为该连接分配缓存和变量。返回一个对SYNACK报文段进行确认的报文段

如果客户端不发送ACK来完成三次握手,那么服务器将会终止该连接,释放资源。

如果B发送给A的SYN+ACK中途丢失,没有达到A,那么B会周期性的超时重传,直到收到A的确认为止。

如果A发送给B的SYN中途丢失,没有到达B,A发完ACK,单方面认为TCP为 Established状态,而B显然认为TCP为Active状态

  • 假定此时双方都没有数据发送,B会周期性超时重传,直到收到A的确认,收到之后B的TCP 连接也为Established状态,双向可以发包
  • 假定此时A有数据发送,B收到A的 Data + ACK,自然会切换为established 状态,并接受A的Data
  • 假定B有数据发送,数据发送不了,会一直周期性的重传SYN+ACK,直到收到A的确认为止。

4次挥手:

TCP连接的两个进程中任意一个都能终止该连接,连接关闭需要4步。假设客户端发起一个关闭请求:

  1. 客户端向服务端发送一个FIN报文
  2. 服务端返回一对FIN报文的确认报文
  3. 服务端发送一个FIN报文
  4. 客户端返回一个对FIN报文的确认报文

TIME-WAIT:

  1. 可靠的实现全双工连接的终止
  2. 等待迷途分组在网络中消失

拥塞控制:

  1. 端到端的拥塞控制:网络层没有为运输层提供显示支持
  2. 网络辅助的拥塞控制:网路层向发送方提供显示反馈。

TCP拥塞控制:由于IP层不向端系统提供显示的网络拥塞反馈,所以TCP必须使用端到端控制。而不是网络辅助拥塞控制。

TCP

TCP连接的两方都记录一个额外的变量:拥塞窗口(CongWin),它对一个TCP发送方能向网络中发送流量的速率进行了限制。特别是,在一个发送方中未被确认的数据量不会超过CongWin与RcvWindow中的最小值。

两个拥塞指示:3次冗余ACK,超时

TCP拥塞控制算法:

  1. 加性增,乘性减。
    • 缓慢增加CongWin,每个RTT增加1个MSS,线性增长(拥塞避免)
    • 乘性减发生丢包时,设置CongWin = CongWin/2(不低于1个MSS),从而控制发送速度
  2. 慢启动:TCP连接开始时,CongWin的初始值为1个MSS,指数型增长
  3. 对拥塞指示做出反应:
    • 3次冗余ACK:CongWin = CongWin/2,然后线性增加(拥塞避免)
    • 超时:CongWin被设置为1个MSS,然后指数增长,直到CongWin达到超时前的一半为止。
  4. Threshold(阈值):用于确定慢启动将结束并且拥塞避免将开始的窗口长度,初始化为一个很大的值,每当发送一个丢包时,会被设置为丢包时CongWin的一半

<计算机网络>运输层的更多相关文章

  1. 常见问题:计算机网络/运输层/UDP

    几乎不对IP增加其他东西,无连接. 优势 速度快.适合实时. 无连接建立,没有连接时延. 无连接状态. 分组首部开销小.TCP需20字节,UDP仅需8字节. 使用UDP的协议 DNS SNMP RIP ...

  2. 常见问题:计算机网络/运输层/TCP

    TCP 面向连接,全双工,点对点. TCP头格式 TCP包没有IP地址,IP地址在网络层的IP协议中,TCP包包括源端口号,目标端口号 一个TCP连接需要四个元祖表明是同一连接(src_ip,src_ ...

  3. APS审核经验+审核资料汇总——计算机科学与技术专业上海德语审核

    1.APS是什么 德国驻华使馆文化处留德人员审核部(简称APS)成立于2001年7月,是由德国驻华使馆文化处和德意志学术交流中心(DAAD)在北京共同合作成立的服务机构. APS是中国学生前往德国留学 ...

  4. 这一篇TCP总结请收下

    前言 很高兴遇见你~ TCP这些东西,基本每个程序猿都或多或少是掌握的了.虽然感觉在实际开发中没有什么用武之处,但,面试他要问啊 而最近大家伙过完年,也都在准备春招,我也一样.阅读了一些okHttp源 ...

  5. 计算机网络Web应用层与运输层(HTTP/TCP)

    应用层协议原理 Web和HTTP DNS:英特网的目录服务 运输层 面向连接的运输:TCP及拥塞原理 一.应用层协议原理 DNS域名解析: (用例:www.baidu.com)域名解析是网络请求的第一 ...

  6. 计算机网络基础笔记 运输层协议UDP/TCP

    目录 UDP 首部结构 主要特点 TCP 首部结构 主要特点 TCP 可靠性实现 停止等待ARQ协议 连续ARQ协议&滑动窗口协议 拥塞控制 TCP 运输连接管理 连接建立:三次握手 连接释放 ...

  7. 计算机网络(6)-----运输层概述和UDP协议

    运输层(Transport Layer) 定义 运输层负责端到端的通信,既是七层模型中负责数据通信的最高层,又是面向网络通信的低三层和面向信息处理的最高三层之间的中间层.运输层位于网络层之上.会话层之 ...

  8. 计算机基础:计算机网络-chapter5 运输层

    一.运输层做什么事情,通过什么协议实现, 运输层做什么 为相互通信的应用提供逻辑通信 通过端口号来确定应用,提供端到端的服务: 为什么需要运输层,IP层不是就实现了传输数据吗 从IP层来说,是两台主机 ...

  9. 《计算机网络 自顶向下方法》 第3章 运输层 Part2

    待补充完善 TCP 相关基本点 1.面向连接 两个不同主机上的进程在通过 TCP 进行通信之前,必须先通过三次握手来建立 TCP 连接 2.全双工服务 即,如果一台主机上的进程 A 与另一台主机上的进 ...

随机推荐

  1. 洛谷P3209 [HNOI2010]PLANAR(2-SAT)

    题目描述 若能将无向图G=(V,E)画在平面上使得任意两条无重合顶点的边不相交,则称G是平面图.判定一个图是否为平面图的问题是图论中的一个重要问题.现在假设你要判定的是一类特殊的图,图中存在一个包含所 ...

  2. 洛谷P4704 太极剑(乱搞)

    题意 题目链接 Sol 不会正解 写了发暴力过了,貌似跑的还挺快?.. // luogu-judger-enable-o2 // luogu-judger-enable-o2 #include< ...

  3. 打包错误--Error:A problem was found with the configuration of task ':app:packageRelease'.

    解决办法: app目录下的build.gradle文件 将 shrinkResources 的值改为 false 或者直接去掉 shrinkResources true  表示 :打包的时候会去删除一 ...

  4. 2014/08/31 Zushi

    今天是逗子森户海滨浴场开放的最后一天,趁着最后的光景来这里透透气. 在学皮划艇准备下海的人们,貌似还挺有趣. 来自云端的上帝之手. 谁愿意和我一起向着夕阳弄桨. 夕阳西下,那里是家乡的方向. 灯塔和神 ...

  5. VS开发程序用户防范安全问题

    一个开发的系统程序从需求.设计到打包.用户使用的过程中,安全问题一直是开发者关注的焦点.对于用户来说,不考虑加密工具(如加密精灵等),面对的是一个系统的各个组件集合及各类的配置文件( 如App.Con ...

  6. Spark WordCount 文档词频计数

    一.使用数据 Apache Spark is a fast and general-purpose cluster computing system.It provides high-level AP ...

  7. ORACLE实际执行计划与预估执行计划不一致性能优化案例

      在一台ORACLE服务器上做巡检时,使用下面SQL找出DISK_READ最高的TOP SQL分析时,分析过程中,有一条SQL语句的一些反常现象,让人觉得很奇怪: SELECT SQL_ID,    ...

  8. 洗礼灵魂,修炼python(89)-- 知识拾遗篇 —— 进程

    进程 1.含义:计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位.说白了就是一个程序的执行实例. 执行一个程序就是一个进程,比如你打开浏览器看到我的博客,浏览器本身是一 ...

  9. 4. svg学习笔记-文档结构元素和样式的使用

    svg除了绘图元素之外还有一部分是专门用于文档结构的,这类元素有<g>,<use>,<defs>,<symbol>等 <g>元素 如果我们仅 ...

  10. python中根据字符串导入模块module

    python中根据字符串导入模块module 需要导入importlib,使用其中的import_module方法 import importlib modname = 'datetime' date ...