面经汇总-计算机网络

1. TCP和UDP的区别 牛客269000345号 - 美团实习一面

  • TCP面向连接,传输数据之前需要三次握手连接。UDP无连接,发送数据之前不需要建立连接。
  • TCP提供可靠的传输,通过TCP传输的数据,无差错,无丢失,无重复,按序到达。UDP尽最大努力传输,但不保证可靠交付。
  • TCP传输效率相对较低。UDP传输效率高。
  • TCP面向字节流,UDP基于数据报。

适用领域

  • TCP适用于对数据传输质量要求较高,但对实时性要求不高的环境。比如:HTTP、HTTPS、FTP等传输文件协议,POP、SMTP等邮件传输协议。
  • UDP适用于对数据传输的实时性要求较高,对数据传输质量要求不高的环境。如视频、语音聊天等。

2. TCP三次握手和四次挥手 牛客269000345号 - 美团实习一面

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,发送数据前,通信双方必须要彼此之间建立一条连接。所谓连接,其实是客户端和服务端保存的一份关于对方的信息,如ip地址、端口号等。一个连接被建立或终止时,交换的报文段只包含TCP头部,而没有数据。

TCP头部结构如下:

面经汇总-计算机网络-2

在这里重点解析下边要用到的内容

序号:seq序号,占32位,用来标识TCP源端向目的端发送的字节流,发送方发送数据时对此进行标记。
确认号:ack确认号,占32位。只有ACK标志位为1时,确认号才有效。ack = seq + 1,即希望从源端收到的下一条数据的序号。
ACK:标识确认号是否有效。
SYN:发起一个新连接。
FIN:释放一个连接。

三次握手:即TCP连接的建立

面经汇总-计算机网络-0

(1) 第一次握手,客户端向服务端发起连接请求,随机生成一个序列号x,SYN设置为1。
(2) 第二次握手:服务端收到客户端发送过来的报文后,发现SYN=1,知道这是一个连接请求,随机生成一个序号y,确认号设置为x + 1,ACK标识确认号有效,SYN字段设置为1,确认建立连接。
(3) 第三次握手,客户端收到服务端的回复后发现ACK=1,且确认号为x + 1,知道了服务端已经收到序列号为x的报文。客户端在回复一段报文给服务端,ACK = 1,seq = x + 1,ack = y + 1。

为什么要三次握手

TCP是全双工可靠的传输协议,因此传输之前,传输双方需要确定自己发送和接收都是正常的,才能够开始传输。让我们看看三次握手中发生了什么。
第一次握手,B顺利接收到A的消息。因此B知道了A发送和B接收是正常的。
第二次握手,A顺利接收到B的消息。A知道了A发送的第一条消息被B顺利接收到。因此A知道了A发送、B接收和A接收、B发送是正常的。但是这时候B仍然不知道B发送和A接收是否正常。
第三次握手,B顺利接收到A的消息。B知道B发送和A接收是正常的。因此这时候A和B双方都能够确定彼此发送和接收是正常的。可以开始发送数据。

四次挥手

面经汇总-计算机网络-1

(1) 第一次挥手:客户端数据传输完成后,客户端向服务端发出连接释放报文。报文包含FIN = 1,seq = u。客户端发送FIN报文段之后停止发送数据,但是还能接收数据。
(2) 第二次挥手:服务端接收到客户端发送的FIN报文之后回复确认报文。确认报文包含ACK = 1,seq = v,ack = u + 1。这时服务端处于关闭等待状态,而不是立马给客户端发送FIN报文,因为服务端可能还有数据没有发送完毕。
(3) 第三次挥手:服务端数据发送完毕之后,发送连接释放报文,报文段包括FIN = 1,ACK = 1,seq = w,ack = u+ 1。
(4) 客户端收到服务端发送的FIN报文,向服务端发出确认报文,包括ACK = 1,ack = w + 1,seq = u + 1。此时客户端发出报文后不是立马释放TCP连接,而是经过2MSL(最长报文段寿命的两倍时长)释放TCP连接。服务端收到客户端发出的确认报文立马释放TCP连接,服务端结束TCP连接时间要比客户端早一些。

为什么四次挥手

(1) 第一次挥手:客户端关闭输出。

(2) 第二次挥手:客户端关闭输出,服务端关闭输入。

(3) 第三次挥手:客户端关闭输出,服务端关闭输入,服务端关闭输出。

(4) 第四次挥手:接护短关闭输入,客户端关闭输出,服务端关闭输入,服务端关闭输出。

为什么等2MSL

考虑丢包问题,如果第四次挥手报文丢失,服务端没收到ack报文就会重发第三次挥手的报文,这样报文一去一回最长时间是2MSL,所以需要等待这么长时间确认服务端确实收到了。

原文链接 卧槽!牛皮了,头一次见有大佬把TCP/IP三次握手四次挥手解释的这么明白

3. Http有无状态 windwj000 - 阿里AE部门春招一面

http是一种无状态协议,服务器不保留与客户端交互时的任何状态。也就是说,上一次的请求对这次请求没有任何影响,服务端不会对客户端上一次的请求进行任何记录处理。

保持http状态的技术:Cookie、Session。

4. Cookie & Session windwj000 - 阿里AE部门春招一面

Cookie:Cookie是客户端的存储空间,由浏览器维持。Cookie是指某些网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据。

Cookie会根据从服务端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie,当下次客户端再次向服务器发送请求时,客户端自动在请求报文中加入Cookie值。

Cookie是服务器产生的,发送给客户端,并由客户端保存。

Session:Session是另一种记录客户状态的机制,Session保存在服务器上。客户端浏览器访问服务器时,服务器把客户端信息以某种形式记录在服务器上,这就是Session。客户端浏览器再次访问时,只需要从Session查找该客户的状态即可。

虽然 Session 保存在服务器,它的正常运行仍然需要客户端浏览器的支持。这是因为 Session 需要使用Cookie 作为识别标志。HTTP协议是无状态的,Session 不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为 JSESSIONID 的 Cookie,它的值为该 Session 的 id。Session依据该 Cookie 来识别是否为同一用户。

区别

  • Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上;
  • Cookie 不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用 Session ;
  • Session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
  • 可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木水先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值