TCP/UDP基本概念部分

本文深入探讨了TCP/IP协议中的关键技术问题,包括三次握手的原因、TIME_WAIT状态的作用、全双工通信的特点、QQ通信机制的选择及如何利用UDP实现可靠传输等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在读《Unix网络编程》和《TCP/IP详解》两本书,有了一些自己的心得与体会,总结下其中典型的问题。

1. 为什么建立连接需要三次握手?

  谢希仁的《计算机网络》对这个问题有以下分析:

  服务端接到客户端的syn之后在发送ack的同时还要顺带一个syn来让客户端再发送一个ack相应这个syn.这主要是由于链路的不可靠,客户端发送的连接请求用了很长时间到达服务器,而再此之前客户端很可能因为迟迟没收到服务器端的相应而重发了该连接请求并顺利到达服务器,服务端相应该请求。而之前的连接请求终于到达了该服务器,如果服务器不向客户端发送syn,那么这个连接请求就会被服务器认为是一个有效的连接请求而占用相应的服务器资源,而实际上这只是一个超时到达的连接请求。因此需要服务器端强制重新发送一个syn来向客户端确认之前,客户端发送的syn是有效的。

  这个解释基本上我觉得还是比较好的,但是如果面试的时候如果能说出自己对问题的理解就更好了。我们先来分析下:syn的主要作用是建立连接,与一般的TCP报文的锁不同是的其TCP选用字段有MSS(最大报文长度字段)也就是说通过syn,客户端和服务端分别向对方通报了自己的最大的报文长度。

 

2. TIME_WAIT是2MSL的作用

  MSL是报文在网络中的最长存活时间。在主动关闭连接的一端发送最后一个ACK之后为了确认对方能够收到这个ACK必须处于等待状态,数据报文在源节点和目的节点之间往返的最长时间就是2MSL。如果不等待这个2MSL而是发送ACK之后直接关闭连接,那么如果被动关闭方没收到ACK之后会进行重传,而主动关闭方由于已经关闭该连接了,所以会直接响应RST,被动关闭方会认为这是一个错误。

 

3. 什么是全双工?UDP是全双工的吗?

  关于半双工可以看IPC中的管道通信,创建一个管道,管道需要绑定两个文件描述符readfd和writefd,分别用来读和写。也就是说读写需要分开用两个文件描述符才能完成。而全双工指的是一个文件描述符能同时完成读写操作。在socket编程中,无论是TCP还是UDP都可以用一个文件描述符来完成读写,因此TCP和UDP都是全双工通信。

 

4. QQ采用的是TCP还是UDP?QQ传输文件采用的是TCP还是UDP?

  我先说说自己的观点,QQ采用的是UDP,这里的UDP在应用上加入了序号、确认机制、超时重传,机制来保证一定程度上的可靠连接;第二是因为UDP不需要建立连接,服务器开销小,比如如果每次只需要发送很少数据到对端,导致建立连接开销很大。
  QQ传输文件采用UDP我觉得主要是考虑到UDP没有流量控制,发送端发送的数据很容易填满接收端的缓冲区,《Unix网络编程》的203,面给了一个例子,大概说的是UDP发送2000个1400字节的文件,接收端只能收到30个。因此传输较大的数据文件最好采用TCP传输。

 

5. 怎样用udp协议完成可靠传输?
  几乎所有的UDP通信都是经过改进的UDP协议。UDP协议不用创建连接,对短连接少量数据的传输是比较有优势的。为了保证传输的可靠性,会在应用层的发送端加上报文序号,超时重传,接收端确认报文等方式来保证可靠地传输。

 

转载于:https://www.cnblogs.com/shenshenlei/p/5528373.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值