计算机网络常见问题归纳

一,tcp三次握手四次挥手

一,tcp三次握手四次挥手
(1)tcp三次握手
在这里插入图片描述
MSL:最大报文段生存时间
SYN:同步序列编号
seq序列号:用来标记数据段的顺序,seq就是发送的报文段中第一个字节的数据编号
ack确认号:期待收到对方下一个报文段的第一个数据字节的序号;
TCP三次握手:
第一次握手:客户端发送一个SYN=1,seq=x的SYN包
第二次握手:服务器如果收到客户端发来的SYN包,会回复一个ACK=1,SYN=1,seq=y,ack=x+1的ACK包+SYN包,
第三次握手:客户端收到服务器发送来的ACK+SYN包,这时候回复一个ACK=1,seq=x+1,ack=y+1的ACK包,并且这时候客户端可以给服务器发送数据 <为了避免服务器一直等待客户端的连接>
举列:
就用打电话的方式来简单说明一下,三次握手,C给S打电话,然后C说:你能听得到我说话吗?然后S说:我能听到你说话,你能听到我说话吗?然后C最后回应一下:我也能听到。这样就确保了双方都能听到对方说话
{
客户端然后发送http报文,服务器把网页返回给客户端
}
(2)tcp四次挥手

在这里插入图片描述
《FIN为1时,发送端完成任务,释放一个连接》
第一次挥手:客户端发出FIN=1,seq=u的一个FIN包,并且停止发送数据,客户端进入终止等待1状态
第二次挥手:服务器接收到客户端发来的FIN数据包之后,回复一个ACK=1,seq=v,ack=u+1的ACK包,服务器进入关闭等待状态,当客户端收到了发过去的ACK包后,进入终止等待2状态
第三次挥手:然后服务器传送最后没有发完的数据,发送结束后,再给客户端发一个ACK=1,FIN=1,seq=w,ack=u+1的ACK+FIN包,然后服务器进入最后确认状态
第四次挥手:客户端接受完服务器发送的数据和ACK+FIN包后,最后回复一个ACK=1,seq=u+1,ack=w+1,然后客户端进入时间等待状态,最后客户端等待2MSL时间后,服务器没有再发送一个FIN包,那说明刚刚发的ACK数据包,服务器已经收到,服务器那边已经关闭
举例:
也用打电话的方式来说一下吧。
C给S说:我准备挂电话了,你还有什么需要说的吗
S回应:我听到你准备挂电话,但是你别急,我把最后几句话说完(这里说的话,就类似于网络中发送的数据包)
C听到S给的回应:然后不给S说什么了,然后就接受S最后发送的数据
当S说完之后,S又说:我说完了,我准备挂了,可以吗
C说:我收到了,你挂吧,然后C等待S收到后,然后再挂电话,S收到C最后说的我收到了,你挂吧,然后S就可以挂电话了
(3)为什么连接的时候是三次握手,关闭的时候却是四次挥手?
因为当服务端收到客户端的SYN连接请求后,可以直接发送ACK+SYN包。但是关闭连接时,当服务器收到FIN包时很有可能因为服务器还有没有发送完的数据,并不会立即关闭Socket,所以只能先回复一个ACK,只有等服务器端把最后的数据发送完毕后,才能发送FIN报文,所以需要四次挥手
(4)为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回CLOSE状态?
因为有可能客户端最后一次回应的ACK包丢失。服务器如果没有收到ACK,将不断重复发送FIN片段,所以客户端不能立即关闭,它必须确认服务器接收到了该ACK
(5)为什么不能用两次握手进行连接?
三次握手完成两个重要的功能,双方都要知道自己能发送数据并被对方接收到,如果是两次握手的话,第一次客户端发送连接请求,服务器给出回应并且发送SYN,这时候客户端可以确定,服务器能接收到我发送的数据,如果省略了最后一步,服务器就不能确定,自己发送的数据,客户端能否收到。所以需要客户端第三次握手,再回复一下服务器发来的SYN
(6)如果已经建立了连接了,但是客户端突然出了故障怎么办?
TCP还设有一个保活计时器,当客户端出现故障,服务器不能一直等下去,服务器每收到客户端的请求后都会重新复位一下这个计时器,时间通常设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,每隔75秒钟发送一次,若一连发送10个探测报文任然没反应,服务器就认为客户端出了故障,接着就关闭连接

二,网络层七层协议

二,网络层七层协议
应用层:提供了访问网络服务的接口
表示层:提供数据格式转换服务
会话层:建立端连接并提供访问验证和会话管理
传输层:提供应用程序之间的逻辑通信
网络层:为数据在节点之间传输创建逻辑链路,并分组转发数据
数据链路层:在通信的实体间建立数据链路连接
物理层:传输比特流

我自己理解的7层,
应用层:提供了做很多事情的网络服务接口,例如文件传输FTP协议,超文本传输协议http等等。
表示层:提供数据格式转换,加密解密,压缩解压。
会话层:进行会话管理(建立、维护、终止)。
传输层:负责网络中两个主机进程间通信网络服务,协议TCP/UDP。
网络层:负责路由分发,解决不在一个局域网,进行路由转发等等。 类似于生活中:快递分解公司,发过去之后根据目的往下一个目的去分解
数据链路层:网络层找到接收方的所在的局域网进行数据链路连接。
物理层:传输比特流,网线之类的,这样发过去了

在这里插入图片描述

那我举个实际的例子,当用户A和B进行FTP(应用层的一个文件传输协议)通信时,首先A激活应用层的21端口,要求对自己提供文件传输服务,21端口激活后,把数据发给表示层,表示层对数据进行加密,压缩,之后表示层再把数据交给会话层,会话层建立一次会话和结束一次会话。但是建立会

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值