TCPIP常见问题总结(⼀)
⼀下为⼀些常见的TCP/IP问题总结:
1. OSI与TCP/IP各层的结构与功能,都有哪些协议
互联⽹主要分为五层:
1. 物理层:通过线路(可以是有形的线也可以是⽆线链路)传送原始的⽐特(bit)流,只完成⼀个节点到另⼀个节点的传送(单跳)
2. 数据链路层:通过物理⽹络传送帧,只完成⼀个节点到另⼀个节点的传送(单跳)(hop-by-hop, node-to-node)
3. ⽹络层:把包⾥⾯的⽬的地址拿出来,进⾏路由选择(routing),决定要往哪个⽅向传输,负责从源(source)通过路由选择到⽬的地
(destination)的过程,达到从源主机传输数据到⽬标主机的⽬的(host-to-host)
4. 传输层:也称为端到端传输,⽹络层只把数据送到主机,但不会送到进程。传输层负责负责进程与主机(host)间的传输,主机到主机
(host-to-host)的传输交由⽹络层负责。在七层模型中,传输层还可以细分为会话层和展⽰层:
1.
1. 会话层:通过数据流建⽴会话关系
2. 展⽰层:数据压缩、解压,加密、解密,数据类型、格式变换等⼀切与数据展⽰有关的操作
5. 应⽤层:专门针对某些应⽤提供服务
⽹络层有如下协议:
传输层主要有TCP(传输控制协议)与UDP(⽤户数据报协议)两种协议。
应⽤层有如下协议:
2. TCP与UDP的区别
TCP即传输控制协议,UDP即⽤户数据报协议,他们的区别主要有以下⼏点:
1. TCP协议是⾯向连接的,发送数据之前需要建⽴连接;UDP协议是⽆连接的,发送数据之前不需要建⽴连接
2. TCP协议提供可靠的传输服务;UDP协议提供不可靠的传输服务
3. TCP发送数据⼤⼩会受发送窗⼝、接收窗⼝及MSS(最⼤报⽂段)限制,因此会分为多段发送;UDP发送数据⼤⼩即为数据本⾝⼤⼩
4. TCP拥有众多反馈机制与附加机制;UDP没有反馈机制
5. TCP传输速度较慢;UDP传输速度较快
总的来说,TCP协议提供⾯向连接的,可靠的传输服务,但速度较慢,适合⽂件下载等传输任务;UDP协议提供⽆连接的,不可靠的传输服务,但速度较快,适合媒体流等看重传输速度的传输任务。
3. TCP报⽂结构
TCP段结构如下:
其中:
Source port:源端⼝,16位,说明发送端的端⼝号
Destination port:⽬的端⼝,16位,说明接收端的端⼝号
Sequence number:序列号,32位,说明这个数据的序号,从⽽接收端接收后可以进⾏排序,避免接收错序
Acknowledgement number:确认号,ACK,32位,表⽰说明这是对哪个数据的确认,表明期待接收编号为x的数据段,⼩于x的数据段已经成功接收并交给了上层
TCP header length:TCP头部长度,4位,由于TCP头部中带有option,⽽option的长度不固定,因此需要标识头部的长度0(灰⾊那段):padding,6位,⽆实际作⽤
标志位:6位,作⽤分别如下:
URG:说明数据部分是否有紧急数据,可能导致乱序问题,因此并不会在实际中被使⽤
ACK:说明确认号是否有效
PSH:告诉接收⽅将缓冲区的数据尽快交给上层,可能会导致数据丢失,因此不会在实际中被使⽤
RST:重置连接,将连接强制中断
SYN:同步标识,建⽴连接时使⽤
FIN:结束标识,关闭连接时使⽤
Window size:窗⼝⼤⼩,16位,发送端告诉接收端⾃⼰的发送窗⼝的缓冲区⼤⼩
Checksum:校验和,16位
Urgent pointer:紧急数据指针,16位,说明数据段中哪⼀段数据是紧急数据
Options:0或32位,选项部分
Data:数据部分
4. TCP的三次握⼿与四次挥⼿过程,各个状态名称与含义,TIMEWAIT的作⽤
TCP三次握⼿
其⽰意图如下:
三次握⼿是指TCP建⽴连接的过程,顾名思义,主要分为3个步骤:
1. 客户机发起请求
1. SYN为1:说明发起新的连接
2. SEQ为x:说明这个段的序列号是多少,服务器收到后会调整接收的滑动窗⼝为x+1(表明下⼀次要接收的段的序列号为x+1),
⼀般随机选取x
3. 指定窗⼝⼤⼩的值:客户机说明⾃⼰的接收窗⼝⽬前还可容纳多少数据
2. 服务器响应请求
1. ACK为1:表⽰确认接收请求
2. ACK号为x+1:表⽰接受了序列号位x及以下的数据,期待序列号为x+1的数据
3. SYN为1:说明服务器同意新的连接建⽴(只是同意,还没有没有分配端⼝资源)
4. SEQ为y:说明这个段的序列号是多少,客户机收到后会调整接收的滑动窗⼝为y+1(表明下⼀次要接收的段的序列号为y+1),
与x没有关系
5. 指定窗⼝⼤⼩的值:服务器说明⾃⼰的接收窗⼝⽬前还可容纳多少数据
3. 服务器响应请求
1. ACK为1:表⽰确认接收请求
2. ACK号为y+1:表⽰接受了序列号位y及以下的数据,期待序列号为y+1的数据
3. SEQ为x+1:说明这个段的序列号是多少,服务器收到后会调整接收的滑动窗⼝为x+2(表明下⼀次要接收的段的序列号为x+2)
看完三次握⼿我们不禁有疑问,为什么需要三次握⼿呢?⼀次握⼿,两次握⼿为什么不⾏呢?
原因如下:
⼀次握⼿:客户机根本不知道连接的有效性
有可能这次握⼿请求根本没有到达服务器或者直接被服务器拒绝
两次握⼿:服务器⽆法确认该请求的合法性,如果是两次握⼿服务器将⽴即分配端⼝资源造成资源浪费,可能使得其它客户机⽆法连接发送⽅请求连接的包在信道⾥⾯停留了很长时间,使得连接都释放
掉了这个包才到
会遭遇SYN泛洪攻击:⼀台恶意的主机伪造⾃⼰的IP向服务器请求连接
TCP四次握⼿
其⽰意图如下:
TCP四次握⼿是指TCP释放连接的过程,顾名思义,主要分为4个步骤:
1. 释放连接的发起⽅发起释放连接请求
1. FIN为1:结束位为1,说明发起⽅的发送过程已经结束,不会再向对⽅发送实际数据
tcpip协议pdf2. SEQ为x:序列号为x
2. 释放连接的接收⽅回复释放连接请求
1. ACK为1:表⽰确认接收请求
2. ACK号为x+1:表⽰接受了序列号位x及以下的数据,期待序列号为x+1的数据
3. 释放连接的接收⽅同意释放连接请求
1. FIN为1:结束位为1,说明发起⽅的发送过程已经结束,不会再向对⽅发送实际数据
2. SEQ为y:序列号为y
4. 释放连接的发起⽅回复释放连接请求
1. ACK为1:表⽰确认接收请求
2. ACK号为y+1:表⽰接受了序列号位x及以下的数据,期待序列号为y+1的数据
发起⽅在第四次握⼿发出ACK后会等待⼀段时间后再正式释放连接,这段时间被称为TIME_WAIT。会有TIME_WAIT的原因主要是保证接收⽅能够收到对于FIN的ACK,如果ACK在返回的过程中丢失会导致接收⽅超时,这时会再发⼀个FIN给到发起⽅,因此这⼀段时间正好是ACK返回时间加上重发的FIN到达发起⽅的时间。另⼀个原因是如果没有TIME_WAIT就马上建⽴了新的连接,那么⽹络中遗留下来的旧的数据包将可能会⼲扰接收⽅的接收,接收⽅⽆法识别出是新的数据包还是旧的数据包,因此在TIME_WAIT接收到的其它数据包会被丢弃。
其实TCP释放连接的⽅法除了四次握⼿外还有直接重置RST的强制释放⽅法,在此不再赘述。
5. TCP拥塞控制
由于发送⽅到接收⽅之间的信道是公⽤的,因此如果发送⽅不考虑中间信道的容量随意发送就可能出现拥塞,拥塞会导致延迟严重,甚⾄⼤量丢包,因此我们需要进⾏拥塞控制。
拥塞控制的关键在于控制发送端的发送速率,发送端的发送速率受到发送窗⼝⼤⼩的限制,因此在TCP的拥塞控制中实际控制的是发送端的发送窗⼝⼤⼩。
当出现以下两种情况之⼀时,我们断定传输出现了拥塞:
1. 连续(三个)的序号为x的ACK:说明序号为x的TCP数据段很可能丢失
2. 超时时间到来前未收到ACK
当出现拥塞时,我们主要有以下⽅法进⾏拥塞控制:
AIMD
AIMD(additive increase multiplicative decrease)的意思即加性增加乘性减少,其初始拥塞窗⼝⼤⼩为任意值。
当我们每成功传输⼀个TCP数据段,拥塞窗⼝⼤⼩加1MSS(最⼤报⽂⼤⼩),此为加性增加;⽽当我们发现传输出现拥塞时,拥塞窗⼝⼤⼩减半,此为乘性减少。
这种算法的问题在于增加的速度慢,丢包代价⼤。
慢启动
慢启动的初始时拥塞窗⼝⼤⼩为1MSS(因此叫慢启动算法),最⼤为65535MSS(窗⼝⼤⼩只有16bit,因此最⼤也只能这么⼤)。慢启动算法开始时每成功传输⼀个TCP数据段,拥塞窗开⼤⼩也是增加1MSS,但当其发现拥塞时,会⾸先确定⼀个阙值:阙值为当前窗⼝⼤⼩的⼀半,然后根据不同的机制进⾏处理:
Tahoe机制
出现拥塞时窗⼝⼤⼩会变回1MSS,但当窗⼝⼤⼩⼩于阙值时,传输成功窗⼝⼤⼩加倍(指数增长),⼤于阙值后改为加性增长。Reno机制
出现拥塞窗⼝⼤⼩直接变为阙值。(也称为快速恢复机制)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论