JavaEE网络通信

IP地址和端口号

P地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。

点击win+R打开运行对话框,输入cmd,打开命令窗口,再输入ipconfig,就可以查到自己电脑的IP了
在这里插入图片描述
可以看到ip地址172.29.198.6

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如01100100.00000100.00000101.00000110。
通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。

现在我们知道了IP地址,就相当于知道目的主机的位置,但是要发给哪个程序哪个进程呢?这个时候我们就需要知道端口号,来定位接收数据的进程程序

在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。

两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。

协议

协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

现在我们已经知道了网络通信的IP地址和端口号了,那么具体怎么样通信,按照什么样的方式通信呢?这时候就需要定义一个规则来进行双方的通信,这个规则就叫做协议

协议分层

协议分层类似于打电话时,定义不同的层次的协议:
在这里插入图片描述

分层的好处:
1.分层之后就可以做到,层次之间,耦合度比较低
2.上层协议不必了解下层协议的细节,下层不必了解下层的细节
3.方便对某一层协议进行替换

那么真实的网络协议具体是怎么样分层的呢?
OSI七层网络模型(教科书上)
TCP/IP五层网络模型(使用最广泛)
我们重点了解TCP/IP协议

应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。

在这里插入图片描述

封装和分用

在了解分装和分用之前我们先来了解一下在TCP/IP协议中五元组

  1. 源IP:标识源主机
  2. 源端口号:标识源主机中该次通信发送数据的进程
  3. 目的IP:标识目的主机
  4. 目的端口号:标识目的主机中该次通信接收数据的进程
  5. 协议号:标识发送进程和接收进程双方约定的数据格式

在协议分层下,数据是咋样传输的?
通过封装和分用完成的
发送方发送数据,要把数据从上到下,依次交给对应层次的协议进行封装
接收方收到数据,要把数据从下到上,依次交给对应层次的协议进行分用(解析)
这个过程比较抽象,我们可以理解为包装快递和拆快递
下面我们举一个平时你给对象发送信息的例子来讲解封装分用的具体过程
发送方:糖芬蛋糕
接收方:对象宝贝
糖芬蛋糕在QQ聊天框输入:宝贝,想你了
首先,应用层(qq) 拿到上述的数据,进行封装,封装成应用层数据包
这里注意封装的本质其实就是字符串的拼接
1封装成应用层数据包
在这里插入图片描述
注意,真实的应用层数据报非常复杂,我们这里只是举个例子

我们在"宝贝,想你了"这句话前面拼接了发送方和接收方的QQ号,以及发送时间

2.传输层拿到上述数据

应用层要调用传输层的api来处理数据

传输层有很多协议,最典型的是TCP和UDP

这里我们先来说一说UDP的

UDP针对上述数据包再一次封装,就是在最前面加一个UDP数据报头,把上述数据当做UDP数据报的载荷
在这里插入图片描述
一个典型的数据报就是报头+载荷构成的

这里加的报头是为了再加一层标签,然后在标签上填写必要属性

3.网络层拿到上述数据

网络层最常见的协议是IP协议

将上述UDP数据包进一步封装,添加IP协议报头,整个UDP数据报作为IP数据报的载荷

在这里插入图片描述

源IP和目的IP就是描述了这次传输的起点和终点

4.网络层交给数据链路层

数据链路层最典型的协议就是以太网,以太网其实也包括在物理层内,单词书不做讨论

将上述数据报进行封装,加上以太网数据帧

在这里插入图片描述

这里解释一下啥叫mac地址

也叫做物理地址,和IP一样,也是描述一个主机在网络上的位置

它的功能和IP类似,但是这两个地址用于不同的用途

IP用来进行网络层的传输路径的规划

mac用来进行描述数据链路层,两个即将进行传输的相邻结点

一个网卡理论上只有一个mac地址

5.数据链路层把上述以太网数据帧交给物理层

物理层把010101的二进制数据转换成电信号或者光信号,进行传输

刚刚讲的封装过程操作系统给我们封装好了

现在来说一说接收过程

接收过程和发送过程恰好相反

发送是从上到下,依次封装,新增报头

接收是从下到上,依次分用,去掉报头

忽略转发过程,只考虑发送和接收

1.物理层,网卡收到高低电平二进制数据

对电信号/光信号/电磁波进行解析,还原成010101的二进制数据

2.物理层到数据链路层

把上述的0101的数据当做以太网数据帧,这里是从以太网线收到的数据,自然要交给以太网协议处理
在这里插入图片描述

现在把帧头帧尾去掉,取出载荷,上交给网络层

帧头有一个消息类型,根据这个类型就知道网络层是IP协议了

3.网络层

现在将数据从数据链路层上传给网络层

此时由网络层的IP协议进行解析数据报,去掉IP报头

最重要的就是取出载荷,交给上层的传输层

在这里插入图片描述

IP数据报头也有一个字段标识出当前传输层用的是哪个协议

4.传输层

由UDP进行解析

去掉UDP报头,取出载荷交给应用层

在这里插入图片描述

5.应用层

由QQ这个程序,进行解析应用层数据报

取出下列字段,放到聊天界面
在这里插入图片描述

最后在你对象的qq界面上会显示

发送方,层层封装,就相当于包装快递
接收方,层层分用,相当于拆快递

客户端与服务器之间的交互

在这里插入图片描述

两台主机间的通信

在这里插入图片描述

数据发出,从应用层封装到物理层,到达交换机,交换机会进行分用,从物理层分用到数据链路层,检查mac地址是否正确,然后再重新封装到物理层,将数据继续转发,注意,此时重新封装.源mac和目的mac就变了
继续传输,遇到路由器,从物理层分用到网络层,根据现在得到的源IP和目的IP进行下一阶段的寻路操作
(IP协议是一边传输,一边规划路径)
然后把数据报重新封装到物理层,再经过数据链路层的时候,源mac和目的mac也进行了更新

继续转发,最后到达接收方电脑

网络中每一次消息的传输都会涉及到封装分用

交换机,只需要封装分用到数据链路层,也就是更改源mac和目的mac

路由器,要封装分用到网络层,需要更改mac以及根据源IP 和目的IP进行下一段的路径规划

一般来说,交换机是二层转发,路由器是三层转发

但是在现实中,路由器和交换机界限越来越模糊

路由器可以通过设定,只进行二层转发

交换机也有高端的交换机进行三层转发,

甚至路由器和交换机还能封装分用到应用层,也就是在路由器或者交换机就捕获到消息了

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值