计算机网络

1.三次握手(数据包

(初始状态CLOSED)

第一次握手:建立连接时,客户端发送SYN包到服务器,其中同步序列号syn=j。而后客户端进入SYN_SENT状态,等待服务器确认;

第二次握手:服务器被动打开后进入LISTEN状态,在收到客户端SYN包后:①确认客户的SYN包。其中确认标志位ACK=1,确认号ack=j+1;②同时自己也发送一个SYN包。其中同步标志位SYN=1,序列号seq=k。而后服务器进入SYN_RCVD状态;

第三次握手:客户端收到服务器的ACK+SYN包,向服务器发送确认包,确认标志位ACK=1,,确认号ack=k+1。而后客户端和服务器端进入ESTABLISHED状态,TCP连接成功,完成三次握手。

为什么不是两/三次握手?因为服务器端和客户端的数据不是同时发送完,所以无论哪端发送完数据都需要请求并确认。另外两次握手也会导致死锁。

2.四次挥手

TCP客户端发送一个FIN,其中终止标志位FIN=1,序列号seq=u。而后客户端进入 FIN_WAIT_1状态;

服务器收到客户端的FIN后①向客户端发送确认,其中确认标志位ACK=1,,确认号ack=u+1;②同时自己也发送一个序列号seq=1。而后服务器端进入CLOSE_WAIT状态。客户端收到服务器的确认请求后,就进入FIN_WAIT_2状态,等待服务器发送连接释放报文。

服务器将最后的数据发送完毕后就向客户端发送连接释放报文。①其中终止标志位FIN=1,序列号seq=w。②确认终止,确认标志位ACK=1,确认号ack=u+1;而后服务器端进入LAST_ACK(最后确认)状态。

客户端收到服务器端的连接释放报文后,向服务器端发送确认,其中确认标志位ACK=1,确认号ack=w+1,自身序列号seq=u+1。而后客户端进入TIME_WAIT(时间等待)状态,在经过2MSL(最大报文段生存时间)后CLOSE。

(服务器收到客户端确认释放连接报文后立即进入CLOSE状态)

为什么要等待最大报文段生存时间?是为了确认服务器端收到了客户端的确认释放连接报文,如果在等待的时间内客户端又收到了FIN,则表明在网络传输过程中丢失了ACK报文,之前没有确认成功。

为什么是四次挥手不是三次?关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能像三次握手一样一起发送确认ACK和终止FIN。

3.TCP和UDP

区别:

TCP是面向连接的、可靠的、端到端的传输层协议;

UDP对应的则是可靠性要求低、传输流量大,传输速度快的应用。

应用场景:

TCP:当对网络通讯质量有要求使使用,如互联网和企业网上的客户端应用,金融领域。TCP支持的应用协议有远程登录协议Telnet、文件传输协议FTP等;

UDP:当强调传输性能而不是传输的完整性时使用,如QQ使用的是UDP协议聊天,因为用户不需要等待就会接收。UDP支持的应用层协议有域名系统DNS、通用文件传输协议TFTP等

TCP为什么可靠?因为三次握手、超时重传、滑动窗口、拥塞控制

什么是面向连接?在发送消息前先建立连接,并在通信过程中实时监控和管理连接情况。非面向连接则直接发送数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值