网络的相关概念
网络通信:计算机通过网络传输数据
网络互连:多台计算机连接在一起,实现数据共享。根据网络连接的规模分为局域网和广域网
局域网:Local Area Network,简称LAN,当地,局部组建的私有网络。局部可以理解为一个学校,一个城市,一个国家,所以局域网和广域网的概念是相对的。
广域网:即 Wide Area Network,简称WAN。通过路由器将许多局域网组建成的范围更大的一个网。
主机:网络通信的终端,执行应用程序/用户需求的设备(手机/电脑等)
路由器:组成网络通信的设备,连接不同的网络,帮数据在网络通信中进行路径选择。
交换机:扩展路由器的接口,在同一网络内高效转发数据。
IP地址
定位主机在互联网中的位置。
ipv4
由32位整数表示,为了方便阅读, 就采用“点分十进制”来表示。
例如 :172.168.100.121
ipv6
随着互联网发展 ,ipv4地址不够用了,就诞生ipv6解决这个问题。ipv6由128位整数表示,为了方便阅读,用8组16进制数字表示,每组之间用冒号分隔,例如:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
为了简化书写,连续的零组可以被双冒号::
代替一次,如上例可简化为:
2001:db8:85a3::8a2e:370:7334
此外,前导零也可以省略,比如2001:0db8可以写作2001:db8
端口号
用来标识同一服务器进行通信的不同程序。
端口号是两个字节表示的无符号整数,范围在[0,65535]。小于1024的端口号为一些知名服务器的默认端口号。
分类
1-1023是一些知名端口号,向 http,ssh等知名应用层协议的端口号是固定的
1024 - 65535 是操作系统为其他程序动态分配的端口号,哪个端口号是空闲的就分配哪个给程序使用。自定义端口号也在这个范围。
同一主机的端口号同一时刻不重复
在一个主机中,一个端口号同一时刻不能给使用同一通信协议的多个程序使用。 比如两个使用TCP协议的程序同时使用端口号4000就会报错,一个使用TCP一个使用UDP协议传输的程序就不会报错。在cmd 中用 netstat -ano| findstr 端口号,这个命令行可以查看当前有哪些进程用的这个端口号。
一个程序可以 绑定多个端口号
给客户端提供服务的端口,称为“业务端口”,给程序员提供服务的端口称为“管理端口”,通过这个端口可以对服务器进行更精细的操控。程序出现bug,通过网络给服务器发送调试请求,服务器返回信息。进行调试的端口称为调试端口。
字节的数据范围
字节个数 | 无符号的范围 | 有符号 |
1 | [0,255] | [-128,127] |
2 | [-32768,32767] | [0,65535] |
4 | 负21亿到正21亿 | 0到42亿9千万 |
协议和分层的概念
在网络通信中,网络协议是所有网络设备传输数据都必须共同遵守的一组约定,规则。比如怎么建立连接,怎么相互识别等问题。协议最终体现在网络上传输的数据包的格式。
协议分层:网络通信是一个复杂的过程,用一个协议约定所有通信的规则,那这个协议就会很臃肿。所以就拆分成多个不同协议,让一个协议约定一类通信方式的规则。将多个功能定位类似的协议划分为一层,并约定好层和层之间的交互关系;这样实现协议的封装,解耦合。
上层协议调用下层协议,下层协议给上层协议提供服务,协议之间不能跨级访问。
五元组
TCP/IP协议中使用这五个元素来标识一个通信
协议号:双方通信用啥协议
源IP:源主机地址
源进程端口
目的IP
目的进程端口
TCP/IP五层网络模型
TCP/IP是一组协议的代名词,许多协议组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层的协议都呼叫下一层的网络协议来帮助实现数据传输。
应用层
负责应用程序之间的沟通,主要有HTTPS协议,网络编程主要针对的应用层。
传输层
负责两台主机之间的数据传输,主要有TCP,UDP等协议。
网络层
负责数据包的路径管理和路由选择,主要有IP协议。路由器工作在网络层。
数据链路层
数据链路层负责在同一局域网内的节点间进行可靠的数据帧传输。它包括介质访问控制(确定何时可以发送数据)和错误检测与纠正等功能。交换机工作在数据链路层。属于硬件层面的协议。
物理层
物理层是最底层,它定义了所有电气、机械、过程和功能性的规范.属于硬件层面的协议。
OSI七层模型在现实开发中不会用到,一般是将前三层合并为应用层。
封装
应用层到物理层的过程,将二进制字符串变成格式化数据->序列化。
数据包在传输层叫数据段,在网络层叫数据报,在数据链路层叫数据帧。
应用层数据通过协议栈发送到网络上时,要经过每层协议的封装,上层协议用下层协议进行一层封装,就是在数据包首部加一个 报头,报头包含了上层协议是什么,载荷有多长 等信息。这就是封装。经过数据链路层封装后,发送到传输介质上传输,到达目的主机,再一层一层剥掉外层协议解析报头的信息,根据报头中的上层协议字段,将数据包交给对应的上层 协议处理。这就是分用的过程。
分用
物理层到应用层(层层解析报头的作用,将载荷传递给下一层),格式化数据变成二进制->反序列化