图文并茂,讲解TCP和UDP协议的原理以及区别
最近重新认知了一下TCP和UDP的原理以及区别,做一个简单的总结。首先,tcp和udp都是工作在传输层,用于程序之间传输数据的。数据一般包含:文件类型,视频类型,jpg图片等。TCP是基于连接的,而UDP是基于非连接的。tcp传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如,传输文件,发送邮件,浏览网页等等udp的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高但是对少量丢包并没有太大要求的场景。比如:域名查询,语音通话,视频直播等。udp还有一个非常重要的应用场景就是隧道网络,比如:VXLAN以人与人之间的通信为例:UDP协议就相当于是写信给对方,寄出去信件之后不能知道对方是否收到信件,信件内容是否完整,也不能得到及时反馈,而TCP协议就像是打电话通信,在这一系列流程都能得到及时反馈,并能确保对方及时接收到。如下图:tcp是如何保证以上过程的?分为三个步骤:三次握手,传输确认,四次挥手。三次握手是建立连接的过程。当客户端向服务端发起连接时,会先发一包连接请求数据,过去询问一下,能否与你建立连接?这包数据称之为SYN包,如果对端同意连接,则回复一包SYN+ACK包,客户端收到之后,发送一包ACK包,连接建立,因为这个过程中互相发送了三包数据,所以称之为三次握手。这是为了防止,因为已失效的请求报文,突然又传到服务器,引起错误,这是什么意思?假设采用两次握手建立连接,客户端向服务端发送一个syn包请求建立连接,因为某些未知的原因,并没有到达服务器,在中间某个网络节点产生了滞留,为了建立连接,客户端会重发syn包,这次的数据包正常送达,服务端发送syn+ack之后就建立起了连接。但是第一包数据阻塞的网络突然恢复,第一包syn包又送达到服务端,这时服务端会认为客户端又发起了一个新的连接,从而在两次握手之后进入等待数据状态,服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致,如果在三次握手的情况下,服务端收不到最后的ack包,自然不会认为连接建立成功。所以三次握手本质上来说就是为了解决网络信道不可靠的问题,为了在不可靠的信道上建立起可靠的连接,经过三次握手之后,客户端和服务端都进入了数据传输状态。一包数据可能会被拆成多包发送,如何处理丢包问题,这些数据包到达的先后顺序不同,如何处理乱序问题?针对这些问题,tcp协议为每一个连接建立了发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1,发送数据时,从数据缓冲区取一部分数据组成发送报文,在tcp协议头中会附带序列号和长度,接收端在收到数据后需要回复确认报文,确认报文中的ack等于接受序列号加长度,也就是下包数据发送的起始序列号,这样一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到,发送端也可以发送一次的连续的多包数据,接受端只需要回复一次ack就可以了。如图:六、四次挥手:处于连接状态的客户端和服务端,都可以发起关闭连接请求,此时需要四次挥手来进行连接关闭。假设客户端主动发起连接关闭请求,他给服务端发起一包FIN包,标识要关闭连接,自己进入终止等待1装填,服务端收到FIN包,发送一包ACK包,标识自己进入了关闭等待状态,客户端进入终止等待2状态,这是第二次挥手,服务端此时还可以发送未发送的数据,而客户端还可以接受数据,待服务端发送完数据之后,发送一包FIN包,最后进入确认状态,这是第3次挥手,客户端收到之后恢复ACK包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到ACK包后,立即关闭连接,这是第四次挥手。为什么客户端要等待超时时间?这是为了保证对方已经收到ACK包,因为假设客户端发送完最后一包ACK包后释放了连接,一旦ACK包在网络中丢失,服务端将一直停留在 最后确认状态,如果等待一段时间,这时服务端会因为没有收到ack包重发FIN包,客户端会响应 这个FIN包进行重发ack包,并刷新超时时间,这个机制跟第三次握手一样。也是为了保证在不可靠的网络链路中进行可靠的连接断开确认。udp:首先udp协议是非连接的,发送数据就是把简单的数据包封装一下,然后从网卡发出去就可以了,数据包之间并没有状态上的联系,正因为udp这种简单的处理方式,导致他的性能损耗非常少,对于cpu,内存资源的占用也远小于tcp,但是对于网络传输过程中产生的丢包,udp并不能保证,所以udp在传输稳定性上要弱于tcp。所以,tcp和udp的主要区别:tcp传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方。比如,传输文件,发送邮件,浏览网页等等,udp的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高但是对少量丢包并没有太大要求的场景。比如:域名查询,语音通话,视频直播等。udp还有一个非常重要的应用场景就是隧道网络,比如:VXLAN.

TCP/IP网络模型从上至下哪四层组成?各层主要功能是什么?
1、组成:应用层、传输层、网络层、链路层2、各层主要功能:应用层:负责向用户提供应用程序,比如HTTP、FTP、Telnet、DNS、SMTP等。传输层:负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文。网络层:负责路由以及把分组报文发送给目标网络或主机。链路层:负责封装和解封装IP报文,发送和接受ARP/RARP报文等。扩展资料OSI是开放系统互连参考模型 (Open System Interconnect 简称OSI),是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP简单来说就是OSI的简化版,把OSI的七层简化为了四层。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。参考资料:百度百科 - TCP/IP协议
TCP/IP网络模型从上至下由应用层、传输层、网络层、链路层组成。1、应用层功能:应用层负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:Telnet远程登录、SMTP(简单邮件传输协议)、FTP(文件传输协议)、HTTP(超文本传输协议)等。2、传输层功能:传输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。3、网络层功能:网络层处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议(网际协议)、ICMP协议(网际控制报文协议)和IGMP协议(网际组管理协议)。4、链路层功能:链路层有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。把链路层地址和网络层地址联系起来的协议有ARP(地址解析协议)和RARP(逆地址解析协议)。扩展资料:TCP/IP始于美国国防部,美国国防部于20世纪60年代末为高级研究计划局网络(ARPAnet,Intermet的前身)开发了TCP/IP。TCP/IP的迅速流行要归功于它的低成本、可在不同的平台间进行通信的能力和它开放的特性。“开放”的意思是软件开发人员可以自由地使用和修改TCP/IP的核心协议。TCP/IP是Internet实际采用的标准。UNIX和Linux一直都使用TCP/IP,Windows网络操作系统也以TCP/IP作为默认的协议。TCP/IP协议的开发始于20世纪60年代后期,早于OSI参考模型,故不甚符合OSI参考标准。大致来说,TCP协议对应于OSI参考模型的传输层,IP协议对应于网络层。虽然OSI参考模型是计算机网络协议的标准,但由于其开销太大,所以真正采用它的情况并不多。TCP/IP协议则不然,由于它的简洁、实用,从而得到了广泛的应用。可以说,TCP/IP协议已成为建立计算机局域网、广域网的首选协议,已成为事实上的工业标准和国际标准参考资料来源:百度百科-TCP/IP协议
CP/IP分层模型 TCP/IP分层模型(TCP/IP Layening Model)被称作因特网分层模型(Internet Layering Model)、因特网参考模型(Internet Reference Model)。图2.2表示了TCP/IP分层模型的四层。┌────────┐┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐│ ││D│F│W│F│H│G│T│I│S│U│ ││ ││N│I│H│T│T│O│E│R│M│S│其││第四层,应用层 ││S│N│O│P│T│P│L│C│T│E│ ││ ││ │G│I│ │P│H│N│ │P│N│ ││ ││ │E│S│ │ │E│E│ │ │E│它││ ││ │R│ │ │ │R│T│ │ │T│ │└────────┘└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘┌────────┐┌─────────┬───────────┐│第三层,传输层 ││ TCP │ UDP │└────────┘└─────────┴───────────┘┌────────┐┌─────┬────┬──────────┐│ ││ │ICMP│ ││第二层,网间层 ││ └────┘ ││ ││ IP │└────────┘└─────────────────────┘┌────────┐┌─────────┬───────────┐│第一层,网络接口││ARP/RARP │ 其它 │└────────┘└─────────┴───────────┘图2.2 TCP/IP四层参考模型TCP/IP协议被组织成四个概念层,其中有三层对应于ISO参考模型中的相应层。ICP/IP协议族并不包含物理层和数据链路层,因此它不能独立完成整个计算机网络系统的功能,必须与许多其他的协议协同工作。TCP/IP分层模型的四个协议层分别完成以下的功能:第一层??网络接口层网络接口层包括用于协作IP数据在已有网络介质上传输的协议。实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。相反,它定义像地址解析协议(Address Resolution Protocol,ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。第二层??网间层网间层对应于OSI七层参考模型的网络层。本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。第三层??传输层传输层对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。其中TCP协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP协议(Use Datagram Protocol)提供不可靠的用户数据报服务。第四层??应用层 应用层对应于OSI七层参考模型的应用层和表达层。因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等,这也是本书将要讨论的重点。

简述TCP/IP工作原理
TCP/IP模型包括:● 网络层● 网际层● 传输层● 应用层一、网络层是模型的最低层,负责将帧放进线路,或从线路中取下帧。TCP/IP的网络层对应着OSI的物理层和数据链路层。这也就是为什么这一层包含物理通信介质和在这些介质上传送帧的通信协议。二、网际层网际层(互联网层):负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。● ICMP网际控制消息协议:问题出现时向IP发送错误报告。我们平时用的ping用它。● IGMP网际分组管理协议:向路由器通知多播组成员的存在。广播不能跨路由器,路由器是隔离广播的,但它隔离不了多播,它可以跨路由器。● ARP地址解析协议:判断主机的硬件地址。三、传输层传输层是TCP/IP模型中非常特殊和重要的一层,它包括了OSI传输层、会话层、表示层和应用层的各部分功能,包括两个传输协议(TCP协议和UDP协议)在计算机之间提供通信对话。四、应用层应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
以下非原创,仅供参考! 下面以采用TCP/IP协议传送文件为例,说明TCP/IP的工作原理,其中应用层传输文件采用文件传输协议(FTP)。TCP/IP协议的工作流程如下:1.在源主机上,应用层将一串应用数据流传送给传输层。2.传输层将应用层的数据流截成分组,并加上TCP报头形成TCP段,送交网络层。3.在网络层给TCP段加上包括源、目的主机IP地址的IP报头,生成一个IP数据包,并将IP数据包送交链路层。4.链路层在其MAC帧的数据部分装上IP数据包,再加上源、目的主机的MAC地址和帧头,并根据其目的MAC地址,将MAC帧发往目的主机或IP路由器。5.在目的主机,链路层将MAC帧的帧头去掉,并将IP数据包送交网络层。6.网络层检查IP报头,如果报头中校验和与计算结果不一致,则丢弃该IP数据包;若校验和与计算结果一致,则去掉IP报头,将TCP段送交传输层。7.传输层检查顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据。若正确,则向源主机发确认信息;若不正确或丢包,则向源主机要求重发信息。8.在目的主机,传输层去掉TCP报头,将排好顺序的分组组成应用数据流送给应用程序。这样目的主机接 收到的来自源主机的字节流,就像是直接接收来自源主机的字节流一样。
IP协议的工作原理: 三次握手原理 :TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此 时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。
在互联网上源主机的协议层与目的主机的同层协议通过下层提供的服务实现对话。在源和目的主机的同层实体称为对等实体(Peer entities)或叫对等进程,它们之间的对话实际上是在源主机上从上到下然后穿越网络到达目的主机后再从下到上到达相应层。下面以使用TCP协议传送文件(如FTP应用程序)为例说明了TCP/IP的工作原理。(1) 在源主机上应用层将一串字节流传给传输层;(2) 传输层将字节流分成TCP段,加上TCP包头交给互联网络(IP)层;(3) IP层生成一个包,将TCP段放人其数据域,并加上源和目的主机的IPIP包交给数据链路层;(4) 数据链路层在其帧的数据部分装IP包,发往日的主机或IP路由器;(5) 在目的主机,数据链路层将数据链路层帧头去掉,将IP包交给互联网层;(6) IP层检查IP包头,如果包头中的校验和与计算出来的不一致,则丢弃该包;(7) 如果校验和一致,IP层去掉IP头,将TCP段交给TCP层,TCP层检查顺序号来判断是否为正确的TCP段;(8) TCP层为TCP包头计算TCP头和数据。如果不对,TCP层丢弃这个包,若对,则向源主机发送确认;(9) 在目的主机,T

简答TCP协议的工作过程
你大概说的是3步握手吧,这跟传真机的5部握手很类似。 下面的资料希望对你有用TCP/IP 是很多的不同的协议组成,实际上是一个协议组,TCP 用户数据报表协议(也称作TCP 传输控制协议,Transport Control Protocol。可靠的主机到主机层协议。这里要先强调一下,传输控制协议是OSI 网络的第四层的叫法,TCP 传输控制协议是TCP/IP 传输的6 个基本协议的一种。两个TCP 意思非相同。)。TCP 是一种可靠的面向连接的传送服务。它在传送数据时是分段进行的,主机交换数据必须建立一个会话。它用比特流通信,即数据被作为无结构的字节流。通过每个TCP 传输的字段指定顺序号,以获得可靠性。是在OSI参考模型中的第四层,TCP 是使用IP 的网间互联功能而提供可靠的数据传输,IP 不停的把报文放到网络上,而TCP 是负责确信报文到达。在协同IP 的操作中TCP 负责:握手过程、报文管理、流量控制、错误检测和处理(控制),可以根据一定的编号顺序对非正常顺序的报文给予从新排列顺序。关于TCP 的RFC 文档有RFC793、RFC791、RFC1700。在TCP 会话初期,有所谓的“三握手”:对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。为了提供可靠的传送,TCP 在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP 总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。由于TCP 需要时刻跟踪,需要额外开销,使得TCP 的格式有些显得复杂。下面就让我们看一个TCP 的经典案例,这是后来被称为MITNICK 攻击中KEVIN 开创了两种攻击技术:TCP 会话劫持SYN FLOOD(同步洪流)在这里我们讨论的时TCP 会话劫持的问题。先让我们明白TCP 建立连接的基本简单的过程。为了建设一个小型的模仿环境我们假设有3 台接入互联网的机器。A 为攻击者操纵的攻击机。B 为中介跳板机器(受信任的服务器)。C 为受害者使用的机器(多是服务器),这里把C 机器锁定为目标机器。A 机器向B机器发送SYN 包,请求建立连接,这时已经响应请求的B 机器会向A 机器回应SYN/ACK表明同意建立连接,当A 机器接受到B 机器发送的SYN/ACK 回应时,发送应答ACK 建立A 机器与B 机器的网络连接。这样一个两台机器之间的TCP 通话信道就建立成功了。B 终端受信任的服务器向C 机器发起TCP 连接,A 机器对服务器发起SYN 信息,使C 机器不能响应B 机器。在同时A 机器也向B 机器发送虚假的C 机器回应的SYN 数据包,接收到SYN 数据包的B 机器(被C 机器信任)开始发送应答连接建立的SYN/ACK 数据包,这时C 机器正在忙于响应以前发送的SYN 数据而无暇回应B 机器,而A 机器的攻击者预测出B 机器包的序列号(现在的TCP 序列号预测难度有所加大)假冒C 机器向B 机器发送应答ACK 这时攻击者骗取B 机器的信任,假冒C 机器与B 机器建立起TCP 协议的对话连接。这个时候的C 机器还是在响应攻击者A 机器发送的SYN 数据。TCP 协议栈的弱点:TCP 连接的资源消耗,其中包括:数据包信息、条件状态、序列号等。通过故意不完成建立连接所需要的三次握手过程,造成连接一方的资源耗尽。通过攻击者有意的不完成建立连接所需要的三次握手的全过程,从而造成了C 机器的资源耗尽。序列号的可预测性,目标主机应答连接请求时返回的SYN/ACK 的序列号时可预测的。(早期TCP 协议栈,具体的可以参见1981 年出的关于TCP 雏形的RFC793 文档)TCP 头结构TCP 协议头最少20 个字节,包括以下的区域(由于翻译不禁相同,文章中给出相应的英文单词):TCP 源端口(Source Port):16 位的源端口其中包含初始化通信的端口。源端口和源IP 地址的作用是标示报问的返回地址。TCP 目的端口(Destination port):16 位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。TCP 序列号(序列码,Sequence Number):32 位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN 出现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1。这个序列号(序列码)是可以补偿传输中的不一致。TCP 应答号(Acknowledgment Number):32 位的序列号由接收端计算机使用,重组分段的报文成最初形式。,如果设置了ACK 控制位,这个值表示一个准备接收的包的序列码。数据偏移量(HLEN):4 位包括TCP 头大小,指示何处数据开始。保留(Reserved):6 位值域,这些位必须是0。为了将来定义新的用途所保留。标志(Code Bits):6 位标志域。表示为:紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN。窗口(Window):16 位,用来表示想收到的每个TCP 数据段的大小。校验位(Checksum):16 位TCP 头。源机器基于数据内容计算一个数值,收信息机要与源机器数值结果完全一样,从而证明数据的有效性。优先指针(紧急,Urgent Pointer):16 位,指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG 标志没有被设置,紧急域作为填充。加快处理标示为紧急的数据段。选项(Option):长度不定,但长度必须以字节。如果没有选项就表示这个一字节的域等于0。填充:不定长,填充的内容必须为0,它是为了数学目的而存在。目的是确保空间的可预测性。保证包头的结合和数据的开始处偏移量能够被32 整除,一般额外的零以保证TCP 头是32 位的整数倍。标志控制功能URG:紧急标志紧急(The urgent pointer) 标志有效。紧急标志置位,ACK:确认标志确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP 报头内的确认编号栏内包含的确认编号(w+1,Figure:1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。PSH:推标志该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理telnet 或rlogin 等交互模式的连接时,该标志总是置位的。RST:复位标志复位标志有效。用于复位相应的TCP 连接。SYN:同步标志同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP 连接时有效。它提示TCP 连接的服务端检查序列编号,该序列编号为TCP 连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP 序列编号看作是一个范围从0 到4,294,967,295 的32 位计数器。通过TCP 连接交换的数据中每一个字节都经过序列编号。在TCP 报头中的序列编号栏包括了TCP 分段中第一个字节的序列编号。FIN:结束标志带有该标志置位的数据包用来结束一个TCP 回话,但对应端口仍处于开放状态,准备接收后续数据。服务端处于监听状态,客户端用于建立连接请求的数据包(IP packet)按照TCP/IP协议堆栈组合成为TCP 处理的分段(segment)。分析报头信息: TCP 层接收到相应的TCP 和IP 报头,将这些信息存储到内存中。检查TCP 校验和(checksum):标准的校验和位于分段之中(Figure:2)。如果检验失败,不返回确认,该分段丢弃,并等待客户端进行重传。查找协议控制块(PCB{}):TCP 查找与该连接相关联的协议控制块。如果没有找到,TCP 将该分段丢弃并返回RST。(这就是TCP 处理没有端口监听情况下的机制) 如果该协议控制块存在,但状态为关闭,服务端不调用connect()或listen()。该分段丢弃,但不返回RST。客户端会尝试重新建立连接请求。建立新的socket:当处于监听状态的socket 收到该分段时,会建立一个子socket,同时还有socket{},tcpcb{}和pub{}建立。这时如果有错误发生,会通过标志位来拆除相应的socket 和释放内存,TCP 连接失败。如果缓存队列处于填满状态,TCP 认为有错误发生,所有的后续连接请求会被拒绝。这里可以看出SYN Flood 攻击是如何起作用的。丢弃:如果该分段中的标志为RST 或ACK,或者没有SYN 标志,则该分段丢弃。并释放相应的内存。发送序列变量SND.UNA : 发送未确认SND.NXT : 发送下一个SND.WND : 发送窗口SND.UP : 发送优先指针SND.WL1 : 用于最后窗口更新的段序列号SND.WL2 : 用于最后窗口更新的段确认号ISS : 初始发送序列号接收序列号RCV.NXT : 接收下一个RCV.WND : 接收下一个RCV.UP : 接收优先指针IRS : 初始接收序列号当前段变量SEG.SEQ : 段序列号SEG.ACK : 段确认标记SEG.LEN : 段长SEG.WND : 段窗口SEG.UP : 段紧急指针SEG.PRC : 段优先级CLOSED 表示没有连接,各个状态的意义如下:LISTEN : 监听来自远方TCP 端口的连接请求。SYN-SENT : 在发送连接请求后等待匹配的连接请求。SYN-RECEIVED : 在收到和发送一个连接请求后等待对连接请求的确认。ESTABLISHED : 代表一个打开的连接,数据可以传送给用户。FIN-WAIT-1 : 等待远程TCP 的连接中断请求,或先前的连接中断请求的确认。FIN-WAIT-2 : 从远程TCP 等待连接中断请求。CLOSE-WAIT : 等待从本地用户发来的连接中断请求。CLOSING : 等待远程TCP 对连接中断的确认。LAST-ACK : 等待原来发向远程TCP 的连接中断请求的确认。TIME-WAIT : 等待足够的时间以确保远程TCP 接收到连接中断请求的确认。CLOSED : 没有任何连接状态。TCP 连接过程是状态的转换,促使发生状态转换的是用户调用:OPEN,SEND,RECEIVE,CLOSE,ABORT 和STATUS。传送过来的数据段,特别那些包括以下标记的数据段SYN,ACK,RST 和FIN。还有超时,上面所说的都会时TCP 状态发生变化。序列号请注意,我们在TCP 连接中发送的字节都有一个序列号。因为编了号,所以可以确认它们的收到。对序列号的确认是累积性的。TCP 必须进行的序列号比较操作种类包括以下几种:①决定一些发送了的但未确认的序列号。②决定所有的序列号都已经收到了。③决定下一个段中应该包括的序列号。对于发送的数据TCP 要接收确认,确认时必须进行的:SND.UNA = 最老的确认了的序列号。SND.NXT = 下一个要发送的序列号。SEG.ACK = 接收TCP 的确认,接收TCP 期待的下一个序列号。SEG.SEQ = 一个数据段的第一个序列号。SEG.LEN = 数据段中包括的字节数。SEG.SEQ+SEG.LEN-1 = 数据段的最后一个序列号。如果一个数据段的序列号小于等于确认号的值,那么整个数据段就被确认了。而在接收数据时下面的比较操作是必须的:RCV.NXT = 期待的序列号和接收窗口的最低沿。RCV.NXT+RCV.WND:1 = 最后一个序列号和接收窗口的最高沿。SEG.SEQ = 接收到的第一个序列号。 SEG.SEQ+SEG.LEN:1 = 接收到的最后一个序列号。
TCP/IP协议的工作流程如下: 1.在源主机上,应用层将一串应用数据流传送给传输层。2.传输层将应用层的数据流截成分组,并加上TCP报头形成TCP段,送交网络层。3.在网络层给TCP段加上包括源、目的主机IP地址的IP报头,生成一个IP数据包,并将IP数据包送交链路层。4.链路层在其MAC帧的数据部分装上IP数据包,再加上源、目的主机的MAC地址和帧头,并根据其目的MAC地址,将MAC帧发往目的主机或IP路由器。5.在目的主机,链路层将MAC帧的帧头去掉,并将IP数据包送交网络层。6.网络层检查IP报头,如果报头中校验和与计算结果不一致,则丢弃该IP数据包;若校验和与计算结果一致,则去掉IP报头,将TCP段送交传输层。7.传输层检查顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据。若正确,则向源主机发确认信息;若不正确或丢包,则向源主机要求重发信息。 8.在目的主机,传输层去掉TCP报头,将排好顺序的分组组成应用数据流送给应用程序。这样目的主机接收到的来自源主机的字节流,就像是直接接收来自源主机的字节流一样。

图解TCP建立连接全过程
TCP是因特网中的传输层协议,使用三次握手协议建立连接,下面是TCP建立连接的全过程。 上图画出了TCP建立连接的过程。假定主机A是TCP客户端,B是服务端。最初两端的TCP进程都处于CLOSED状态。图中在主机下面的是TCP进程所处的状态。A是主动打开连接,B是被动打开连接。首先A向B发出连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x。TCP规定,SYN报文段不能携带数据,但要消耗掉一个序号。这时,A进入SYN-SENT状态。B收到请求后,向A发送确认。在确认报文段中把SYN和ACK位都置为1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y。请注意,这个报文段也不能携带数据,但同样要消耗掉一个序号。这时B进入SYN-RCVD状态。A收到B的确认后,还要向B给出确认。确认报文段的ACK置为1,确认号ack=y+1,而自己的序号seq=x+1。这时,TCP连接已经建立,A进入ESTABLISHED状态,当B收到A的确认后,也会进入ESTABLISHED状态。以上给出的连接建立过程就是常说的TCP三次握手。为什么A还要发送一次确认呢?这主要是为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误。所谓已失效的连接请求报文段是这样产生的。A发送连接请求,但因连接请求报文丢失而未收到确认,于是A重发一次连接请求,成功后建立了连接。数据传输完毕后就释放了连接。现在假定A发出的第一个请求报文段并未丢失,而是在某个网络节点长时间滞留了,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段。但B收到此失效的连接请求报文段后,就误以为A又发了一次新的连接请求,于是向A发出确认报文段,同意建立连接。假如不采用三次握手,那么只要B发出确认,新的连接就建立了。由于A并未发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B却以为新的运输连接已经建立了,并一直等待A发来数据,因此白白浪费了许多资源。 采用TCP三次握手的方法可以防止上述现象发生。例如在刚才的情况下,由于A不会向B的确认发出确认,连接就不会建立。下面留个思考题给大家:如果在TCP第三次握手中的报文段丢失了会发生什么情况?

本文由 在线网速测试 整理编辑,转载请注明出处。