通信 (通讯)的本质:某种物理信号的传输
通信 (通讯)需要两个最基本的条件:
(1) 物理媒介 (物理层面)
电话线
关纤
......
(2) 协议 (软件层面)
网络协议
1. 网络协议层次模型
层次:模块,在一些大型软件应用中,通常把一些功能做成模块 (模块化)
网络协议 -----> 模块
固定为上一个模块可以调用下一个模块
网络数据到底是如何传输的:
分层传输, 每层实现各自的功能和协议 ,将数据打包交给下一层或者拆包交给上一层处理
OSI (开放式系统互联) 七层模块TCP / IP模型
应用层:
为不同的应用程序提供各种服务和接口。应用层协议实现了在不同主机之间进行数据共享、数据查询和应用执行的功能。网络应用程序工作在TCP/IP模型的应用层,在网络应用程序中我们可以使用协议封装我们需要发送的数据
常用的协议有:HTTP (超文本传输协议)、FTP (文本传输协议)、 Telnet (远程登录协议)、ssh (安全的远程登录协议),DNS (域名解析协议)等
传输层 (TCP和UDP工作在传输层):主要解决数据如何传输的问题。传输层主要提供了两种不同类型的服务:TCP和UDP
TCP:传输层控制协议,是一种面向连接的传输层协议,它能提供高可靠性的通信 (即数据无错误,数据无丢失,数据无失序,数据无重复到达) ---->打电话
=====>建立连接
"三次握手,四次挥手"
"超时重传"
UDP:用户数据报协议,它是不可靠的无连接的协议,因为在数据传输前,不需要进行连接,所有数据传输是不可靠的,传输效率高,应用在 "实时应用",直播,视频通话,发短信......
网络层 (IP工作在网络层):其主要作用是实现两个网络系统之间的数据透明传送,不同网络有着不同的网络层协议和地址规范,如果一个网络中的用户不能识别其他网络的通信协议和地址规范,那么这两个网络之间就不能进行数据通信
其功能包括:IP地址分配,路由选择,包装和解封装,网络互联,分段与重组,基于IP协议的寻址和转发
IP地址是用于在计算机网络上唯一标识和定位设备的数字标识。它是一个由数位组成的标签,用于表示网络中的每个节点 (如计算机、服务器、路由器等)。IP地址在网络通信中起 着至关重要的作用,它们标识了源设备和目标设备,使得数据包能够正确路由和传递。通过使用IP地址,计算机和设备可以相互发送和接收数据,并实现互联网上的各种服务和应用
物理层 (设备驱动和硬件):网卡
网线
MAC协议:每一台机器都有一个MAC地址 (物理地址)
......
2. 认识常见的网络设备和网络名词
猫 (调制解调器):
把电信号变成数字信号
把数字信号变成电信号
路由器 (工作在网络层):拨号 -----> 局域网作用:路由寻址,隔离广播域 ......
选择网络数据的下一站,主要用于在不同的网络之间转发数据包,接收到一个数据包时,会解析数据包,查看目的IP地址,如果目的IP地址在本地局域网中,则会直接把数据包发送给目标主机,如果目的IP不在本地局域网中,则会把数据包发送给默认转发端口 (网关)
网关:计算机网络中的一种网络设备,用于连接不同类型、不同协议或不同速率的网络。它是实现不同网络互联的重要节点,可以使数据在不同网络之间传输和转换
实质是一个网络通向另一个网络的IP地址
网卡:将计算机中的数据通过电缆或其他媒介传输到网络上,或者从网络上接收数据并传输到计算机中
集线器:不是智能的,物理上面相连,工作在物理层,将多个计算机连接在一起形成一个局域网,并使它们能够互相通信 (会将收到的数据包广播给所有处在该局域网的所有设备中)
交换机:
工作在数据链路层,比集线器稍微智能,网络数据就是MAC地址的集合,能够区分源MAC地址和目的MAC地址,可以在局域网任意两个端口建立联系,不懂IP地址 (某些高级交换机还具有IP路由功能)MAC地址:
每一台机器的网卡都有一个MAC地址 (物理地址)
3. 互联网的IP地址
互联网上面的每一个接口 (网卡)必须有一个唯一的internet 地址 (也叫做IP地址),是一个逻辑地址 (协议上的一个编号),进行网络通信的时候,使用这个IP地址唯一的标识一台主机
ipv4:32位,4个字节ipv6:128位,16个字节
问题:在百度上直接搜索显示的是internet 的 IP (公网IP),在linux (ifconfig)或者windows终端 (ipconfig)下输入命令,会显示私有IP,这两个IP有什么区别呢?
公网IP一般是运营商分配的,只有公网IP才能上internet,但是不可能给每一个电脑分配一个公网IP,IPV4不够,所以需要私有IP,这种IP一般是用于局域网管理,不能直接连internet,必须通过公网IP
IPV4地址有32bit (4字节),那么怎么区分呢?一般把一个IP地址分为两个部分:"网段号" "主机号"
类似于日常生活电话号码中的“区号” 和 “主机号”
网段号:用来标识某一个局域网段在IP地址中连续的高位
主机号:用来标识某一个局域网段中特定的主机
在IP地址中连续的低位
32bits,是32个0或者1,给人看,不太合适
=====>
一般把IP写成“点分式”的IP字符串
每8个bits表示一个数字,中间用 . 分隔开来
IP地址分类:
A类:IP地址范围:0.0.0.0 ~ 127.255.255.255
私有地址范围:10.0.0.0 ~ 10.255.255.255 ---->用于局域网内部
每一个局域网中,最大的主机数:2^24-2 除去网关和广播号
B类:IP地址范围:128.0.0.0 ~ 191.255.255.255私有地址范围:172.16.0.0 ~ 172.31.255.255 ---->用于局域网内部
C类:IP地址范围:192.0.0.0 ~ 223.255.255.255私有地址范围:192.168.0.0 ~ 192.168.255.255 ---->用于局域网内部
特殊的IP地址:127.0.0.0 回环地址,本地测试用
169.254.0.0 ~ 169.254.255.255 自动配置地址,本地链路地址,用于主机主动获取地址失败后的临时通信
netmask (子网掩码):就是用来指定一个Ip地址中,哪些位是网络号,哪些位是主机号,netmask中为1的bit为网络号,为0的bit是主机号
问题:
局域网内部192.168.1.4 和192.168.3.5 能不能直接通信?
由netmask决定
设置为255.255.0.0
这两个ip就在同一个网段,就能直接通信
netmask前面一定是连续的1,后面是连续的0才是合法的
设置网卡的IP地址和子网掩码:
ifconfig eth0 192.168.1.4 netmask 255.255.255.0 up
IP地址是用来唯一的标识网络上面一台主机的,但是一台主机上面可以跑多个网络应用程序
为了区分一台主机上面的多个应用程序
======>“端口号”
4. 端口号 (prot)
TCP和UDP使用无符号的 16bit 端口号来标识网络应用
IP地址只能够唯一的标识网络上面一台主机,但是一台主机上面可以跑多个网络应用程序,而且网络应用程序从传输层的角度来说,可以分为TCP应用和UDP应用
TCP的端口号和UDP的端口号相互独立
一台主机的网络应用程序至少由以下的东西确定:IP地址(网络层) + 传输层协议(TCP/UDP)(传输层) + 端口号
端口号由 IANA管理众所周知的一些端口 (已经公认定义或为将要公认定义的软件保留的):1 ~ 1023
ftp:21
http:80
dns:53
......
注册端口:1024 ~ 49151
动态端口或者私有端口:49152 ~ 65535
5. 字节序问题
小端模式:低地址存放低字节
大端模式:低地址存放高字节 -----> 和人们阅读习惯一致
网络字节序,采用大端模式
大部分的主机都是小端模式,当应用程序将多字节整数传递给 socket 之前,需要转换成网络字节序,当应用程序从socket 上获取多字节整数时,需要转换成主机字节序
6. 三次握手,四次挥手
SYN:同步标志 ACK:应答标志 seq:序列号
6.1 三次握手
1. 客户端发送连接请求:
客户端首先向服务器发送一个SYN=1 (同步) 数据包,其中包含客户端的初始序列号seq=x
这个SYN包标志着客户端希望建立连接,并使客户端进入SYN_SENT状态2. 服务器响应连接请求:
服务器收到客户端的SYN包后,会回复一个带有SYN和ACK (确认)标志的数据包,表示服务器收到了客户端的连接请求,并同意建立连接
在这个阶段,服务器也会选择一个初始序列号,并将客户端的序列号加1作为确认号,以确认客户端的接收能力
这个阶段后,服务器进入SYN_RCVD状态3. 客户端确认连接:
客户端收到服务器的SYN 和 ACK包后,会发送一个带有ACK (确认)标志的数据包给服务器,表示客户端也同意建立连接
在这个阶段,客户端将服务器的序列号加1作为确认号,以确认服务器的接收能力
客户端和服务器都进入已建立连接的ESTAB-LISHED状态,可以开始进行数据传输6.2 四次挥手
1. 客户端发送连接终止请求:
客户端向服务器发送一个FIN (结束) 数据包,表示客户端已经完成了数据的发送,希望关闭连接
客户端进入FIN_WAIT_1状态,等待服务器的确认或响应。
2. 服务器确认收到终止请求:
服务器收到客户端发送的FIN包后,会回复一个ACK (确认)数据包给客户端,表示服务器已经接收到了客户端的结束请求
在这个阶段,服务器进入CLOSE_WAIT状态,表示服务器已经准备好关闭连接,但是还有可能有一些数据需要发送给客户端
3. 服务器发送连接终止请求:
服务器发送一个FIN包给客户端,表示服务器也准备关闭连接了。
在发送FIN包之后,服务器进入LAST_ACK状态,等待客户端的确认
4. 客户端确认收到终止请求并关闭连接:
客户端收到服务器发送的FIN包后,会回复一个ACK包给服务器,表示客户端确认收到了服务器的终止请求
在这个阶段,客户端进入TIME_WAIT 状态,等待可能出现的延迟的数据包
当客户端完成等待后,会关闭连接,进入CLOSED状态
服务器收到客户端的确认后,也关闭连接,进入CLOSED状态