[八股]计算机网络/通信八股


说说 TCP 和 UDP 的区别

TCP(传输控制协议)和UDP(用户数据报协议)是两个主要的传输层协议。TCP 提供面向连接的可靠传输,UDP 提供面向无连接的不可靠传输。

  • 连接性 TC是P面向连接的,在发送数据之前,必须先建立连接(三次握手),并在完成数据传输后拆除连接(四次挥手)来这确保通信的可靠性。而UDP 在发送数据之前不需要建立连接,因此没有连接的建立和拆除过程。这使得它更加高效,但也更加不可靠。
  • 可靠性 TCP是可靠传输,它通过序列号和确认机制(ACK)确保数据包按顺序到达且无丢失。它会重传丢失的数据包,并在数据到达时进行校验,保证数据完整性。UDP则是不可靠的传输,它不提供数据包顺序控制、丢失数据重传等机制。数据包可能会丢失、重复或乱序到达,数据完整性不保证。
  • 传输策略 TCP具有流量控制和拥塞控制机制。TCP 使用滑动窗口协议进行流量控制,防止发送方发送数据过快导致接收方来不及处理;并通过拥塞避免算法(如慢启动拥塞避免)调节数据发送速率,避免网络拥塞。UDP则都没有。
  • 传输方式 TCP面向字节流,将数据视为连续的字节流,数据包可以按需拆分和重组。UDP则面向报文,保持应用层数据报的边界,每个 UDP 数据报是一个独立的、完整的数据包。数据包的边界在传输过程中不会被拆分或合并。
  • 报文开销 TCP头部开销较大。其头部至少 20 字节,包含序列号、确认号、窗口大小、校验和等多个字段,以支持其复杂的功能。而UDP 报文头部只有 8 字节,包含源端口、目的端口、长度和校验和字段,结构简单,传输效率更高。
  • 使用场景 TCP适用于要求高可靠性和数据完整性的应用场景,如网页浏览(HTTP/HTTPS)、文件传输(FTP)、电子邮件(SMTP)、远程登录(SSH/Telnet)等。UDP适用于对实时性要求高而对可靠性要求较低的应用场景,如视频会议、在线游戏、直播、多媒体流(VoIP)等。

说说 TCP 三次握手四次挥手过程

先说三次握手:

  1. 第一次握手(SYN) 客户端发送一个带有同步标志(SYN)的 TCP 报文给服务器,表示请求建立连接。

  2. 第二次握手(SYN-ACK) 服务器收到 SYN 报文后,发送一个带有同步标志(SYN)和确认标志(ACK)的 TCP 报文给客户端,表示同意建立连接并确认客户端的序列号。

  3. 第三次握手(ACK) 客户端收到 SYN-ACK 报文后,发送一个带有确认标志(ACK)的 TCP 报文给服务器,表示确认服务器的序列号。

16:31:23.123456 IP localhost.12345 > localhost.56789: Flags [S], seq 0, win 65535, options [mss 1460], length 0
16:31:23.123457 IP localhost.56789 > localhost.12345: Flags [S.], seq 0, ack 1, win 65535, options [mss 1460], length 0
16:31:23.123458 IP localhost.12345 > localhost.56789: Flags [.], ack 1, win 65535, length 0

完成这三次握手后,客户端和服务器之间的连接就建立起来了,双方可以开始传输数据。
然后是四次挥手:

  1. 第一次挥手(FIN) 客户端发送一个带有终止标志(FIN)的 TCP 报文给服务器,表示请求断开连接。
  2. 第二次挥手(ACK) 服务器收到 FIN 报文后,发送一个带有确认标志(ACK)的 TCP 报文给客户端,表示确认客户端的请求,并进入等待状态
  3. 第三次挥手(FIN) 服务器发送一个带有终止标志(FIN)的 TCP 报文给客户端,表示服务器也请求断开连接。
  4. 第四次挥手(ACK) 客户端收到 FIN 报文后,发送一个带有确认标志(ACK)的 TCP 报文给服务器,表示确认服务器的请求,并进入等待状态(TIME-WAIT)。
    在完成这四次挥手后,服务器关闭连接,客户端在等待一段时间(通常是 2*MSL,最长报文段生存时间)后也关闭连接,确保所有未传输的报文都被正确处理,连接正式断开。
16:32:45.123456 IP localhost.56789 > localhost.12345: Flags [F.], seq 1, ack 1, win 65535, length 0
16:32:45.123457 IP localhost.12345 > localhost.56789: Flags [.], ack 2, win 65535, length 0
16:32:45.123458 IP localhost.12345 > localhost.56789: Flags [F.], seq 1, ack 2, win 65535, length 0
16:32:45.123459 IP localhost.56789 > localhost.12345: Flags [.], ack 2, win 65535, length 0

通过三次握手,客户端和服务器都确认了对方的存在,并且双方的接收和发送能力都是正常的。并且可以同步双方的数据包初始序列号,为后续的可靠传输打下基础。当然可以再此基础上追加更多握手,但是完成以上功能需要的最少握手次数是三次。

通过四次挥手,它确保客户端和服务器都能够有机会处理完所有未完成的数据传输,并确认彼此都已准备好关闭连接。对于客户端的TIME-WAIT 状态,主要是为了确保让 ACK 报文段有足够的时间到达服务器,防止服务器在未收到 ACK 的情况下重新发送 FIN,以及确保旧的重复报文段在网络中消失/废弃,从而避免对后续新的连接产生干扰。


说说 TCP/IP 五层模型

TCP/IP 五层模型是计算机网络中常用的分层模型,用于描述网络通信的过程。它是对 TCP/IP 协议栈的一个简化和扩展版本,与 OSI 七层模型类似,但更加实用和简洁。

  • 应用层 应用层负责为用户提供网络服务和应用程序接口,支持各种网络应用,如电子邮件、文件传输、网页浏览等,主要的协议有HTTP(超文本传输协议),FTP(文件传输协议),DNS(域名系统)等。
  • 传输层 传输层负责端到端的通信,提供可靠的数据传输和流量控制,分段和重组数据,确保数据完整性和顺序。主要协议就是TCP和UDP。
  • 网络层 网络层负责在不同网络之间进行数据包的路由和转发,确保数据从源到目的的正确传输,处理数据包的逻辑地址(IP 地址),并选择最佳路径。主要协议有IP(互联网协议)。典型设备是路由器和防火墙。
  • 数据链路层 数据链路层负责在相邻节点之间传输数据帧,并提供错误检测和纠正功能,将物理层的比特流组织成帧(Frame),并处理传输错误。主要协议有Ethernet(以太网),ARP(地址解析协议),MAC(介质访问控制)。典型设备有交换机,网桥,网卡等。
  • 物理层 物理层负责在物理介质上传输原始的比特流,定义了网络设备之间如何通过电缆、光纤、无线电波等传输数据。典型设备有集线器,光纤,网线等。

TCP 如何实现可靠传输

TCP通过一系列机制来实现可靠的数据传输。这些机制包括三次握手四次挥手、序列号和确认机制、超时重传、流量控制和拥塞控制,数据校验和等。

  • 三次握手四次挥手 通过三次握手,客户端和服务器都确认了对方的存在,并同步了初始序列号,为后续的可靠传输打下基础。通过四次挥手,确保双方都已完成数据传输并安全地释放连接资源。
  • 序列号和确认机制 TCP 使用标识数据流中的每个字节的位置的序列号和接收方告知发送方已经收到的数据字节的下一个期望序列号的确认号来确保数据包按顺序到达并且不丢失。
  • 超时重传 TCP 设置一个超时时间,如果发送的数据包在规定时间内未收到确认,则认为数据包丢失,重新发送该数据包,并且这个超时时间会根据网络延迟变化自适应调整,提高重传效率。
  • 滑动窗口和流量控制 滑动窗口机制用于控制数据传输的流量,防止发送方发送过多数据导致接收方缓存溢出。进一步的说,接收方根据自身缓冲区的使用情况动态调整窗口大小,并通知发送方。
  • 拥塞控制算法
    慢启动 :发送方初始发送少量数据,根据接收到的 ACK 增加发送窗口,逐步提高发送速率(暖机)。
    拥塞避免:当发送窗口达到一定阈值时,进入拥塞避免状态,发送速率缓慢增加,以避免网络拥塞(提前减速)。
    快速重传:接收方连续收到多个重复的 ACK 时,发送方立即重传疑似丢失的数据包,而不必等待超时。
    快速恢复:在快速重传后,发送方通过调整发送窗口,迅速恢复数据传输速率。
  • 数据校验和 每个 TCP 报文段都包含一个校验和字段,用于验证数据的完整性。发送方计算校验和并附加到报文段中,接收方接收到报文段后也计算校验和,并与报文中的校验和进行比较。如果不一致,则认为数据包损坏,丢弃该数据包并请求重传。
    计算校验过程为:填充0为偶数长度,按16位累加伪首部、TCP头部和数据部分,溢出则给到低位,求反码。

以上策略保证了TCP能实现可靠的传输。


DNS解析过程

DNS(域名系统)是互联网的一个核心服务,用于将域名解析为IP地址,使得用户可以通过友好有可读性的域名访问网站和其他网络资源。

  • 用户请求解析域名 浏览器首先检查本地缓存中是否有该域名的解析记录。如果有,则直接使用缓存中的IP地址。如果没有,浏览器会发起一个DNS查询请求。
  • 操作系统缓存 操作系统会检查本地DNS缓存中是否有该域名的解析记录。如果有,则使用缓存中的IP地址。如果没有,操作系统会将查询请求发送给配置的DNS服务器。
  • 本地DNS服务器 本地DNS服务器(通常是ISP提供的DNS服务器或用户自行配置的DNS服务器)会检查其缓存中是否有该域名的解析记录。如果有,则返回IP地址。如果没有,本地DNS服务器会进行下一步查询。

查询策略上,有递归查询迭代查询

  • 递归查询,从根DNS服务器开始,逐级向下查询顶级域名服务器权限DNS服务器,最终获取域名的IP地址,查询结果会在之前受委托的各域名服务器之间传递,最终传回给用户主机(代跑)。
  • 迭代查询,当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP 地址,要么告诉本地服务器下一步应该找哪个域名服务器进行查询,然后让本地服务器继续后续的查询(踢皮球)。

递归查询对于被查询的域名服务器负担太大,通常采用以下模式:从主机本地域名服务器的查询是递归查询,往后的查询是则是迭代查询。

协议上,即使用UDP也使用TCP。

  • 当进行大数据量传输区域传送(主域名服务器向辅助域名服务器传送变化的那部分数据)时会使用 TCP,因为数据同步传送的数据量比一个请求和应答的数据量要多,而 TCP 允许的报文长度更长,因此为了保证数据的正确性,会使用基于可靠连接的 TCP。
  • 当客户端向 DNS 服务器查询域名的时候,通常首先使用UDP协议。DNS服务器使用UDP返回查询结果,如果结果小于512字节,则查询过程结束,否则截断,改用TCP传输。

说说TCP 粘包

TCP 粘包是指在TCP协议中,接收方在读取数据时将多个数据包合并在一起,导致数据边界不明确的问题。粘包问题主要发生在发送端连续发送多个数据包,而接收端读取数据时将多个数据包合并在一起进行处理,从而无法区分每个数据包的边界。
对于发送方造成的粘包问题,可以通过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭算法。而接收方没有办法来处理粘包现象,只能将问题交给应用层来处理。


说说 HTTP 状态码及其含义

HTTP状态码是HTTP协议中用于表示响应状态的标准代码,通过这些状态码,客户端可以了解请求的处理结果,并采取相应的行动。

  • 1xx 信息响应 表示服务器已经收到请求并正在处理,但尚未完成整个过程。
  • 2xx 成功响应 表示客户端的请求已成功接收、理解并接受处理。
  • 3xx 重定向 这些状态码表示客户端需要采取进一步的操作才能完成请求。
  • 4xx 客户端错误 表示客户端看似发生了错误,妨碍了服务器的处理。
  • 5xx 服务器错误 表示服务器在处理请求时发生了内部错误。

以下是一些常见的状态码:

  • 200 OK 这是一个最常见的状态码, 表示访问成功
  • 404 Not Found
  • 403 Forbidden 表示访问被拒绝. 有的页面通常需要用户具有一定的权限才能访问比如登陆,如果用户没有登陆直接访问。
  • 500 Internal Server Error 服务器出现内部错误。一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码。
  • 504 Gateway Timeout当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的情况。
  • 301 Moved Permanently 永久重定向。当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址。

很枯燥,这就是八股文 :(

  • 23
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
计算机网络八股计算机网络是现代信息技术的核心基础之一,它涉及了计算机通信和数据传输技术等多个方面。下面将从网络体系结构、网络协议、网络安全和网络性能等方面对计算机网络进行阐述。 首先,计算机网络的体系结构包括了物理层、数据链路层、网络层、传输层和应用层。物理层负责传输比特流,数据链路层提供可靠的点对点数据传输,网络层负责数据包的路由与转发,传输层提供端到端的可靠或不可靠的数据传输服务,而应用层则为用户提供网络应用服务。 其次,网络协议是计算机网络中的重要组成部分。常见的网络协议包括TCP/IP协议、HTTP协议、FTP协议等。TCP/IP协议是互联网的核心协议,它包括了IP地址分配、路由选择和数据传输等功能。HTTP协议用于在Web浏览器与Web服务器之间传输超文本数据,FTP协议用于文件传输。 此外,网络安全是计算机网络中不可忽视的问题。常见的网络安全措施包括防火墙、入侵检测系统和加密技术等。防火墙可以过滤网络流量,保护内部网络免受外部攻击;入侵检测系统可以检测和阻止恶意行为;加密技术可以保护数据的机密性和完整性。 最后,网络性能是衡量计算机网络好坏的重要指标之一。网络性能包括带宽、时延、吞吐量和丢包率等。带宽是指网络传输数据的能力,时延是数据从发送到接收所需的时间,吞吐量是单位时间内传输的数据量,丢包率是指在传输过程中丢失的数据包比例。 综上所述,计算机网络是一门涉及广泛的学科,它的体系结构、协议、安全和性能等方面都需要深入研究和理解。通过不断提高网络技术和加强网络安全措施,我们可以更好地应对计算机网络发展带来的挑战。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

脑机超频

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

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

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

打赏作者

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

抵扣说明:

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

余额充值