1.TCP的可靠传输

  • tcp的可靠传输主要靠 来自接收方的确认报文 和 超时重传。
  1. 发出报文,计时器开始计时,在规定超时时间内未收到确认报文则重新发送。

    • 注意:发送报文都留一个副本,如果收到确认报文就会删除,未重新发送之后超时时间会设置为原来的2倍。
  2. 对于流水线形式的请求报文,服务器只会按照顺序发出确认报文,如果出现失序报文,则不会被确认而是继续发送前一个的确认报文。
    • 流水线形式:不必等到一个确认报文到来再发送下一个请求报文,而是连续发送请求报文。序
    • 失效报文是指确认号不正确的报文

      1. 如 第一个请求报文seq=1 带有100个数据,则第一个确认报文ack = 101。
      2. 此时服务器应该收到第二个报文seq = 101, 但是服务器却收到了 seq = 300,这说明第二个报文丢失了或者拥塞还没到来,解决此问题一是等到被拥塞的报文到来,二是通过快重传重新发送。
      3. 在收到失序报文后不会发送对其的确认报文,而是发送上一个正常的确认报文。
  3. 因为只有服务器收到请求报文才会发送确认报文,如果收到确认报文说明该报文的确认号之前的数据都收到了,这些数据不会被重发。

2.拥塞控制

  • 需求产生的原因:需求大于供应,某些网络节点进来的报文没有出去的多,造成数据积压。
  • 判断拥塞的依据就是出现了超时。
  • 拥塞窗口 cwnd : 拥塞窗口随着拥塞程度浮动变化,并且发送窗口就等于拥塞窗口,一次要发送多少个请求就看cwnd数量。
  1. 慢开始:无拥塞时窗口数量加倍,达到慢开始门限进入拥塞控制。
  2. 拥塞避免: 每经过一个RTT窗口数目增加1。 
    • 慢开始和拥塞避免都是基于窗口的。
  3. 快重传:当收到3个连续相同的ack确认报文,则立刻在定时器过期之前重传一次请求报文,避免超时。
    • 有时候个别报文丢失了,而不是发生了拥塞,如果服务器迟迟不发送确认消息就会超时,被认为出现了拥塞,这会导致发送方错误的开启慢启动,减低性能。
    • 当收到失序报文之后会立即发送上一个确认报文,当客户端收到3个连续的相同报文(一共四个相同报文)就认为报文丢失了,则会立即快重传,避免超时。
    • 为啥3个才会认为丢失? 如果遇到了拥塞之后又立刻恢复导致报文段比他后面的报文来的迟,那么在3个确认报文发送期间可以被收到就可以避免快重传,超过三个不管什么原因都进行快重传。
  4. 快恢复:由于收到了3个相同的确认报文,说明有三个报文已经到达了服务器,为了提高性能,窗口就要扩大一些,或者把慢开始上限提高到当前窗口一半,再进行慢开始。

3.UDP

  • 用户数据报协议UDP
  • 传输控制协议TCP
  1. UDP不要先建立连接,不是面向连接的。
  2. UDP只有2个字段,一个首部字段一个数据字段。
  3. 首部字段只有8个字节 。

4.网络层提供不可靠服务

  • 网络层向上提供 无连接 尽最大努力交付的数据报服务。
    1. 尽最大努力就是不可靠:当路由器缓存溢出,他会将缓冲区的所有数据报丢弃并发送UCMP错误报告给发送源
    2. 接收方接收到IP报文时,会计算首部校验和,如果发现有误则丢弃报文,并不会通知任何信息给发送源。
      1. 发送方设置校验和
        1. 首先把校验和(16bit)设为0,将头部每16bit划分为一个间隔字段。
        2. 将所有间隔字段二进制相加求和在取反。
        3. 将结果写入校验和。 
      2. 接收到检验校验和
        1. 将头部每16bit划分为一个间隔字段。
        2. 所有字段(包括校验和)二进制求和取反。
        3. 如果为0,则正确,如果不为0则有错误,就要丢弃。

      3.所有可靠性由运输层或者应用层实现。

5.常见的网络端口和协议

  • 端口地址都是16比特,可以有在0---65535范围内的端口号。
  • 公认端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。
20/21  TCP FTP 文件传输,21端口用于连接,20端口用于传输数据
23 TCP Telent Internet远程登录服务
25 TCP SMTP 简单邮件传输服务器
53 UDP DNS 域名服务器
69 UDP TFTP 便于从系统下载启动代码
80 TCP HTTP 超文本传输协议
110 TCP POP3 邮件协议3
443 TCP HTTPS 安全的超文本传输协议

TCP可靠传输和拥塞控制的更多相关文章

  1. TCP可靠传输及流量控制实现原理

    一.为什么TCP是可靠传输? 1. 停止等待协议 通过确认与超时重传机制实现可靠传输 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数 ...

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

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

  3. 运输层6——TCP可靠传输的实现

    目录 1. 以字节为单位的滑动窗口 2. 超时重传时间的选择 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3- ...

  4. TCP可靠传输

    1. TCP 可靠性如何保证? 信道可靠:用三次握手.四次挥手保证连接正确: 数据正确:分区编号.校验和.超时重传: 传输控制:流量控制.拥塞控制 2. 重传机制 TCP可靠传输方式是序列号与确认应答 ...

  5. 计算机网络(9)-----TCP可靠传输的实现

    TCP可靠传输的实现 以字节为单位的滑动窗口 滑动窗口的滑动是以字节为单位的,发送方A和接收方B在TCP三次握手的前两次握手时协商好了发送窗口和接受窗口的大小,发送方A根据B发送来的确认连接报文中标明 ...

  6. TCP可靠传输的实现

    TCP可靠传输的实现 1.概述      为方便描述可靠传输原理,假定数据传输只在一个方向上进行,即A发送数据,B给出确认 2.以字节为单位的滑动窗口      TCP的滑动窗口是以字节为单位的.为了 ...

  7. TCP可靠传输的工作原理

    TCP可靠传输的工作原理 一.停止等待协议 1.1.简介 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数据在分组传输的平均往返时间更 ...

  8. TCP 可靠传输与流量控制的实现

    TCP 可靠传输与流量控制的实现 一.TCP可靠传输的实现 现在所讲的可靠传输是根据之前所说的可靠传输原理的实现,是现实中应用的技术. 1.1.以字节为单位的滑动窗口 如图A端一份文件分为了多个字节, ...

  9. TCP可靠传输原理

    停止等待协议 "停止等待"就是发送方在发送完一个分组后停止发送,等待接收方的确认后再继续发送. 超时重传 发送方在等待一定时间后如果还没有收到接收方的确认,此时发送方将认定分组没有 ...

随机推荐

  1. AtCoder Regular Contest 088 E - Papple Sort(树状数组+结论)

    结论:每次把字符丢到最外面最优,用树状数组统计答案,把字符放到最外边后可以当成消失了,直接在树状数组上删掉就好. 感性理解是把字符丢到中间会增加其他字符的移动次数,但是丢到外面不会,所以是正确的. # ...

  2. c++多态性详解(转)

    什么是多态? 多态一词最初来源于希腊语,意思是具有多种形式或形态的情形,当然这只是字面意思,它在C++语言中多态有着更广泛的含义. 这要先从对象的类型说起!对象的类型有两种: 实例:Derived1类 ...

  3. Overlaying GPS Coordinates for Camera Crosshairs

    Hey Guys! I am working on a project to allow us to implement GPS coordinates for the location of the ...

  4. 题解【luogu3709 大爷的字符串题】

    Description 个人觉得这是这道题最难的一步...出题人的语文... 每次给出一个区间,求这个区间最少能被多少个单调上升的序列覆盖. Solution 这个东西可以转化为这个区间中出现次数最多 ...

  5. (转)MySQL建表设置两个默认CURRENT_TIMESTAMP的技巧

    业务场景: 例如用户表,我们需要建一个字段是创建时间, 一个字段是更新时间. 解决办法可以是指定插入时间,也可以使用数据库的默认时间. 在mysql中如果设置两个默认CURRENT_TIMESTAMP ...

  6. 应用maven自动部署的脚本

    @(编程) 最近写了一个自动部署的脚本,可以一键部署到测试服务器或者生产服务器上,包括一个函数脚本和一个调用脚本,比较简单,记录如下. 特点如下: 部署前自动备份 可以部署tomcat项目和java项 ...

  7. Bootstrap 文件上传插件 FileInput的使用问题

    : 在使用bootstrap的文件上传插件fileinput http://plugins.krajee.com/file-input的预览功能时,删除预览图片在 bootstrap 模态框中没有用, ...

  8. UndertowServer+SpringMVC+Thymeleaf模板引擎构建轻量级的web项目

    这两周需要写一个页面来请求另一个服务中的接口,服务器采用了超轻量级的undertow,模板引擎采用的是Thymeleaf,在寻找页面资源位置这个地方难住了我.下面分享一下,这方面的代码. Spring ...

  9. 解决VSCode终端中文乱码问题

    VSCode终端其实调用的是cmd.exe,所以当这里出现中文乱码的时候要解决的是cmd的编码设置问题. 可以通过chcp命令查看cmd的编码设置,GBK2312的代码页编号是936,然后改成utf- ...

  10. 「LibreOJ β Round #4」子集

    https://loj.ac/problem/526 题目描述 qmqmqm有一个长为 n 的数列 a1,a2,……,an,你需要选择集合{1,2,……,n}的一个子集,使得这个子集中任意两个元素 i ...