网络基础---TCP连接

TCP协议原理:TCP每发送一个报文段,就启动一个定时器,如果在定时器超时之后还没有收到ACK确认,就重传该报文。 如图所示,数据包由A的缓冲区发往B,B在收到数据包以后,回发一个ACK确认包给A,之后A将该数据包从缓冲区释放。因此,该数据包会一直缓存在A的缓冲区,直到一个ACK确认为止。

在TCP/IP协议中,TCP协议提供可靠的面向连接的服务;三次握手(建立连接)和四次挥手(关闭连接);使用滑动窗口机制进行流量控制;

三次握手的详细图解

所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。如图1所示。

图1 三次握手建立TCP连接的各状态

(1)第一次握手:建立连接时,客户端A发送SYN包[SYN=1,seq=x]到服务器B,并进入SYN_SEND状态,等待服务器B确认。

(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN,同时自己也发送一个SYN包,即SYN+ACK包[SYN=1,ACK=1,seq=y,ack=x+1],此时服务器B进入SYN_RECV状态。

(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK[ACK=1,seq=x+1,ack=y+1],此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据。

三次握手完成后,客户端和服务器就建立了TCP连接。这时可以调用accept函数获得此连接三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP 窗口大小信息。在socket编程中,客户端执行connect()时,将会触发三次握手

四次挥手的详细图解

TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。TCP要保证在所有可能的情况下使得所有的数据都能够被投递,当你关闭一个socket时,主动关闭一端的socket将进入TIME_WAIT状态,而被动关闭一方则转入CLOSED状态 ,这能够保证所有的数据都被传输。

图2 四次挥手关闭TCP连接的各状态

(1)首先A B端的TCP进程都处于established状态, 当A的应用程序传送完报文段,就会去主动关闭连接。A会停止发送报文段(但是还会接收),并向B发送[FIN = 1,seq=u]数据,之后进入FIN-WAIT-1状态;

(2)B接收到A发送的请求之后,会通知应用进程,A已经不再发送数据,同时B会向A发送ACK确认数据[ACK=1,seq=v,ack=u+1 ],B进入CLOSE-WAIT状态,A接收到B发送的数据之后,A进入FIN-WAIT-2状态;此时A到B方的连接已经关闭了(即半连接状态)。

(3)当B的应用进程发现自己也没有数据需要传送,B应用进程就会发出被动关闭的请求,B此时向A发送[FIN=1,ACK=1,seq=w,ack=u+1]数据,并且进入LAST-ACK状态;

(4)A接收到B发送的数据之后,向B发送ACK确认数据[ACK =1,seq=u+1,ack=w+1],进入TIME-WAIT状态,等待2MSL之后正常关闭连接进入CLOSED状态;B接收到A发送的确认之后进入CLOSED状态。B到A方的连接关闭!至此,TCP连接才真正全部关闭!

几个问题:

1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到客户端的SYN报文的建立连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到 ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于 LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的 ACK报文。

3.TCP报文段

TCP报文段也分为首部和数据两部分,首部默认情况下一般是20字节长度,但在一些需求情况下,会使用“可选字段”,这时,首部长度会有所增加。

TCP首部报文信息中,有一个状态控制码(Code,Control Flag),也叫标志位字段(U、A、P、R、S、F):占6比特。各比特的含义如下:

URG:紧急比特(urgent)。当URG=1时,表明紧急指针字段有效,代表该封包为紧急封包。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据), 且上图中的 Urgent Pointer 字段也会被启用。

ACK:确认比特(Acknowledge)。只有当ACK=1时确认号字段才有效,代表这个封包为确认封包。当ACK=0时,确认号无效。

PSH:(Push function)。若为1时,代表要求对方立即传送缓冲区内的其他对应封包,而无需等缓冲满了才送。

RST:复位比特(Reset) 。当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

SYN:同步比特(Synchronous)。SYN置为1,就表示这是一个连接请求或连接接受报文,通常带有 SYN 标志的封包表示『主动』要连接到对方的意思。

FIN:终止比特(Final)。用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

*传输数据过程*TCP报文的首部格式中确认号的计算:

确认号是期望收到对方下一个报文段的第一个数据字节的序号。

序列号等于前一个报文段的序列号与前一个报文段中数据字节的数量之和

4.在已经成功建立连接的TCP连接,在以下四种情况时会导致TCP产生严重错误,发送RST包

1、端口未打开

2、请求超时

3、提前关闭

4、在一个已关闭的socket上收到数据

时间: 2024-08-11 09:48:56

网络基础---TCP连接的相关文章

网络基础---TCP/IP五层模型

网络基础---TCP/IP五层模型 计算机之间的通讯是通过互联网来进行的,各个计算机在internet上遵循它的一系列协议才能进行通讯,因此实际上可以把互联网本质看作是一系列的网络协议. 1.TCP/IP五层模型 (1)物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0 (2)数据链路层的功能:建立逻辑连接.进行硬件地址寻址.差错校验等功能(由底层网络定义协议).并且将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正. 1)以广播的方式通

网络基础——TCP/IP

网络基础--TCP/IP 一.TCP/IP协议族 计算机与网络设备要相互通信,双方就必须基于相同的方法.比如,如何探测到通信目标.由哪一边先发起通信.使用哪种语言进行通信.怎样结束通信等规则都需要事先确定.不同的硬件.操作系统之间的通信,所有的这一切都需要一种规则.而我们就把这种规则称为协议(protocol). 如图:TCP/IP是互联网相关的各类协议族的总称. 协议中存在各式各样的内容.从电缆的规格到IP地址的选定方法.寻找异地用户的方法.双方建立通信的顺序,以及Web页面显示需要处理的步骤

加深理解HTTP请求---网络基础TCP/IP

为了了解HTTP,必须的了解TCP/IP协议族. 通常使用的网络实在TCP/IP协议族的基础上运作的.而HTTP就属于他的一个子集. 1.TCP/IP 协议族 计算机与网络设备要相互通信,双方就必须基于相同的方法.比如:如何探测到通信目标.由哪一方先发起通信.使用哪种语言等等好多规则. 然而这种规则就是所谓的协议(protocol),你要用我就按照我协议的规则来.常用协议有:tcp,http,ftp,dhcp,dns,ip,pppoe,udp,snmp,icmp等等. 像这样把与互联网关联的协议

Linux之网络基础TCP/IP以及网络属性配置

计算机网络区域范围: 局域网络 (Local Area Network, LAN):节点之间的传输距离较近 广域网 (Wide Area Network, WAN):传输距离较远,网络应用方面大多为类似 email, FTP, WWW 浏览等功能 计算机网络协议:网络连接过程分成数个阶层 (layer),每个阶层都有特别的独立的功能,不会互相干扰的. 目前的OSI七层协定(Open System Interconnection) OSI模型自上而下,分为以下: 应用层:文件传输,电子邮件,文件服

网络基础tcp/ip协议五

传输层的作用: ip层提供点到点的链接. 传输层提供端到端的链接. 传输层的协议: TCP: 传输控制协议可靠的,面向链接的协议,传输效率低. UDP: 用户数据报协议,不可靠,无连接的服务,传输效率高. TCP工作原理: TCP的封装格式 链接与断开 流量控制 拥赛控制 差错控制 计时器 TCP的封装格式: 源端口,目标端口 序列号,确认序列号 如序列号为x则确认号为x+1 TCP首部长度至少20字节 控制位: SYN:建立连接时将这个值设为1 ACK:当ACK=1表示确认,ACK=0表示确认

网络基础tcp/ip协议一

计算机网络: 硬件方面:通过线缆将网络设备和计算机连接起来 软件方面:操作系统,应用软件,应用程序通过通信线路互连 实现资源共享,信息传递 计算机网络的功能: 数据通信 资源共享 增加可靠性 提高系统处理能力 网络协议与标准:一组控制数据通信的规则 协议三要素: 语法 语义 同步 标准;一致同意的规则可以理解为标准 ISO   (国际标准化组织) ANSI  (美国国家标准局) ITU-T (国际电信联盟-电信标准部) IEEE  (电气和电子工程师学会) WAN与LAN 广域网(WAN) 范围

网络基础TCP/IP

TCP/IP协议簇的分层管理 按层次分别分为4层:应用层.传输层.网络层.数据链路层. 应用层 决定了向用户提供应用服务时通信的活动,比如:FTP.DNS.HTTP 传输层 对上层应用层提供处于网络连接中的两台计算机之间的数据传输,提供端对端的数据传输.在该层有两个性质不同的协议:TCP.UDP.TCP的数据单元称为段 (segments)而UDP协议的数据单元称为"数据报(datagrams). 网络层 用来处理网络上流动的数据包,数据包是网络传输的最小数据单位,该层规定了通过怎样的路径到达对

网络基础tcp/ip协议四

网络层的功能: 定义了基于ip协议的逻辑地址. 链接不同的媒介类型. 选择数据通过网络的最佳路劲. 数据包格式: 优先级与服务类型(8)位:优先级与服务类型 标识符,标志,段偏移量:这几个字用来对数据包进行标识,使数据包到达目的端重组的时候,不会乱序. 首部长度:ip包头首部长度最短20字节 总长度(16): 协议号:UDP是17,TCP是6 首部效验和: TTL:生命周期字段,经过一个路由器TTL值减1,为0时,数据包丢弃,为了防止一个数据包在网络中无限的循环下去. ip地址分类: ip地址分

网络基础tcp/ip协议三

数据链路层:(位于网络层与物理层之间) 数据链路层的功能: 数据链路的建立,维护. 帧包装,帧传输,帧同步. 帧的差错恢复. 流量的控制. 以太网:(工作在数据链路层) CSMA/CD(带冲突检测的载波监听多路访问) 以太网采用CSMA/CD避免信号的冲突. 工作原理: 发送前先监听信号道是否空闲,若空闲则立即发生数据. 在发送时,边发边继续监听,若监听到冲突,则立即停止发送. 等待一段随机时间以后,再重新发生(退避) 以太网帧格式: 前导码 > 帧启示的定界符 > 目的地址 >  源地