网络知识点总结

网络知识点总结

  • 粘包拆包
  • NIO模型
    • 阻塞非阻塞
    • 同步异步
  • 网络5层的各层协议及设备
  • 物理层
  • 数据链路层:
  • 网络层:
    • 协议设备技术
    • ip数据报
    • 考点
      • 子网的相关计算
          • 子网掩码的相关计算
  • 传输层:
    • TCP报文段
    • 考点
      • tcp拥塞控制
      • tcp三次握手,四次挥手
        • 三次握手
        • 为何是三次握手?
        • 四次挥手
        • 为何四次
        • 客户端A为什么必须等待 2MSL 的时间?
        • 服务器出现大量CLOSE_WAIT的原因?
    • 全双工和单/双向通信
  • 应用层:
    • 考点
      • DNS解析

粘包拆包

Netty解决TCP粘包和拆包问题的四种方案

  • 原因
    操作系统在发送TCP数据的时候,底层会有一个缓冲区,例如1024个字节大小,如果一次请求发送的数据量比较小,没达到缓冲区大小,TCP则会将多个请求合并为同一个请求进行发送,这就形成了粘包问题;如果一次请求发送的数据量比较大,超过了缓冲区大小,TCP就会将其拆分为多次发送,这就是拆包,也就是将一个大的包拆分为多个小包进行发送

  • 四种解决方案

  1. 客户端在发送数据包的时候,每个包都固定长度,比如1024个字节大小,如果客户端发送的数据长度不足1024个字节,则通过补充空格的方式补全到指定长度;
  2. 客户端在每个包的末尾使用固定的分隔符,例如\r\n,如果一个包被拆分了,则等待下一个包发送过来之后找到其中的\r\n,然后对其拆分后的头部部分与前一个包的剩余部分进行合并,这样就得到了一个完整的包;
  3. 将消息分为头部和消息体,在头部中保存有当前整个消息的长度,只有在读取到足够长度的消息之后才算是读到了一个完整的消息;
  4. 通过自定义协议进行粘包和拆包的处理。

NIO模型

也即netty的原理

netty底层是一个单线程的nio(reactor响应式)模型,他用一个线程selector来处理所有的连接【牺牲一个线程(selector线程是阻塞的)来实现整个框架的非阻塞】,对于各个频道的处理(读写)交给线程池来做。

传统bio在进行socket.accept()、socket.read()、socket.write()三个主要函数时都是同步阻塞的,nio的Selector也是阻塞的java 同步非阻塞的nio中包含阻塞的selector的理解

阻塞非阻塞

彻底理解同步,异步,阻塞,非阻塞

IO分两阶段(一旦拿到数据后就变成了数据操作,不再是IO):
1.数据准备阶段
2.内核空间复制数据到用户进程缓冲区(用户空间)阶段

线程要取数据,首先肯定要进行数据准备,阻塞就在这里开始等待。同步属于线程调用,A线程把数据发过来,B线程如果需要等待数据从内核考到用户空间,这是同步,如果不需等待,而是操作系统拷完后通知B线程直接到用户空间取数据这就是异步

线程内部调用而言:
阻塞调用:该调用如果未得到结果前就会阻塞线程
非阻塞调用:即使未得到结果,也不会阻塞线程

同步异步

针对于线程间调用而言
同步:需要等待结果的返回
异步:结果通过事件,回调等机制通知调用者结果

网络5层的各层协议及设备

物理层

  • 硬件:光纤,短波【发射/接受天线】,微波【传送塔/卫星】
  • 技术:复用技术【主要是信道复用】—波分,频分,码分复用(应用最广)…
    网络知识点总结_第1张图片
    码分复用技术原理:

假如共享信道传输的码片序列是:(-1,1,-3,1,-1,-3,1,1),A1,B1,C1各自唯一的码片序列是(-1-1-1+1+1-1+1+1),(+1+1-1+1+1-1-1-1),(-1+1-1-1+1-1+1+1),那么根据内积和=0公式可以判断出哪些站发送了数据,哪些站没有发,发的数据是1还是0

数据链路层:

  • 功能:封装原始比特流成帧,物理层传输时发生的差错检验(CRC检验技术)…
  • 技术:
    CRC差错检测技术:只能做到无差错接受。 要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制(这是tcp完成的)
  • 协议:
    • ppp协议(点对点协议–差错检测,封装成帧)
    • CSMA/CD协议【载波监听多点接入/碰撞检测—以太网中使用cd协议传数据,某个站在发送数据时检测到碰撞(在共享信道上,自己发送的数据和其它站的数据发生冲突),执行退避算法时选择了随机数r=100。这个站要等待一段时间时间才能再次发送数据(每个多久发一次数据)】
  • 设备:
    • 网卡:
      (mac地址是网卡的唯一标识,存于网卡的ROM上,它属于链路层):一是将电脑的数据封装为帧,并通过网线或无线网将数据送到网络上去;二是接受网络上传来的帧,将帧重新组成数据,使用中断来通知该计算机并交付给网络层
    • 交换机
      工作在数据链路层,用来连接不同网段,通过MAC地址转发数据。(属于点对点通信,它相当于多端口的网桥,即交换机的前身是网桥)【数据链路层地址就是mac地址,网桥和集线器的区别在于,网桥会过滤mac,只有目的mac地址匹配的数据才会发送到出口(才会转发,否则丢弃)桥-----连接此岸与彼岸】

链路层解决三个问题:

  1. 这个包是发给谁的?谁应该接收?
    网卡来干这件事:目标地址和网卡自身地址比对,一致则接受mac帧,并取出ip数据报,通过I/O总线,使用中断来通知该计算机并交付给协议栈中的网络层
  2. 大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则?
    以太网采用的是随机接入协议:不管三七二十一,有事儿先出门,发现特堵,就回去。错过高峰再出去
  3. 如果发送的时候出现了错误,怎么办?
    CRC循环冗余检测
    网络知识点总结_第2张图片
    帧或者叫mac帧

网络层:

协议设备技术

  • 协议
    ICMP(ping ip的,单播),IGMP(广播),ARP(将ip地址转物理地址–常用),RARP(物理地址转ip地址–不常用),IP协议,DNS协议
  • 设备
    路由器:能够理解不同的协议(以太网协议,TCP/IP协议…)【主机的网关就是对应的路由器的接口(可能有A,B,C多个接口)的ip地址】
    路由:将数据从一个地方转到另一个地方
    路由器的工作原理:路由表
    路由表的形成:直连和非直连(静态路由:手动添加;默认路由)
    lan是局域网(Local Area Network)的缩写
    网络知识点总结_第3张图片

网络知识点总结_第4张图片
网络知识点总结_第5张图片
网络知识点总结_第6张图片

ip数据报

网络知识点总结_第7张图片

考点

网络地址=ip地址&子网掩码

公式的原因:以前网络分A类,B类,C类,现在更细分A类(子网1,子网2…),B类(子网1,子网2…),A类下子网1和子网2不是同一网段

子网的相关计算

127划分A,B网络
192划分B,C网络
ARP协议—网络层的协议:将ip地址转物理地址

假设用斜杠记法的IP地址表示如下: 200.15.13.12/22,求子网掩码。

/22表示子网掩码有22位二进制数1,即:
11111111.11111111.11111100.00000000
转换成十进制就是255.255.252.0
即子网掩码为:255.255.252.0

子网掩码:指出subnet-id与host-id的分界线【全1的部分是网络号+子网号,全0的部分是主机号】
网络知识点总结_第8张图片
网络知识点总结_第9张图片

子网掩码的相关计算

网络知识点总结_第10张图片
例题1:
将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台,求子网掩码:
(1) 700=1010111100
(2)该二进制为十位数,N = 10
(3)将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255
(5)然后再从后向前将后10位置0,即为: 11111111.11111111.11111100.00000000
(6)即子网掩码为: 255.255.252.0。

例题2:
将B类IP地址168.195.0.0划分成27个子网:
(1)27=11011
(2)该二进制为五位数,N = 5
(3)将B类地址的子网掩码255.255.0.0的主机地址前5位置1(B类地址的主机位包括后两个字节,所以这里要把第三个字节的前5位置1),得到 255.255.248.0
(4)即子网掩码为: 255.255.248.0

例题3:
Ip:211.68.114.*,每个子网分30台主机,求子网掩码
网络知识点总结_第11张图片
也可以这样算:30=11110,n=5,则将255.255.255.255的二进制,将后5为全部置0,即11111111.11111111.11111111.11100000
即得到255.255.255.224

211.68.114.1/25表示前25位为是网络号,那么7位是主机号,再进行子网划分,就可能是前27位是主机号,后5位是主机号。子网掩码:27位1(网络号)+2位1(子网号)+3位0(主机号)

传输层:

  • TCP,UDP

TCP报文段

网络知识点总结_第12张图片

考点

tcp拥塞控制

网络知识点总结_第13张图片
link
网络知识点总结_第14张图片

有了滑动窗口,为什么还要有拥塞窗口:origin link
假如没有拥塞窗口,那么发方会按照收方的要求发数据,但如果遇到网络拥塞,(即当前网络只支持1M/s)你一次传了3M的数据,需要3秒,必然会进行tcp的超时重传,那么一份数据就要被传几次,性能太低,所以引入了拥塞窗口,由拥塞窗口和收方窗口的大小二者共同决定此次发方要发送的数据的大小

接收到连续的三个重复冗余ACK(其实是收到4个同样的ACK,第一个是正常的,后三个才是冗余的),发送端便知晓哪个报文段在传输过程中丢失了,于是重发该报文段,不需要等待超时重传定时器溢出,大大提高了效率。这便是快速重传机制

tcp三次握手,四次挥手

三次握手

状态:【关闭状态----》同步已收到-----》同步已确认------》连接建立】

SYN同步位
ACK确认位
seq序列号
ack确认号,它是对客户端发过来的序列号的回应

网络知识点总结_第15张图片

服务端从关闭状态被动打开到监听状态,客户端启动并发送建立连接的请求,从关闭状态到同步已发送状态,服务端收到并返回确认进入同步收到状态,客户端给出确认的确认。双方进入连接建立状态。

为何是三次握手?

网络知识点总结_第16张图片

四次挥手

状态:【连接建立状态—》终止等待-1状态—》关闭等待状态—》终止等待-2状态----》时间等待状态(time-wait)—》最后确认状态----》关闭状态】

终止(位)FIN
网络知识点总结_第17张图片

客户端发起断开连接的请求,从连接建立状态到终止等待1状态,服务端收到后给出确认,进入关闭等待状态,客户端收到服务端的确认后进入终止等待2状态。服务端发起断开连接的请求进入最后确认状态,客户端收到后进入时间等待状态并给出确认(经过2msl时间后释放掉连接),服务端收到后释放掉连接,进入关闭状态

  1. 用来释放一个连接。FIN = 1
    表明此报文段的发送端的数据已发送完毕,并要求释放运输连接

  2. • B 若同意,则发出确认。
    其 ACK=1,确认号ack =u+1,而这个报文段自己的序号 seq=v。 • TCP 服务器进程通知高层应用进程。
    • 从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状
    态。

  3. (1)若 B 已经没有要向 A 发送的数据,其应用进程就通知
    TCP 释放连接。
    其报文段首部FIN=1,ACK=1,序号seq=w, ack=u+1。

  4. A收到连接释放报文段后,必须发出确认。
    其报文段首部ACK=1,序号seq= u+1, ack= w+1
    经过时间 2MSL(最长报文段寿命) 连接真正释放掉

为何四次

因为是全双工的,发送方和接收方都需要FIN报文和ACK报文,也就是说,这传递的过程,发送方和接收方都得各自发送两次,加在一起就是四次了。

客户端A为什么必须等待 2MSL 的时间?

  • 保证 A 发送的最后一个 ACK 报文段能够到达 B,使得
    B正常进入关闭状态。
  • 防止 “已失效的连接请求报文段”出现在新连接中。

服务器出现大量CLOSE_WAIT的原因?

当客户端发送过来一个FIN报文之后,服务端没有发送ACK,或者来确认FIN报文,说白了,就是对方关闭socket连接,我方(服务器)忙于读或写,没有及时关闭连接。

一般这种情况都是程序中有bug,我们需要检查释放资源的代码

全双工和单/双向通信

TCP和UDP都是全双工,在发送信息的同时,可以接收信息。socket是基于TCP和UDP的所以也是全双工的。

http协议是单向通信的(单向数据流),websocket协议是双向通信的

应用层:

  • HTTP,SMTP,FTP…
  • 网关
    网关的主要功能:把一种协议变成另一种协议,把一种数据格式变成另一种数据格式,把一种速率变成另一种速率,以求两者的统一。

考点

DNS解析

DNS:
domain name system分布式域名系统,完成主机名和IP地址的映射。一个服务器所负责管辖的(或有权限的)范围叫做(zone)。

  • 本地域名服务器(也称为默认域名服务器。)
    当一个主机发出 DNS 查询请求时,这个查询
    请求报文就发送给本地域名服务器。(//路由器)

  • 根域名服务器
    知道所有的顶级域名服务器的域名和 IP 地址。
    一般情况下,并不负责把待查询域名直接转换
    成 IP 地址。当收到 DNS 查询请求时,就给出
    相应的回答,内容是下一步应当找的顶级域名服
    务器的 IP 地址(//服务器所在的城市/国家)

  • 顶级域名服务器
    负责管理在该顶级域名服务器注册的所有二域名。
    当收到 DNS 查询请求时,就给出相应的回答。
    可能是最后的结果,也可能是下一步应当找的
    域名服务器的 IP 地址。(//可理解成全球网络)

  • 权限域名服务器
    负责一个区的域名服务器。
    将其辖区内的主机的域名转换成 IP 地址,或
    者告诉发出查询请求的 DNS 客户,下一步应当
    找哪一个域名服务器。

服务器收到DNS请求后,如不能解答,则以 DNS 客户的身份代
替发来请求的客户进行后续查询。(递归查询
网络知识点总结_第18张图片
服务器收到DNS请求后,如不能解答,则告诉客户下一步应当查询的域
名服务器,让发来请求的客户自己完成后续查询I(迭代查询
网络知识点总结_第19张图片

你可能感兴趣的:(OS+NET+Design,Pattern专题)