传输控制协议--- Transmission Control Protocol (TCP)
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)的更多相关文章
- TCP之一:传输控制协议(Transmission Control Protocol, TCP)
TCP协议主为了在主机间实现高可靠性的包交换传输协议.本文将描述协议标准和实现的一些方法.因为计算机网络在现代社会中已经是不可缺少的了,TCP协议主要在网络不可靠的时候完成通信,对军方可能特别有用,但 ...
- TCP(Transmission Control Protocol)学习笔记
一.TCP(Transmission Control Protocol)原理介绍(参考维基百科) TCP连接包括三种状态:连接建立.数据传送和连接终止. TCP用三路握手(three-way hand ...
- 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 ...
- java基础 UDP通信 user datagram protocol 用户数据豆协议 TCP transmission control protocol 传输控制协议 多线程TCP
无连接通信 UDP 客户端 package com.swift.test; import java.io.IOException; import java.net.DatagramPacket; im ...
- Internet History, Technology, and Security(week6)——Technology: Transport Control Protocol(TCP)
前言: 这周开始学习分层网络模型的第三层,传输层. Transport/Reliability: Transport Layer TCP层的目的是补偿IP层中可能出现的错误,并充分利用可用资源.由于I ...
- 传输控制协议(TCP) -- 连接建立及终止过程
TCP简介 相对于不可靠.无连接的用户数据报协议(User Datagram Protocol, UDP),传输控制协议(Transmission Control Protocol, TCP)是可靠的 ...
- TCP(传输控制协议)和三次握手和四次断开
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机网络OSI模型中, ...
- TCP/IP 中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议
原文地址:http://hi.baidu.com/albyuyrgqgbbhoq/item/65006d2d002ab33195f62ba1 TCP/IP(Transmission Control P ...
- 【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识
第12章 TCP传输控制协议基础知识 本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方 ...
随机推荐
- mysql workbench的PK,NN,UQ,BIN,UN,ZF,AI
mysql workbench建表时PK.NN.UQ.BIN.UN.ZF.AI的意思,后面几个老搞不清,随记在这便于以后方便查. [intrinsic column flags] (基本字段类型标识) ...
- acl 4 year statistics
- hdu2102
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u014303647/article/details/27705195 题目链接: pid=2102& ...
- eclipse异常关闭,无法启动tomcat解决办法
如果eclipse异常关闭,会出现以下 此时需要关闭javaw.exe即可,重新启动tomcat了. 关闭javaw.exe需要打开任务关闭器,选择详细信息,然后结束javaw.exe即可
- React-Native 之 index.android.bundle
问题: index.android.bundle 这个bug 我相信很少同学会遇到,然而就是这个问题,困扰了我跟我的同事多天, 各种方法处理: 进入 android 目录 ./gradlew c ...
- 【vue】跟着老马学习vue-数据双向绑定
学习了node.js教程,只能说是有了一定的了解,之前也了解了webpack和es6的核心内容,也看过vue2.0的官网教程,并结合视频看过项目,但是理解和运用仍然存在很多问题,接下来的一段时间,跟着 ...
- virtualbox+vagrant学习-2(command cli)-25-Machine Readable Output
Machine Readable Output机器可读的输出 每个vagrant命令都接受一个--machine-readable的标志,它支持机器可读的输出模式.在这种模式下,终端的输出被机器友好的 ...
- python 工具 eclipse pydev工具安装。
1.下载eclipse 2.下载java jre(这个会在运行eclipse的时候提示你下载,,根据系统型号下载就行) 3.下载完jre后,把目录下javaw.exe的路径添加到系统path环境变量中 ...
- openstack 镜像初始化root登录密码
在创建虚拟机的时候 如下: #!/bin/sh passwd root<<EOF engine engine EOF huangyi替换成你的密码 注意下面的配置驱动一定要勾上,不然虚拟机 ...
- golang中的字符串拼接
go语言中支持的字符串拼接的方法有很多种,这里就来罗列一下 常用的字符串拼接方法 1.最常用的方法肯定是 + 连接两个字符串.这与python类似,不过由于golang中的字符串是不可变的类型,因此用 ...