网络协议基础07--传输层

面试可能会问到:什么是TCP的可靠传输/流量控制/拥塞控制/建立连接释放连接?

传输层有2个协议:UDP用户数据报协议和TCP传输控制协议

TCP应用层协议:HTTP、HTTPS、FTP、SMTP、DNS(表示应用层要是用的是HTTP协议的话,传输层必然用的是TCP协议)

UDP应用层协议:DNS

UDP

UDP首部中,端口号占16位,客户端的源端口是临时开启的随机端口

协议默认端口号
HTTPTCP+80
HTTPSTCP+443
FTPTCP+21
MySQLTCP+3306
DNSUDP/TCP+53
SMTPTCP+25
POP3TCP+110

 TCP

 

标志位URG(当URG为1时,紧急指针字段才有效);ACK(ACK为1时,确认号字段才有效)

                PSH(……);RST(当RST为1时,表明连接中出现严重差错,必须释放连接再重连)

                SYN(当SYN=1,ACK=0时表示这是一个建立连接的请求,若对方同一建立连接回复SYN=1,ACK=1)

                FIN(当FIN=1,表示数据已发送完毕,要求释放连接)

序号:在建立连接后,这一次给对方的TCP数据部分的第一个字节的编号

确认号:建立连接后,期望对方下一次传过来的TCP数据部分的第一个字节的编号

窗口:有流量控制的功能,告知对方,下一次允许发送的数据大小

TCP的几个要点:

·可靠传输:保证服务器给客户端返回数据时,如果有包丢失了,会补发

·流量控制:告诉服务器我窗口大小,不要发太多太快

·拥塞控制:在流量控制的基础上,再进一步一起维护网络

·连接管理:三次握手,四次挥手

TCP--可靠传输

·停止等待ARQ自动重传请求(每发完一组数据,停止发送,等待对方确认后再发下一组)

·连续ARQ+滑动窗口(发送窗口中的连续分组,发送完之后,停止发送,等待确认)

·SACK选择性确认:TCP只发送丢失的包,已经收到的包会放在TCP头部的可选部分

思考:为什么在传输层就要把数据分成多个段传输,而不是等到在网路层分片传给数据链路层?

因为:可靠传输是在传输层进行控制的,网络层和数据链路层是没有可靠传输功能的,若不在传输层就分成一个一个的段,一旦数据丢失,整个传输层的数据都得重传。

TCP--流量控制(点对点)

什么是流量控制?

让发送方的发送速率不要太快,让接收方来得及处理、

为什么要进行流量控制?

如果接收方的缓存区满了,发送方还在疯狂发数据,接收方只能把收不下的数据包丢掉,大量的丢包会极大地浪费网络资源

TCP--拥塞控制(全局性)

作用:防止过多的数据注入到网络中,避免网络中的路由器过载

方法:

·慢开始:cwnd初值很小,随着接收方的确认,成倍增长

·拥塞避免:设置一个ssthred慢开始阈值,慢开始一段时间后,达到ssthred,以线性方式增加cwnd,当出现网络拥塞时,把拥塞峰值的一半作为ssthread,又从最初的慢开始设置的cwnd开始执行……

·快速重传:接收方只要接收到了一个失序的分组就给发送方发确认,发送方只要收到连续3个确认,就立刻重传丢失的报文

·快速恢复:出现拥塞控制后,不是从慢开始最初的cwnd开始,而是把cwnd设为新的ssthread,然后用拥塞避免线性增大

MSS:每个段最多能传多少字节(建立连接是在TCP头部可选部分表明,双方择其最小值)

rwnd:接收窗口

cwnd:拥塞窗口

swnd:发送窗口

swnd=min(rwnd,cwnd)

当rwnd<cwnd,是接收方的接受能力限制发送窗口的最大值

cwnd<rwnd是网络的拥塞限制

TCP--建立连接-3次握手

 在Windows上可以用netstat -ant -p TCP查看TCP状态,基本上只能看到Listen和Established

CLOSED:客户端处于关闭状态

SYN-SENT:客户端已经向服务端发起请求建立连接的报文,等待Server回复

LISTEN:服务端处于监听状态

SYN-RCVD:服务端收到了客户端发来的连接请求,返回给客户端ACK,等待客户端最终确认

ESTABLISHED:请求已经成功建立

前2次握手,TCP头部会放一些双方交换确认的信息,如MSS,窗口等,是否支持SACK

为什么要建立3次握手?2次不行吗?

建立3次握手的主要目的:为了防止已失效的连接请求报文段突然又传送到了服务端,防止Server端一直等待,浪费资源,产生错误。

TCP--建立连接-释放连接-4次挥手

 Client和Server谁想先发起断开连接都行。这里我们假设的是Client想先断开

FIN-WAIT-1:Client给Server发送了FIN报文,进入终止等待1。

FIN-WAIT-2:当收到了对方的ACK后,进入终止等待2。

CLOSE-WAIT:收到对方断开连接的请求就进入关闭等待状态,并回应对方一个ACK表示我收到了

LAST-ACK:被关闭一方发送FIN后进入最后确认状态,等待对方最后的ACK,收到后就可以进入CLOSED了

TIME-WAIT:收到了对方的FIN,并发送ACK报文,等2MSL后就可以进入CLOSED状态

有时候抓包工具会显示,第2、3次挥手合并了(表示我知道你没数据发了,同时我也没数据发了)

MSL:最大分段生存期,是指TCP报文在因特网上的最大生存时间,一般是2分钟。

为什么要等2MSL后再断开?即 TIME - WAIT 状态的作用是什么?

 ------1.可以防止本次连接中产生的数据包误传到下一次连接中(因为客户端的端口是随机的,可能存在上一次连接的端口和下一次的端口刚好是一个的情况,设置为2MSL可以避免误传)。

-------2.为了保证客户端发送的最后1个连接释放确认报文 能到达服务器,从而使得服务器能正常释放连接 (客户端的第四次挥手可能丢失,如果立马关闭连接,服务器收不到客户端的最后一个释放报文会重发,此时客户端已经关闭了,会导致服务端连接关闭不了。
所以客户端要等到2倍报文存活时间,确保服务端关闭)
 

为什么要进行4次挥手?

因为TCP是全双工模式,释放连接后,双方都无法都无法接收 / 发送消息给对方。——第1次挥手:主机1告诉主机2,主机1已经没有数据要发给主机2了,但是主机1依然可以接收主机2发送来的数据。第2次挥手:表示主机2知道主机1没有数据要发了,但是主机2还是可以给主机1发的。第3次挥手:表示主机2告诉主机1,主机2已经没有数据要发给主机1了。第4次挥手:表示主机1知道主机2没有数据要发了,随后断开整个连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值