TCP和UDP的那点事儿

一、TCP和UDP的区别;

1、TCP是面向连接的、UDP是非连接的;
2、TCP是基于流服务的、UDP是基于数据报;
      字节流:TCP模块将应用程序数据按序放入TCP缓冲区中,并通知应用程序读取数据,接收方可以一次或多次来读取数据。
      数据报:发送端每执行一次写操作,UDP模块就将其封装成一个UDP数据报并发送,接收端必须及时对UDP数据报进行接收。
3、TCP是可靠的、UDP是不可靠的。
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节

二、要实现一个简单的聊天程序,一般使用TCP还是UDP?

     UDP、UDP相对来说比较快,而且花费资源小;

三、TCP的三次握手、四次挥手、以及状态转移




四、为什么是三次握手?

防止已过期的连接请求报文突然又传送到服务器,因而产生错误。
假设Client发送的一个请求连接报文可能因为网络延迟等原因,没有送达到server中。但是当这个client的请求报文送达到server时,如果没有三次握手的话,server就会直接发数据可client,这样会导致server资源的浪费。
就相当于客户打电话给客服,通话显示服务器正在忙,然后客户挂了电话,然后客服因为其他原因接到了电话,如果不进行二次问话就直接说话,这就浪费客服资源嘛。

五、为什么是四次挥手?

确保数据能够完成传输。
当你收到对方请求关闭的通知时,证明他要发给你的数据完了,但是有可能你发给它的还没完,所以你就先同意它的关闭请求,然后继续发送你未发送完的数据,然后发完了就发自己的结束报文给对方,结束通信。

六、time_wait出现在什么时候,它的作用是什么?

它出现在客户端收到服务器的结束报文段之后,没有直接进入到close状态,而是进入到time_wait状态,在这个状态下,客户端连接要等待2个报文段最大生存时间(2min),才能完全关闭;
它的作用:1、如果客户端返给服务器最后一个回应报文段失效,则服务器需要重发结束报文段,所以,客户端得停在这个状态以处理这种情况;2、如果一个TCP连接处于TIME_WAIT状态,则我们将无法立即使用该连接占用着的端口号建立一个新连接,这样能让迟来的包有足够的时间被识别并丢弃,以防止其他连接得到这个包。

七、time_wait的危害

因为处于time_wait得程序不能立即重启,所以感觉就挺浪费资源得,当然,我们可以通过设置socket选项socket_reuseaddr让它强制使用处于time_wait状态占用的端口。

八、close_wait的特点

不再发送数据,只接收报文段。

九、画出tcp报头?


十、TCP为什么是可靠的?

(1)、TCP采用发送应答机制,即发送端的每个TCP报文段都必须得到接受方的应答,才认为这个TCP报文段传输成功。
(2)、TCP协议采用超时重传机制,发送端在发送出一个TCP报文段之后会自动启动定时器,如果定时时间内未收到应答,它将重发该报文段。
(3)、TCP报文段最终以IP数据报发送,IP数据报到达接收端可能乱序、重复,所以TCP协议对接收到的TCP报文段重排、整理,再交付给应用层。

十一、拥塞控制

拥塞控制:提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。
拥塞控制的四个部分:慢启动、拥塞避免、快速重传、快速恢复。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值