Java 计算机网络面试题记录

TCP连接

        TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,在发送数据 前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服 务端保存的一份关于对方的信息,如ip地址、端口号等。

        一个TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。一个TCP连 接通常分为三个阶段:连接、数据传输、退出(关闭)。通过三次握手建立一个 链接,通过四次挥手来关闭一个连接。

TCP连接为什么需要三次握手?

因为需要考虑丢包问题,如果是两次握手。在服务端发送ACK报文(第二次握手)时发生了丢包。此时服务端并不知道发生了丢包,它已经准备好了接收数据,但此时客户端并不清楚服务端是否准备就绪,导致客户端并不会传输数据。

而使用三次握手,在第二次握手发生丢包时,因为服务端迟迟没有收到客户端的ACK包,所以会重新进行发送SYN包。

为什么TCP连接的时候是3次,关闭的时候却是4次?

只有在客户端和服务端都不没有数据发送时才能断开TCP连接。客户端发送FIN包保证客户端没有数据需要发送,服务端还有没有数据要发送并不确定。此时服务端只能先回复客户端一个确认报文来确定接收到了这个断开请求。

此时两者共同等待一段时间,让服务端把剩余数据传输完。最后发送FIN包告诉客户端数据传输完毕,此时服务端必须确保客户端收到这个FIN包才能断开连接,即需要第四次挥手。如果不保证客户端接受到这个FIN包,客户端就一直不能确保服务端数据已发送完毕。

为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?

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

Get和Post的请求有哪些区别

  • 用途:get用来从服务器获取数据;post用来向服务器提交数据
  • 表单提交方式:get直接把表单数据拼接到url上,并不安全;post把数据放到请求头或者请求的消息体中
  • 传输数据的大小限制:get受到URL长度的限制,而URL长度由浏览器决定;post理论上没有限制
  • 缓存:get请求可以被浏览器缓存被收藏为标签;post请求不会被缓存,也不会被收藏为标签

Cookie、Session和Token

cookie是由Web服务器保存在用户浏览器上的小文件(key-value格式),包含用户相关的信息。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户身份。

session是依赖Cookie实现的。session是服务器端对象session 是浏览器和服务器会话过程中,服务器分配的一块储存空间。服务器默认为浏览器在cookie中设置 sessionid,浏览器在向服务器请求过程中传输cookie 包含 sessionid ,服务器根据 sessionid 获取出会话中存储的信息,然后确定会话的身份信息。

Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

Token和Session的区别

  •         Session是有状态的,存储在服务端,不利于分布式开发
  •         Token是无状态的,存储在客户端,利于分布式开发

TCP和UDP的区别

  • TCP面向连接,通过三次握手建立连接,四次挥手接除连接;UDP是无连接的,即发送数据之前不需要建立连接,这种方式为UDP带来了高效的传输效率,但也导致无法确保数据的发送成功。
  • TCP是可靠的通信方式。通过TCP连接传送的数据,TCP通过超时重传、 数据校验等方式来确保数据无差错,不丢失,不重复,且按序到达;而UDP由于无需连接的原因,将会以最大速度进行传输,但不保证可靠交付,也就是会出现丢失、重复等等问题。
  • TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流,由于连接的问题,当网络出现波动时,连接可能出现响应问题;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。
  • 每一条TCP连接只能是点到点的;而UDP不建立连接,所以可以支持一对一,一对多,多对一和多对多的交互通信,也就是可以同时接受多个人的包。
  • TCP需要建立连接,首部开销20字节相比8个字节的UDP显得比较大。
  • TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。

TCP如何保证可靠传输

  • 序列号和确认好机制:发包时会选择一个seq序列号,通过后会相应ack确认号
  • 超时重传机制:一段时间没有收到接收端的确认后,将会重发该数据包
  • 对乱序数据包重新排序
  • 丢弃重复数据
  • 流量控制

TCP/IP协议簇

  1. IP(Internet Protocol,互联网协议):IP协议是TCP/IP协议簇的核心协议之一,它负责在网络中定义数据的传输方式。IP协议使用IP地址来标识网络中的设备,并通过路由选择算法将数据包从源设备传递到目标设备。

  2. TCP(Transmission Control Protocol,传输控制协议):TCP是一种面向连接的可靠传输协议,它基于IP协议工作。TCP协议通过建立可靠的数据传输连接,提供了可靠的数据传输、流量控制、拥塞控制等功能。TCP协议保证数据的可靠性,但也因此引入了一定的延迟和额外的开销。

  3. UDP(User Datagram Protocol,用户数据报协议):UDP是一种无连接的传输协议,它也基于IP协议工作。与TCP不同,UDP协议不提供可靠性和流量控制等功能,但它具有较低的延迟和较小的开销,适用于实时性要求较高的应用,如音频和视频传输。

  4. ARP(Address Resolution Protocol,地址解析协议):ARP协议用于将IP地址解析为MAC地址(物理地址)。在发送数据前,发送方需要知道目标设备的MAC地址,通过ARP协议可以查询目标设备的MAC地址,并将其与IP地址进行映射。

  5. ICMP(Internet Control Message Protocol,互联网控制消息协议):ICMP协议用于在IP网络中传输控制消息。它主要用于错误报告和网络状况探测,例如当主机不可达时发送错误消息,或者用于执行网络故障排除和诊断。

  6. DNS(Domain Name System,域名系统):DNS协议用于将域名映射到IP地址。它提供了域名解析服务,将用户输入的域名转换为与之对应的IP地址,使得用户可以通过域名来访问互联网上的各种资源。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值