计算机网络总复习

网络

重点讲解应用层和网络层(其余较底层,只做简单了解)
  • 网络基础
  • 应用层
  • 传输层
  • 网络层
  • 数据链路层
    在这里插入图片描述
    什么是客户端,服务器?
    客户端:主动发起请求的一方。
    服务器:被动接收请求的一方。

封装:上层协议将数据交给下层协议,打上包装
分用:下层协议将数据部分解析出来,交给上层协议

一般而言

  • 对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
  • 对于一台路由器, 它实现了从网络层到物理层;
  • 对于一台交换机, 它实现了从数据链路层到物理层;
  • 对于集线器, 它只实现了物理层;
网络中的地址管理
认识IP地址
  • Ip地址是IP协议中,用来标识网络中不同主机的地址;
认识MAC地址
  • MAC地址用来识别数据链路层中相连的节点;
  • 长度为48位,及6个字节, 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19);
  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可 能会冲突; 也有些网卡支持用户配置mac地址).

一、应用层

应用层和应用程序直接相关。这是和程序员打交道最多的地方。
最重要的是HTTP协议(报文格式、请求/响应、)

1. 自定制协议?

1.约定好客户端 请求(Request) 包含什么信息,服务器 响应(Response) 就包含什么信息。
2.约定好数据按照什么格式来组织,本质上互联网传输的都是(二进制)字符串(序列化/反序列化)。
序列化:将对象数组变成字符串。(自己约定格式)
反序列化:将字符串解析回对象。

2. HTTP /HTTPS (当前使用最广泛的应用层协议)超文本传输协议

在这里插入图片描述
域名和IP地址本质上都是一样的。都是表示你要访问的那个服务器。
域名转换为IP地址的过程称为DNS解析。
当DNS服务器解析失败,这个时候网页就会打不开,此时换一个DNS解析器就OK。

3. 认识URL

平时我们俗称的“网址”其实就是说的URL。

4. HTTP协议格式(行文本格式) 重要!!
请求格式:
  1. 首行: [方法] + [url] + [版本] 以空格分隔
    方法(get/post/HEAD/PUT/DELETE)
    URL
    版本号(HTTP/1.1)
  2. Header(协议头): 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
    Content-length: 表示body部分的长度(字节)
    Content - Type:表示body部分的数据格式
    UA:表示操作系统发和浏览器的型号
    Referer:表示当前页面是从哪个页面跳转过来的
    Cookie:浏览器存储数据的一种重要方式。
  3. 空行
    Header的结束标记
  4. Body(正文): 空行后面的内容都是Body. Body允许为空字符串(). 如果Body存在, 则在Header中会有一个 Content-Length属性来标识Body的长度;
响应格式
  1. 首行
    版本号
    状态码:标识这次请求是否失败,以及原因
    状态码的描述信息
  2. 协议头(header)每一行是一个键值对
  3. 空行 header的结束标志
  4. 正文
    Content Type描述body部分的数据格式
    Content-Length 描述body的长度
5. HTTP方法(面试可能会问)
方法说明支持的HTTP协议版本
GET获取资源1.0、1.1
POST传输实体主体1.0 、1.1
PUT传输文件1.0、1.1
HEAD获得报文首部1.0、1.1
DELETE删除文件1.0、1.1
OPTIONS询问支持的方法1.1
TRACE追踪路径1.1
CONNECT要求用隧道协议连接代理1.1
LINK建立和资源之间的联系1.0
UNLINK断开连接关系1.0
面试题
GET和POST的区别?重要!!

get请求通常把数据通过query_String来传输。
get是最简单的一种请求方法,其主要功能是从服务器端,获取用户所需资源,并将其作为响应返回给客户端,(这些资源可以是HTML页面、图片、文档等内容中的任何一种),但需要注意的是,,get方法主要作用是获取服务器端资源信息,就如同数据库中查询操作一样,不会影响到资源自身的状态,例如,增删改都是不允许的,
POST请求通常把数据通过body来传输。
POST方法提供了比get方法更强大的功能,他除了从服务器获取资源外,同时还可以从服务器上传数据
向服务器上传数据,推荐使用post
原因如下:
1).采用get方法向服务器上传数据时,一般将数据添加到URL后面,并且两者用“?”连接,各个变量之间用“&”连接,有由于对URL的长度存在限制,因此采用这种方法能上传的数据量非常小,通常在1024B左右,而POST方法传递数据是通过HTTP请求的附件进行的,传送的数据量更大一些,一般默认为不受限制的。
2).由于get方法上传的数据添加在url中,因此被上传的数据被彻底暴露出来,本身存在安全隐患,尤其是用户需要向服务器提交一些敏感信息时。而post方法向服务器提交的内容在URL中并没有明文显示,对用户都是不可见的,所以,安全性更好一些。

6. HTTP的状态码

最常见的
2xx:都表示请求成功 。200 ok 请求成功
3xx:都表示重定向(呼叫转移 ,链接到别处)。eg: 302Found
4xx:都表示客户端错误(用户打开一个不存在的网址)。eg:404 Not Found(页面没找到) , 403 Forbidden(没有权限)
5xx:都表示服务器错误。` g:502 Bad Gateway , 504 Gateway Timeout

HTTP常见的Header
  • Content-Type:数据类型(text/html等)
  • Content-Length:body的长度
  • Host:客户端告知服务器,所请求的资源是在哪个主机的端口上。
  • User-Agent:声明用户的操作系统和浏览器的版本信息;
  • UA中主要包含两方面的信息:操作系统版本和浏览器版本。
  • referer:当前页面是从哪个页面跳转过来的。(广告系统:广告可以投到多个浏览器,打开广告referer可以定位到是从哪个浏览器链接过来)
  • location:搭配3xx状态码使用,告诉客户端接下来要去哪里访问;
  • Cookie:(存了一个字符串)用于在客户端存储少量信息,通常用户实现会话(session)的功能。里面的具体内容都是由对应产品的程序员自行决定的。但是里面包含了用户身份标识(session ID);
Cookie和Session之间的区别(面试可能会问)

1).Cookie机制采用的是在客户端保持状态的方案,即数据存放在客户的浏览器上;(客户端概念)
而Session机制采用的是在服务器端保持状态的方案,即数据放在服务器上。(服务器端概念)
2).cookie安全性不够,由于cookie信息存放在客户端,其他人可以很容易的得到存放在本地的cookie,并进行cookie欺骗;而session信息存放在服务器端,因此比较安全。
3).cookie性能高一些。由于session会在一定时间内保存在服务器上,因此,当访问量增多时,会降低服务器的性能。
4).单个cookie保存的数据不能超过4KB,很多浏览器都限制一个站点最多保存20个cookie;而session不存在此问题。
综上:一般情况下,将用户登录信息等重要信息存放在session中,其他需要保留的信息可以放在cookie中。

实现Session机制的过程中(程序员手动实现的),通常要把session id 放到cookie 中保存。


二、传输层

传输层 : 关注的是点对点之间的传输,只需要关注发送者和接收者就可以了,中间的传输过程,一概不管。(类似于黑盒测试)

1. 传输层包含两大协议(TCP和UDP):
1.1 UDP协议(全双工)
  • 无连接:知道对端的IP和端口号就直接进行传输,不需要进行连接。
  • 不可靠:没有确认机制,没有重传机制;如果因为网络故障,该段无法发送到对方,UDP层协议也不会给应用层返回任何错误的信息;
  • 面向数据报 :不能够灵活的控制读写数据的次数和数量;
    应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并;

端口号传输层的概念,作用就是区分这个数据要交给哪个程序来处理。

在这里插入图片描述
报文长度最多是64k,这是一个比较小的数字。这就限制了应用层协议的数据长度,一定那数据长度超出了UDP的表示范围,就会出现问题。
当应用数据较长并且想要用UDP,怎么办?
可以在应用层通过代码把应用数据拆分成多个数据包,再使用多个UDP数据包来分别发送。(代价是代码实现的成本大大提高了 )
源端口号:数据发送一方(可以是客户端或服务器端)将UDP数据包通过源端口发送出去。
目的端口号:而数据接收一方则通过目标端口接收数据
UDP端口号:因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。UDP端口号指定有两种方式:由管理机构指定端口和动态绑定的方式。

校验和:UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。这与TCP协议是不同的,后者要求必须具有校验值。

发送者在发送之前先计算了一个校验和checksum1,就把数据和checksum1一起发送到对端。
接收端也按照相同的规则计算校验和checksum2
对比checksum1和checksum2是否相同。

UDP中使用的是CRC循环冗余校验的方式

1.2 TCP协议(全双工)

在这里插入图片描述

TCP是一个比较复杂的协议。
  • 有链接(打电话,你尝试向对方发起一个链接,对方同意了,才能进行通信)
  • 可靠传输(打电话也是可靠传输,你给对方打电话,对方回应你了,这个时候你就知道你发送成功了,否则发送失败。发送者能感知到失败)
  • 面向字节流(文件操作就是面向字节流,可以读一个字节循环很多次,可以是两个字节再循环很多次,一次读多少数据非常灵活)
TCP最核心的机制
  • 可靠传输(主)
  • 尽量提高传输效率(次)

TCP的相关机制有很多,都是围绕以上两点展开…

首先围绕可靠性展开…

1)确认应答(可靠性的核心机制:ACK机制)

序号来说,按照每个字节的方式来编号的,
确认序号来说,表示当前序号之前的数据已经正确收到了,
接下来对端应该给我发送确认序号开始的数据

在这里插入图片描述

2). 超时重传(可靠性的核心机制)和确认应答相辅相成

对方没有确认应答(回应),此时隔一定时间之后,就需要重复传输这样的数据,重传是为了进一步的降低丢包的可能性,重传的时间采取的是一种比较悲观的态度,等待时间越来越长。
如果达到一定的次数之后对方还没有响应,就断开和对方通信的链接。

在这里插入图片描述

  • 主机A发送数据给B之后, 可能因为网络拥堵等原因, 数据无法到达主机B;
  • 如果主机A在一个特定时间间隔内没有收到B发来的确认应答, 就会进行重发;

但是, 主机A未收到B发来的确认应答, 也可能是因为ACK丢失了
在这里插入图片描述
因此主机B会收到很多重复数据. 那么TCP协议需要能够识别出那些包是重复的包, 并且把重复的丢弃掉. 这时候我们可以利用前面提到的序列号, 就可以很容易做到去重的效果.

3)连接管理(也是可靠性的一部分)

TCP是有连接的,那么现在我们管理一下连接~
建立连接的意义:

  • 双方先试探对方是否适合与我进行通信。
  • 双方要协商一些重要数据 序号从几开始。
三次握手(最常见面试题!!!)

在这里插入图片描述
三次握手中涉及到的状态变化:

  1. LISTEN状态(服务器):手机开机,并且信号良好。
  2. ESTABLISHED状态(客户端/服务器):电话拨通之后对方接听了。
四次挥手

在这里插入图片描述

4)滑动窗口(提高传输效率)

刚才我们讨论了确认应答策略, 对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段. 这样做有一个比较大的缺点, 就是性能较差. 尤其是数据往返的时间较长的时候.

5)快速重传
6) 流量控制

窗口越大,传输效率越高,但是窗口不能无限大,如果窗口太大,可能会影响到可靠性。提高效率的前提是要保证可靠性。

如果生产速度超过了消费速度,接受缓冲区的内容就会越积越多,达到一定程度缓冲区满了,此时再传输的数据就会丢包。

使用接收缓冲区空余空间大小,用这个指标衡量接收端的处理能力。
通过这个指标来控制发送端的窗口的大小(发送速度)

7) 拥塞控制

滑动窗口的大小不能无限大,即使接收端处理速度很快,也可能因为网络环境不佳导致数据丢包。

最终滑动窗口大小是由 流量控制 和 拥塞控制 共同决定的。
拥塞窗口:拥塞控制机制所建议的窗口大小,从一个比较小的数字开始,如果网络通畅,放大窗口大小,如果网络丢包,缩小窗口大小。

滑动窗口的最终值就是 流量控制的窗口和 拥塞窗口的较小值。
慢开始:刚开始传输的时候拥塞窗口设置的小一些。

8)延时应答

在可靠性的基础上,尽量提高窗口大小。
也适合滑动窗口以及流量控制相关。
流量控制中需要在ACK中反馈接受缓冲区生于空间的大小。
此时采用的策略是,收到数据不立刻返回ACK,而是等一会,等的过程中,程序就能多消费一些缓冲区中的数据,从而导致反馈窗口大小就要更大一些。

9)捎带应答

在延迟应答的基础上, 我们发现, 很多情况下, 客户端服务器在应用层也是 “一发一收” 的. 意味着客户端给服务器说 了 “How are you”, 服务器也会给客户端回一个 “Fine, thank you”; 那么这个时候ACK就可以搭顺风车, 和服务器回应的 “Fine, thank you” 一起回给客户端
在这里插入图片描述
在这里插入图片描述

TCP小结

为什么TCP这么复杂? 因为要保证可靠性, 同时又尽可能的提高性能.
可靠性

  • 校验和
  • 序列号(按序到达)
  • 确认应答
  • 超时重发
  • 连接管理
  • 流量控制
  • 拥塞控制

提高性能:

  • 滑动窗口
  • 快速重传
  • 延迟应答
  • 捎带应答
TCP和UDP的对比:

如果需要使用可靠传输,优先考虑TCP
如果传输的单个数据报比较大,还是考虑TCP
如果对可靠性要求没那么高,但是对性能要求很高,优先考虑UDP
如果需要实现广播,那么优先考虑UDP(UDP一个人发送,很多人接收,TCP则是一对一)

如何使用UDP实现可靠传输?

UDP自身是不可靠的,只能在应用层通过代码来手动实现。
引入序列号,保证数据顺序;
引入确认应答, 确保对端收到了数据;
引入超时重传, 如果隔一段时间没有应答, 就重发数据


三、网络层

ip地址

1. 地址管理,通过一个整数来表示一个地址。IP地址

IPV4 一个地址是一个32位整数
IP地址不够用的问题

   a) 动态分配(IP某个主机上网,就分配ip,不上网不分配)
   b) NAT机制,很多主机共用一个IP,NAT设备根据端口号来进一步区分数据交给哪个主机
   c)IPV6 彻底解决问题

使用点分十进制来表示IP地址
网段划分:IP地址前半部分划成网络号,后半部分划成主机号
网段划分是为了组建不同的局域网,路由器来连接不同的局域网,
同一个网络中的若干个设备,网络号相同,但是主机号不同
两个相同的局域网,网络号一定不相同
/24表示子网掩码
子网掩码也是一个32位的整数,前半部分都是1后半部分是0
子网掩码按位与上IP地址,就得到了网络号。

特殊的IP地址
  • 将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
  • 将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数 据包;
  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
私有IP地址和公有IP地址

如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都 可以,但是RFC
1918规定了用于组建局域网的私有IP地址

  • 10.*,前8位是网络号,共16,777,216个地址 172.16.到172.31.,
  • 前12位是网络号,共1,048,576个地址 192.168.*,
  • 前16位是网络号,共65,536个地址
    包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP)
2. 路由选择

在复杂的网络结构中, 找出一条通往终点的路线;
[唐僧问路例子1]
路由的过程, 就是这样一跳一跳(Hop by Hop) “问路” 的过程. 所谓 “一跳” 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间.
数据链路实现某一个区间(一跳)内的通信。
而IP实现直至最终目标地址的通信(点对点)。
IP数据包的传输过程也和问路一样。

  • 当IP数据包, 到达路由器时, 路由器会先查看目的IP;
  • 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
  • 依次反复, 一直到达目标IP地址;

那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表;

  • 路由表可以使用route命令查看 比特科技
  • 如果目的IP命中了路由表, 就直接转发即可;
  • 路由表中的后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其 它行都不匹配 时,就按缺省路由条目规定的接口发送到下一跳地址。

数据链路层

认识以太网
  • “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的 内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
  • 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;
  • 以太网是当前应用广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;
认识MAC地址
  • MAC地址用来识别数据链路层中相连的节点;
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可 能会冲突; 也有些网卡支持用户配置mac地址)
对比理解MAC地址和IP地址
  • IP地址描述的是路途总体的 起点 和 终点;
  • MAC地址描述的是路途上的每一个区间的起点和终点;
    ARP协议:IP地址->MAC地址之间的转换
认识MTU(了解)

MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.

  • 以太网帧中的数据长度规定小46字节,大1500字节,ARP数据包的长度不够46字节,要在后面补填充 位;
  • 最大值1500称为以太网的大传输单元(MTU),不同的网络类型有不同的MTU;
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分 片(fragmentation);
  • 不同的数据链路层标准的MTU是不同的;
MTU对IP协议的影响
  • 由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包
    将较大的IP包分成多个小包, 并给每个小包打上标签;
  • 每个小包IP协议头的 16位标识(id) 都是相同的; 每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是 后一个小包, 是的话置为1, 否则置为0); 到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层; 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是IP层不会负责重新传输数据
MTU对UDP协议的影响
  • 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报.
  • 这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在 网络层被分片, 整个数据被丢失的概率就大大增加了.
MTU对TCP的影响
  • TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的大消息长度, 称为MSS(Max Segment Size);
  • TCP在建立连接的过程中, 通信双方会进行MSS协商.
  • 理想的情况下, MSS的值正好是在IP不会被分片处理的大长度(这个长度仍然是受制于数据链路层的 MTU).
  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值.
  • 然后双方得知对方的MSS值之后, 选择较小的作为终MSS.
  • MSS的值就是在TCP首部的40字节变长选项中(kind=2);
ARP协议

虽然我们在这里介绍ARP协议, 但是需要强调, ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网 络层之间的协议;

ARP协议的作用

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.

  • 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
  • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢 弃;
  • 因此在通讯前必须获得目的主机的硬件地址;

部分图来源:https://blog.csdn.net/qq_41420688/article/details/97019715

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值