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. FreeMarker标签使用

    FreeMarker标签使用 模板技术在现代的软件开发中有着重要的地位,主要用于view层的展示,freemarker是比较流行的一种. 一.FreeMarker模板文件主要有4个部分组成 ①文本,直 ...

  2. 用asp连接Access数据库 制作简单登陆界面

    [题外话:最近做Internet作业,在这写一个适合初学入门的ASP连接ACCESS数据库做登陆界面的简单的例子,以慰藉我一口气把以前做过的系统中的PHP代码全改成ASP代码来临时应付作业的心情... ...

  3. HBase学习之路 (十)HBase表的设计原则

    建表高级属性 下面几个 shell 命令在 hbase 操作中可以起到很大的作用,且主要体现在建表的过程中,看 下面几个 create 属性 1. BLOOMFILTER 默认是 NONE 是否使用布 ...

  4. opencv——Rect和RotatedRect类详解

    https://blog.csdn.net/u012819339/article/details/82217667  //不好 https://blog.csdn.net/mailzst1/artic ...

  5. Spring源码分析(五)获取Document

    摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 这一篇开始进行Document加载了,XmlBeanFactoryRea ...

  6. 个性化 UIAlertController

    系统的 UIAlertController 封装的很漂亮,用block代替之前 UIAlertView 的代理,用起来更方便的,但是其曝露出来的接口也不多如果要个性化一些东西,比如字体大小.颜色就不是 ...

  7. SSL证书更换(具体路径可参考iRedMail.tips文件)及邮件服务器架构

    由于Google的chrome不认可赛门铁克的证书,因此要更换新证书 0.8.6版本                                         0.9.4版本 - /etc/pk ...

  8. 解决:Cannot load ocl.dll library(error code 126). The ocil.dll library may be missing from the system

           因为这两天在做将springboot 项目使用的数据库MySQL转换为Oracle数据库,所以在网上查找相关资料后开始使用 Convert-Mysql-to-Oracle4.0做转换: ...

  9. CodeIgniter Doctrine2基本使用(二)(转)

    CodeIgniter Doctrine2基本使用(二) 继上次写的一篇文章<CodeIgniter Doctrine2基本使用(一)>写到操作实体的之通过Channel这个实体向数据库表 ...

  10. android6.0系统Healthd分析及低电量自动关机流程

    系统平台:android6.0概述Healthd是android4.4之后提出来的一种中介模型,该模型向下监听来自底层的电池事件,向上传递电池数据信息给Framework层的BatteryServic ...