TCP三次握手和四次断开

TCP,一个大家都熟悉的协议,对于技术人员来说,透彻的理解他,就到代表咱们的半只脚已经踏进了IT的大门。

TCP的特点

TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着是一对一的连接(通常是一个客户端连接一个服务端),在交换数据之前,需要先建立连接。在TCP的连接中,仅有一对一的双方建立连接,多播和广播不属于TCP的连接。

TCP保证其可靠性的机制

  • 应用数据被分割成TCP认为最适合发送的数据块。由TCP传递给IP的信息单位称为报文段或段(segment)。
  • 超时重传策略。当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
  • 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒.
  • TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。
  • 如果收到段的检验和有差错, TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。
  • 既然TCP报文段作为IP数据报来传输,而 IP数据报的到达可能会失序,因此 TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
  • 既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
  • TCP还能提供流量控制。 TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。

    (可参见《TCP/IP详解卷一》)

TCP一些属性说明

  • 端口号:

    每个TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加

    上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。

  • 网络套接字(socket):

    一个IP地址和一个端口号也称为一个socket。它也作为表示伯克利版的编程接口,socket包含客户IP地址、客户端口号、服务器IP地址和服务器端口号的四元组,可唯一确定互联网络中每个TCP连接的双方。

  • 全双工:

    TCP为应用层提供全双工服务。这意味数据能在两个方向上独立地进行传输。因此,连

    接的每一端必须保持每个方向上的传输数据序号。

当我们在Linux系统中使用tcpdump时可以看到一些数据的传输信息,这包含了TCP数据包的一些报头信息:

[[email protected] ~]# tcpdump
22:45:12.325568 IP 192.168.1.106.53021 > 192.168.1.210.ssh: Flags [.], ack 285080, win 62, length 0
22:45:12.325909 IP 192.168.1.210.ssh > 192.168.1.106.53021: Flags [P.], seq 285080:285340, ack 105, win 369, length 260

其中,格式为: 原地址 > 目的地址 : 标示,其中win表示窗口大小,也就是数据量的大小,可以用于流量控制,默认为4096,最大为65535,它是由一个16bit的字段表示的。

SYN: 同步序号连接标示,用来发起一个连接。

ACK: 应答标示,用来确认同步序号有效。

FIN:结束连接标示。


TCP三次握手过程

TCP的三次握手过程其实可以用一个简单的图表示:

连接过程:

  1. 请求端(通常为客户端)发送一个SYN段的请求,指明了客户端打算连接的服务的端口以及初始序号ISN,假设这个把报文段为SYN0.
  2. 服务器发回包含服务端的初始序号的SYN报文段(SYN1)作为应答,同时在请求端发送的SYN上加1,以ACK的方式返回进行确认。之所以会加1是因为一个SYN将占用一个序号。
  3. 客户端必须将确认序号设置为服务端的ISN加1返回一个ACK,以对服务器端SYN报文进行确认.

这样就建立了连接。

这一个简单的过程可以理解为,你去商店买东西.

你向服务员发起一个请求,说:我要xxx,请你把它给我(SYN0);

服务员说:好的我已经收到你的请求(SYN1)您要的是xxx对吧(ACK=SYN0+1);

你说:是的(Ack).

然后你们就开始进行交易。

TCP 四次断开过程

建立一个连接需要三次握手,而终止一个连接要经过4次握手。这由TCP的半关闭(HALF-CLOSE)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方

向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止

这个方向连接。当一端收到一个FIN,它必须通知应用层另一端几经终止了那个方向的数据传

送。发送FIN通常是应用层进行关闭的结果。

四次断开的图示如下:

断开的过程:

  1. 当有一方要终止连接时,会向对方发送一个FIN的信号n.
  2. 接受方收到信息后,会回复一个ACK(n+1)表示已经收到请求,但此时并不会立即中断连接,而是去尝试关闭自身的连接。
  3. 当响应客户端关闭本地的TCP连接之后,会向请求端重新发送一个新的FIN m,表示此事响应端可以关闭。
  4. 请求端接受到FIN m的信号后,回复一个ACK,同时自己也进入TIME_WAIT状态,而响应端进入close状态。

这里应用TCP/IP协议卷的一张图,说明了主机在TCP交互过程中状态的变化:

其实这些内容只是TCP协议的冰山一角,在这个交互过程中还有很多算法和协议规则,具体的细节大家可以参考TCP/IP协议卷。

时间: 2024-10-26 19:21:40

TCP三次握手和四次断开的相关文章

TCP三次握手、四次断开与十一种状态

一:OSI 模型 Open System Interconnect开放系统互连参考模型,是由ISO(国际标准化组织)定义的,它是个灵活的.稳健的和可互操作的模型,OSI模型的目的是为了规范不同系统的互联标准,使两个不同的系统能够较容易的通信,而不需要改变底层的硬件或软件的逻辑,OSI模型分为七层,OSI把网络按照层次分为七层,由下到上分别为物理层.数据链路层.网络层.传输层.会话层.表示层.应用层. 1.1:第七层:应用层的功能:为应用软件提供接口,使应用程序能够使用网络服务.常见的应用层协议:

TCP/IP 三次握手,四次断开

TCP/IP 三次握手,四次断开 一.TCP报文格式                     TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷 本. 下面是TCP报文格式图: 图1-1 TCP报文格式 上图中有几个字段需要重点介绍下:1.序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.2.确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效(Ack=Seq+1).3.标志位:共6个,即URG.ACK.PSH.R

TCP链接的三次握手与四次断开

一直总觉得三次握手和四次断开,之前老师讲的有问题,经过自己再次琢磨,发现是的,老师讲的没毛病,这次也把自己的理解总结一下,让对这个知识模糊的小伙伴再换种思路去理解 首先看一下TCP三次握手发生了哪些: TCP三次握手 这是第一次用画图工具画图,有点low,细节处理的不好见谅 这是第一次设计三次握手的过程,实际上发生了四件事,其次你要清楚TCP链接建立的标准是双向的,就像谈恋爱表白一样,你必须俩人相互喜欢才能表白成功啊 白话版:TCP 链接建立就像谈恋爱一样,互相表白才是表白成功背景条件:某专业

TCP三次握手和四次挥手

TCP三次握手和四次挥手 在了解TCP三次握手和四次挥手之前我们先来了解一下TCP的标志位,这样有助于我们理解TCP三次握手和四次挥手的过程 TCP标志位: URG:表示TCP包的紧急指针域有效,用来保证TCP连接不被中断 ACK:表示确认序号有效 PSH:表示Push操作; 所谓Push操作就是指在数据包到达接收端以后, 立即传送给应用程序,不在缓冲区排队 RST:表示连接复位请求; 用来复位那些产生错误的连接 SYN:表示同步序号, 用来建立连接;SYN和ACK搭配使用,请求连接时,SYN=

网络通信 --&gt; TCP三次握手和四次挥手

TCP三次握手和四次挥手 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 一.TCP报文格式 如下图: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.(3)标志位:共6个,即URG.ACK.PSH.RST.SYN.FIN等,具体含义如下:               (A)URG:紧急指针(urgent

应聘复习基础笔记1:网络编程之TCP与UDP的优缺点,TCP三次握手、四次挥手、传输窗口控制、存在问题

重要性:必考 一.TCP与UDP的优缺点 ①TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端的可靠传输.对可靠性要求较高的应用层协议,如FTP.Telnet.SMTP.HTTP.POP3 ②UDP---用户数据报协议,是一个简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去

TCP三次握手和四次挥手以及11种状态

TCP三次握手和四次挥手以及11种状态 1.三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK.SYN.FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三次握手过程说明: 1.由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接.(SYN=1,seq=x,x为随机生成数值)2.由服务端回复客户端发送的TCP连接请求报文,其中包含seq

TCP三次握手与四次挥手详解

TCP三次握手与四次挥手详解 @(TCP/IP) [TOC] 1.TCP报文格式 TCP(Transmission Control Protocol) 传输控制协议.TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接. 我们需要知道TCP在网络OSI的七层模型中的第四层(Transport层),IP在第三层(Network层),第二层(Data Link层),在第二层上的数据,我们叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment. TC

Python中的TCP三次握手和四次挥手过程

tcp三次握手和四次挥手 首先先介绍什么是传输层: 1.三次握手 1) 三次握手的详述 首先Client(客户)端发送连接请求报文,Server(服务器)段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接.(A.B关闭状态CLOSED--B收听状态LISTEN--A同步已发送状态SYN-SENT--B同步收到状态S