「计算机网络知识」更新中~

文章目录

1 TCP三次握手、四次挥手、TCP和UDP的区别

1.1 TCP三次握手

TCP:Transmission Control Protocol,传输控制协议。

TCP三次握手概念: TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

为什么建立连接需要三次握手?
答:
首先非常明确的是两次握手是最基本的。第一次握手,客户端发了个连接请求消息到服务端,服务端收到信息后知道自己与客户端是可以连接成功的,但此时客户端并不知道服务端是否已经接收到了它的请求,所以服务端接收到消息后的应答,客户端得到服务端的反馈后,才确定自己与服务端是可以连接上的,这就是第二次握手。

客户端只有确定了自己能与服务端连接上才能开始发数据。所以两次握手肯定是最基本的。

如果只有两次握手,那么到这里,连接就建立了,但是此时客户端并没有任何数据要发送,而服务端还在傻傻的等候佳音,造成很大的资源浪费。所以需要第三次握手,由客户端发送要发送的数据,只有客户端再次回应一下,就可以避免这种情况。

TCP三次握手过程:

  1. 第一次握手:客户端发送SYN包(syn=1)到服务器,并进入SYN-SENT状态,等待服务器确认。
  2. 第二次握手:服务器收到SYN包,确认客户的SYN,同时自己也发送一个SYN包即SYN+ACK包(syn=1,ack=1)。
  3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=1)。此包发送完毕,客户端和服务端都进入了ESTABLISH(TCP连接成功)状态,完成了三次握手。

握手完成后,就开始TCP 数据传输。
在这里插入图片描述
来自通俗易懂的理解

笔记:
SYN: 同步序列编号(Synchronize Sequence Numbers)。含义就是:请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1。
ACK : 为了确认号是否有效,一般置为1。

TCP 数据传输就是两个人隔空交流,有一定的距离,需要对方反复确认听见了自己的话。
还有个评论挺有趣,说是TCP三次握手基本思想:“让我知道你已经知道”

1.2 TCP四次挥手

来源
在这里插入图片描述
实在画不动图了,就从书上摘下来了。

TCP四次挥手概念: TCP四次挥手其实就是TCP连接的释放。

TCP四次挥手的过程:

  1. 第一次挥手:客户端发出连接释放报文FIN=1,序列号为seq=u,并且停止发送数据。客户端进入FIN-WAIT-1(终止等待1)状态。
  2. 第二次挥手:服务器收到了连接释放报文,发出确认报文ACK=1,ack=u+1,并带上自己的序号seq=v。服务器进入CLSOSE-WAIT(关闭等待)状态。客户端进入了FIN-WAIT-1(终止等待2)的状态。
    (这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间)
  3. 第三次挥手:服务器将最后的数据发送完成后,向客户端发送连接释放报文FIN=1,ack=u+1。这个时候服务器很可能还会再发送一些数据等待客户端确认,假设为seq=w。
  4. 客户端收到服务器的连接释放报文后,发出确认ACK=1,ack=w+1,序列号为seq=u+1。客户端进入TIME-WAIT(时间等待)状态。此时TCP连接还没有释放,经过2MSL之后才会释放,所以比服务端能迟一些。

笔记:
FIN: 希望断开连接。
ACK: 确认号是否有效,一般置为1。
MSL: MaximumSegmentLifetime,可译为“最长报文段寿命”。

为什么建立连接的时候是三次握手,请求关闭的时候却是四次?(对照着图就较好理解了)
答:
因为当服务端收到客户端的SYN连接请求后,可以直接发送SYN+ACK报文。其中SYN报文是用来同步的,ACK报文是用来应答的。
但是关闭连接时,当服务端收到客户端的FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉服务端“你发送的FIN报文我收到了”。只有等我服务端的所有报文都发送完毕了,我才能发送FIN报文,因此不能一起发送,所以需要四次握手。

为什么TIME_WAIT状态需要经过2MSL(最大报文生存时间)才能返回到CLOSE状态?
答:
因为很可能客户端发送的ACK报文有丢失,这时服务端一直没有收到这个丢失的ACK就会一直向客户端重复发送FIN片段,所以客户端不能立即关闭,必须确认服务端接收到了该AKC。因此客户端会在发送出ACK的时候进入等待的状态,看还有没有从服务端发送过来的FIN报文,有就继续等待,如果等待超过了2MSL还没有的话就判定服务端已经收到了全部的ACK,这样就可以结束TCP的连接了。

如果已经建立连接,但客户端突然故障了怎么办?
答:
TCP设有一个保活计时器,若客户端出现故障,服务器不能一直等待下去,因此服务器每收到一次客户端发送的请求后都会重新复位这个计时器。若在规定时间内还没有收到客户端的任何数据,服务端就会发送一个探测报文段,连着发送10次没收到回应,服务器就认为客户端故障,关闭连接。

1.3 TCP和UDP的区别

TCP和UDP是TCP/IP协议的运输层的主要两种协议:

  • TCP是传输控制协议(Transmission Control Protocol)——它提供面向连接的、可靠的数据传输服务,其数据传输单位是报文段(segment)
  • UDP是用户数据报协议(User Datagram Protocol)——它提供面向非连接的、尽最大努力的数据传输服务(但不保证数据传输的可靠性),其数据传输的单位是用户数据报

以下表非常清晰:
在这里插入图片描述
TCP:必须连接成功才能发送数据,适合大量数据。
UDP:不需要连接成功也能发送成功数据;微信、QQ,自己账号没有登陆,别人也可以发送成功;只适合少量数据,否则容易丢失数据。

2 socket

2.1 socket建立连接的过程

socket一般指套接字。所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象

SOCKET是啥:
  • 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

  • 建立网络通信连接至少要一对端口号(socket)socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。网络中的进程是通过socket来通信的,socket是网络通信的工具。

  • 使用TCP/IP协议的应用程序通常采用应用编程接口:套接字(socket)来实现网络进程之间的通信。 就目前而言,几乎所有的应用程序都是采用socket,而现在又是网络时代,网络中进程通信是无处 不在“一切皆socket”。

  • socket屏蔽了各个协议的通信细节,使得程序员无需关注协议本身,直接使用socket提供的接口来进行互联的不同主机间的进程的通信。 这就好比操作系统给我们提供了使用底层硬件功能的系统调用,通过系统调用我们可以方便的使用磁盘(文件操作),使用内存,而无需自己去进行磁盘读写,内存管理。socket其实也是一样的东西,就是提供了TCP/IP协议的抽象,对外提供了一套接口,同过这个接口就可以统一、方便的使用TCP/IP协议的功能了。
    在这里插入图片描述
    图:socket所在的抽象层

  • 在unix中万物皆文件,socket就被设置成了一种文件,然后通过虚拟文件系统的操作接口就可以访问socket,而访问socket时会调用相应的驱动程序,从而也就是使用底层协议进行通信。

socket建立连接的过程

首先服务器建立监听, socket , bind , listen
然后客户端发送请求, connect , send
最后连接确认, accept , response

详细过程:

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

  1. 服务器监听: 服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求
  2. 客户端请求: 客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。
    为此,客户端的套接字必须首先描述它要连接的服务器的套接字,之处服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求
  3. 连接确认:服务器端套接字监听或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。

服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

socket的基本操作
  1. socket()函数: int socket(int domain, int type, int protocol);
    参数:
    domain:协议域;
    type:指定socket类型;
    protocol:指定协议;
int socket(int domain, int type, int protocol);

socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket

  1. bind()函数
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

bind()函数把一个地址族中的特定地址赋给socket。
3. listen()、connect()函数

int listen(int sockfd, int backlog);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

在调用socket()、bind()之后就会调用listen()来监听这个socket,如果客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求。

2.2 I/O模型

一个输入操作通常包括两个阶段:

  • 等待数据准备好
  • 从内核向进程复制数据

对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待数据到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用进程缓冲区。

Unix 有五种 I/O 模型:

  • 阻塞式 I/O
  • 非阻塞式 I/O
  • I/O 复用(select 和 poll)
  • 信号驱动式 I/O(SIGIO)
  • 异步 I/O(AIO)

2.3 I/O 复用

select/poll/epoll 都是 I/O 多路复用的具体实现,select 出现的最早,之后是 poll,再是 epoll。

3 计算机网络

3.0 基础知识

3.0.1 概述

一、计算机网络概念

计算机网络是指分布在不同地理位置上的具有独立功能的多个计算机系统,通过通信设备和通信线路互联起来,在网络软件的管理下实现数据传输和资源共享的系统。

二、计网的发展

在这里插入图片描述

三、计算机网络功能
  1. 数据通信
    (1) 电子邮件、传真
    (2)远程登录
    (3) 网络信息服务
    (4) 文件传输
  2. 资源共享
  3. 提高计算机的可靠性
  4. 提高网络吞吐量
  5. 分布式处理
四、计算机网络的组成
  1. 从系统构成来看,计算机网络是由硬件和软件构成的。
  2. 从计算机网络的设计和实现来看,计算机网络是由资源子网 和通信子网组成的。
    资源子网:由所有连接在因特网上的主机组成。 这部分是用户直接食用的,用来进行通信(传送数据、音频或视频)和资源共享。
    通信子网:由大量网络和连接这些网络的路由器组成。
五、网络分类
  1. 按作用域或地理范围分类:
    局域网LAN(Local Area Network)、城域网MAN(Metroplitan Area Network)、广域网WAN(Wide Area Network)
  2. 按网络的拓扑结构分类:
    在这里插入图片描述
  3. 按使用范围分类
    公用网、专用网

3.0.2 网络交换方式

  1. 电路交换。主要用于电话通信中,完成电话交换
  2. 报文交换。不要求在两个通信节点之间建立专用通路。结点把要发送的信息组织称一个数据报——报文,该报文中含有目标节点的地址,完整的报文在网络中一站一站的向前传送,比如电子邮件。
    在这里插入图片描述
  3. 分组交换。在线路上采用动态复用技术传送按一定长度分割为许多小段的数据——分组,每个分组独立进行传送。
    在这里插入图片描述
  4. 计算机网络的性能指标
    速率、带宽、吞吐量、时延、时延带宽积、利用率。

3.0.3 计算机网络体系结构

1. 网络协议的定义与三要素

协议定义:是为进行网络中的数据交换而建立的规则、标准或约定。
协议的三要素:语法、语义、同步。

2. OSI参考模型及各层次的功能
OSI(Open System Interconnection,OSI)开放互连参考模型。

相互通信的两个计算机系统必须高度协调工作才行,而这种“协调”是相当复杂的。
“分层”可将庞大而复杂的问题,转换成若干较小的局部问题,而这些较小的局部问题比较易于研究和处理。
不同主机间的相同层次称为对等层。
在这里插入图片描述

各结构层次的功能
  1. 物理层
    物理层的主要功能是为上层协议提供一个传送数据的物理媒体。 物理层规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性及过程特性。
    数据的单位为比特(bit)
  2. 数据链路层
    数据链路层的主要作用是物理地址的寻址、数据链路的建立、拆除、对数据的检错、纠错、重发。
    数据的单位称为帧(frame)
    主要协议:PPP(点对点协议)。
  3. 网络层
    网络层负责对子网间的数据包进行路由选择。 此外,还可以实现拥塞控制、网际互连等功能。
    数据的单位为数据报(packet)
  4. 传输层
    传输层主要处理端到端的差错控制和流量控制的问题。
    数据单位为数据段(segment)
    主要包括的协议有:TCP、UDP等。
  5. 会话层
    会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。 会话层还利用在数据中插入校验点来实现数据的同步。
  6. 表示层
    表示层是对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。
  7. 应用层
    应用层为操作系统或网络应用程序提供访问网络服务的接口。
    主要包括协议:FTP、HTTP等。
3. TCP/IP四层及对应的协议

TCP/IP是四层的体系结构:应用层、传输层和网络接口层。
在这里插入图片描述

3.1 计算机网络体系结构

在这里插入图片描述
自己画一遍加深印象:

3.1.1 五层协议

  • 应用层:为特定应用程序提供数据传输服务,例如HTTP/DNS等协议。数据单位为报文。
  • 传输层:为主机中的进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。
    传输层协议包括:
    1). TCP 传输控制协议:提供面向连接的、可靠的数据传输服务,数据单位为报文段;
    2). UDP 用户数据报协议:提供面向无连接的、尽最大努力的传输数据服务,数据单位为用户数据报。
    3). TCP主要提供完整性服务,UDP主要提供及时性服务。
  • 网络层:为主机提供数据传输服务。
    网络层把传输层传递下来的报文段或者用户数据报封装成分组。
  • 数据链路层:网络层针对的是主机间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。
    数据链路层把网络层传下来的分组封装成帧。
  • 物理层:考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,是数据链路层感觉不到这些差异。传输单位为bit。

3.1.2 五层协议的一些有用的补充内容

1. 物理层

根据信息在传输线上的传送方向分为三种通信方式:
单工通信:单向传输
半双工通信:双向交替传输
全双工通信:双向同时传输

带通调制:
模拟信号是连续的信号 ,数字信号 是离散的信号,带通调制 把数字信号转为模拟信号。

2. 数据链路层
三个基本问题:
  1. 封装成帧: 将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束。
  2. 透明传输: 帧使用首部和尾部进行定界,若帧的数据部分含有和首尾部心相同的内容,则帧开始和结束的位置就会被锁定,因此需要在数据部分出现和首尾部分相同的内容前加转义字符。这样就可以完整的传输内容。其中转义字符就被透明传输了,使得用户觉察不到他它的存在。
  3. 差错检测: 目前数据链路层广泛使用了 循环冗余检验(CRC) 来检查比特差错。
信道分类:
  1. 广播信道:一对多通信,一个节点发送的数据能够被广播信道上所有节点收到。
    所有节点都在同一个广播信道上发送数据,因此需要有专门的控制方法进行协调,避免发生冲突(冲突也叫碰撞)。
    主要有两种控制方法进行协调:信道复用技术、CSMA/CD协议。

     (1). 信道复用技术:
    

1). 频分复用
2). 时分复用
3). 统计时分复用
4). 波分复用
5). 码分复用

	(2). CSMA/CD协议: 表示载波监听多点接入 / 碰撞检测。

协议要点:
多点接入 : 说明这是总线型网络,许多主机以多点的方式连接到总线上。
载波监听 : 每个主机都必须不停地监听信道。在发送前,如果监听到信道正在使用,就必须等待。
碰撞检测 : 也就是“边发送边监听”。在发送中,如果监听到信道已有其它主机正在发送数据,就表示发生了碰撞。虽然每个主机在发送数据之前都已经监听到信道为空闲,但是由于电磁波的传播时延的存在,还是有可能会发生碰撞。

  1. 点对点信道:一对一通信。
    因为不会发生碰撞,因此也比较简单,使用点对点协议PPP(Point-to-Point Protocol)协议进行控制 。
    互联网用户通常需要连接到某个 ISP 之后才能接入到互联网,PPP 协议是用户计算机和 ISP 进行通信时所使用的数据链路层协议。
MAC地址

在局域网中,硬件地址又称为物理地址MAC地址
MAC 地址是链路层地址,长度为 6 字节(48 位),用于唯一标识网络适配器(网卡)

一台主机拥有多少个网络适配器就有多少个 MAC 地址。例如笔记本电脑普遍存在无线网络适配器和有线网络适配器,因此就有两个 MAC 地址。

局域网LAN

局域网是一种典型的广播信道,主要特点是网络为一个单位所拥有,且地理范围和站点数目均有限。

主要有以太网、令牌环网、FDDI 和 ATM 等局域网技术,目前以太网占领着有线局域网市场。

分类:星型、环形、直线型。

以太网

以太网是一种星型拓扑结构局域网。目前以太网使用交换机替代了集线器,交换机是一种链路层设备,它不会发生碰撞,能根据 MAC 地址进行存储转发。

交换机

交换机具有自学习能力,学习的是交换表的内容,交换表中存储着 MAC 地址到接口的映射。

正是由于这种自学习能力,因此交换机是一种即插即用设备,不需要网络管理员手动配置交换表内容。

虚拟局域网VLAN

虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。

3. 网络层
概述

核心内容——网际协议IP

因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。

使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。

与 IP 协议配套使用的还有三个协议:

  • 地址解析协议 ARP(Address Resolution Protocol)
  • 网际控制报文协议 ICMP(Internet Control Message Protocol)
  • 网际组管理协议 IGMP(Internet Group Management
    Protocol)
IP数据报格式

IP数据报格式能够说明IP协议都具有什么功能。常以32位(即4字节)为单位来描述。
一个IP数据报由首部和数据两部分组成。其中首部的前一部分是固定长度,共20字节,是所有IP数据报必须有的。
在这里插入图片描述
IP数据报首部的固定部分中的各字段表示:

  • 版本 : 有 4(IPv4)和 6(IPv6)两个值;

  • 首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为固定部分长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。

  • 区分服务 : 用来获得更好的服务,一般情况下不使用。

  • 总长度 : 包括首部长度和数据部分长度。

  • 生存时间 : TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。

  • 协议 : 指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。

  • 首部检验和 : 因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。

  • 标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。

  • 片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。

IP地址编址方式

IP 地址的编址方式经历了三个历史阶段:

  1. **分类的IP地址。**由两部分组成:网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。
    IP 地址 ::= {< 网络号 >, < 主机号 >}
    其中::=表示“定义为”。
  2. **子网的划分。**通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。
    IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}
    要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。
    注意,外部网络看不到子网的存在。
  3. 无分类编制方法CIDR(构成超网)。
    无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。
    IP 地址 ::= {< 网络前缀号 >, < 主机号 >}
    CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。
    CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。
    把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网
地址解析协议ARP

ARP 协议是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。只要主机和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动的把这个IP地址解析为链路层所需要的硬件地址。

网络层实现主机间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP数据报的原地址和目的地址始终不变,而MAC地址随着链路的改变而改变。

ARP 实现由 IP 地址得到 MAC 地址。
在这里插入图片描述

网际控制报文协议ICMP

ICMP (Internet Control Message Protocol)是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,是互联网的标准协议,但是不属于高层协议。ICMP允许主机或路由器报告差错情况和提佛那个有关异常情况的报告。

ICMP 报文分为差错报告报文和询问报文。

ICMP的应用举例:

  1. Ping
    Ping是ICMP的一个重要应用,主要用来测试两台主机之间的连通性。
    原理是通过向目的主机发送ICMP Echo请求报文,目的主机收到之后会发送Echo回答报文。Ping会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
  2. Tracert
    Tracert(unix中为Traceroute) 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。
    Tracert发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。
虚拟专用网络VPN

由于IP地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的IP地址(专用地址)。

有三个专用地址块:

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 192.168.0.0 ~ 192.168.255.255

VPN所使用的的公共的互联网作为本机构各专用网络之间的通信载体。专用指机构内的主机只与本机构内的其它主机通信;虚拟指的是:好像是但实际并不是,因为它有经过公用的互联网。

网络地址转换NAT

专用网内部的主机使用本地IP地址又想和互联网上的主机通信时,可以使用NAT来将本地IP转换成为全球IP。

路由器
  1. 路由器的结构
    路由器从功能上可以划分为:路由选择和分组转发。
    分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。
  2. 路由器分组转发的流程
    在这里插入图片描述
  3. 路由选择协议
    路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。
    互联网可以划分为许多较小的自治系统 AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。
    可以把路由选择协议划分为两大类:
  • 自治系统内部的路由选择:RIP 和 OSPF
  • 自治系统间的路由选择:BGP
4. 传输层

网络层只把分组发送到目的主机,但是真正的通信并不是主机而是主机中的进程。传输层提供了进程间的逻辑通信。 传输层向高层用户屏蔽了下一层网络层的核心细节,使程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。

有关传输层TCP与UDP的细节,在之后网络体系结构有讲到。

5. 应用层
电子邮件协议

一个电子邮件系统由三部分组成:用户代理、邮件服务器以及邮件协议。

邮件协议包含发送协议和读取协议,发送协议常用 SMTP,读取协议常用 POP3 和 IMAP。

  • POP3协议:特点是只要从服务器上读取了邮件,就把该邮件删除。但最新版的POP3可以不删除邮件。
  • IMAP协议:客户端和服务器上的邮件保持同步,如果不动手删除邮件,那么服务器上的邮件也不会被删除。IMAP这种做法可以让用户随时随地的去访问服务器上的邮件。
常用端口

在这里插入图片描述

WEB页面请求过程
  1. DHCP配置主机信息
  2. ARP解析MAC地址
  3. DNS解析域名
  4. HTTP请求页面
  • 有了HTTP服务器的IP地址后,主机就能够生成TCP套接字,该套接字将用于向web服务器发送HTTP GET报文。

3.1.3 OSI七层协议

其中表示层和会话层用途如下:

  • 表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。
  • 会话层 :建立及管理会话。

五层协议没有表示层和会话层,而是将这些功能留给应用程序开发者处理。

3.1.4 TCP/IP四层协议

它只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层
TCP/IP协议体系结构不严格遵循OSI分层概念,应用层可能会直接使用IP层或者网络接口层。
在这里插入图片描述

在这里插入图片描述

3.1.5 数据在各层之间的传递过程

在向下的过程中 ,需要添加下层协议所需要的首部或尾部,而在向上的过程中不断拆开首部和尾部。

路由器只有下面三层协议(网络层、数据链路层、物理层),因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要传输层和应用层。

3.2 网络的网络

网络把主机连接起来,而 互联网(Internet) 是把多种不同的网络连接起来,因此互联网是网络的网络。是全球范围的互联网。

ISP: 全称(Internet Service Provider)即“互联网服务提供商”,即向广大用户综合提供互联网接入业务、信息业务、和增值业务的电信运营商。

3.3 主机间的通信方式

  • 客户端-服务器:客户是服务的请求方,服务器是服务的提供方。
    在这里插入图片描述
  • 对等(P2P):不区分客户和服务器。

3.4 电路交换与分组交换

1. 电路交换

电路交换用于电话通信系统,两个用户要通信之前需要建立一条专用的物理链路,并且整个通信过程中始终占用该链路。

由于通信的过程中不可能一直在使用传输线路,因此电路交换对线路的利用率很低,往往不到 10%。

2. 分组交换

每个分组都有首部和尾部,包含了源地址和目的地址等控制信息,在同一个传输线路上同时传输多个分组互相不会影响,因此在同一条传输线路上允许同时传输多个分组,也就是说分组交换不需要占用传输线路。

3.5 时延

总时延 = 排队时延 + 处理时延 + 传输时延 + 传播时延
在这里插入图片描述

  1. 排队时延
    分组在路由器的输入队列和输出队列中排队等待的时间,取决于网络当前的通信量。

  2. 处理时延
    主机或路由器收到分组时进行处理所需要的时间,例如分析首部、从分组中提取数据、进行差错检验或查找适当的路由等。

  3. 传输时延
    主机或路由器传输数据帧所需要的时间。
    在这里插入图片描述
    其中 l 表示数据帧的长度,v 表示传输速率。

  4. 传播时延
    电磁波在信道中传播所需要花费的时间,电磁波传播的速度接近光速。
    在这里插入图片描述
    其中 l 表示信道长度,v 表示电磁波在信道上的传播速度。

4 http/https协议

HTTP简介

简介

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是英特网上应用最为广泛的一种网络传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP的关于数据如何在万维网中通信的协议。 来传递数据(HTML文件、图片文件、查询结果等)。

工作原理

HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
HTTP三点:

  • HTTP是无连接的: 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • HTTP是媒体独立的: 这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
  • HTTP是无状态的: HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。 缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
    在这里插入图片描述
HTTP消息结构

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。

一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。

HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。

  • 客户端请求消息
    客户端发送一个HTTP请求到服务器。请求消息包括:请求行、请求头部、空行和请求数据四个部分。
    在这里插入图片描述
  • 服务器响应消息
    HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
HTTP请求方法

客户端发送的 请求报文 第一行为请求行,包含了方法字段
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

HTTP给汽车运输(TCP传输协议)设定了好几个服务类别,有GET, POST, PUT, DELETE等等。
在这里插入图片描述

HTTP状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在度服务器发出请求。当浏览器接收并显示网页前,此网页所载的服务器会返回一个包含HTTP状态码的信息头用以响应浏览器的请求。

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码分类:

分类分类描述
1XX信息。 服务器收到请求,需要请求者继续执行操作
2XX成功。 操作被成功接收并处理
3XX重定向。 需要进一步的操作以完成请求
4XX客户端错误。 请求包含语法错误或无法完成请求
5XX服务器错误。 服务器在处理请求的过程中发生了错误
1XX: 信息
  • 100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。
2XX: 成功
  • 200 OK
  • 204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。
  • 206 Partial Content :表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。
3XX:重定向
  • 301 Moved Permanently :永久性重定向
  • 302 Found :临时性重定向
  • 303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。
  • 304 Not Modified :不满足请求报文首部的条件
  • 307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。
4XX:客户端错误
  • 400 Bad Request :请求报文中存在语法错误。
  • 401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。
  • 403 Forbidden :请求被拒绝。
  • 404 Not Found
5XX:服务器错误
  • 500 Internal Server Error :服务器正在执行请求时发生错误。
  • 503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
常见的HTTP状态码:
  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误
HTTP content-type

Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。

Content-Type 标头告诉客户端实际返回的内容的内容类型。如图所示:
在这里插入图片描述
常见的媒体格式类型(from runoob)

Cookie

HTTP常见面试题

在PC浏览器的地址栏输入一串URL,然后按Enter键这个页面渲染出来,这个过程中都发生了什么事?这个是很多面试官喜欢问的一个问题。如果测试只是停留在表面上点点点,不知道背后的逻辑,是无法发现隐藏的bug,只能找一些页面上看得到的bug。

什么是HTTP无状态协议?怎么解决HTTP无状态协议?

答:
(1)、无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息。
(2)、无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。

GET和POST的区别?

答:

  1. GET和POST都是HTTP协议中的两种发送请求的方法。

  2. GET和POST本质上就是TCP连接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

  3. GET和POST还有一个重大区别,简单的说:
    GET产生一个TCP数据包;POST产生两个TCP数据包。所以有时候GET比POST更有效,网速快的时候基本忽略差别。
    来自这篇文章

常见的POST提交数据方式?

答:
application/x-www-form-urlencoded
multipart/form-data
application/json
text/xml

cookies机制和session机制的区别

答:

  1. cookies数据保存在客户端,session数据保存在服务器端;
  2. cookies可以减轻服务器压力,但是不安全,容易进行cookies欺骗;session较安全,但占用服务器资源
浏览器输入url按回车背后经历了什么
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值