1.局域网和广域网
- 局域网LAN: 即 Local Area Network,简称LAN.
- 局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的.
- 局域网一般可以由交换机或路由器组建.
- 广域网WAN: 即 Wide Area Network,简称WAN.
- 广域网是将多个局域网连接起来(可以通过路由器),在物理上组成很大范围的网络.又称外网;广域网内部的局域网都属于其子网.
- 广域网一般由路由器组建.
2.IP地址
IP地址主要用于标识网络主机,其他网络设备(如路由器)的网络地址.简单说: IP地址用于定位主机.
IP地址是一个32位的二进制数,通常被分割为4个"8位二进制数"(也就是4个字节),如:01100100.00000100.00000101.00000110.(一般用点分十进制表示,如前面的四个字节就是:100.4.5.6)
2.1.特殊IP
127.*的IP地址用于本机环回(loop back)测试, 通常环回IP是127.0.0.1
3.端口号
端口号用于描述某个应用程序. 一般是两个字节的无符号整数,范围是 是0~65535. 需要注意的是,两个不同的进程不能同一时间绑定同一个端口号.但是一个进程可以绑定多个端口号.
4.网络协议
4.1.协议分层
网络协议整体的规模很大,整体实现就很复杂,更好的解决方式就是把一个大的复杂的协议,拆成多个小的更简单的协议,每个协议负责一部分工作
4.1.1.协议分层的优点
- 每层协议不需要理解其它层协议的细节(更好的做到了封装)
- 把对应层的协议替换成其他协议不会对整体产生影响(更好的解耦合)
4.1.2.OSI七层模型
4.1.3.TCP/IP五层(或四层)模型
物理层我们考虑的比较少.因此很多时候也可以称为 TCP/IP四层模型.
4.2.网络分层:封装和分用
- 封装
- 应用层协议构造出一个应用层的数据报文(各个应用协议根据应用自己约定). 应用层协议调用操作系统提供的API(称为socket API),把应用层的数据,交给传输层
- 传输层(操作系统内核)根据刚才传过来的数据,基于当前使用的传输层协议,来构造出一个传输层的协议报文(UDP/TCP),接下来就会把这个传输层的数据报,交给网络层.
- TCP为例:TCP数据报 = TCP报头 + 数据载荷(Payload,也就是完整的应用层数据)
- 网络层拿到完整的传输层数据报,再根据当前使用的网络层协议,再次进行封装.把TCP数据报构造成IP数据报(IP协议报头+TCP数据报).然后当前的网络层协议就会把这个IP数据报交给数据链路层
- 数据链路层把得到的数据报根据数据链路层协议构造成一个数据链路层的数据报–“以太网数据帧”(帧头 + IP数据报 + 帧尾).把数据报给物理层
- 物理层传输给下一个节点
- 如果是交换机的话:交换机先分用数据解析到数据链路层,更新以太网数据帧的帧头里的地址,然后再重新封装,并进行转发
- 如果是路由器的话:路由器先分用数据到网络层,拿到IP地址后,进行下一阶段的路径规划,然后重新往下封装并进行转发
- 分用
- 下一个节点的物理层把数据交给数据链路层
- 数据链路层对这个数据进行解析,去掉帧头和帧尾,取出IP数据报,交给网络层协议
- 网络层协议(IP协议)又会对这个数据进行解析,去掉IP协议报头,取出里面的TCP数据报,交给传输层
- 传输层协议(TCP协议)又会对这个数据进行解析,去掉TCP报头,取出里面的应用层报文,交给应用层
- 应用层就会调用 socket API 从内核中读取到这个应用层数据报,再按照应用层协议进行解析,根据解析执行下一步操作.
封装过程如图. 分用过程正好与封装过程相反.
5.网络编程:套接字
网络套接字,是操作系统给应用程序提供的一组API(叫做Socket API). Socket套接字主要针对传输层协议划分为三类.
- TCP
- UDP
- 原始套接字
这里我们介绍TCP和UDP套接字.