计算机网络必备知识

计算机网络体系基础概念

分层模型/OSI模型

  • 物理层——双绞线,光纤,调制解调器(模拟信号与数字信号的转换
  • 数据链路层——数据校验,定义了网络传输的基本单位——帧,ARP协议
  • 网络层——定义网络,实现两台机器点到点的传输(IP数据报),IP协议,ICMP
  • 传输层——两台主机中的进程之间传输数据(端到端),TCP,UDP,(报文段,用户数据报)
  • 应用层——为客户提供各种应用服务,ftp,ssh

路由器:连接两个不同网段的桥梁

网络应用程序设计模式

  • C/S模式:Client/Server模式,需要在通讯两端各自部署客户机和服务器来完成数据通信;
    优点:可以安装在本地,可以缓存数据,协议选择灵活
    缺点:客户端也需要开发,开发周期长
  • B/S模式:Browser/Server模式,只需在一端部署服务器,另一台都是客户端即可完成传输
    优点:只需要开发服务端即可,剩下的都是通过浏览器使用http协议访问
    缺点:协议选择受限,不能缓存数据

MTU:Maximum Transmission Unit,最大传输单元。某一层上面所能通过的最大数据包大小,以字节为单位。

以太网帧格式
以太网帧格式

ARP协议:通过对方的IP地址获取MAC地址
具体实现:每个主机都有ARP缓存,存有本局域网上的各IP和MAC映射,如果缓存里面没有找到,那么
1、主机A的ARP进程在本局域网进行广播,“我的IP地址是:xx.xx.xx.xx,MAC地址是:xx:xx:xx:xx:xx:xx,我想知道IP地址为yy.yy.yy.yy的MAC地址”;
2、本局域网的所有主机都会收到ARP请求;
3、如果主机B的IP地址与ARP请求的IP地址一致,就收下这个请求,并向主机A发送响应,同时将自己的MAC地址写入到响应中,其它主机的IP地址与请求的IP不一致,则不做处理;
4、主机A收到主机B的响应后,就将主机B的IP和MAC映射写到了自己的ARP缓存中;同时主机B将主机A的IP和MAC映射写到了自己的缓存中;

IP数据报格式
IP数据报格式

  • 协议版本:ipv4,ipv6
  • 16位总长度:首部和数据部分总长度,65535
  • 8位生存时间TTL(Time To Live)(网络连接下一跳的次数):一跳就是网络中经过一个节点,超过这个节点,包就被丢弃了,防止网络拥塞
  • 8位协议:区分上层使用的是什么协议(TCP,UDP)
  • 16位首部校验:只校验IP数据首部,数据校验由更高层协议校验
  • 32位源IP地址:4字节IP地址,点分十进制最大255
  • 32位目的IP地址:4字节IP地址,点分十进制最大255

UDP数据报格式
面向无连接的不安全的不可靠数据报传输(数据报不能分开)
传输效率高,比如收发短信
UDP数据报格式
通过IP地址来确定网络环境中唯一的一台主机
主机上使用端口号来区分不同的应用程序, vim /etc/services查看已经绑定的端口号
IP+端口号唯一确定一台主机上的一个应用程序

TCP数据报文段格式
面向连接的安全的可靠的数据流传输协议
丢包重传、序号和确认序号、滑动窗口
TCP数据报文段格式

  • 32位序号:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,整个要传送的字节流的起始序号必须在连接建立时设置
  • 32位确认序号:是期望收到对方下一个报文段的第一个数据字节的序号。
    若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到
  • ACK:确认ACKnowledgment
  • SYN:在连接建立时用来同步序号,SYN=1而ACK=0表示这是一个连接请求报文段
  • FIN:用来释放一个连接
  • 16位窗口大小:主要进行流量控制,发送发和接收方速率不匹配时,需要设置,主要是指接收方告诉发送发我还有多少缓存。
    窗口字段指明了现在允许对方发送的数据量,窗口值动态变化着

三次握手和四次挥手
三次握手和四次挥手
mss 表示告诉对方我这边一次最多接收可以接收多少数据

注意:

  1. SYN和FIN本身也会占一位
  2. 三次握手和四次挥手的过程都是在内核实现的

TCP状态图
TCP状态图
TIME_WAIT出现在主动断开连接的一方。

socket_pair
客户端和服务端连接其实是一个连接对,创建socket相当于是创建了两个缓冲区:读缓冲区和写缓冲区。客户端的写缓冲区和服务端的读缓冲区是一对,客户端的读缓冲区和服务端的写缓冲区是一对。

半关闭状态
处于办关闭状态的时候,可以接受数据,但是不能发送数据,相当于把文件描述符的写缓冲区关闭了,半关闭一定是出现在主动关闭的一方。

滑动窗口
主要作用:进行流量控制
如果发送端发送的速度较快,接收端接收到数据后处理较慢,而接收端缓冲区的大小是固定的,就会导致缓冲区满而丢失数据。TCP协议通过“滑动窗口”机制解决这一问题。

在客户端给服务器发包的时候,不一定非要等到服务器返回响应包,由于客户端知道服务端的窗口大小,所以可以持续多次发送,当发送数据达到对方窗口大小了就不再发送,需要等对方进行处理,对方处理后就可以继续发送。

粘包
什么是粘包?
对方发送数据连续发了两次,然后读数据的时候第一次没有读完,剩余的数据在第二次读走了,这种情况就属于粘包。

解决方法:

  1. 报头加数据,在报头部分加要接收的数据长度,00100123456789,0010四个字节表示数据长度是10,要接收10个长度
  2. 添加结尾标志,但需一个一个判断是否是结束标志
  3. 数据包定长,发送方每次都发一定的长度

心跳包
心跳包用于检查与对方网络的连接是否正常。
发送心跳过程:
服务A给B发送心跳数据(定义好的数据串),服务B收到心跳数据后,给A回复相应的数据,此时A收到B的回复后认为连接正常。假如A连续发了多次后,仍然没有收到B的回复,则认为连接异常,需要重建连接(先close原来的连接,再重新connect)。
长连接:连接建立好之后,一直保持连接不关闭
短连接:连接使用完之后就立刻关闭

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值