网络基础及TCP/IP协议

网络基础

什么是网络:
计算机网络:具有独立功能的多台计算机及其外部设备,通过通信线路连接起来
在这里插入图片描述
在这里插入图片描述

网路的类型

1.局域网(LAN):一般限定在较小的区域内,小于10km的范围,通常采用有线的方式连接起来。

2.城域网(MAN):规模局限在一座城市的范围内,10~100km的区域。

3.广域网(WAN):网络跨越国界、洲界,甚至全球范围。

局域网和广域网是网络的热点。局域网是组成其他两种类型网络的基础,城域网一般都加入了广域网。广域网的典型代表是internet网。

4.个人网:个人局域网就是在个人工作地方把属于个人使用的电子设备(如便携电脑等)用无线技术连接起来的网络,因此也常称为无线个人局域网WPAN,其范围大约在10m左右。

拓扑结构

网络的拓扑结构是指网络中通信线路和站点(计算机或设备)的几何排列形式。

星型网络:各站点通过点到点的链路与中心站相连。特点是很容易在网络中增加新的站点,数据的安全性和优先级容易控制,易实现网络监控,但中心节点的故障会引起整个网络瘫痪。

2.环形网络:各站点通过通信介质连成一个封闭的环形。环形网容易安装和监控,但容量有限,网络建成后,难以增加新的站点。

3.总线型网络:网络中所有的站点共享一条数据通道。总线型网络安装简单方便,需要铺设的电缆最短,成本低,某个站点的故障一般不会影响整个网络。但介质的故障会导致网络瘫痪,总线网安全性低,监控比较困难,增加新站点也不如星型网容易。

传输类型:
单工:始终只能完成一个方向的数据传输(广播)
半双工:同一时间只能完成一个方向的数据传输(对讲机)
全双工:同一时间可以完成两个方向的数据传输(手机)

数据传输的类型:
单播:一对一
组播:一对多
广播:一对所有

网络模型

三层组网模型
相当于内网1556437658193

OSI参考模型

OSI的概念:
Open System Interconnect 开放系统互连参考模型,是有ISO(国际标准化组织)定义的,它是个灵活的,稳健的和可互操作的模型,并不是协议,是用来了解和设计网络系统结构的。

OSI模型的目的:
规范不同系统的互联标准,使两个不同系统能够较容易的通信,而不需要改变底层的硬件或软件的逻辑。

OSI模型分为七层:
OSI把网络按照层次分为七层,由上到下分别为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

在这里插入图片描述

OSI模型每层都有自己的功能集,层与层之间相互独立有相互依靠;上层依赖于下层,下层为上层提供服务。

应用层:为应用数据提供接口,使应用程序能够使用网络服务
常见的应用层协议:**http(80),ftp(20/21),smtp(25),pop3(110),telent(23),dns(53)**等

表示层:数据的加密解密、数据的编码解码,数据的压缩解压缩

会话层:建立,维护,管理应用程序之间的会话(对话的控制和同步)

传输层:负责建立端到端的连接,保证报文在端到端之间的传输(服务点编址,分段与重组,连接控制,流量控制,差错控制)

网络层:负责将分组数据从源端传输到目的端(为网络设备提供逻辑地址,进行路由选择,分组转发)

数据链路层:在不可靠的物理链路上,提供可靠的数据传输服务,把桢从一跳(结点)移动到另一跳(结点)。(组帧,物理编址,流量控制,差错控制,接入控制)

物理连接层:负责把逐个的比特从一跳(结点)移动到另一跳(结点)。(定义接口的媒体的物理特性,定义比特的表示,数据传输速率,信号的传输模式(单工,半双工,全双工);定义网络物理拓扑(网状,星状,环状,总线型等拓扑))

IP地址

IP地址由两部分组成:网络部分和主机部分

在这里插入图片描述
在这里插入图片描述
A类IP地址 一个A类IP地址由1字节的网络地址和3字节主机地址组成,它主要为大型网络而设计的,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到127.0.0.0)。可用的A类网络有127个,每个网络能容纳1亿多个主机。其中127.0.0.1是一个特殊的IP地址,表示主机本身,用于本地机器的测试。

B类IP地址 一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。

C类IP地址 一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。

D类地址 用于多点广播。

E类IP地址 以“llll0”开始,为将来使用保留。

子网掩码

子网掩码用来确定IP的网络地址

对应IP地址的网络部分用1表示,对应地址的主机部分用0表示。

A,B,C三类地址的默认子网掩码
A类:255.0.0.0
B类:255.255.0.0
C类:255.255.255.2

私网地址:
10.0.0.0 —— 10.255.255.255 (10.0.0.0/8)
172.16.0.0 —— 172.31.255.255(172.16.0.0/12)
192.168.0.0 —— 192.168.255.255 (192.168.0.0/16)

TCP/IP协议

TCP/IP协议栈是由一组不同功能的协议组合在一起构成的协议栈,利用一组协议完成OSI所实现的功能

TCP/IP模型实际上是OSI模型的一个浓缩版本,它只有四个层次:
1.应用层,对应着OSI的应用层、表示层、会话层
2.传输层,对应着OSI的传输层
3.网络层,对应着OSI的网络层
4.网络接口层,对应着OSI的数据链路层和物理层
在这里插入图片描述在这里插入图片描述
UDP

UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象。

TCP

TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。TCP提供的是一种可靠的数据流服务。

ICMP

ICMP与IP位于同一层,它被用来传送IP的控制信息。它主要是用来提供有关通向目的地址的路径信息。

通讯端口

TCP和UDP服务通常有一个客户/服务器的关系,端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口。端口范围:0~65535(动态分配)。
注意:0~1024通常是归操作系统分配的端口号。通常情况下,我们写的软件端口号建议起在8000之后

两个系统间的多重Telnet连接是如何相互确认并协调一致呢?TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:
源IP地址 发送包的IP地址。
目的IP地址 接收包的IP地址。
源端口 源系统上的连接的端口。
目的端口 目的系统上的连接的端口。

数据格式

数据帧:帧头+IP数据包+帧尾 (帧头包括源和目标主机MAC初步地址及类型,帧尾是校验字)
IP数据包:IP头部+TCP数据信息(IP头包括源和目标主机IP地址、类型、生存期等)
TCP数据信息:TCP头部+实际数据 (TCP头包括源和目标主机端口号、顺序号、确认号、校验字等)

数据的发送———报文封装
封装:每一层都把上层的协议包当成数据部分,加上自己的协议头部组成自己的协议包

在这里插入图片描述
解封装:把头部的报头去掉
在这里插入图片描述

TCP的“三次握手,四次挥手”

img

三次握手

换个易于理解的视角来看为什么要三次握手。

客户端和服务端通信前要进行连接,“三次握手”的作用就是双方都能明确自己和对方的收、发能力是正常的。

第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。

从客户端的视角来看,我接到了服务端发送过来的响应数据包,说明服务端接收到了我在第一次握手时发送的网络包,并且成功发送了响应数据包,这就说明,服务端的接收、发送能力正常。

而另一方面,我收到了服务端的响应数据包,说明我第一次发送的网络包成功到达服务端,这样,我自己的发送和接收能力也是正常的。

第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力,服务端的发送、接收能力是正常的。

为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

三次握手时客户端和服务器的状态

1、 在最开始,客户端和服务器都是处于CLOSED状态
2、服务器会创建sockert开始监听,服务器状态LISTEN
3、客户端向服务器端发送SYN,请求建立链接,发完之后自己的状态变为SYN_CENT
4、服务器收到客户端发来的SYN,然后会回复SYN和ACK,发完之后自己的状态变为SYN_RECV RCVD
5、客户端收到服务器发来的SYN和ACK之后会马上回复ACK,回复完之后状态变为ESTABLISHED
6、 服务器端收到客户端发来的ACK之后会直接进入ESTABLISHED
至此,三次握手完成,连接建立

四次挥手时客户端和服务器的状态

1、 客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN_WAIT1.
2、 服务器收到FIN后向客户端发送ACK,服务器状态变为CLOSE_WAIT1
3、 客户端收到ACK后进入FIN_WAIT2状态。此时连接已经断开了一半了,如果服务器还有数据要发送给客户端,就会继续发送
4、 直接发完了,就发送FIN报文,此时服务器进入LSAT_ACK状态
5、 客户端收到服务器的FIN后,马上发送给ACK服务器,此时客户端进入状FIN_WAIT状态
6、 再过了2MSL长的时间后进入CLOSED状态。服务器收到客户端的ACK就进入CLOSED状态
至此,还有一个状态没有提及状态CLOSIND状态

各个状态的意义如下:

LISTEN :监听来自远方TCP端口的连接请求。
SYN-SENT :在发送连接请求后等待匹配的连接请求。
SYN-RECEⅣED :在收到和发送一个连接请求后等待对连接请求的确认。
ESTABLISHED :代表一个打开的连接,数据可以传送给用户。
FIN-WAIT-1 :等待远程TCP的连接中断请求,或先前的连接中断请求的确认。
FIN-WAIT-2 :从远程TCP等待连接中断请求。
CLOSE-WAIT :等待从本地用户发来的连接中断请求。
CLOSING :等待远程TCP对连接中断的确认。
LAST-ACK :等待原来发向远程TCP的连接中断请求的确认。
TIME-WAIT :等待足够的时间以确保远程TCP接收到连接中断请求的确认。
CLOSED :没有任何连接状态。

猜你喜欢

转载自blog.csdn.net/linwow/article/details/89677834