欢迎来到javaee初阶的第三课,这节课我会带大家来初识网络
荔枝目录
- 1.认识IP和端口
- 1.1 IP
- 1.2端口
- 2.认识协议
- 2.1协议分层(TCP/IP协议)
- 2.2封装与分用
- 2.3两台主机之间的网络通信流程(非同一网段)
- 3.其他常见名词 解释
- 3.1客户端
- 3.2 服务器、请求和响应
- 结束语
1.认识IP和端口
1.1 IP
🐋IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机。
就像我们发送快递一样,IP地址就是发件人和收件人的地址,发件人叫源ip,收件人是目标ip,但是只知道地址还不行,必须还得知道是哪个人收货。在计算机里,就是得知道是哪个进程接收这个数据,所以需要端口名来标识。
–
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:
01100100.00000100.00000101.00000110。
通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:
100.4.5.6。
- (有时我们还会见到mac地址,mac地址是我们网卡的地址,相对于IP地址它是一个物理地址。总的来说,IP 地址解决的是数据在外网(因特网、互联网)的传输问题,MAC 地址解决的是数据在内网(局域网)中的传输问题。)
1.2端口
想要知道上面快递具体是那个人的,就需要知道什么是端口号。
🐲在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程
🐲端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据,但是两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号
有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?
网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如发送一个文本字符串“你好!”:如何标识发送的数据是文本类型,及文本的编码格式呢?基于网络数据传输,需要使用协议来规定双方的数据格式。
大家可以记住一句话:
- 贫僧从东土大唐而来,前往西天拜佛求精
贫僧是源端口,东土大唐是源IP;佛是目的端口,西天是目的IP;
2.认识协议
为什么要分层:因为网络协议很复杂,如果不对其进行处理,不利于维护和修改,同时使人的学习成本变大等等,比如我只想学一下某一块协议是怎么处理的,但由于是一个整体,我就不得不把一整块全学了,这不是我们希望看到的。所以我们把它拆分成许多单一的模块,为了防止拆分的模块太多,我们进一步对其进行分类,也就是分层。
目前比较流行的协议分层是OSI七层协议,和TCP/IP五层协议,前者主要存在于教科书上,后者才是实际常用的,那么我就介绍一下后者
2.1协议分层(TCP/IP协议)
TCP/IP是一组协议的代名词,它还包括许多协议(TCP和IP协议是最重要的),组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,
⚫ 上层协议调用下次协议,下层协议为上层协议提供服务
应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层
●在这些协议中提到的各种报,帧什么的都是指的传输数据,在不同场景下名称含义略有不同。
当然,光看这些概念肯定让人头大,有没有什么形象的荔枝呢?当然有!
2.2封装与分用
封装:
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报
(datagram),在链路层叫做帧(frame)。
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装
(Encapsulation)。首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
● 以传输层里的TCP协议为例,数据到传输层通过TCP协议就会被打上TCP报头,里面主要的信息就是源端口和目的端口
分用:
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段”
将数据交给对应的上层协议处理,这一步就是分用
2.3两台主机之间的网络通信流程(非同一网段)
1.主机A应用层数据到传输层被分段,打上TCP头(含源端口,目的端口),再向下发给网络层,打上IP地址(含源IP,目的IP),再向下发送给数据链路层,打上数据帧(含源MAC地址,目的MAC地址),由于不知道目的MAC地址,则在MAC上打上于网关(路由器接口)的MAC地址,发往路由器A。
2.路由器A收到消息后,重新封装数据帧(得知发送到B主机需要经过路由器B),于是修改源MAC地址为路由器A的MAC地址,目标地址为B的MAC地址,(路由器A进行NAT地址转换)
3.路由器B收到路由器A的信息,核对地址,检查IP,修改MAC,源MAC改为路由器B的MAC地址,(假如主机B在路由器B的子网中)目标MAC地址填写为主机B的MAC地址,即下一步将信息发送给主机B。
4.主机B接收到数据后对数据拆帧、包,TCP头,检查其目的地址与校验,重新整合这些数据流之后,将这个数据流传递给应用层处理。
3.其他常见名词 解释
3.1客户端
客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。
3.2 服务器、请求和响应
服务器指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务,运行以上软件的计算机或计算机系统。服务器需要响应服务请求,并进行处理,这个处理就是响应。
结束语
那么JaveEE初阶第三课到此就结束啦,下节课我们会学习网络编程套接字socket,来学习如何用代码实现网络编程。