计算机网络 - 万字长文

计算机网络

二、计算机网络

2.1 七层模型表格

网络设计者以分层的方式组织协议,每一层都是向上服务的,每个分层中所有的协议称为协议栈

OSI 功能 协议
应用层 文件传输、电子邮件、文件服务、虚拟终端 TFTP,HTTP,SNMP,FTP,STMP,DNS,Telnet
表示层 数据格式化、代码转换、数据加密-解决不同主机的通信的数据格式问题
会话层 解除或建立与其它接点的联系-建立和管理应用程序之间的通信
传输层 提供端对端的接口;TCP、UDP-拆包组包TCP,保证数据的完整性,以及传输过程中可能发生的危险UDP TCP、UDP
网络层 为数据包选择路由;IP、ICMP、RIP、OSPF-路由解析和地址解析选择适当的网络节点进行路由 IP
数据链路层 传输有地址的帧 以太网
物理层 定义通信的物理设备规格,网络接口类型,光纤接口类型 实际物理传输介质

2.2 通俗讲解七层模型

  • 物理层:两台计算机想要连接,要做的第一件事就是把这台计算机与另外的其它计算机连接起来,比如通过光纤、电缆等介质。通过高低电频来传送0、1的信号

  • 数据链路层:这样一大堆01的信号,**鬼都看不懂,所以有了一套标识**以太网

    • 以太网:一组电信号构成一个数据包,我们把这个数据包称之为帧。每一个桢由标头(Head)和数据(Data)两部分组成,标头部分主要是一些说明数据,例如发送者,接收者等信息。而数据部分是这个数据包具体的,想给接收者的内容
    • MAC:那么把一台计算的数据通过物理层和链路层发送给另一台计算机,究竟是发给谁的,计算机之前如何区分MAC出现了
      • 连入网络的每一个计算机都会有网卡接口,每一个网卡都会有一个唯一的地址,这个地址就叫做 MAC 地址
    • 广播:新的问题出现了,A计算机虽然知道了B的MAC地址,但是a却不知道计算机B分布在那边路线上,有了广播的出现
      • 广播就是A计算机向所有子网中的计算机发送数据包,计算机收到包之后会解析MAC地址,如果与自己的相同,接收,不相同就不接收,就像大街上的广播呼叫某个人一样
    • ARP:新的问题又出现了,A计算机怎么知道B的mac地址的ARP协议就出现了
      • 判断完两台主机处于同一个子网之中,通过ARP计算出另一个计算机的MAC地址
  • 网络层

    • 子网:所处的网络是由无数个子网组成的,广播的时候只有同一个子网里面的计算机能收到,如果所有的计算机都能收到那还得了,所以有了子网
    • IP协议:问题又来了,如何区分MAC地址是属于一个子网的,假如是同一个子网,那么我们就以广播的形式转发出去,如果不是,那就把数据发给网关,让网关转发,于是有了IP
      • IP 地址由 32 位的二进制数组成,0.0.0.0~255.255.255.255,IP地址被分为两部分,前面一部分代表网络部分,后面一部分代表主机部分。并且网络部分和主机部分所占用的二进制位数是不固定的,如果两台计算机的网络部分是一样的,那么就是处于一个子网中,那么网络部分只知道是前部分,具体是占几位,不知道啊,所以子网掩码出现了
        • 子网掩码与IP地址一样也是32位进制数,不过网络部分都是1,主机部分规定全部为0
        • 计算方法:例如,192.168.43.1和192.168.43.2的子码掩码都为255.255.255.0,把IP与子码掩码相与,可以得到他们都为192.168.43.0,进而他们处于同一个子网中
          • ARP协议也是通过广播的形式给同一个子网中的每台电脑发送一个数据包,如果接收包的计算机发现MAC与自己的相同,就把自己的MAC回给对方,否则就抛弃
    • DNS:如何知道对方的IP地址呢,当然是计算机的操作者来输入,但是我们输入的是域名,会有DNS服务器
  • 传输层

    • 经过物理层、数据链路层以及以太网的互相帮助,已经把数据成功从计算机A送到计算机B了,可是计算机B里面含有各种各样的程序,计算机如何知道这些数据是给谁的?端口就出现了
    • 也就是说,传输层的功能就是建立端口到端口的通信,相比网络层是建立主机到主机的通信,也就是说有了IP和端口就可以准确通信
    • 有人说输入IP地址,并没有确定端口啊,其实某些传输协议已经默认端口了,比如http的传输默认端口是80,这些端口信息也包含在数据包里的
    • 传输层最常见的两大协议是TCP、UDP协议
  • 应用层

    • 这一层最接近用户了,虽然接收到了传输传来的数据,可是这些数据五花八门:html,MP4 等
    • 所以要指定这些数据的格式规则,收到后才能解读渲染

    2.3 TCP与UDP对比

对比项目 TCP UDP
是否面向连接
是否可靠
是否有状态
传输效率 较慢 较快
传输形式 字节流 数据报文段
协议 HTTP、HTTPS、FTP、 SMTP、POP3/IMAP、Telnet HDCP、DNS、HTTP 3.0

2.4 TCP 三次握手

过程

在这里插入图片描述

  • 服务器新建套接字,绑定地址信息后开始监听,进入listen状态
  • 客户端新建套接字绑定地址信息后调用connect,发送连接请求SYN,进入SYN_SENT状态,等待服务器确认
  • 服务器监听到请求之后,将连接放入内核等待队列中,并向客户端发送SYN和确认报文段ACK,进入SYN_RECD状态
  • 客户端收到sYN+ACK报文段后向服务端发送确认报文段,并进入established状态,开始读写数据
  • 服务端接收到客户端的确认报文,就进入established状态,进行读写数据
为什么握手是三次,而不是两次或者四次?
  • 两次不安全,四次没必要。tcp通信就是确保双方都具有数据收发的能力,得到ACK响应则认为对方具有数据收发的能力,因此双方都要发送SYN确保对方具有通信能力
  • 第一次握手是客户端发送SYN,服务端接收-服务端得出客户端的发送能力和服务端的接收能力都正常
  • 第二次握手是服务端发送SYN+ACK,客户端接收-客户端得出客户端接收能力正常,服务端发送能力正常,但是服务端还不知道客户端能否接收正常
  • 第三次握手是客户端发送ACK,服务器接收,-服务端得出客户端的收发

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 00:20:04       50 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 00:20:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 00:20:04       43 阅读
  4. Python语言-面向对象

    2024-07-10 00:20:04       54 阅读

热门阅读

  1. 架构设计(1)分布式架构

    2024-07-10 00:20:04       16 阅读
  2. 总账清账(不包含客户/供应商清账)

    2024-07-10 00:20:04       15 阅读
  3. Vue3--Watch、Watcheffect、Computed的使用和区别

    2024-07-10 00:20:04       18 阅读
  4. react apollo hooks

    2024-07-10 00:20:04       18 阅读
  5. Python面试题:如何在 Python 中实现单例模式?

    2024-07-10 00:20:04       23 阅读
  6. react动态渲染列表与函数式组件

    2024-07-10 00:20:04       16 阅读
  7. 垃圾回收器详解

    2024-07-10 00:20:04       17 阅读
  8. homebrew常用命令

    2024-07-10 00:20:04       19 阅读
  9. JVM详解

    JVM详解

    2024-07-10 00:20:04      18 阅读