计算机网络(英语:computer network),通常也简称网络,是利用通信设备和线路将地理位置不同的、功能独立的多个计算机系统连接起来,以功能完善的网络软件实现网络的硬件、软件及资源共享和信息传递的系统。简单的说即连接两台或多台计算机进行通信的系统。
网络应用是计算机网络存在的理由,如果我们不使用任何应用,也就没有任何必要去设计它们的网络协议了。
物理层
计算机的世界里只有0和1, 正如你现在所看这篇文章的文字, 存储在计算机中也是一大串0和1的组合. 但是这些数字不能在真实的物理介质中传输的, 而需要把它转换为光信号或者电信号, 所以这一层负责将这些比特流(0101)与光电信号进行转换.
如果没有物理层, 那么也就不存在互联网, 不存在数据的共享, 因为数据无法在网络中流动.
数据链路层
数据在这一层不再是以比特流的形式传输, 而是分割成一个一个的帧再进行传输.
网络层
如果只有数据链路层没有网络层, 数据就只能在同一条链路上传输, 不能跨链路传输. 有了网络层, 数据便能跨域不同的数据链路传输.
IP地址
IP地址又称为软件地址, 存储在计算机的存储器上, IPv4地址为32位, IPv6地址为128位
IP地址和MAC地址
- 网络层以上使用IP地址, 数据链路层以下使用MAC地址
- IP地址是逻辑地址, MAC地址是物理地址
- IP分组中首部的源地址和目的地址在传输中不会改变, MAC帧中首部的源地址和目的地址每到一个路由器会改变一次
IP地址分类
IP地址 = {<网络号>, <主机号>}
A类地址 : 0.0.0.0 ~ 127.0.0.0
B类地址 : 128.0.0.0 ~ 191.255.0.0
C类地址 : 192.0.0.0 ~ 223.255.255.0
划分子网之后的IP地址
IP地址 = {<网络号>, <子网号>, <主机号>}
例如某单位拥有一个B类IP地址, 145.13.0.0, 但凡目的地址为145.13.x.x的数据报都会被送到这个网络上的路由器R. 内部划分子网后变成 : 145.13.3.0
, 145.13.7.0
, 145.13.21.0
. 但是对外仍表现为一个网络, 即145.13.0.0
. 这样路由器R收到报文后, 再根据目的地址发到对应的子网上.
子网掩码
一般由一串1和一串0组成, 不管网络有没有划分子网, 将子网掩码和IP地址做按位与运算即可得出网络地址.
所有的网络都必须使用子网掩码, 同时在路由表中必须有子网掩码这一栏. 如果一个网络不划分子网, 那么该网络的子网掩码就是默认的子网掩码.
A类地址的默认子网掩码为255.0.0.0
B类地址的默认子网掩码为255.255.0.0
C类地址的默认子网掩码为255.255.255.0
尽管划分子网增加了灵活性, 但是却减少了能够连接在网络上的主机总数.
传输层
这一层是重中之重, 因为数据链路层, 网络层这两层的数据传输都是不可靠的, 尽最大能力交付的. 什么意思的? 就是它们不负责提交给你的就是正确的数据. 然而这一层的TCP协议将要提供可靠传输
这一层主要重点是两个协议 : 因特网(TCP/IP网络)上的应用使用了两个运输层协议:UDP和TCP。
为什么Tcp协议需要三次握手建立连接?
TCP作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高传输的效率,而用三次恰恰可以满足以上两方面的需求!
TCP可靠传输的精髓:TCP连接的一方A,由操作系统动态随机选取一个32位长的序列号(Initial Sequence Number),假设A的初始序列号为1000,以该序列号为原点,对自己将要发送的每个字节的数据进行编号,1001,1002,1003…,并把自己的初始序列号ISN告诉B,让B有一个思想准备,什么样编号的数据是合法的,什么编号是非法的,比如编号900就是非法的,同时B还可以对A每一个编号的字节数据进行确认。如果A收到B确认编号为2001,则意味着字节编号为1001-2000,共1000个字节已经安全到达。
同理B也是类似的操作,假设B的初始序列号ISN为2000,以该序列号为原点,对自己将要发送的每个字节的数据进行编号,2001,2002,2003…,并把自己的初始序列号ISN告诉A,以便A可以确认B发送的每一个字节。如果B收到A确认编号为4001,则意味着字节编号为2001-4000,共2000个字节已经安全到达。
一句话总结就是:双方都需要确认对方收到了自己的序列号。也就是为了检测双方的发送和接收能力是否正常。
为什么Tcp协议需要四次挥手断开连接?
然后, B发送确认ACK, 并且B此时如果要发送数据, 就发送(例如做一些释放前的处理)
再者, B发送完数据之后, 发送FIN给A. (此时B处于半关闭状态)
然后, A发送ACK, 进入TIME-WAIT状态
最后, 经过2MSL时间后没有收到B传来的报文, 则确定B收到了ACK了. (此时A, B才算是处于完全关闭状态)
应用层
应用层协议最著名的就是HTTP, FTP了, 还有一个重要的DNS
域名系统(DNS, Domain Name System)
DNS 能将域名(例如, www.jianshu.com)解析成IP地址.
域名服务器分类
- 根域名服务器 : 最高层次的域名服务器
- 顶级域名服务器 : 如其名
- 权限域名服务器 : 负责一个区的应服务器
- 本地域名服务器 : 主机发送DNS查询请求就是发给它
URL
URL的格式 : <协议>://<主机>:<端口>/<路径>
, 端口和路径有时可省略.
使用HTTP协议的URL : http://<主机>:<端口>/<路径>
, HTTP默认端口号是80
HTTP协议
HTTP是面向事务的, 即它传输的数据是一个整体, 要么全部收到, 要么全部收不到.
HTTPS协议
HTTPS协议在HTTP协议的基础上, 在HTTP和TCP中间加入了一层SSL/TLS加密层, 解决了HTTP不安全的问题: 冒充, 篡改, 窃听三大风险.