计算机网络是什么?
利用通信线路,将地理上的分散的、具有独立功能的计算机系统和通信设备,按不同的形式连接起来,以功能完善的网络软件及协议实现资源贡献和信息传递的系统。
主要网络有哪些?(这里指从范围上划分,另外还有很多种划分的方式)
- 局域网 LAN
- 城域网 100km以内
- 广域网 更大的范围
计算机网络体系结构
3G、4G、5G对应哪一层? ——链路层
TCP/IP协议族
以下协议都属于TCP/IP协议族,协议很多,分布在不同的网络分层中
分层 | 协议 |
---|---|
应用层 | TFTP、HTTP、FTP、DNS、Telnet… |
传输层 | TCP、UDP |
网络层 | IP、ICMP、RIP、OSPF… |
链路层 | SLIP、CSLIP、PPP、ISO2110、2EEE802… |
网络传输中的数据
- 发送端把数据一层层包装,接收到收到以后再一层层解包
- 几个常用的术语:
包:全能术语,如数据包
帧:链路层中,包的单位
片:IP中数据单位
段:TCP数据流中的信息
消息:应用协议中数据单位 - TCP与UDP
TCP是面向连接的,可靠的协议流
UDP是面向无连接的通讯协议
UDT基于UDP,在HTTP3中广泛使用,应用层自己实现重传
DNS、QQ、视频直播等允许丢包的应用,用UDP - 为什么要发明UDT?
在TCP中,算法比较保守,带宽变小以后,会立刻减速,但带宽变大恢复后,传输速度恢复的慢,在目前的网络快速发展的时代,显得太保守了 - 我要基于UDP实现可靠的协议,要怎么做?
可以在应用层自己实现。
Mac地址
- MAC地址也叫物理地址、局域网地址、以太网地址,是由网络设备制造商,烧写在设备内部的,与网络无关。
- 一个设备、一个网卡、一个路由器、一个手机就有一个MAC
- 00-00-00-00-00-00 前6位,要去IEEE申请,后六位由厂商决定
- 理论上,MAC地址就是唯一的
- MAC地址,属于网络分层中的链路层
IP地址
- IP地址是为互联网上的网络或主机配置一个唯一的逻辑地址
- IP地址是可更改的,IP属于网络分层中的网络层
- 寻址:每个设备接入路由器,都要广播自己的IP,路由器会保存每台设备的IP、MAC
端口号
- 端口号是用来识别同一台计算机中进行通信的不同应用程序。也被称为程序地址。属于网络分层中的传输层
- 例如手机上安装了QQ、微信、美团,路由器把数据包发送给了当前机器,操作系统要通过端口号来识别,数据包属于哪个应用。
- 一般在定义协议时就指定了端口号,如HTTP一般是80,FTP一般是21,这些属于知名端口号。
- 知名端口号一般在1~1023
不知名端口号在1024~49151,可用,但一般不用
49152~65535之间,不指定端口号时,操作系统会在这个范围内选择,因为这些端口号没人用 - 服务端一般需要指定端口号:既然要提供服务,就应该告诉客户端自己的端口号时多少
- 客户端一般不需要指定端口号:操作系统会分配(49152~65535)
TCP协议
特点
- 端对端,面向连接
- 可靠性
- RTT往返时延
- 数据排序
- 流量控制
- 全双工
三次握手
- SYN:标志位
ACK:通讯报文中的一个标志位
ack:具体的一个数,对seq的一个应答 ack=seq+1 - 为什么需要三次握手?
TCP是面向连接的,可靠的,客户端和服务端都需要知道对方有没有收到自己的序列号起始值,即seq的值,因为在一次连接中,seq的值是连续的,双方都确认了seq的起始值,才可以建立连接,连续的seq的好处是,如果网络出现异常,可以知道丢的是哪个包。
所以说三次握手是能让双方都确认的最小次数。 - TCP三次握手的漏洞——SYN洪泛攻击
在第一次握手的时候,用假的IP大量发送,应答就永远到不了真实客户端,服务器一直在SYN_RCVD状态
解决方法:1、无效连接监控释放;2、延缓TCP分配方式;3、防火墙(生产中主要是这种方式,有效的IP才能到达服务器)。
推荐书籍
- 基础《Java网络编程》第4版
- 深入《UNIX网络编程》第3版
- webSocket圣经《HTML5 WebSocket权威指南》
- TCP/IP圣经《TCP/IP详解》3卷