计算机网络

计算机网络

1 网络分层模型

OSI七层模型:开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。

TCP/IP四层模型:基于OSI建立的实际实现模型。

OSI七层参考模型(国际标准)TCP/IP四层参考模型(实际实现)原理体系结构(原理)
应用层应用层应用层
表示层应用层应用层
会话层应用层应用层
传输层(段)传输层(TCP、UDP)传输层
网络层(包)网络层(IP)网络层
数据链路层(帧)网络接口层数据链路层
物理层(位)网络接口层物理层

2 TCP协议

2.1 什么是TCP?

答:TCP是面向连接的、可靠的、基于字节流的传输层通信协议。
**面向连接:**一定是「一对一」才能连接,不能像UDP协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;
**可靠的:**无论的网络链路中出现了怎样的链路变化, TCP都可以保证一个报文一定能够到达接收端;
**字节流:**字节流:消息是「没有边界」的,所以无论我们消息有多大都可以进行传输。并且消息是「有序的」,当「前一个」消息没有收到的时候,即使它先收到了后面的字节已经收到,那么也不能扔给应用层去处理,同时对「重复」的报文会自动丢弃。

2.2 什么是UDP?

答:UDP不提供复杂的控制机制,利用IP提供面向「无连接」的通信服务。UDP的全称是用户数据报协议(UDP,User Datagram Protocol),UDP为应用程序提供了一种无需建立连接就可以发送封装的IP数据包的方法。如果应用程序开发人员选择的是UDP而不是TCP的话,那么该应用程序相当于就是和IP直接打交道的。

2.3 TCP和UDP区别

  1. 连接

    • TCP是面向连接的传输层协议,传输数据前先要建立连接。

    • UDP是不需要连接,即刻传输数据。

  2. 服务对象

    • TCP是一对一的两点服务,即一条连接只有两个端点。

    • UDP支持一对一、一对多、多对多的交互通信

  3. 可靠性

    • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。

    • UDP是尽最大努力交付,不保证可靠交付数据。

  4. 拥塞控制、流量控制

    • TCP有拥塞控制和流量控制机制,保证数据传输的安全性。

    • UDP则没有,即使网络非常拥堵了,也不会影响UDP的发送速率。

  5. 首部开销

    • TCP首部长度较长,会有一定的开销,首部在没有使用「选项」 字段时是20个字节,如果使用了「选项」 字段则会变长的。
    • UDP首部只有8个字节,并且是固定不变的,开销较小。
  6. 应用场景

    • 由于TCP是面向连接,能保证数据的可靠性交付,因此经常用于:
      1)FTP文件传输、2)HTTP/ HTTPS
    • 由于UDP面向无连接,它可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于:
      1)包总量较少的通信,如DNS、SNMP 等、2)视频、音频等多媒体通信、3)广播通信

2.4 TCP三次握手

在这里插入图片描述
答:为了保证客户端与服务端双方的网络收发都没有问题。
第一次握手:客户端向服务端发送数据([SYN] Seq=J),服务端收到,则表示服务端知道客户端发送能力没问题。
第二次握手:服务端向客户端回复数据([SYN,ACK] Seq=K, Ack=J+1),客户端收到,则表示客户端知道服务端接收和发送能力没问题。
第三次握手:客户端向服务端回复数据([ACK] Ack=K+1),服务端收到,则表示服务端知道客户端接收能力没问题。

为什么是三次握手?不是两次、四次?
答:三次握手才可以阻止历史重复连接的初始化(主要原因)、三次握手才可以同步双方的初始序列号、三次握手才可以避免资源浪费

2.5 TCP四次挥手

在这里插入图片描述
答:因为建立连接时,目的主机可以直接发送SYN+ACK应答报文,而当目的主机收到FIN后,可能还有数据要发,并不一定直接断开,所以先发送一次应答,告知我的主机收到了连接结束请求。等确认所有数据都发完了,再发送FIN,同时等待我的主机应答,这里的FIN和ACK不能一起发送,因为可能还有数据要传输,所以需要四次
第一次挥手:客户端向服务端发送数据([FIN] Fin=M),表示客户端想要主动断开连接,不会再向服务器发数据了。
第二次挥手:服务端向客户端回复数据([ACK] Ack=M+1),表示服务端知道了客户端想要断开连接,但是服务端可能还要处理数据并向客户端发送数据,完成后再回复。
(注意:此时可能服务端还有数据没处理完,因此不会马上向客户端回复数据!这也是为什么4次挥手原因,数据处理完了再回复!)
第三次挥手:服务端向客户端发送数据([FIN] Fin=N),表示服务端数据处理完了,以后不会再向客户端发送数据了。
第四次挥手:客户端向服务端回复数据([ACK] Ack=N+1),表示收到了服务端的数据,断开连接。

2.6 为什么需要TIME _WAIT状态?

答:主动发起关闭连接的一方,才会有TIME-WAIT状态。需要TIME-WAIT状态,主要是两个原因:

  • 防止具有相同「四元组」的「旧」数据包被收到;
  • 保证「被动关闭连接」的一方能被正确的关闭,即保证最后的ACK能让被动关闭方接收,从而帮助其正常关闭;

2.7 为什么TIME_WAIT等待的时间是2MSL?

MSL是Maximum Segment Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为TCP报文基于是IP协议的,而IP头中有一个TTL字段,是IP数据报可以经过的最大路由数,每经过一个处理他的路由器此值就减1,当此值为0则数据报将被丢弃,同时发送ICMP报文通知源主机。
**MSL与TTL的区别:**MSL 的单位是时间,TTL是经过路由跳数。所以MSL应该要大于等于TTL消耗为0的时间,以确保报文已被自然消亡。
TIME_WAIT等待2倍的MSL,比较合理的解释是:网络中可能存在来自发送方的数据包,当这些发送方的数据包被接收方处理后又会向对方发送响应,所以一来一回需要等待2倍的时间。
比如,如果被动关闭方没有收到断开连接的最后的ACK报文,就会触发超时重发Fin报文,另一方接收到FIN后,会重发ACK给被动关闭方,一来一去正好 2个MSL。2MSL的时间是从客户端接收到FIN后发送ACK开始计时的。如果在TIME_WAIT时间内,因为客户端的ACK没有传输到服务端,客户端又接收到了服务端重发的FIN报文,那么2MSL时间将重新计时。
在Linux系统里2MSL默认是60秒,那么一个MSL也就是30秒。Linux系统停留在TIME_WAIT的时间为固定的60秒。

2.8 TCP可靠性传输

  • **流量控制:TCP通过使用一个接收窗口(receive window,rwnd)**的变量来提供流量控制。接收窗口会给发送方一个指示到底还有多少可用的缓存空间。发送端会根据接收端的实际接受能力来控制发送的数据量。

  • **拥塞控制:**拥塞窗口cwnd是发送方维护的一个的状态变量,它会根据网络的拥塞程度动态变化的。我们在前面提到过发送窗口swnd 和接收窗口rwnd 是约等于的关系,那么由于引入了拥塞窗口的概念后,此时发送窗口的值是swnd = min(cwnd, rwnd),也就是拥塞窗口和接收窗口中的最小值。拥塞窗口cwnd变化的规则:1)网络没有出现拥塞,cwnd就增大;2)网络中出现了拥塞,cwnd就减少;主要方法:慢启动、拥塞避免、快速恢复

  • **重传机制:**TCP实现可靠传输的方式之一,是通过序列号与确认应答。在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息。主要方法:超时重传、快速重传、SACK方法

3 IP协议

3.1 IP地址可分为A、B、C、D、E共5类

在这里插入图片描述
其中对于A、B、C类主要分为两个部分,分别是网络号和主机号。A、B、C类地址范围与最大主机个数如表

类别IP地址范围最大主机数
A0.0.0.0 ~ 127.255.255.25516777214
B128.0.0.0 ~ 191.255.255.25565534
C192.0.0.0 ~ 223.255.255.255254

3.2 A、B、C类地址最大主机数是如何计算的?

最大主机个数,就是要看主机号的位数,如C类地址的主机号占8位,那么C类地址的最大主机个数:28-2=254
为什么要减2呢?因为在IP地址中,有两个IP是特殊的,分别是主机号**全为1(广播地址)全为0(网段本身)**的地址。
主机位全为0的时候,此IP地址表示网络号代表网络段本身,也就是本网段的代表,常用在路由器的路由表中
主机位全为1的时候,此IP地址表示广播地址,代表的是整个网段中的所有主机,即可以向该网段中所有的主机发送数据包

3.3 无分类地址CIDR

正因为IP分类存在许多缺点,所有后面提出了无分类地址的方案,即CIDR。
这种方式不再有分类地址的概念,32比特的IP地址被划分为两部分,前面是网络号,后面是主机号

表示形式a.b.c.d/x,其中/x表示前x位属于网络号,x的范围是0~32,这就使得IP地址更加具有灵活性。(也可以使用子网掩码区分)
比如10.100.122.2/24,这种地址表示形式就是CIDR,/24 表示前24位是网络号,剩余的8位是主机号。

3.4 IP协议相关技术

  1. DNS域名解析
    域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。
    当应用过程需要将一个主机域名映射为IP地址时,就调用域名解析函数,解析函数将待转换的域名放在DNS请求中,以UDP报文方式发给本地域名服务器。本地的域名服务器查到域名后,将对应的IP地址放在应答报文中返回。同时域名服务器还必须具有连向其他服务器的信息以支持不能解析时的转发。若域名服务器不能回答该请求,则此域名服务器就暂成为DNS中的另一个客户,向根域名服务器发出请求解析,根域名服务器一定能找到下面的所有二级域名的域名服务器,这样以此类推,一直向下解析,直到查询到所请求的域名。
  2. ARP地址解析协议
    地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;ARP协议在TCP/IP模型中属于网络层,在OSI模型中属于数据链路层。
    在传输一个IP数据报的时候,确定了源IP地址和目标IP地址后,就会通过主机「路由表」确定IP数据包下一跳。 然而,网络层的下一层是数据链路层,所以我们还要知道「下一跳」的MAC地址。
    由于主机的路由表中可以找到下一条的IP地址,所以可以通过ARP协议,求得下一跳的MAC地址。ARP 是借助ARP请求与ARP响应两种类型的包确定MAC地址的。
  3. DHCP动态主机配置协议
    DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。DHCP交互中,全程都是使用UDP广播通信。
  4. NAT网络地址转换
    NAT(Network Address Translation),是指网络地址转换。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。

4 MAC地址(数据链路层)

MAC地址的全称是Media Access Control Address,译为媒体访问控制地址,它是网络上以太网或网络适配器的唯一标识符。MAC 地址能够区分不同的网络接口,并用于多种网络技术,尤其是大多数IEEE 802网络。MAC地址也称为物理地址,硬件地址和老化地址。

MAC地址长48 bit,在使用网卡(NIC)的情况下,MAC地址-般都会烧入ROM中。因此,任何一个网卡的MAC地址都是唯一的。MAC 地址的结构如下:

位数功能
第1位单播地址(0) /多播地址(1)
第2位全局地址(0) / 本地地址(1)
第3-24位由IEEE管理并保证各厂家之间的不重复
第25-48位由厂商管理并保证产品之间不重复

5 HTTP协议

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
在这里插入图片描述
HTTP在传输数据时,所有传输的内容都是明文,无法保证数据的安全性。
HTTPS即:HTTP Over TLS,运行在TLS协议上的安全的HTTP协议。
在这里插入图片描述

  • SSL握手的目的是什么?
    答:SSL握手的过程都是明文,因此SSL握手的重点就在于怎么在不安全的网络中安全的进行密钥交换。
  • SSL握手过程又是怎样的?
    答:RSA算法交换密钥步骤
    1. 客户端给出协议版本号、一个随机数(Random1) ,以及客户端支持的加密方法;
    2. 服务端确认使用的加密方法,并给出数字证书、以及随机数(Random2) ;
    3. 客户端确认数字证书有效,生成一个新的随机数(premaster secret),并使用数字证书中的公钥,利用RSA算法加密这个随机数,发给服务端。
    4. 服务端使用自己的私钥,获取客户端发来的随机数(premaster secret)。
    5. 客户端和服务端根据约定的加密方法,使用前面的三个随机数,生成对话密钥(master secret ),用来加密接下来的整个对话过程。

6 Socket

Socket又成为套接字(Socket),是对TCP/IP的封装,提供可供程序员左网络开发所用的接口。Socket就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值