- 浏览: 2045872 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (795)
- java (263)
- 聚类搜索引擎 (9)
- 经验之谈 (67)
- DSP (3)
- C++ (140)
- Linux (37)
- SNMP (6)
- Python (6)
- 数据库 (61)
- 网络 (20)
- 算法 (15)
- 设计模式 (4)
- 笔试题 (38)
- 散文 (35)
- 数据结构 (9)
- 银行知识 (0)
- 榜样 (9)
- Lucene (15)
- Heritrix (6)
- MetaSeeker (0)
- netbeans (12)
- php (3)
- 英语 (8)
- DB2 (0)
- java基础 (5)
- mongodb & hadoop (4)
- Javascript (7)
- Spring (4)
- ibatis & myibatis (1)
- velocity (1)
- 微服务 (0)
- paddle (1)
- 第三方 (0)
- 知识沉淀 (1)
- 建模 (0)
最新评论
-
0372:
标示对java很陌生!
中文乱码解决的4种方式 -
梦留心痕:
Java中\是转意字符, 可是你的这句话我没看懂,只要把得到的 ...
java中如何忽略字符串中的转义字符--转载 -
yanjianpengit:
[b][/b]
java为什么非静态内部类里面不能有静态成员 -
springdata-jpa:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
eclipse 如何把java项目转成web项目 -
qq1130127172:
,非常好。
(转)SpringMVC 基于注解的Controller @RequestMapping @RequestParam..
1、TCP 通过以下方式提供可靠性:
◆ 应用程序分割为TCP认为最合适发送的数据块。由TCP传递给IP的信息单位叫做报文段。
◆ 当TCP发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能记时收到一个确认,它 就重发这个报文段。
◆ 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常延迟几分之一秒。
◆ TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化如果收到报文段的检验和有差错,TCP将丢弃这个报文段和不确认收到这个报文段。
◆ 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能失序,因此TCP报文段的到达也可能失序。如果必要,TCP将对收到的数据进行排序,将收到的数据以正确的顺序交给应用层。
◆ 既然IP数据报会发生重复,TCP连接端必须丢弃重复的数据。
◆ TCP还能提供流量控制,TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。
另外,TCP对字节流的内容不作任何解释。
2、TCP首部:
TCP数据被封装在一个IP数据报中,格式如下:
IP首部20 TCP首部20 TCP首部
TCP首部格式如下:
16位源端口号 16位目的端口号 32位序号 32位确认序号 4位首部长度 保留6位 U
R
G A
C
K P
S
H R
S
T S
Y
N F
I
N 16位窗口大小 16位检验和 16位紧急指针 选项 数据
说明:
(1)每个TCP段都包括源端和目的端的端口号,用于寻找发送端和接收端的应用进程。这两个值加上IP首部的源端IP地址和目的端IP地址唯一确定一个TCP连接。
(2)序号用来标识从TCP发送端向接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。
(3)当建立一个新连接时,SYN标志变1。序号字段包含由这个主机选择的该连接的初始序号ISN,该主机要发送数据的第一个字节的序号为这个ISN加1,因为SYN标志使用了一个序号。
(4)既然每个被传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当时上次已成功收到数据字节序号加1。只有ACK标志为1时确认序号字段才有效。
(5)发送ACK无需任何代价,因为32位的确认序号字段和ACK标志一样,总是TCP首部的一部分。因此一旦一个连接建立起来,这个字段总是被设置,ACK标志也总是被设置为1。
(6)TCP为应用层提供全双工的服务。因此,连接的每一端必须保持每个方向上的传输数据序号。
(7)TCP可以表述为一个没有选择确认或否认的华东窗口协议。因此TCP首部中的确认序号表示发送方已成功收到字节,但还不包含确认序号所指的字节。当前还无法对数据流中选定的部分进行确认。
(8)首部长度需要设置,因为任选字段的长度是可变的。TCP首部最多60个字节。
(9)6个标志位中的多个可同时设置为1
◆ URG-紧急指针有效
◆ ACK-确认序号有效
◆ PSH-接收方应尽快将这个报文段交给应用层
◆ RST-重建连接
◆ SYN-同步序号用来发起一个连接
◆ FIN-发送端完成发送任务
(10)TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端期望接收的字节数。窗口大小是一个16为的字段,因而窗口大小最大为65535字节。
(11)检验和覆盖整个TCP报文端:TCP首部和TCP数据。这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。TCP检验和的计算和UDP首部检验和的计算一样,也使用伪首部。
(12)紧急指针是一个正的偏移量,黄蓉序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
(13)最常见的可选字段是最长报文大小MMS,每个连接方通常都在通信的第一个报文段中指明这个选项。它指明本端所能接收的最大长度的报文段。
二、TCP连接的建立和终止
1、建立连接协议
(1) 请求端发送一个SYN段指明客户打算连接的服务器的端口,隐疾初始序号(ISN),这个SYN报文段为报文段1。
(2) 服务器端发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。
(3) 客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)。
这3个报文段完成连接的建立,称为三次握手。发送第一个SYN的一端将执行主动打开,接收这个SYN并发回下一个SYN的另一端执行被动打开。
2、连接终止协议
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
(4) 客户段发回确认,并将确认序号设置为收到序号加1(报文段7)。
3、连接建立的超时
如果与服务器无法建立连接,客户端就会三次向服务器发送连接请求。在规定的时间内服务器未应答,则连接失败。
4、最大报文段长度MSS
最大报文段长度表示TCP传往另一端的最大块数据的长度。当一个连接建立时,连接的双方都要通告各自的MSS。
一般,如果没有分段发生,MSS还是越大越好。报文段越大允许每个报文段传送的数据越多,相对IP和TCP首部有更高的网络利用率。当TCP发送一个SYN时,它能将MSS值设置为外出接口的MTU长度减去IP首部和TCP首部长度。对于以太网,MSS值可达1460。
如果目的地址为非本地的,MSS值通常默认为536,是否本地主要通过网络号区分。MSS让主机限制另一端发送数据报的长度,加上主机也能控制它发送数据报的长度,这将使以较小MTU连接到一个网络上的主机避免分段。
5、 TCP的半关闭
TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力,这就是TCP的半关闭。
客户端发送FIN,另一端发送对这个FIN的ACK报文段。当收到半关闭的一端在完成它的数据传送后,才发送FIN关闭这个方向的连接,客户端再对这个FIN确认,这个连接才彻底关闭。
6、2MSL连接
TIME_WAIT状态也称为2MSL等待状态。每个TCP必须选择一个报文段最大生存时间(MSL)。它是任何报文段被丢弃前在网络的最长时间。
处理原则:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2MSL。这样可以让TCP再次发送最后的ACK以避免这个ACK丢失(另一端超时并重发最后的FIN)。这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间,定义这个连接的插口不能被使用。
7、平静时间
TCP在重启的MSL秒内不能建立任何连接,这就是平静时间。
8、FIN_WAIT_2状态
在FIN_WAIT_2状态我们已经发出了FIN,并且另一端也对它进行了确认。只有另一端的进程完成了这个关闭,我们这端才会从FIN_WAIT_2状态进入TIME_WAIT状态。这意味着我们这端可能永远保持这个状态,另一端也将处于CLOSE_WAIT状态,并一直保持这个状态直到应用层决定进行关闭。
9、复位报文段
TCP首部的RST位是用于复位的。一般,无论合适一个报文端发往相关的连接出现错误,TCP都会发出一个复位报文段。主要情况:
(1)到不存在的端口的连接请求;
(2)
原文地址 http://www.qqread.com/vc/g228709.html
发表评论
-
以太网的Access,Hybrid和Trunk端口
2011-10-13 17:47 2165以太网端口的三种链路类型:Access,Hybrid和Trun ... -
公网IP和私网IP
2011-09-22 17:16 2095公网、内网是两种Internet的接入方式。 内网接入方式 ... -
TCP\IP三次握手
2011-06-30 08:55 19861、建立连接协议() ... -
QoS中的Cos值
2011-05-11 13:58 3903在学习。QoS在二层分类上使用Cos值,分为0-7,8个级别。 ... -
epon中SLA,DBA,QOS的相互联系与区别
2011-05-09 15:10 2628SLA(service level agreement) ... -
(转帖)大型网站架构演变
2011-04-13 09:24 1390之前也有一些介绍大型网站架构演变的文章,例如Liv ... -
STP、RSTP、MSTP
2011-03-04 14:30 8051STP(Spanning Tree Protocol ... -
STP
2011-03-04 14:26 1672STP(Spanning Tree Protocol)能够克服 ... -
子网掩码
2010-11-18 11:13 19791.子网掩码的概念 子网 ... -
PVID和VID彻底研究
2010-11-18 09:45 2997Pvid和Vid经常出现于二、 ... -
Tag端口和UnTag端口
2010-11-10 11:39 6998情况列举 Switch收发 Switch对标记的处理 re ... -
PVID
2010-11-10 11:32 2029无论什么时候交换机tru ... -
cookies(转帖)
2010-10-25 19:17 3009Cookie技术是一个非常 ... -
STP协议
2010-09-29 10:34 1910扩展树(Spanning Tree Protocol,STP) ... -
trunk
2010-09-29 09:54 1659在二层交换机的性能参数中,常常提到一个重要的指标:T ... -
目前用到的字符集简介
2010-04-06 17:41 1723最近因为工作需要,了解了一下网站编码的一些知识,现做一些小小的 ... -
EMS网管接口
2010-03-22 12:47 3600就EMS网管本身,用接 ... -
以太网交换机
2010-03-22 10:47 1436以太网交换机,英 ... -
浅谈SDH与ATM技术及其相互关系
2010-03-22 10:33 2284一、 SDH为骨干传输铺路 ...
相关推荐
### TCP协议分析实验报告 #### 实验目的 本次实验旨在深入了解TCP协议的工作原理与机制,具体包括以下几个方面: 1. **掌握TCP协议的首部格式**:了解TCP数据包的基本结构,包括各字段的作用和意义。 2. **掌握...
### TCP协议分析网络实验报告知识点总结 #### 一、实验背景及目的 本实验报告针对TCP协议进行深入分析,旨在帮助学生理解TCP协议的工作原理及其在网络通信中的作用。实验通过实际操作的方式,让学生掌握如何使用...
本次计算机网络课程设计是基于TCP协议网上聊天程序,程序中用到了套接字socket、多线程thread和Python自带的图形界面库Tkinter,在密码保存和传递方面用到了MD5算法,该程序的功能:用户注册、用户登录、显示在线...
ModbusTCP协议报文详细分析是一种基于TCP/IP协议的Modbus协议实现,ModbusTCP协议报文格式与ModbusUDP协议报文格式相同,唯一的区别在于ModbusTCP协议使用TCP协议,而ModbusUDP协议使用UDP协议。ModbusTCP协议报文...
### TCP协议优化思路详解 #### 一、TCP协议优化的价值 TCP协议作为互联网通信的基础协议之一,在保证数据传输的可靠性方面发挥着至关重要的作用。然而,随着网络技术的不断发展和应用场景的多样化,TCP协议在某些...
基于TCP协议的端口扫描技术 TCP协议是Internet协议簇中的一种传输层协议,负责保证数据的可靠传输。端口扫描是一种常用的攻击探测技术,攻击者常将其用于寻找目标系统中的可攻击服务。基于TCP协议的端口扫描技术是...
TCP协议确保了数据的完整性和有序性,是面向连接的,意味着在数据交换前需要先建立连接,而在数据传输完成后需要断开连接。 TCP连接的建立过程称为三次握手(Three-Way Handshake)。首先,客户端发送一个带有SYN...
总结来说,"Thingsboard gateway 3.4 接入TCP协议单设备改多设备"涉及到的关键知识点包括TCP协议、Thingsboard Gateway的工作原理、多设备并发处理策略、代码修改与调试,以及系统性能和安全性的考量。通过这一改造...
Modbus TCP协议是一种广泛应用于工业自动化领域的通信协议,它基于标准的TCP/IP协议栈,使得设备能够通过以太网进行数据交换。这个协议允许不同制造商的设备之间进行简单且有效的通信,大大增强了系统的互操作性。 ...
"基于TCP协议的简单即时通信软件的设计与实现" 本文主要介绍了基于TCP协议的简单即时通信软件的设计与实现,旨在设计一个能够处理多用户进行实时、安全的即时通信系统。本系统采用C/S模式,服务器负责客户端的登录...
【TCP协议实验1】实验旨在帮助学生深入理解TCP协议的工作原理,掌握其连接状态控制、可靠传输机制,并涉及拥塞控制算法。实验的核心是实现TCP协议的状态机,特别是客户端的“停-等”模式,以及Socket接口的编程。TCP...
在这个基于TCP协议的文件传输简单实现的课程设计中,我们将深入探讨如何利用TCP协议来构建一个基本的文件传输系统。 首先,TCP协议的核心特点是提供端到端的、面向连接的服务。这意味着在数据传输前,发送方和接收...
在这个场景中,提到的“TCP协议测试连接工具”是一个帮助开发者和网络管理员检测TCP连接功能的实用程序。 TCPNetKit.exe可能是这个工具的主执行文件,而MFC42D.DLL和mfco42d.dll是Microsoft Foundation Class (MFC)...
TCP协议确保了数据的顺序传输和错误校验,通过建立连接、数据传输、断开连接等步骤来保障通信的可靠性。 在给定的文件列表中,我们看到的是一些与网络协议相关的源代码文件,尽管它们没有直接以"tcp"命名,但这些...
在IT领域,网络通信是核心部分之一,而IP/TCP协议是互联网协议栈中的关键层次。本文将深入探讨如何利用Java编程语言实现对IP和TCP协议数据包的拦截与分析,以便获取IP地址的详细信息。 首先,我们需要理解IP...
### ModbusTCP协议Java实现详解 #### 一、概述 Modbus协议是一种广泛应用于工业自动化领域的通信协议,它主要用于在设备之间进行数据交换。随着工业网络的发展,ModbusTCP/IP应运而生,该协议结合了Modbus的功能与...
本项目"JAVA写的利用ModbusTCP协议控制现场设备"就是一个典型的实例,它利用了Modbus协议的TCP/IP变体来实现对设备的远程控制。Modbus是一种广泛应用的通信协议,允许设备间进行简单数据交换,尤其适合于PLC(可编程...
西门子S7-200Smart Modbus TCP协议通讯,在使用S7-200smart进行以太网通讯,此时如果使用原生S7协议,通讯效率及通用性都不好,此时就要使用自由口的通讯方式,这里提供了modbus TCP主站(客户端最大4链接)、modbus ...
在Linux平台上实现Modbus TCP协议是一项常见的任务,特别是在工业自动化和物联网(IoT)领域。Modbus是一种广泛应用的通信协议,允许设备之间进行数据交换,而TCP(Transmission Control Protocol)是网络层的一种传输...
详细介绍了网络协议中的TCP协议分析,对于了解和理解网络基础知识非常有帮助。 共十一章。 第1-2章是基础介绍 第3章是网际协议 第4章是路由选择协议 第5章是Internet控制协议 第6章是多播和Internet组管理协议 第7章...