OSI七层网络模型

ISO组织定义了七层网络模型

应用层 提供应用之间的通信
表示层 处理数据格式和数据加密
会话层 建立、维护和管理会话
传输层 建立主机端到端的连接
网络层 寻址和路由选择
数据链路层 介质传输、链路管理
物理层 比特流传输

物理层

不管通过什么介质,将信息的二进制传递到另外一个节点,这个过程就是物理层。

数据链路层

将物理层传过来的二进制信号内容进行翻译,翻译的结果被称为数据帧。

物理层被认为是不可靠的(有可能接触不良,有可能电测干扰,有可能闪电风暴),数据链路层通过CRC循环冗余校验生成校验码,放在数据包的后面用来保证数据正确,如果错误则丢弃。

网络层

功能:路由和寻址

  • 关键内容
    • protocol
      • 17:UDP
      • 6:TCP
    • 源与目的ip地址
      • mac地址可以被看作身份证号,ip地址就是当前所在位置。快递小哥通过你的位置找到你,通过你的身份证确认你

传输层

端到端连接

  • 计算机确定这个数据是给自己的了后,要判断这个数据是什么业务
  • 端口号
    • 范围时1~65535
    • 默认情况下,所有端口都是关闭的,当有程序需要网络通信的时候,就会选择一个端口占用
    • 正常情况下,电脑上大多数软件端口号是随机的,因为不需要被访问,只需要回复
    • 有些服务是需要被访问的,所以这些访问需要占据固定的众所周知的端口号
      • 在电脑上的c:\windows\system32\dreivers\etc\service文件中保存着windows主动访问其他主机时候默认使用的端口号
      • http 80/tcp
      • ftp 20/tcp 21/tcp
      • mstsc 3389/tcp 3389/udp
      • dns 54/tcp 53/udp
      • telnet 23/tcp
      • ssh 22/tcp
    • 在cmd中输入netstat -ano可以查看ip地址、端口号、进程号对应的关系

应用层

产生用户数据,为用户提供交互接口。

IP地址

IP地址是32位二进制,方便阅读使用点分十进制。

  • IP地址网络位
    • 网络位相同表示在同一局域网中
    • 局域网有多台设备组成,可以不受控制访问
    • 正常情况下,一个公司的部门之间相互隔离受控
  • IP地址主机位
    • 网络位相同(在同一局域网下),主机位不能重复
    • 主机位是为了帮助同一局域网中设备之间进行更高层的通信封装使用
  • 网络类型
    • A:1.0.0.0 ~ 126.255.255.255 /8
      • 127开头作为本地测试地址
      • 由于网络位8位,且主机位全0全1的主机号不可分配,所以最大主机数2-2
    • B:128.0.0.0 ~ 191.255.255.255 /16
      • 网络位16位,主机位16位,最大主机数2-2
    • C:192.0.0.0 ~ 223.255.255.255 /24
      • 网络位24位,主机位8位,最大主机数2-2
    • D类组播没有网络位概念
    • E用不到
  • 子网掩码
    • 用于区分网络位和主机位
    • 32位二进制,可以和IP地址一一对应。规定子网掩码为1,对应IP地址是网络位;子网掩码为0,对应IP地址为主机位。

私有IP地址

私有IP地址空间 地址范围
10.0.0.0 /8 10.0.0.0 ~ 10.255.255.255
172.16.0.0 /12 172.16.0.0 ~ 172.31.255.255
192.168.0.0 /16 192.168.0.0 ~ 192.168.255.255

私有IP地址空间中的地址不需要申请,随意使用,但是不能在互联网上与合法地址通信

而我们明明用的私有IP地址,也可以上网,因为我们需要先把自己的上网请求提交给网络中的网关
(就是你家的出口路由器),再由网关代替我们去获取内容转交给我们的电脑手机,而网关往往能从
运营商那里得到一个合法的公有IP地址

TCP/UDP

TCP:传输控制协议(Transmission Control Protocol)

  • 传输层用来保证数据传输的可靠性,携带基本的端口号。
  • 可靠的协议,可以知道数据的丢失和差错信息

UDP:用户数据报协议(User Datagram Protocol)

  • 只携带基本的端口号
  • 尽力而为的协议,无法知道数据的接收状况。

    TCP有限状态机

    ![Q$05$ZVRNO01G5DJ4IL9@5.png
    粗实线箭头表示对客户进程的正常变迁
    粗虚线箭头表示对服务器进程的正常变迁
    细实线箭头表示异常变迁

  • CLOSED:表示初始状态

  • LISTEN:表示服务端处于监听状态,可以接收连接
  • SYN_SENT:服务端监听后,客户端发送SYN报文请求连接,此时进入SYN_SENT状态,等待服务端确认。
  • SYN_RCVD:服务端接收到SYN报文后进入SYN_RCVD状态,回复ACK+SYN。
  • ESTABLISHED:表示连接已经建立。客户端收到ACK+SYN时,会进入ESTABLISHED状态,回复服务端ACK。服务端收到ACK后也进入ESTABLISHED状态。
  • FIN_WAIT1:已经建立连接后,其中一方请求终止连接,等待对方的FIN报文
  • FIN_WAIT2:这个状态下的socket,表示半连接,即有一方要求关闭连接,但另外还告诉对方:暂时还有一些数据需要传给你,请稍后再关闭连接
  • TIME_WAIT:表示收到了对方的FIN报文,并发送出了ACK报文,等待2MSL后即可回到CLOSED可用状态了。由FIN_WAIT_1进入该状态:同时收到带FIN标志和ACK标志的报文;由FIN_WAIT_2进入该状态:收到FIN报文,此时发送ACK报文
  • CLOSING:双方同时在关闭一个socket,就出现了双方同时发送FIN报文的情况,就会出现CLOSING状态,表示双方都正在关闭socket
  • CLOSE_WAIT:表示在等待关闭(即这个状态下是在考虑你是否还有数据发送给对方)
  • LAST_ACK:它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文
  • CLOSED:当收到对方的ACK报文后,也即进入到CLOSED状态

T}_5ZWNEF0BYY``~~FQ0$_9.png
男孩:分手吧(FIN_WAIT_1)
女孩:考虑一下有没有话要说(CLOSE_WAIT),没话说就分手吧(发ACK),等我收拾一下东西
男孩:等女孩收拾东西(FIN_WAIT_2)
女孩:我收拾好了,分手吧(LAST_ACK)
男孩:OK,分手(TIME_WAIT)。
等待2MSL:1. 确保女孩听到自己的回复 2. 确保不会分手后骚扰女孩(1. 万一服务器没收到ACK就无法关闭 2. 防止网络中滞留的报文去骚扰服务器)

数据封装

AJT~(UOHI{LBAW_P5J2IC(X.png
目前需要知道的基本概念:

  • IP地址用于标识网络中的位置,相当于地址,如现实中的 xx 省 xx 市 xx 区 xx路 xx号
  • MAC地址是每个网络设备唯一的ID,相当于身份证号
  • 如果想要发送数据,必须(暂且认为必须)同时拥有IP和MAC地址