一、网络通信基础
计算机网络:
把分布在不容地理区域的计算机与专门的外部设备用通信线路互连成一个规模大,功能强的网络系统,从而使众多的计算机可以方便的互相传递消息、共享硬件、软件、数据信息等资源。
网络编程的目的: 直接或间接的通过网络协议与其他计算机实现数据交换,进行通讯
网络编程中有两个主要的问题:
- 如何准确定位网络上一台或多态主机;定位主机上的特定应用
- 找到主机后如何可靠高效的进行数据传输
二、网络通信要素
2.1、ip地址
ip地址主要用于标识网络中的主机、其他网络的设备的地址,简单来说,IP地址用于定位主机的网络地址
举例:以发快递为例,ip地址就是我们需要填写的收获地址,这样快递员才知道快递送往哪个地方
2.2、端口号
端口号 : 在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机方法的数据、接收数据的进程。也就是说端口号用于定位主机中的进程
举例:发快递时不仅要指定收货人的地址(IP地址),还要指定收获人的信息(端口号)
格式:
端口号是 0 ~ 65535范围的数字,在网络编程中,进程一个通过绑定一个端口号,来发送及接收网络数据。两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号
端口的分类:
- 公认端口 : 0 ~ 1023 : 被预先定义的服务通信占用(如:http占用端口80,FTP占用端口21,Telent占用端口23)
- 注册端口: 1024 ~ 49151 : 分配给用具进程或应用程序。(如:Tomcat占用端口8080,MYSQL占用端口 3306,Oracle占用端口1521等)
- 动态/私有端口: 49152 ~ 65535
端口号与IP地址组合得出一个网络套接字:Socket
2.3、协议
协议是网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须遵从的一组约定、规则。如怎么样建立连接,互相识别等。只有遵守这个约定,计算机之间才能互相通信交流。
协议分层:
但是由于当前网络中涉及到的协议,是有很多的,情况非常复杂,无法通过一个协议,来把所有的功能都涵盖进去,就拆分出了多个协议。为了更好的来组织这些协议,就按照这些协议的定位,再进行分类,于是就有了“协议分层”
以两个人打电话为例: 分为了两层:语言层和通信设备层
- 达到了封装的效果,把实现细节隐藏起来,降低了人们的使用成本,打电话的人不需要理解具体的电话机的工作原理。造电话机的,也不需要懂各种语言,只需要把数据进行封装,传递,到时能够再解析出来就可,至于说的是不是人话,不是电话机该管的事情。
- 可以方便的对某层或某些协议进行升级,而不影响其他的层。你用什么语言和电话机没有关系,都能给你原封不动的传递到,不会出现说汉语能交流,明天说英语,电话机不知道你说的是什么,而不给你传递的情况。打电话的人也不需要关心,你是陆运还是空运,能即时给我送到就行。
OSI是七层网络模型,TCP/IP五层网络模型
OSI 存在于理论中,但是在实际应用中有些实现起来比较困难,或根本没有必要分这么细,复杂又不实用,所以就对层级进行了合并,就有了我们使用 TCP/IP 五层网络模型(程序员主要考虑的是软件方面的,有时会忽略物理层,所以有的资料中也叫 TCP/IP 四层模型)
-
应用层 : 常用的 http协议,ftp协议(文件传输协议)、snmp、telnet(远程登录协议),集成了osi分层中的应用,表示,会话三层的功能 -
传输层 : 只关心启动和重点,不关注具体的通信细节 -
网络层 : 针对网络上的任意两台主机,完成一个通信路径的规划,以及具体的传输 -
数据链路层 : 实现了两个相邻设备之间的数据通信~ -
物理层 : 硬件设备,网络通信的基础设施,网线、网卡等
举例说明:
封装与分用:
封装 : 就是加入本层使用的协议以及关于协议的关键内容,相当于快递的包装过程
分用 : 当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用,相当于拆快递的过程。
|