计算机网络基础知识


计算机网络基础知识

  • OSI七层模型

    • 物理层:定义物理设备的标准,将比特流转换为电流强弱传输(数模转换与模数转换)
    • 数据链路层:
      • 网络实体间数据链路通路建立、维持和释放管理(点对点信道和广播信道)
      • 物理层在传输介质上传输会存在误差,因此数据链路层也会在物理层之上采用差错检测、流量控制等
    • 网络层:物理寻址,找最佳路径(为数据包选路由器等)
    • 传输层:需要切分数据包,拆分后要分配序列号,接收后会排序(三次握手四次挥手)
    • 会话层:不同机器间建立会话和管理会话(自动收发包和寻址)
    • 表示层:解决不同系统间通信语法问题(规定发送接收必须固定消息头和消息体等)
    • 应用层:发送进程
  • 常用协议划分

    • http:应用层协议
    • tcp:传输层协议
    • rpc:跨越传输层和应用层
  • 三次握手(全双工)

    • 握手步骤:
      • 第一次握手:起初两端都处于CLOSED关闭状态,Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN-SENT状态,等待Server确认;
      • 第二次握手:Server收到数据包后由标志位SYN=1得知Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN-RCVD状态,此时操作系统为该TCP连接分配TCP缓存和变量;
      • 第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并且此时操作系统为该TCP连接分配TCP缓存和变量,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client和Server就可以开始传输数据。
    • 状态变化:A、B关闭状态CLOSED——B收听状态LISTEN——A同步已发送状态SYN-SENT——B同步收到状态SYN-RCVD——A、B连接已建立状态ESTABLISHED
    • 作用:
      • 建立全双工的链接
      • 初始化SYN值,即序列号
    • 问题:
      1. 连接超时(等待时长:1+2+4+8+16+32=63秒)
      2. 遭SYN洪水攻击
      3. 建立连接后,client出问题?发送保活探测报文,连接次数超时处理。
  • 四次挥手

    • 挥手步骤
      • A的应用进程先向其TCP发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1(终止等待1)状态,等待B的确认。
      • B收到连接释放报文段后即发出确认报文段,(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,A到B的连接释放。
      • A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
      • B没有要向A发出的数据,B发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),B进入LAST-ACK(最后确认)状态,等待A的确认。
      • A收到B的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态。
    • 状态变化:A、B连接建立状态ESTABLISHED——A终止等待1状态FIN-WAIT-1——B关闭等待状态CLOSE-WAIT——A终止等待2状态FIN-WAIT-2——B最后确认状态LAST-ACK——A时间等待状态TIME-WAIT——B、A关闭状态CLOSED
    • 问题:
      • 为什么有time_wait状态:1.留足够时间让对方收到ACK包。2.避免新旧链接混淆
      • 为什么需要四次挥手:全双工,发送和接收方都需要FIN报文和ACK报文
      • 服务器出现大量close_wait:
        1. 对方关闭连接,我方忙于读写操作,没及时关闭
        2. 线程池配置不合理。
        3. close_wait与文件句柄一一对应,如果太多也会出现 too many open files
  • socket:socket是对tcp/ip协议的抽象,是操作系统对外开放的接口。是进程与tcp、udp等协议的中介。

参考资料:

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


文章作者: zhaolin.long
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zhaolin.long !
 上一篇
jvm面试知识结构 jvm面试知识结构
jvm面试知识结构 类加载顺序 加载:将java的class文件加载,用ClassLoader.loadClass加载。 链接 验证:验证字节码是否符合jvm规范。 准备: static final:会将值直接赋予 非static fina
2020-06-15
下一篇 
Java高级架构师技术图谱 Java高级架构师技术图谱
Java高级架构师技术图谱​ 架构师筑基阶段​ JVM​ 运行时数据区域​ 程序计数器PCR​ 1.较小的内存​
2020-06-15
  目录