转自:http://blog.chinaunix.net/uid-26275986-id-4109209.html

根据TCP/IP协议的分层结构,网络层之上是传输层,从层次结构上来看,传输层位于网络的最高层和应用的最底层。传输层的主要作用有两个:一个是居于网络层与应用层之间提供复用和分用的服务;另一个则是需要的时候为应用层提供可靠的传输服务。复用和分用指的是传输层负责实现端到端的传输,即计算机进程之间的通信;而网络层则负责点到点的传输,最重要的功能是路由寻址。

     网络通信的“用户”准确地说是位于网络节点计算机中的应用进程,我们使用端口号来区分不同的进程。传输层协议提供了一个16位的端口号,范围最大到65535。这些端口号一共分为两类:
-1. 服务器端使用的端口号,最重要的一种约定俗成的端口号不允许私自使用或改变用途,数值为0-1023;另一类叫登记端口号,数值为1024-49151,这类端口号是为没有熟知端口号的应用程序使用的,使用前必须到IANA进行登记。总之0-49151不是我们可以随便使用的。
-2. 客户端使用的端口号:数值为49152-65535,这类端口由客户端进程运行时动态选择,通信结束后释放该端口号,因此称之为短暂端口号,这部分是我们自己编写APP时可以使用的。


一、用户数据报协议UDP
     传输层一种只有两个重要的协议:TCP与UDP,其中TCP是面向连接的、可靠的数据流服务,机制相对负责,里面涉及可靠传输、流量控制和拥塞控制等,我们稍后再讨论,这里我们先来看看“轻量级”的UDP协议。
     UDP协议,即用户数据报协议是在IP的数据报服务之上增加了很少的一点功能,这就是复用/分用和简单的差错控制。UDP的主要特点是:
-1. 无连接:发送数据之前不需要建立连接,因此减少了开销和发送数据的延迟;
-2. 尽最大努力交付:不保证可靠交付,因此数据传输过程中不需要维护复杂的连接状态;
-3. 面向报文的:发送方的UDP对应用层传递下的数据直接封装成UDP报文后交给IP层,既不合并,也不拆分,而是原样保留后交给IP层。UDP一次交付一个完整的报文,不会考虑数据的大小,但是为了避免在IP层出现分片,应用层必须考虑合适的数据大小。
-4. UDP可以实现N:M的通信(因为无连接);
-6. UDP没有拥塞控制;
     尽管UDP是不可靠的连接,现实中也有一些服务会需要UDP,比如IP电话、视频网站等要求速度而不太注重数据完整性的服务,对于实时性要求很高,却允许丢失少量的分组,特别适合UDP的低开销的服务。一般的TCP/UDP应用服务如下:

     UDP的头部只有8个字节,首先有2个字节的源端口和2个字节的目的端口,然后是2个字节的UDP长度,最后是2个字节的校验和:


二、TCP概述
     TCP作为一个可靠的连接协议最大的特点就是面向连接的,即在发送数据之间要建立连接,数据传输过程中要维护连接,数据发送完毕之后要释放连接。在此基础上TCP提供可靠的传输:
-1. 可靠交付:TCP传递的数据无差错、无丢失、无重复、且按序到达;
-2. 全双工通信:TCP通信的每一段都维护着一个发送缓存和接收缓存;
-3. 面向字节流:TCP协议把上层交付的应用层数据单纯地看成是一系列无结构的字节流;
     TCP连接的端点不是主机中的应用进程,而是应用进程维护的套接字接口(socket),其基本的结构包含【IP:Port】;


三、TCP可靠传输的工作原理
     TCP实现可靠传输的工作原理主要有两个,我们分别来看:
-1. 停止等待协议
     这个协议说白了就是对于收到数据包后的确认机制,基本过程如下:
*1. 发送方A向接收方B发送数据分组M1;
*2. 接收方B收到分组M1后想A发送M1的确认;
*3. A接收到B发送的对于M1后的确认之后再发送分组M2;
*4. 若中间的某一个分组丢失或是延迟,则A就会使用超时计时器进行超时重传,每个分组发送时都会保留其副本并且设置超时计时器;
     这里对于超时重传机制需要三点说明:
**1. A发送自己的每个分组,必须暂时保存已发送分组的一个副本,直到收到该副本的确认;
**2. 分组和确认分组都必须编号,这样才能对分组进行区分;
**3. 超时计时器设置的时间应当比数据在分组传输的平均往返时间更长一些;
     上面的机制保证了在不可靠的信道上时间可靠的传输,这种机制称为自动重传请求(ARQ),即重传的请求是自动的,不需要接收方向发送方请求重传某个分组。下面的几个图来说明超时重传的机制:


-2. 连续ARQ协议
     停止等待协议的优点是简单,缺点是信道利用率太低。为此我们引入了连续ARQ协议和滑动窗口协议。滑动窗口协议是TCP协议的精髓所在,这里先来介绍基本的连续ARQ协议。
*1. 发送方维持的发送窗口中可以连续发送多个分组;
*2. 接收方采用累积确认的方式,即确认N则表示N之前的包都已经正确收到;
*3. 每成功确认M个分组,发送窗口便“滑动”M个分组;


四、TCP报文段的首部格式
     TCP的功能都在其首部的定义中得到体现:

计算机网络【六】:传输层-TCP概述 【转】的更多相关文章

  1. 计算机网络(7): 传输层TCP和UDP以及TCP的工作方式

    UDP:无连接:不保证可靠:面向报文的: TCP:面向连接:提供可靠交付:面向字节流(把应用层的数据分包,每个包装一些字节:不关心应用层给的包多大,而是根据网络状况,窗口大小决定) TCP报文: 序号 ...

  2. 【计算机网络】-传输层-Internet传输协议-TCP

    [计算机网络]-传输层-Internet传输协议-TCP TCP介绍 在不可靠的互联网上提供一个可靠的端到端字节流 面向连接的.可靠的.端到端的.基于字节流的传输协议 TCP位置 TCP服务模型 应用 ...

  3. [TCP/IP] 传输层-TCP和UDP的使用场景

    传输层-TCP和UDP应用场景 TCP(传输控制协议) 需要将要传输的文件分段传输,建立会话,可靠传输,流量控制 UDP(用户报文协议) 一个数据包就能完成数据通信,不需要建立会话,不分段,不用流量控 ...

  4. 【计算机网络】-传输层-Internet传输协议-UDP

    [计算机网络]-传输层-UDP 简介 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,UserDatagram Protocol) .UDP为应用程序提供了一-种无需 ...

  5. 计算机网络之传输层(传输层提供的服务及功能概述、端口、套接字--Socket、无连接UDP和面向连接TCP服务)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105451022 学习课程:<2019王道考研计算机网络> 学习目的 ...

  6. 计算机网络概述 传输层 TCP可靠传输的实现

    TCP可靠传输的实现 TCP的可靠性表现在:它向应用层提供的数据是 无差错的.有序的.无丢失的,简单的说就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. TCP采用了流量控制.拥塞控 ...

  7. 计算机网络之传输层UDP协议

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105453096 学习课程:<2019王道考研计算机网络> 学习目的 ...

  8. 传输层-TCP

    UDP协议提供了端到端之间的通讯,应用程序只需要在系统中监听一个端口,便可以进行网络通讯.随着计算机网络的发展,计算机网络所承载的业务越来越多,有些业务数据的传输需要具备可靠性,譬如我们在进行在线聊天 ...

  9. (传输层)TCP协议

    目录 首部格式数据单位特定注意自动重传请求ARQ具体实现发送缓存接收缓存滑动窗口确认丢失和确认迟到超时重传时间选择报文段的发送时机运输连接发送TCP请求客户端拥塞处理相关概念避免拥塞具体实现TCP 的 ...

随机推荐

  1. python函数回顾:help()

    描述 help() 函数用于查看函数或模块用途的详细说明. 语法 help 语法: help([object]) 参数说明: object -- 对象: 返回值 返回对象帮助信息. 实例 以下实例展示 ...

  2. go语言之并发编程同步一

    前面介绍了采用go语法的并行操作以及channel.既然是并行操作,那么就涉及到数据原子性以及同步的问题.所以在Go里面也需要采用同步的机制. 互斥锁: 由标准库代码包sync中的Mutex结构体类型 ...

  3. 0405-服务注册与发现-客户端负载均衡-Ribbon 同Eureka使用,Ribbon脱离Eureka使用

    一.Ribbon 同Eureka使用,注意事项 前几节一同使用,注意事项: 如果没有其他区域数据源,则根据客户端配置进行猜测(与实例配置相反).能够获取eureka.client.availabili ...

  4. 020-Spring Boot 监控和度量

    一.概述 通过配置使用actuator查看监控和度量信息 二.使用 2.1.建立web项目,增加pom <dependency> <groupId>org.springfram ...

  5. Oracle学习笔记—数据库,实例,表空间,用户、表之间的关系

    之前一直使用的关系型数据库是Mysql,而新公司使用Oracle,所以最近从网上搜集了一些资料,整理到这里,如果有不对的地方,欢迎大家讨论. 基本概念: 数据库:Oracle 数据库是数据的物理存储. ...

  6. 如何删除github中的仓库?

    使用Github管理项目确实有些好处,但删除仓库(repositories)确实不太好找到. 首先进入要删除的仓库,点击右下角的“settings” 然后拉到页面最下面在danger zone 按“d ...

  7. arm64的适配问题,这次真醉了

    写过tableView的童鞋都知道,有必须的两个代理方法要实现,还有几个选择实现的. 必须实现的代理方法: ~设置行数 - (NSInteger)tableView:(UITableView *)ta ...

  8. RocketMQ 笔记-转

    Astrotrain概述 Astrotrain是基于阿里巴巴开源项目RocketMQ进行封装的分布式消息中间件系统,提供集群环境下的消息生产和消费功能. RocketMQ介绍 RocketMQ的物理部 ...

  9. 【Flask】Sqlalchemy 外键

    ### 外键:使用SQLAlchemy创建外键非常简单.在从表中增加一个字段,指定这个字段外键的是哪个表的哪个字段就可以了.从表中外键的字段,必须和父表的主键字段类型保持一致.示例代码如下: from ...

  10. python爬虫之html解析Beautifulsoup和Xpath

    Beautiifulsoup Beautiful Soup 是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据.BeautifulSoup 用来解析 HTML 比较简 ...