TCP/IP协议(Transmission Control Protocol/Internet Protocol)
应用层,传输层,网络层(IP地址,明确主机所在的网段),物理层(MAC地址)
物理层和数据链路层:
数据链路层和物理层也称为网络接口层,该层包括主机用于连接网络的网络接口卡(网卡)及其驱动程序,主要处理与传输媒介(如网卡,光纤,无线电波等)的物理接口细节。
物理层传输数据:
发送终端要发的数据会转换为010101的比特流,通过网线,光纤,无线电波传到很远的目的地去。接收终端接收到010101的比特流后,组装成数据帧传递到数据链路层。
数据链路层传输数据:
网络设备都安装了网络适配器,即网卡,数据是从一块网卡传送到另一块网卡。网卡地址就是数据的发送地址和接收地址,也就是数据帧所包含的MAC地址。MAC地址是每块网卡的身份标识,具有全球唯一性。
有了MAC地址以后,网络内采用广播形式,把数据发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取数据里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同则丢掉这个包。可以使用ipconfig /all来查看对应的MAC地址。
通信方式:
数据以数据帧形式进行通讯。在终端1和2通讯的瞬间,通过ARP协议,终端1会产生一个ARP数据包,这个数据包通过IP地址寻找终端2的MAC地址,拿到MAC地址后终端1会和终端2在数据链路层以数据帧的形式通过MAC地址来进行通讯。
主机作为数据发送方时,数据链路层负责将来自本机网络层的数据封装为数据帧进行发送,接收方在收到数据帧之后辉哥喜欢数据发送反馈信息,如果数据传输有误,发送方需要重新发送出错的数据帧。
主机作为数据接收方时,数据链路层负责对接收到的数据帧进行CRC校验,并给数据发送方发送反馈信息,如果数据无误,会将接收到的正确帧数据的目标MAC地址,源MAC地址和CRC部分去掉后递交为网络层处理。数据链路层通信使用MAC地址识别主机,主机之间交换数据帧。
使用python实现对本地MAC地址的获取:
import psutil
info = psutil.net_if_addrs()
print(info['WLAN'][0].address)
网络层:
网络层负责获取和维护主机的IP地址,IP地址用于主机间进行网络互连的标识,网络层负责给数据包选择路由路径。(负责点到点的传输,这里的“点”指主机或路由器)
提出的三个问题:
发送者如何知道接收者的MAC地址?
答:ARP地址解析协议
发送者如何知道接收者和自己属于同一个子网?
答:通过子网掩码来判断是否属于同一个网络地址。
如果接收者和自己不在同一个子网,数据包如何发给对方?
答:当数据包从主机发出来的一瞬间,判断数据包的目的地在和自己是否在同一个子网,在同一个子网则直接进行通信,不在同一子网则通过网关(路由器)进行发送,路由器拿到数据包后查看路由表,再将数据包发送到目的地址
路由器是个什么东西?(就是一个“指路牌”)
路由器又称为网关设备,专业来说是用于连接多个逻辑上分开网络的一种设备,当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。
网络层协议:
IP网际协议:
IP协议位于网络层,它是TCP/IP协议族中最为核心的协议,所有的上层协议如TCP,UDP数据都以IP数据包格式传输。
协议特征:不可靠(即会产生丢包),无连接(不按顺序发送) 目前有IPV4和IPV6两个版本
IPV4协议格式:
IPV4使用4个字节及32个二进制位表示一个地址,通常采用点分十进制方法表示,也可以通过二进制表示。
IP地址 = 网络地址+主机地址 IP地址可以分为A~E五类
公有IP地址在Internet中使用,私有IP地址无法在Internet中使用,只能在内部使用
ARP地址解析协议:
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。
地址解析:就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
指令ARP-A 可以查看ARP缓冲表。
注:虽然ARP请求是广播发送的,但ARP响应式普通的单播,即从一个原地址发送到一个目的地址。主机A收到主机B的ARP响应后,就在其ARP高速缓冲表中写入主机B的IP地址到硬件地址的映射。
如果数据包发送到不同网段的目的地,那么就一定存在一条网关的IP-MAC地址对应的记录。
ICMP网际控制信息协议:
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通,这个时候就要用到ICMP协议。
作用:1.确认IP包是否成功到达目标地址。2.通知在发送过程中IP包被丢弃的原因。
应用:ping 一般用于检测网络通与不同,也叫时延,值越大,速度越慢。
ping工作过程:
1.在主机PC0上运行ping 192.168.1.200
2.查询ARP高速缓存表,查看是否有192.168.1.200的MAC地址
3.如果有,则开始封装网络层数据包,包含目的的IP地址192.168.1.200,源地址192.168.1.11,ICMP请求数据等
4.封装数据链路层数据帧,包含目的MAC地址源MAC地址,网络层数据等
5.封装为物理层比特流,通过网卡和通信线路传输
PC1回复类似
子网掩码:
为什么要使用子网掩码:
用网线直接连接诶的计算机要能够相互通信,计算机必须要在统一网络。它们的网络地址必须相同,而且逐级递增必须不一样,如果不在一个网络就无法通。子网掩码就是判断网络中的计算机在不在同一网络,在就能通,不在就不能通。
传输层:
网络层只负责将数据包传输到正确的主机去,而数据包有没有被正确接收这就是传输层的任务了,确定哪个程序接收这个数据包。
网络层的任务是提供主机到主机的通信,而传输层的任务是提供进程到进程的通信。
UDP:(用户数据报协议)
用户数据报协议,采用无连接的方式传送数据
UDP面向无连接,不可靠,但因为不用传送许多与数据本身无关的信息,所以效率较高。
TCP:(传输控制协议)
传输控制协议,是一个可靠的,面向连接的协议
TCP面向连接,效率较低,但可靠性高,适合于网络链路不好或可靠性要求高的环境。
TCP三次握手建立连接:
CLIENT SERVER
| |
SYN_SENT | —————SYN————— > | SYN_RECV
| |
ESTABLISHED | <——SYN+ACK————— |
| |
| —————ACK—————> | ESTABLISHED
| |
TCP四次挥手断开连接:
CLIENT SERVER
| |
FIN_WAIT_1 | ———FIN+ACK ————— > | CLOSE_WAIT
| |
FIN_WAIT_2 |<—————ACK—————— |
|<———FIN+ACK—————— | LAST_ACK |
| |
TIME_WAIT |————SYN+ACK—————> | CLOSED
| |
附:
进程与端口号:在传输层中,使用端口号(0~65535)来定于进程,端口号只具有本地意义。
模型;采用客户端(运行在本地主机上的程序)—— 服务器端(运行在远程主机上提供服务的程序)模式实现进程到进程的通信
知名端口号:
21/tcp FTP文件传输协议 22/tcp SSH安全登录 23/tcp tenlen远程登录 25/tcp SMTP简单邮件传输协议 80/tcp HTTP超文本传输协议
53/dup DNS域名解析 69/udp TFTP简单文件传输协议 161/udp SNMP简单网络管理协议
应用层:
应用层定义了各种各样的协议来规范数据格式,常见的有HTTP,FTP,SMTP等,HTTP是一种比较常用的应用层协议。
HTTP协议(超文本传输协议):
互联网上应用最为广泛的一种网络协议,它是基于TCP的应用层协议。是客户端和服务端进行通信的一种规则,它的模式非常简单,就是客户端发起请求,服务端响应请求。
HTTP请求:
请求方法:
GET:从服务器获取指定(请求地址)的志愿的信息,它通常只用于读取数据,就像数据库查询一样,不会对资源进行修改。
POST:向指定资源提交数据(比如提交表单,上传文件),请求服务器进行处理。数据被包含在请求正文中,这个请求可能会创建新的资源或更新现有的资源。
PUT:通过指定资源的唯一标识(在服务器上的具体存放位置),请求服务器创建或更新资源。
DELETE:请求服务器删除指定资源。
HEAD:与GET方法类似,从服务器获取信息,和GET方法不同的是,HEAD不含有呈现数据,仅仅是HTTP投信息。HEAD的好处在于使用这个方法可以在不必传输全部内容的情况下,就可以获得资源的元信息。
OPTIONS:该方法可以使服务器传回资源所支持的所有HTTP请求方法。
请求内容:
请求行:包含请求方法,请求地址和HTTP协议版本
消息报头:包含一系列的键值对
请求正文:(可选)
HTTP响应:
响应内容:
状态行:包含HTTP协议版本,状态码和状态描述。
响应头:即消息报头,包含一系列的键值对。
响应正文:返回内容。
HTTP状态码:
1XX消息:请求已被服务器接收,继续处理。
2XX成功:请求已成功被服务器接收,理解,并接受
200:OK
201:已创建
202:接收
203:非认证信息
204:无内容
3XX:重定向 --需要后续操作才能完成这一请求
301:请求永久重定向
302:请求临时重定向
304:文件未修改,可以直接使用缓存的文件
305:使用代理
4XX:请求错误
400:由于客户端请求有语法错误,不能被服务器所理解
401:请求未经授权
403:服务器收到请求
404:请求的资源不存在
5XX:服务器错误
500:服务器发生不可预期的错误
503:服务器当前不能够处理客户端的请求
504:网关超时
DHCP动态主机分配协议:
DHCP是一个局域网的网络协议,使用UDP协议工作,常用的两个端口:67(DHCP server),68(DHCP client)。
DHCP通常被用于局域网环境,主要作用是集中的管理,分配IP地址,使client动态的获得IP地址,Gateway地址,DNS服务器地址等信息,并能够提升地址的使用率。
DHCP模块集成在路由器里面!
DHCP工作流程:
1.客户端广播DHCP Discover消息 2.服务器提供地址租约(Offer) 3.客户端选择并请求地址租用(Request) 4.服务器确认将地址租用给客户端(ACK)
Telent远程访问协议:
Telent是一种在UNIX平台上最为人所熟知的网络协议。
Telent使用TCP端口23,它是住那么Wie局域网设计的。
Telent不是以一种安全通行协议,因为它并不适用任何安全机制,通过网络/互联网明文格式的数据,包括密码,所以谁都能嗅探数据包。
SHH远程访问协议:
SSH是通过互联网访问网络设备和服务器的主要协议。默认情况下通过TCP22端口运行,端口号可以更改。SSH是一种非常安全的协议,因为它共享并发送经过加密的信息,从而为通过互联网等不安全的网络访问的数据提供了机密性和安全性。一旦通讯的数据使用SSH经过加密,就及难解压和读取该数据,所以密码在公共网络上传输也变得很安全。
SMTP简单邮件传输协议:
SMTP是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。TCP协议的25端口,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP服务器就是遵循SMTP协议的发送邮件服务器。