Transmission Control Protocol (TCP)

用于网络通信的传输控制和网络协议套件,包括很多协议,其中最主要的是TCP和IP协议。TCP/IP属于UNIX类系统的内置协议,被广泛应用于网络通信,并且已然成为网络传输的标准。即使是对于拥有专有网络协议的网络操作系统,如Netware。IP协议用于处理数据包,TCP则主要用于网络连接的建立及数据的传输,保障数据包的的可靠传输及传输顺序。

作为IP协议的补充,TCP通过提供可靠的,流式传输的连接,协议弥补了IP协议的很多不足。并且作为IP协议层的下一层,为IP提供了很多功能支持:

  • 流式传输:TCP字节流的形式传输数据,或者说更像一个文件的形式,代替原有的网络数据报形式的传输。
  • 可靠传输:头信息中的序号字段用于保障数据的传输及接收,在确认数据丢失的情况下,TCP协议会启动数据的重新传输。
  • 网络自适应:TCP会根据网络状况,动态的进行传输控制,以在不影响网络的情况下,达到最大吞吐。
  • 流控制:TCP负责管理数据缓冲区,协调处理网络冲突以避免缓冲区溢出。如TCP会间隔的暂停传输比较快发送方以适应接收数据较慢的接收方。

TCP基本的操作包括:

  • 将高层的应用数据包装为一个个数据段。
  • 将数据段包装到IP数据包
  • 绑定特殊的应用端口
  • 每个传输的字节都有对应的序列号
  • 用于建立及关闭连接的特殊数据包
  • 通过确认及超时以保障数据传输的完整性。

TCP数据分段基于32 bit words,包括20字节(5 word)头信息:

  • 源端口号:端口号用于确定数据需要发送,接收的具体应用。不同的端口号应用,也使得不同网络主机间可以同时发送,接收多个数据包到不同的应用。TCP数据流可以通过源地址,源端口,目标地址,目标端口唯一的确定应用传输。
  • 目标端口号:TCP数据传输目标应用
  • 序号:32位数据用于标识当前需要传输数据的第一个字节号
  • 确认序号:32位数据,用以标识发送端期望收到的数据起始序号,接收端可以通过此序号,确定 确认序号-1 的数据都已接收,本地副本可以丢弃。
  • 头信息长度:4字节的头信息长度
  • 标志位:6位标志位用以标识传输数据的类型及状态,部分标志位可以同时使用
  • 校验数据
  • 流控制:流控制是通过数据序号进行控制的,发送序号及确认序号。

序号

32位序号用以标识TCP传输的数据数。每个TCP数据包包含一个标识第一个需要传输的字节的序号及最后一个被远端主机接收的数据序号(确认序号),发送及接收端都需要跟踪这两个序号以保障数据的可靠传输。

TCP使用一些标志位以管理传输,一些标志位可以单独使用,但是对于用于建立及关闭连接,需要可靠传输的SYN、FIN标志位则要结合序号信息。

连接建立

TCP通过三次握手建立连接。在通常的客户端,服务器模式中,连接通常由活跃的客户端主动发起,服务端主动回应。服务端需要时刻处于监听状态,以便能够及时处理新的连接请求。

三次握手连接:

  • 客户端发送SYN数据包,包含序号信息(随机值J)
  • 接收端收到数据后,SYN数据包,包含序号(随机数k),确认序号(J+1)。
  • 客户端接收到SYN信息后,发送ACK数据包,包含确认序号(k+1)

随机值每4s递增1,以避免数据包序号混淆。

连接关闭

有序的关闭一个TCP连接需要4此数据交换,主动关闭的一端发送FIN关闭数据包,接收端接收到FIN数据包会通知应用程序关闭此次连接。

关闭的双方发送的数据交换为两次独立的数据交换,关闭可以是单方向的,也就是说一方关闭了,两一方也还可以继续接收数据。这就是所谓的半关闭。RFC793定义了MSL(最大生存时间),如果在MSL时间内,数据包不能到达,那么则认定数据包丢失。

RTT预估

主机进行数据传输时,获取确认需要等待一段时间,如果在特定时间内没有收到回复,那么数据会被认定丢失,然后,会进行数据重发,

... ...

传输控制协议--- Transmission Control Protocol (TCP)的更多相关文章

  1. TCP之一:传输控制协议(Transmission Control Protocol, TCP)

    TCP协议主为了在主机间实现高可靠性的包交换传输协议.本文将描述协议标准和实现的一些方法.因为计算机网络在现代社会中已经是不可缺少的了,TCP协议主要在网络不可靠的时候完成通信,对军方可能特别有用,但 ...

  2. TCP(Transmission Control Protocol)学习笔记

    一.TCP(Transmission Control Protocol)原理介绍(参考维基百科) TCP连接包括三种状态:连接建立.数据传送和连接终止. TCP用三路握手(three-way hand ...

  3. Internet History,Technology,and Security -Transport Control Protocol(TCP)(Week6)

    Week6 Technology: Transport Control Protocol(TCP) Welcome to Week 6 of IHTS. We are in our second we ...

  4. java基础 UDP通信 user datagram protocol 用户数据豆协议 TCP transmission control protocol 传输控制协议 多线程TCP

    无连接通信 UDP 客户端 package com.swift.test; import java.io.IOException; import java.net.DatagramPacket; im ...

  5. Internet History, Technology, and Security(week6)——Technology: Transport Control Protocol(TCP)

    前言: 这周开始学习分层网络模型的第三层,传输层. Transport/Reliability: Transport Layer TCP层的目的是补偿IP层中可能出现的错误,并充分利用可用资源.由于I ...

  6. 传输控制协议(TCP) -- 连接建立及终止过程

    TCP简介 相对于不可靠.无连接的用户数据报协议(User Datagram Protocol, UDP),传输控制协议(Transmission Control Protocol, TCP)是可靠的 ...

  7. TCP(传输控制协议)和三次握手和四次断开

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机网络OSI模型中, ...

  8. TCP/IP 中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议

    原文地址:http://hi.baidu.com/albyuyrgqgbbhoq/item/65006d2d002ab33195f62ba1 TCP/IP(Transmission Control P ...

  9. 【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识

    第12章      TCP传输控制协议基础知识 本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方 ...

随机推荐

  1. Qt如何设置应用ico图标

    第一步,创建ico文件.将ico图标文件复制到工程文件夹目录中(注意必须是图标文件,任何格式的改后缀都不行) ,重命名为"myico.ico“.然后在该目录中右击,新建文本文档,并输入一行代 ...

  2. MySQL复制(二)Master-Slave复制实践

    1. 准备工作 首先要准备2台机器,分别安装mysql 我这里的版本是5.1.73,mysql数据库安装请参考:http://www.cnblogs.com/tangyanbo/p/4289753.h ...

  3. nginx配置解析之客户端真实IP的传递

    前后端分离之后,采用nginx作为静态服务器,并通过反向代理的方式实现接口跨域的方式,在降低开发成本的同时也带来了诸多问题,例如客户端真实IP的获取. 在一些特殊场景下,比如风控和支付流程,往往需要获 ...

  4. T440安装Win7系统

    于T440自带的是Win8系统,硬盘格式为GPT分区格式,而Win7必须要MRP格式,所以必须要将硬盘格式从GPT修改为MRP,方法如下: 准备工作,下载”电脑店U盘启动盘制作工具“(百度一下,去官网 ...

  5. VMware三个版本号workstation、server、esxi的差别

    VMware三个版本号 workstation: 单机级.用在个人桌面系统中.须要操作系统支持 servier:工作组级,用于服务器.须要操作系统支持 esxi:企业级,用于服务器,不须要操作系统支持 ...

  6. 【洛谷】【线段树】P1471 方差

    [题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差 ...

  7. Linux环境变量配置文件/etc/profile、/etc/bashrc、~/.bashrc的区别以及一些隐藏文件的作用

    ①/etc/profile: 该文件登录操作系统时,为每个用户设置环境信息,当用户第一次登录时,该文件被执行.也就是说这个文件对每个shell都有效,用于获取系统的环境信息. ②/etc/bashrc ...

  8. Error: Couldn't find preset "env" relative to directory "/Users/user/ethereumjs-vm"

    运行npm run build时遇见这个问题,解决办法是安装: npm install --save-dev babel-preset-env 就解决了

  9. eclipse中文乱码解决

    1. 改变整个文件类型的编码格式 1)  eclipse->window->preferences->General->Content Types    2)  找到要修改的文 ...

  10. idea 如何优雅的添加.ignore 忽略不必要提交的文件

    最近有点时间然后就跑去搜了下idea热门的插件,一不小心发现了一个.ignore插件.有过在idea使用git都知道.gitignore文件,而这个插件就是能优雅的帮我们做这件事. 首先先讲下安装这个 ...