请选择 进入手机版 | 继续访问电脑版

Java面试之TCP与UDP

[复制链接]
三兄弟沙发谢洪江 发表于 2020-12-31 19:21:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
1、为什么会有TCP/IP协议

在世界上各地,各种各样的电脑运行着各自差异的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就似乎圣经中上帝打乱了各地人的口音,让他们无法互助一样。盘算机使用者意识到,盘算机只是单兵作战并不会发挥太大的作用。只有把它们团结起来,电脑才会发挥出它最大的潜力。于是人们就想方设法的用电线把电脑毗连到了一起。
但是简单的连到一起是远远不敷的,就似乎语言差异的两个人相互见了面,完全不能交换信息。因而他们需要定义一些共通的东西来举行交换,TCP/IP就是为此而生。TCP/IP不是一个协议,而是一个协议族的统称。内里包罗了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。电脑有了这些,就似乎学会了外语一样,就可以和其他的盘算机终端做自由的交换了。
 
2、TCP/IP协议分层

1、应用层
应用层是我们常常打仗使用的部分,好比常用的http协议、ftp协议(文件传输协议)、snmp(网络管理协议)、telnet (远程登录协议 )、smtp(简单邮件传输协议)、dns(域名分析),这次主要是面向用户的交互的。这里的应用层集成了osi分层模子中 的应用、会话、表现层三层的功能。
2、传输层
传输层的作用就是将应用层的数据举行传输转运。好比我们常说的tcp(可靠的传输控制协议)、udp(用户数据报协议)。传输单位为报文段。
tcp(Transmission Control Protocol)面向毗连(先要和对方确定毗连、传输结束需要断开毗连,类似打电话)、复杂可靠的、有很好的重传和查错机制。一般用与高速、可靠的通信服务
udp(user datagram protocol面向无毗连(无需确认对方是否存在,类似寄包裹)、简单高效、没有重传机制。一般用于即时通讯、广播通信等
3、网络层
网络层用来处理网络中流动的数据包,数据包为最小的通报单位,好比我们常用的ip协议、icmp协议、arp协议(通过分析ip地点得出物理mac地点)。
4、数据链路层
数据链路层一般用来处理毗连硬件的部分,包罗控制网卡、硬件相关的设备驱动等。传输单位数据帧。
5、物理层
物理层一般为负责数据传输的硬件,好比我们相识的双绞线电缆、无线、光纤等。比特流光电等信号发送吸收数据。
 
3、TCP报文格式

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,294,967,295的32位计数器。通过TCP毗连交换的数据中每一个字节都颠末序列编号。在TCP报头中的序列编号栏包罗了TCP分段中第一个字节的序列编号。
FIN:结束标志。
 
4、TCP三次握手

所谓三次握手(Three-Way Handshake)即创建TCP毗连,就是指创建一个TCP毗连时,需要客户端和服务端总共发送3个包以确认毗连的创建。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:
 
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等候Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求创建毗连,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认毗连请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,查抄ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server查抄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状态,完成三次握手,客户端与服务器开始传送数据。
 
SYN攻击:
在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP毗连称为半毗连(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地点,并向Server不断地发送SYN包,Server复兴确认包,并等候Client简直认,由于源地点是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未毗连队列,导致正常的SYN请求因为队列满而被抛弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半毗连状态且源IP地点是随机的,则可以断定遭到SYN攻击了,使用如下下令可以让之现行:
#netstat -nap | grep SYN_RECV
 
5、TCP四次挥手

所谓四次挥手(Four-Way Wavehand)即终止TCP毗连,就是指断开一个TCP毗连时,需要客户端和服务端总共发送4个包以确认毗连的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:
 
由于TCP毗连时全双工的,因此,每个方向都必须要单独举行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的毗连,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP毗连上仍然可以或许发送数据,直到这一方向也发送了FIN。首先举行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图形貌的便是如此。
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
为什么创建毗连是三次握手,而关闭毗连却是四次挥手呢?
这是因为服务端在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的内核来说,它无法区分一个二进制文件与一个文本文件。
 
7、URI和URL的区别

URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。Web上可用的每种资源如HTML文档、图像、视频片断、步调等都是一个来URI来定位的
URI一般由三部组成:

  • 访问资源的定名机制
  • 存放资源的主机名
  • 资源自身的名称,由路径表现,着重强调于资源。
URL是uniform resource locator,统一资源定位器,它是一种详细的URI,即URL可以用来标识一个资源,而且还指明白如何locate这个资源。URL是Internet上用来形貌信息资源的字符串,主要用在各种WWW客户步调和服务器步调上,特别是著名的Mosaic。采用URL可以用一种统一的格式来形貌各种信息资源,包罗文件、服务器的地点和目次等。
URL一般由三部组成:

  • 协议(或称为服务方式)
  • 存有该资源的主机IP地点(有时也包罗端标语)
  • 主机资源的详细地点。如目次和文件名等
 
 
8、dns使用的协议

既可以使用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协议等。
 

来源:https://blog.csdn.net/qq_34988624/article/details/85856848
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )