首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
SQL-Server
›
TCP协议必懂内容
返回列表
发新帖
TCP协议必懂内容
[复制链接]
发表于 2026-1-28 14:20:32
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
网络分层结构
盘算机的网络体系分为三种,OSI网络分层结构,TCP/IP 五层模子,TCP/IP四层模子。
TCP/IP五层模子:
应用层:为应用步调提供交互服务,在应用层中有较多的协议,较为着名的是:HTTP协议、域名体系DNS、SMTP协议
传输层:负责向两台主机之间的通讯提供数据传输服务,常见的协议是:TCP协议、UDP协议
网络层:选择符合的路由和交换结点,确保数据的及时传输,常见的协议是:IP协议
数据链路层:在两个相邻的节点之间举行传输数据时,数据链路层会把上一层交付的IP数据报组装成帧,然后在两个相邻的节点的链路上传送帧
物理层:实现一个透明的比特传播输,尽大概的制止传输介质和物理装备的差别。
OSI七层网络分层结构:
应用层:实现网络服务和终极用户的一个接口,常见的协议是:HTTP协议、DNS协议、SMTP协议
体现层:体现 数据的
安全
、压缩、体现,确保一个体系的应用层发送的数据可以大概被另一个体系的应用层准确的吸取
会话层:创建、克制、管剖析话,对应主机的进程,指代本田主机和长途主机之间的会话
传输层:界说数据传输的端标语协议,以及流控和不对校验,常见的协议是:TCP协媾和UDP协议
网络层:举行逻辑选址和实现差别网络之间的路劲选择,常见的协议是IP协议
数据链路层:在物理层提供的透明的比特传播输的服务上,在两个相邻的节点上创建数据链路
物理层:举行物理的创建、维护、断开物理的链接
TCP协议的特点:
TCP协议是面向链接的
TCP协议是提供可靠交付服务的
TCP协议是全双工通讯的
TCP是点对点的,一条TCP链接上只能由两个端点
TCP协议是面向字节省的,它会将数据看成一群无结构的字节省
TCP协媾和UDP协议的区别:
TCP协议是面向链接的,即TCP协议在创建之前必须要客户端和服务端之间创建链接,而UDP协议是不必要创建链接的,是无链接协议
TCP协议是面向字节省的,即TCP协议会将数据看成一群无结构的字节省举行数据的传输,而UDP协议是面向报文的,会将数据看成报文举行传输
TCP协议是拥有拥塞控制的,拥塞控制是指在网络进入拥塞时,TCP会低落传输数据的服从以此确保数据可以大概准确的抵达吸取方,而UDP并没有拥塞控制,以是UDP并不与会低落发送数据的服从,而也正是云云,UDP更顺应与一些网络及时的数据传输工作,比方 及时视频集会 这类及时应用。
TCP协议是点到点的协议,每一个TCP链接只能有两个端点,而UDP协议是一对多、多对多、多对一、一对一的通讯方式。
TCP协议怎样确保可靠性:
起首, TCP协议的链接和断开是基于三次握手和四次挥手,这确保的TCP链接的创建和断开的可靠性。
其次,TCP的可靠性还体验在TCP协议会记录那些数据被发送了、那些数据被吸取了、数据是否发送乐成、确保了数据包可以大概按序次举行发送,包管了数据发送不堕落。
末了,TCP协议的可靠性还体验在TCP协议的可控制上,TCP协议拥有 拥塞控制、数据包校验、ACK应答、超时重传、失序重传、抛弃重复的数、流量控制、滑动窗口机制等。
TCP的三次握手和四次挥手
三次握手:
起首,我们将发送方称为客户端,吸取方称为服务端,在TCP创建握手之前,客户端和服务端的状态都是 close 状态 ,也就是关闭链接状态。
第一次握手,客户端 想要和服务端创建TCP 链接,就必要向服务端发送一个创建链接的数据报文段 SYN ,其报文段的标记位是 SYN=1 ,同时产生一个序列号 seq =x 。发送完毕后,客户端会进入SYN-SENT 状态,也就是期待确认状态,而服务端如今也会酿成 listen状态。
第二次握手,服务端吸取到了客户端发送的SYN报文段,同时在吸取的时间会产生一个序列号 seq =y ,一个确认号 ACK -1 ,并向客户端发送一个创建链接的数据报文段和一个确认报文段,SYN=1,seq=y ,ACK=1,同时从listen状态变革成SYN-RCVD状态。
第三次握手,当客户端吸取到了服务端发送简直认报文段和创建链接报文段后,客户端将会再一次的向服务端发送确认报文段,ACK=1,seq=x+1,ack=y+1,体现已经预备停当。当发送完报文段的同时,当服务端吸取到后,二者就会立马进入ESTBLISHED状态,进入此状态后,二者就此创建了TCP的链接。
为什么要三次握手而不是两次握手?
三次握手和两次握手的区别就在于三次握手的二次确认,三次握手必要由客户端确认了服务端发送简直认报文段后,再次朝服务端发送确认报文段,而两次握手并没有这一次的操纵。
如果只有两次握手,那么大概会导致已经失效的链接哀求报文段忽然的传输到
服务器
上,产生一系列的题目。
比方:
假设客户端是A,服务端是B,那么A为了和B创建TCP链接,于是A朝B发送了一段SYN创建链接的报文段,但是由于网络堵塞的缘故因由,导致B没有吸取到这一次的哀求,而A由于没有吸取到B发送简直认报文段,以是A会再一次的发送创建TCP链接的哀求。
以是这里的A发送了两次创建TCP链接的哀求,第一次没有让B吸取到,而第二次让B吸取到了。
由于B吸取到了第二次的哀求,二者很快的创建了链接(这里是二次握手的方式举行链接)。
创建链接后,二者很快的就举行数据的传输,等数据传输完毕后,二者又很快的竣事链接,然后这时,A发送的第一次创建TCP链接的数据报文段抵达了B。
B误以为这是A又必要和自己创建链接于是很快的就向A发送确认报文段,但是A只必要和B创建一次TCP链接就行了,于是没有剖析,而由于没有被A吸取简直认报文段,这导致B不停都处在了期待链接的状态。
而B不停处在期待链接状态则会变革为浪费资源。
以是如果TCP链接只有两次握手,那么只必要服务段发送确认报文段即可进入TCP链接,而A不回应服务端发送简直认报文段,那么服务端则会导致资源的浪费。
四次挥手:
起首,我们将发送方称为客户端,吸取方称为服务端,在TCP断开链接之前,客户端和服务端是出于链接状态的。
不但云云,由于TCP的全双工通讯的,以是这就导致了,客户端和服务端虽说是一条TCP链接,但是有两个传输的管道,分别是客户端朝服务端传输数据的链接,以及服务端朝客户端传输数据的链接。
以是TCP的断开链接,TCP的四次挥手的本质意义就是要分别的断开两条数据链接。
其次TCP在断开链接之前都是处在ESTABLEISHED状态的。
第一次挥手,由于客户端没有数据要传输给服务端,以是客户端想要断开服务端的链接,以是客户端会朝服务端发送一个克制链接的报文段,FIN=1,并产生一个初始序列号seq=u,随后客户端会变革到FIN-WAT-1 期待状态。
第二次挥手,服务端收到了客户端发送的克制链接报文段后,变革为CLOSE-WAIT 半关闭状态,也就是客户端无法朝服务端发送数据,而服务端仍旧可以朝客户端发送数据,其次服务端收到报文段后,会朝客户端发送 确认报文段 ACK=1,而且产生一个初始序列号 seq=v 和一个确认号 ack=u+1,期待客户端收到确认报文段后,会进入FIN-WAIT-2状态。
第三次挥手,第三次挥手是由服务端发起的,由于服务端没有数据必要传输到客户端了,以是服务端朝客户端发送克制链接报文段,FIN=1,ACK=1,ack=u+1,seq=w,而且服务端自动转入LAST-ACK 期待确认状态。
第四次挥手,当客户端吸取到确认报文段后,会再一次朝服务端发送确认报文段,ACK=1,seq=u+1,ack=w+1,而且进入时间期待状态 TIME-WAIT 比及时间2MSL,以及服务端定时收到了报文段后,二者同时进入CLOSE状态,体现断开毗连。
第四次挥手为什么要期待2MSL?
起首,期待2MSL的缘故因由是 由于客户端朝服务端发送的末了一次确认报文段有大概会由于网络堵塞等缘故因由造成丢失导致服务端没有吸取到末了一个确认报文段,而由于TCP的一个特点“超时重传”,如果服务端没有在肯定的时间内(这个时间肯定是在2MSL范围内的)收到这个报文段,那么服务端则会朝客户端发送一个报文段,让客户端举行重传操纵。
而如果没有这个2MSL的时间举行期待,那么客户端会直接进入关闭状态,就吸取不到服务端发送的重传报文段,而服务端也会因此陷入非常状态,以是这个2MSL时间期待是为了包管客户端可以大概吸取服务端发送的重传报文段,包管二者可以大概正常的举行关闭。
其次,这个2MSL时间就是为了让一些报文段(比方上面形貌的因网络堵塞而导致无法转到达服务端简直认报文段) 逾期,让这些报文段逾期、失效,如许在下一次的链接中就不会由于无关的报文段导致链接出现不对。
TCP的粘包和拆包
概念:
TCP是面向字节省的,以是TCP的底层是不相识上层所必要的数据的具体寄义,且TCP会把数据看成一群没有结构的字节省,以是TCP对数据的分别是根据TCP内部的缓冲区举行分别的,这也导致了一个完备的数据包会由于TCP内部缓冲区的缘故因由,被拆分大概和其他的数据包粘贴,这也就是TCP的拆包和粘包。
TCP的粘包和拆包的产生:
粘包:
要发送的数据包小于TCP缓冲区的剩余巨细,那么TCP会为了方便举行多次的写入数据包,导致多个数据包举行粘粘。
大概是吸取数据包的上层/应用层由于没有及时的读取TCP发送的数据包,导致这个数据包仍旧处在TCP的缓冲区中,而这也导致了粘包
拆包:
如果要发送的数据包大于了TCP内部缓冲区的巨细,那么这个数据包将会被TCP分别切割,从而导致拆包
又大概是发送的数据包的数据远远的高出了MSS(最大数据报文段的长度),那么TCP在传输的过程中会举行拆包操纵。
办理方案:
将每一个数据包举行固定长度的封装
在数据包的末端增长特殊字符方便之后按照固定长度举行切割
将数据包分为两个部门,一个是头部,一个是内容部门,此中头部部门的巨细固定,且包罗了内容部门的巨细声明字段。
TCP滑动窗口机制
TCP利用了滑动窗口的机制来实现流量控制。流量控制是为了控制发送方发送数据的服从,包管吸取方可以大概及时的吸取。
TCP链接的两边都会各自维护一个窗口,发送方维护发送窗口,吸取方维护吸取窗口。同时吸取方维护的吸取窗口,它的巨细取决于应用、体系、硬件的限,而发送方的发送窗口取决于对应的吸取方的吸取窗口的巨细。
吸取方的吸取窗口可以利用 发送简直认报文段 中的 Window字段来操控发送方的发送窗口巨细,以此来控制和影响发送方的发送服从, 倘若吸取方将确认报文段中的 window字段设置值为0,那么发送方将不能举行数据的发送。
TCP的拥塞控制
概念:
TCP拥塞控制是创建在TCP的链接底子上,为了防止在发送方和吸取方在举行传输数据时遭遇网络颠簸而导致传输数据丢失而设置的。
慢开始:
假设当前的发送窗/拥塞窗口cwnd的数值是1,当cwnd=1时,体现发送方可以大概连续朝吸取方发送1歌数据报文段,且在吸取方定时无误的吸取到数据报文段后,会连续朝发送方发送1个确认报文段,当发送方吸取到吸取方连续发送的1个确认报文段后,发送方的拥塞窗口cwnd数值会从1酿成2,即cwnd=2。
这时,发送方由于cwnd=2的缘故因由,可以连续向吸取方发送2个数据报文段,同时吸取方可以大概连续的吸取到2个数据报文段后,也会向发送方连续发送2个确认报文段,当发送方吸取到连续的2个确认报文段后,发送方的cwnd值就会从2酿成4 。
这就体现发送方可以连续的朝吸取方发送4个数据报文段,同时吸取方必要连续吸取到4个数据报文段,并连续的发送四个确认报文段给发送方.......
直至cwnd 的数值巨细,便是大概大于慢开始门限数值时,慢开始才继而竣事。
拥塞制止:
对于拥塞制止,拥塞制止触发的条件是 利用了慢开始算法后,让cwnd数值便是慢开始门限数值后,开始利用。
当cwnd便是慢开始门限数值后,cwnd数值只能在每次吸取到吸取方连续发送简直认报文段后,举行线性的+1。
比方:
设置的慢开始门限数值是16,而拥塞制止从16开始举利用用,当吸取方吸取到了连续的16个数据报文段后,连续的发送了16个确认报文段交给发送方,而发送方准确无误的吸取后,它的cwnd数值并不能向之前一样举行成倍的增长,而是线性的+1增长,也就是cwnd不能便是16*2 =32,而是16+1=17 。
以是之后的发展便是:发送方连续发送17个数据报文段,吸取方连续的吸取到了17个数据报文段后,连续的发送了17个确认报文段,随后发送方吸取到了17个确认报文段后,cwnd从17酿成了18。
而假设当cwnd数值在24的时间碰到了网络拥塞,也就是发送方发送了24个报文段给吸取方,但是吸取方直继承到了20个,且连续发送了20个确认报文段给发送方,而发送方在接到确认报文段后会发现数目不对,而知晓网络已经变得拥塞。
这时间,cwnd数值将会从24酿成0,同时慢开始门限数值也会酿成原先cwnd数值的一半,也就是12,然后cwnd数值开始重新的进入慢开始举行增长,直到cwnd数值和慢开始门限数值一样,在进入到拥塞制止状态。
快重传:
假设,必要发送6个数据报文段,且必要按照序次发送,当发送方发送了 1号数据报文段后,发送方必要期待吸取方发送1号确认报文段,但是快重传可以让发送方在发送完1号数据报文段,期待吸取方返回确认报文段的这个时间段内,发送2号数据报文段。
于是就会出现,发送方发送完1号数据报文段后,直接发送2号数据报文段,紧接着在发送3号数据报文段。
再假设,如果吸取方没有吸取到3号数据报文段,而是收到了4号数据报文段,那么吸取方会朝发送方发送一个重复确认报文段,也就是重复的2号确认报文段。
而发送方由于快重传的缘故因由,会在4号数据报文段发送后连续发送,以是吸取方会接连收到5号数据报文段,和6号数据报文段,同时吸取方在吸取到5号和6号数据报文段后,会接连朝发送方发送两个 2号确认报文段。
当发送方接连发送3个重复的2号确认报文段后,发送方会心识到3号数据报文段没有被乐成的吸取,以是会发送3号数据报文段,当3号数据报文段被吸取后,吸取方会发送一个6号确认报文段,体现6个数据都已经乐成的吸取。
回复
使用道具
举报
返回列表
浏览过的版块
SAAS
人工智能
物联网
数据仓库与分析
Oracle
Java
DevOps与敏捷开发
分布式数据库
前端开发
网络安全
刘俊凯
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表