Java知识点整理 4 — 计算机网络

一. 计算机网络基础

1.网络分层模型

OSI七层模型:

OSI五层模型:应用层、传输层、网络层、数据链路层、物理层。

TCP/IP四层模型:应用层、传输层、网络层、网络接口层。

2.为什么要分层

复杂的系统需要分层,因为每一层都需要专注于一类事情。网络分层的原因也是一样,每一层只专注于做一类事情。

  • 各层之间相互独立:各层之间不需要关心其他层是如何实现的,只需要知道自己如何调用下层提供好的功能就可以了(可以简单理解为接口调用)。这个和开发时系统进行分层是一个道理。
  • 提高了灵活性和可替换性:每一层都可以使用最适合的技术来实现,只需要保证你提供的功能以及暴露的接口的规则没有改变就行了。并且,每一层都可以根据需要进行修改或替换,而不会影响到整个网络的结构。这个和平时开发系统的时候要求的高内聚、低耦合的原则也是可以对应上的。
  • 大问题化小:分层可以将复杂的网络问题分解为许多比较小的、界线比较清晰简单的小问题来处理和解决。这样使得复杂的计算机网络系统变得易于设计,实现和标准化。 平时开发的时候,一般会将系统功能分解,然后将复杂的问题分解为容易理解的更小的问题是相对应的,这些较小的问题具有更好的边界(目标和接口)定义。

3.TCP三次握手与四次挥手

建立连接——三次握手:

  • 第一次握手 :客户端发送SYN包(SEQ = x)到服务器,并进入SYN_SENT状态,等待服务器确认。SYN是同步序列编号。
  • 第二次握手 :服务器收到SYN包,会确认客户端的SYN(ACK = x+1),同时自己也发送一个SYN包(SEQ = y),即SYN+ACK包,此时服务器进入SYN_RECV状态。
  • 第三次握手 :客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK = y+1),发送完后,客户端和服务器进入ESTABLISHED状态,完成三次握手。ESTABLISHED状态表示连接建立成功,可以传输数据。

为什么要三次握手?

三次握手的目的是建立可靠的通信信道,双方都确认自己与对方的发送和接收都是正常的。

  • 第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
  • 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
  • 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常

第二次握手传回了ACK,为什么还要传回SYN?

服务端传回发送端所发送的 ACK 是为了告诉客户端:“我接收到的信息确实就是你所发送的信号了”,这表明从客户端到服务端的通信是正常的。回传 SYN 则是为了建立并确认从服务端到客户端的通信。

如果客户端第一次发送建立连接的SYN,服务端没有收到怎么办?

客户端迟迟收不到服务端的 SYN-ACK 报文(第二次握手),就会触发超时重传机制,重传 SYN 报文,而且重传的 SYN 报文的序列号都是一样的。

当客户端超时重传 3 次 SYN 报文后,由于 tcp_syn_retries 为 3(可设置),已达到最大重传次数,于是再等待一段时间(时间为上一次超时时间的 2 倍),如果还没收到服务端的第二次握手,客户端就会断开连接。

断开连接——四次挥手:

    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    打赏作者

    Phoenixxxxxxxxxxxxx

    感谢支持!

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

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

    打赏作者

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

    抵扣说明:

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

    余额充值