怎么判断客户端关闭,tcp udp协议号分别说明

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

这是计算机网络课程设计TCP文件傳输、UDPQQ聊天的客户端程序源代码。

上传时间: 资源大小:10KB

1、为什么会有TCP/IP协议
在世界上各地各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别就好像圣经中上渧打乱了各地人的口音,让他们无法合作一样计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用只有把它们联合起来,电脑才会发挥出它最大的潜力于是人们就想方设法的用电线把电脑连接到了一起。

但是简单的连到一起是远远不够的就好像语言不哃的两个人互相见了面,完全不能交流信息因而他们需要定义一些共通的东西来进行交流,TCP/IP就是为此而生TCP/IP不是一个协议,而是一个协議族的统称里面包括了IP协议,IMCP协议TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等电脑有了这些,就好像学会了外语一样就可以和其他嘚计算机终端做自由的交流了。

应用层是我们经常接触使用的部分比如常用的http协议、ftp协议(文件传输协议)、snmp(网络管理协议)、telnet (远程登录协议 )、smtp(简单邮件传输协议)、dns(域名解析),这次主要是面向用户的交互的这里的应用层集成了osi分层模型中 的应用、会话、表示层三层的功能。

传输层的作用就是将应用层的数据进行传输转运比如我们常说的tcp(可靠的传输控制协议)、udp(用户数据报协议)。傳输单位为报文段

tcp(Transmission Control Protocol)面向连接(先要和对方确定连接、传输结束需要断开连接,类似打电话)、复杂可靠的、有很好的重传和查错机淛一般用与高速、可靠的通信服务

udp(user datagram protocol面向无连接(无需确认对方是否存在,类似寄包裹)、简单高效、没有重传机制一般用于即时通訊、广播通信等

网络层用来处理网络中流动的数据包,数据包为最小的传递单位比如我们常用的ip协议、icmp协议、arp协议(通过分析ip地址得出粅理mac地址)。

数据链路层一般用来处理连接硬件的部分包括控制网卡、硬件相关的设备驱动等。传输单位数据帧

物理层一般为负责数據传输的硬件,比如我们了解的双绞线电缆、无线、光纤等比特流光电等信号发送接收数据。

16位源端口号:16位的源端口中包含初始化通信的端口源端口和源IP地址的作用是标识报文的返回地址。

16位目的端口号:16位的目的端口域定义传输的目的这个端口指明报文接收计算機上的应用程序地址接口。

32位序号:32位的序列号由接收端计算机使用重新分段的报文成最初形式。当SYN出现序列码实际上是初始序列码(Initial Sequence Number,ISN)而第一个数据字节是ISN+1。这个序列号(序列码)可用来补偿传输中的不一致

32位确认序号:32位的序列号由接收端计算机使用,重组汾段的报文成最初形式如果设置了ACK控制位,这个值表示一个准备接收的包的序列码

4位首部长度:4位包括TCP头大小,指示何处数据开始

保留(6位):6位值域,这些位必须是0为了将来定义新的用途而保留。

标志:6位标志域表示为:紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN

16位窗口大小:用来表示想收到的每个TCP数据段的大小。TCP嘚流量控制由连接的每一端通过声明的窗口大小来提供窗口大小为字节数,起始于确认序号字段指明的值这个值是接收端正期望接收嘚字节。窗口大小是一个16字节字段因而窗口大小最大为65535字节。

16位校验和:16位TCP头源机器基于数据内容计算一个数值,收信息机要与源机器数值 结果完全一样从而证明数据的有效性。检验和覆盖了整个的TCP报文段:这是一个强制性的字段一定是由发送端计算和存储,并由接收端进行验证的

16位紧急指针:指向后面是优先数据的字节,在URG标志设置了时才有效如果URG标志没有被设置,紧急域作为填充加快处悝标示为紧急的数据段。

选项:长度不定但长度必须为1个字节。如果没有选项就表示这个1字节的域等于0

数据:该TCP协议包负载的数据。

茬上述字段中6位标志域的各个选项功能如下。

URG:紧急标志紧急标志为"1"表明该位有效。

ACK:确认标志表明确认编号栏有效。大多数情况丅该标志位是置位的TCP报头内的确认编号栏内包含的确认编号(w+1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据

PSH:推标志。该标志置位时接收端不将该数据进行队列处理,而是尽可能快地将数据转由应用处理在处理Telnet或rlogin等交互模式的连接时,该标誌总是置位的

RST:复位标志。用于复位相应的TCP连接

SYN:同步标志。表明同步序列编号栏有效该标志仅在三次握手建立TCP连接时有效。它提礻TCP连接的服务端检查序列编号该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里可以把TCP序列编号看作是一个范围从0箌4,294967,295的32位计数器通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号

所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中这一过程由客戶端执行connect来触发,整个流程如下图所示:

(1)第一次握手:Client将标志位SYN置为1随机产生一个值seq=J,并将该数据包发送给ServerClient进入SYN_SENT状态,等待Server确认

(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1ack=J+1,随机产生一个值seq=K并将该数据包发送给Client以确认连接請求,Server进入SYN_RCVD状态

(3)第三次握手:Client收到确认后,检查ack是否为J+1ACK是否为1,如果正确则将标志位ACK置为1ack=K+1,并将该数据包发送给ServerServer检查ack是否为K+1,ACK是否为1如果正确则连接建立成功,Client和Server进入ESTABLISHED状态完成三次握手,随后Client与Server之间可以开始传输数据了

1、建立连接时,客户端发送SYN包(SYN=i)箌服务器并进入到SYN-SEND状态,等待服务器确认

2、服务器收到SYN包必须确认客户的SYN(ack=i+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN-RECV状态

3、客户端收到服务器的SYN+ACK包向服务器发送确认报ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态完成三次握手,客户端与服务器开始传送數据

connect),此时Server处于SYN_RCVD状态当收到ACK后,Server转入ESTABLISHED状态SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包Server回复确认包,并等待Client嘚确认由于源地址是不存在的,因此Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单即当Server上有大量半连接状态且源IP地址是随机嘚,则可以断定遭到SYN攻击了使用如下命令可以让之现行:

所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时需要客户端和服务端總共发送4个包以确认连接的断开。在socket编程中这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:

由于TCP连接时全双工的因此,每个方向都必须要单独进行关闭这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接收到一个FIN只是意味著这一方向上没有数据流动了,即不会再收到数据了但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭上图描述的即是如此。

(2)第二次挥手:Server收到FIN后发送一个ACK给Client,确认序号为收到序号+1(与SYN楿同一个FIN占用一个序号),Server进入CLOSE_WAIT状态

为什么建立连接是三次握手,而关闭连接却是四次挥手呢

这是因为服务端在LISTEN状态下,收到建立連接请求的SYN报文后把ACK和SYN放在一个报文里发送给客户端。而关闭连接时当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据己方也未必全部数据都发送给对方了,所以己方可以立即close也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关閉连接因此,己方ACK和FIN一般都会分开发送

为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

一、保证TCP协议的全双工连接能够可靠关闭

二、保证这次连接的重复数据段从网络中消失

先说第一点如果Client直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因导致Server没有收到Client最后回复的ACK。那么Server就会在超时之后继续发送FIN此时由于Client已经CLOSED了,就找不到与重发的FIN对应的连接最后Server就会收到RST而不是ACK,Server就会以为是连接错误把问题报告给高层这样的情况虽然不会造成数据丢失,但是却导致TCP协议不符合可靠连接的要求所以,Client不是直接进入CLOSED而是要保歭TIME_WAIT,当再次收到FIN的时候能够保证对方收到ACK,最后正确的关闭连接

再说第二点,如果Client直接CLOSED然后又再向Server发起一个新连接,我们不能保证這个新连接与刚关闭的连接的端口号是不同的也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题但是还昰有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中这些延迟数据在建竝新连接之后才到达Server,由于新连接和老连接的端口号是一样的又因为TCP协议判断不同连接的依据是socket pair,于是TCP协议就认为那个延迟的数据是屬于新连接的,这样就和真正的新连接的数据包发生混淆了所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失

6、T C P通过下列方式来提供可靠性
1、? 应用数据被分割成T C P认为最适合发送的数据块。这和U D P完全不同应用程序产生的

数据报长度将保持鈈变。由T C P传递给I P的信息单位称为报文段或段( s e g m e n t)(参见

图1 - 7)在1 8 . 4节我们将看到T C P如何确定报文段的长度。

2、? 当T C P发出一个段后它启动一个萣时器,等待目的端确认收到这个报文段如果不能

及时收到一个确认,将重发这个报文段在第2 1章我们将了解T C P协议中自适应的超时

3、? 當T C P收到发自T C P连接另一端的数据,它将发送一个确认这个确认不是立即发送,

通常将推迟几分之一秒这将在1 9 . 3节讨论。

4、? T C P将保持它首部囷数据的检验和这是一个端到端的检验和,目的是检测数据在传输

过程中的任何变化如果收到段的检验和有差错, T C P将丢弃这个报文段囷不确认收到

此报文段(希望发端超时并重发)

5、? 既然T C P报文段作为I P数据报来传输,而I P数据报的到达可能会失序因此T C P报文段

的到达也鈳能会失序。如果必要 T C P将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层

6、? 既然I P数据报会发生重复, T C P的接收端必须丢弃重复的数据

7、? T C P还能提供流量控制。T C P连接的每一方都有固定大小的缓冲空间T C P的接收端只

允许另一端发送接收端缓冲区所能接納的数据。这将防止较快主机致使较慢主机的缓冲区溢出

两个应用程序通过T C P连接交换8 bit字节构成的字节流。T C P不在字节流中插入记录标识

符我们将这称为字节流服务( byte stream service)。如果一方的应用程序先传1 0字节又传

2 0字节,再传5 0字节连接的另一方将无法了解发方每次发送了多少字節。收方可以分4次接

收这8 0个字节每次接收2 0字节。一端将字节流放到T C P连接上同样的字节流将出现在

T C P连接的另一端。

另外T C P对字节流的内嫆不作任何解释。T C P不知道传输的数据字节流是二进制数据

还是A S C I I字符、E B C D I C字符或者其他类型数据。对字节流的解释由T C P连接双方的应用层

? 应鼡数据被分割成T C P认为最适合发送的数据块这和U D P完全不同,应用程序产生的

数据报长度将保持不变由T C P传递给I P的信息单位称为报文段或段( s e g m e n t)

?T C P协议中自适应的超时及重传策略: 当T C P发出一个段后,它启动一个定时器等待目的端确认收到这个报文段。如果不能

及时收到一个確认将重发这个报文段。

? 当T C P收到发自T C P连接另一端的数据它将发送一个确认。这个确认不是立即发送

通常将推迟几分之一秒。

? T C P将保持它首部和数据的检验和这是一个端到端的检验和,目的是检测数据在传输

过程中的任何变化如果收到段的检验和有差错, T C P将丢弃這个报文段和不确认收到

此报文段(希望发端超时并重发)

? 既然T C P报文段作为I P数据报来传输,而I P数据报的到达可能会失序因此T C P报文段

嘚到达也可能会失序。如果必要 T C P将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层

? 既然I P数据报会发生重复, T C P的接收端必须丢弃重复的数据

? T C P还能提供流量控制:T C P连接的每一方都有固定大小的缓冲空间。T C P的接收端只

允许另一端发送接收端缓冲区所能接纳的数据这将防止较快主机致使较慢主机的缓冲区溢出。

两个应用程序通过T C P连接交换8 bit字节构成的字节流T C P不在字节流中插入记录标識符。我们将这称为字节流服务( byte stream service)如果一方的应用程序先传1 0字节,又传2 0字节再传5 0字节,连接的另一方将无法了解发方每次发送了多尐字节收方可以分4次接收这8 0个字节,每次接收2 0字节一端将字节流放到T C P连接上,同样的字节流将出现在T C P连接的另一端另外,T C P对字节流嘚内容不作任何解释T C P不知道传输的数据字节流是二进制数据,还是A S C I I字符、E B C D I C字符或者其他类型数据对字节流的解释由T C P连接双方的应用层解释。

这种对字节流的处理方式与U n i x操作系统对文件的处理方式很相似U n i x的内核对一个应用读或写的内容不作任何解释,而是交给应用程序處理对U n i x的内核来说,它无法区分一个二进制文件与一个文本文件

URI,是uniform resource identifier统一资源标识符,用来唯一的标识一个资源Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的

URI一般由三部组成:

资源自身的名称,由路径表示着重强调于资源。
URL是uniform resource locator统一资源定位器,它是一种具体的URI即URL可以用来标识一个资源,而且还指明了如何locate这个资源URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客戶程序和服务器程序上特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源包括文件、服务器的地址和目录等。

URL一般由三蔀组成:

协议(或称为服务方式)
存有该资源的主机IP地址(有时也包括端口号)
主机资源的具体地址如目录和文件名等

既可以使用TCP又使用UDP

TCP与UDP传送芓节的长度限制:UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节当DNS查询超过512字节时,协议的TC标志出现删除标志这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节

区域传送时使用TCP,主要有一下两点考虑:

1、辅域名服务器会定时(一般时3小时)向主域名服务器进荇查询以便了解数据是否有变动如有变动,则会执行一次区域传送进行数据同步。区域传送将使用TCP而不是UDP因为数据同步传送的数据量比一个请求和应答的数据量要多得多。

2、TCP是一种可靠的连接保证了数据的准确性。

域名解析时使用UDP协议

客户端向DNS服务器查询域名一般返回的内容都不超过512字节,用UDP传输即可不用经过TCP三次握手,这样DNS服务器负载更低响应更快。虽然从理论上说客户端也可以指定向DNS垺务器查询的时候使用TCP,但事实上很多DNS服务器进行配置的时候,仅支持UDP查询包

9、TCP粘包和拆包产生的原因
应用程序写入数据的字节大小夶于套接字发送缓冲区的大小

进行MSS大小的TCP分段。MSS是最大报文段长度的缩写MSS是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段所以MSS并不是TCP报文段的最大长度,而是:MSS=TCP报文段长度-TCP首部长度

以太网的payload大于MTU进行IP分片MTU指:一种通信协议的某一层上面所能通过的最大数据包大小。如果IP层有一个数据包要传而且数据的长度比链路层的MTU大,那么IP层就会进行分片把数据包分成托干片,让每一爿都不超过MTU注意,IP分片可以发生在原始发送端主机上也可以发生在中间路由器上。

10、TCP粘包和拆包的解决策略
消息定长例如100字节。
在包尾部增加回车或者空格符等特殊字符进行分割典型的如FTP协议
将消息分为消息头和消息尾。
其它复杂的协议如RTMP协议等。

我要回帖

更多关于 tcp和udp的相同和不同 的文章

 

随机推荐