传输控制协议(TCP)
传输控制协议(TCP)【来自Unix网络编程(卷一)第2章】
1、TCP是一个面向连接、可靠性的传输协议;
2、TCP含有用于动态估算客户与服务器之间往返时间(RTT)的算法,以便它知道等待一个确认需要多少时间;若 超过这个时间则超时重传。一般RTT在一个局域网上大约是几毫秒,跨越一个广域网可能是数秒。
3、TCP通过给其中每个字节关联一个序列号对所发送的数据进行排序。
如果分节分顺序到达,接收端TCP将先根据他们的序列号重新排序,再把结果数据传递给接收应用。
接收端TCP负责重新排序,接收端应用只负责接收排序好的数据进行处理。
4、TCP提供流量控制。TCP总是告知对端在任何时刻它一次能够从对端接收多少字节的数据,这称为通告窗 口。
在任何时刻,该窗口指出接收缓冲区中当前可用的空间量,从而确保发送端发送的数据不会使接收缓冲 区溢出。
该窗口时刻动态变化:当接收到来自发送端数据时,窗口大小就减小,但是当接收端应用从缓冲区中读 取数据时,窗口大小就增大。通告窗口大小减小到0是有可能的:当TCP对应某个套接字的接收端缓冲区已满,导致它必须等待应用从该缓冲区读取数据时,方能从对端在接受数据。
5、TCP连接是全双工的。UDP亦可以是全双工的。
-----------------------------------------------------------------
TCP连接的建立与终止
1、三次握手
1)服务器必须准备好接收外来的连接。服务器端通过调用socket、bind和listen这3个函数来完成,我们称之为 被动打开。
2)客户通过调用connect发起主动打开。这导致客户TCP发送一个SYN(同步分节),他告诉服务器客户将在(待建立)连接中发送的数据的初始序列号(不一定从一开始吧)。通常SYN分节不携带数据,其所在IP数据 报只包含一个IP首部、一个TCP首部及可能有的TCP选项。
3)服务器必须确认(ACK)客户的SYN,同时自己也得发送一个SYN分节(服务器和客户端都各自有一个SYN初试序列号,这两个初始序列号之间并无之间联系),它含有服务器将在同一连接中发送的数据的初始序列号。服务器在单个分节中发送SYN和对客户SYN的ACK确认。
4)客户必须确认服务器的SYN。
这种交换至少需要3个分组,因此称之为TCP的三次握手(three-way-handshark)。
示意图:
图中给出的客户的初始序列号为J,服务器的初始序列号为K。ACK中的确认号是发送这个ACK的一端所期待的。类似的,每一个FIN(表示结束)的ACK中的确认号为该FIN序列号加1.(ACK是对SYN确认的)
形象化:
建立一个TCP连接就好比一个电话系统。socket函数等同于有电话可用。bing函数是在告诉别人你的电话号码,这样他们可以呼叫你。listen函数是打开电话振铃,这样当有一个外来呼叫到达时,你就可以听到。connect函数要求我们知道对方的电话号码并拨打他。
2、TCP连接终止
TCP连接的需要3个分节,终止一个连接则需要4个分节。
1)某个应用进程(可以使客户端应用进程也可以是接收端应用进程)首先调用close,我们称该端执行主动关闭。该段的TCP于是发送一个FIN分节,表示数据发送完成。
2)接收到这个FIN的对端执行被动关闭。这个FIN由TCP确认。它的接收也作为一个文件结束符传递给接收端应用进程(放在已排队等候该应用进程接收的任何其他数据之后),因为FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
3)一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。(Close函数被调用之后,TCP就发送一个FIN)
4)接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。
示意图:
半关闭:只有步骤1和2时,称为半关闭。
TCP半开连接:是指发送了TCP连接请求,等待对方应答的状态,此时连接并没有完全建立起来,双方还无法进行通信交互的状态,此时就称为半连接。由于一个完整的TCP连接需要经过三次握手才能完成,这里把三次握手之前的连接都称之为半连接。
3、TCP的状态转换
MSS:不同方向上的MSS不同不成问题;MSS用于向对端TCP通告对端在每个分节中能发送的最大TCP数量。;比如:客户端的MSS=536,这个则表示客户端能接收的最大分节大小是536.
4、TCP输出
每一个TCP套接字有一个发送缓冲区,我们可以使用SO_SENDBUF套接字选项来更改该缓冲区的大小。
套接字默认为阻塞的。当应用程序进程向TCP套接字缓冲区写入数据时,而TCP套接字发送缓冲区容不下该应用进程的所有数据,该应用进程将被投入睡眠,内核将不从write系统调用返回,直到应用进程缓冲区中的所有数据都复制到套接字的发送缓冲区。因此,从写一个TCP套接字的write调用成功返回仅仅表示我们可以重新使用原来的应用进程缓冲区,并不表示对端的TCP或应用进程已接收到数据。
数据传到数据链路层时,每个数据链路都有一个输出队列,如果该队列已满,那么新到的分组将被丢弃(数据链路层也有丢包的功能,屌)并沿着协议栈向上返回一个错误:从数据链路到IP,再从IP到TCP,TCP将注意到这个错误,并在以后某个时刻重传相应的分节。应用进程并不知道这种暂时的情况。
传输控制协议(TCP)的更多相关文章
- [TCPIP] 传输控制协议 Note
TCPIP TCP 传输控制协议 TCP提供一种面向连接的,可靠的字节流服务. 面向连接意味着两个使用TCP的应用在传输数据之前先建立一个TCP连接,这个过程跟打电话相似.在一个TCP连接中仅有两方 ...
- TCP(传输控制协议)和三次握手和四次断开
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机网络OSI模型中, ...
- 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(2)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- TCP/IP 中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议
原文地址:http://hi.baidu.com/albyuyrgqgbbhoq/item/65006d2d002ab33195f62ba1 TCP/IP(Transmission Control P ...
- 传输控制协议(TCP) -- 连接建立及终止过程
TCP简介 相对于不可靠.无连接的用户数据报协议(User Datagram Protocol, UDP),传输控制协议(Transmission Control Protocol, TCP)是可靠的 ...
- 【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识
第12章 TCP传输控制协议基础知识 本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方 ...
- TCP (传输控制协议)
http://baike.baidu.com/item/TCP/33012?fr=aladdin TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可 ...
- TCP 传输控制协议(转)
开头先说几个协议: IP:网际协议 TCP:传输控制协议 Http:超文本传输协议 AMQP:高级消息队列协议 一:TCP是什么? TCP(Transmission Control Protocol ...
随机推荐
- Tomcat实现Session共享
一个Tomcat中有多一个web应用,然后想共享session,只需在host中加上 <Valve className="org.apache.catalina.authenticat ...
- c#操作excel的一些记录
//开启Excel APP Excel.Application xlApp = new Excel.Application(); //获取程序下bin—>debug下的文件 ...
- 浅谈MVC基础
ASP.NET MVC :UI层框架 让我们的web开发又回到了本质:请求,处理,响应 MVC本身是一种思想,将程序分成三个模块 Model:模型 广义的说法(包含DAL BLL MODEL ...
- R语言基础命令与安装
1. R的安装过程 1.1.首先附上清华线路的下载链接Windows版3.3.1 1.2. 选择安装路径 1.3. 注意根据自己的计算机位数选择,如我的是64位,便选择64位安装. 1.4. 其他默认 ...
- PagerAdapter相关
FragmentPagerAdapter 特点: 应用于少数的(10个以下)fragment:保存在内存中: 只需实现 getItemgetCount()两个方法 FragmentStatePager ...
- 吴超hadoop7天视频教程全集
吴超hadoop7天视频教程全集 一.初级班全套视频 1.linux使用(3节) 2.伪分布模式安装hadoop(2节) 3.HDFS的体系结构和操作(2节) 4.HDFS的java操作方式(4节) ...
- Selenium入门10 弹出框的处理 switch_to.alert
三种弹出框alert(一个按钮),confirm(两个确认,取消),prompt(两个按钮+输入框). 切换到弹框: switch_to_alert() 新版的selenium用: brows ...
- DOM笔记(十三):JavaScript的继承方式
在Java.C++.C#等OO语言中,都支持两种继承方式:接口继承和实现继承.接口继承制继承方法签名,实现继承则继承实际的方法和属性.在SCMAScript中,由于函数没有签名,所以无法实现接口继承, ...
- [转载]互联网 免费的WebService接口
股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webxml.com.cn/WebServices/St ...
- react及flux架构范例Todomvc分析
react及flux架构范例Todomvc分析 通过分析flux-todomvc源码,学习如何通过react构建web程序,了解编写react应用程序的一般步骤,同时掌握Flux的单向数据流动架构思想 ...