JavaEE初阶-网络编程
网络初识
TCP/IP协议
五层模型:应用层、传输层、网络层、数据链路层、物理层(硬件)
应用层
对应应用程序,下面四层是操作系统封装好了的
传输层
不考虑中间路径,只关注起点和终点
举例:我在淘宝买东西,我和卖家都不关注中间是怎么传输的,只要货物运到就可以了
网络层
主要负责两个遥远结点之间的路线规划
举例:在淘宝买东西,收货地苏州,发货地是北京,北京->苏州有好多条路可以走,要从其中选择一条
数据链路层
主要关注相邻节点之间的传输
举例:如果路线是:北京->徐州->南京->苏州,需要关注的是每一段路,比如
北京->徐州 火车
徐州->南京 卡车
南京->苏州 卡车
物理层
网络通信的基础设施,网线、光纤、网络接口...
在协议分层的背景下,数据如何通过网络传输?
封装和分用
发送方发送数据,要把数据从上到下,依次交给对应的协议层进行分层,进行封装
接收方接收数据,要把数据从下到上,依次交给对应的协议层进行分层,进行解析
举例:以QQ发送消息为例
1.发送方:我在编辑框输入一个消息:666,并发送
应用层(QQ应用程序)拿到这个数据要进行封装,封装成应用层数据包,本质上是字符串拼接,会通过一个内部的协议进行设计,外人不知道
2.传输层拿到数据
应用层要调用传输层提供的Api,来处理这个数据
传输层有很多协议,最典型的是TCP和UDP
以UDP为例,UDP根据上述数据包再进行封装
一个典型的数据报都是通过报头+载荷的方式构成的
socket套接字
程序员编写网络程序,主要编写的是应用层代码,真正要发这个数据,需要上层协议和下层协议,应用层要调用传输层,传输层给应用层提供一组api,统称为socket api。
系统提供的api主要分为两组:
基于UDP的api
基于TCP的api
UDP协议
无连接→发短信
不可靠传输→不用关注有没有成功
面向数据报→以一个UDP数据报为单位
全双工→双向通信
TCP协议
有连接→打电话
可靠传输→尽可能的传输过去,知道自己有没有成功
面向字节流→一个字节一个字节的传输,读写方式比较灵活
全双工→双向通信
此处的连接是一个抽象的连接,可以理解成是通信的过程中,双方都记录了对方的信息。
半双工:单向通信
UDP数据报套接字编程
了解UDP的api,做数据接收和转发
DatagramSocket
DatagramPacket
要想进行网络通信,就需要有socket文件这样的对象,借助这个socket文件对象,才能够间接操作网卡。
未完待续。。。