标签:物理层 三次握手 false .net udp imp 解封 out 思路
1、网络模型OSI参考模型:应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
TCP/IP参考模型: 应用层 传输层 网际层 主机至网络层
OSI七层简述:
物理层:主要定义物理设备标准,如网线接口类型、光纤接口类型、各种传输介质的传输速率等等
。主要作用是传输比特流(将1、0转换为电流强弱)
数据链路层:主要是将从物理层接收到的数据进行MAC地址的封装和解封装。这一层工作的
设备是交换机
网络层:主要将从下层接收到的数据进行ip地址的封装和解封装。这一层的主要设备是路由器。
路由器进行数据包传播方向的定义
传输层:定义了一些传输数据的协议和端口号(TCP/UDP)
会话层:通过传输层建立数据传输的通路
表示层:对接受数据进行解释、加密和解密、压缩和解压缩
应用层:主要对应计算机的应用软件,即终端应用
2、网络通讯要素
IP地址
(1)网络中的设备的标识
(2)不易记忆,可用主机名
(3)本地回环地址:127.0.0.1 主机名:localhost
端口号
(1)用于标识进程的逻辑地址,不同进程的标识
(2)有效端口:0~65535,其中0~1024是系统使用或保留端口
传输协议
(1)通讯规则
(2)常见协议:TCP UDP
3、TCP与UDP协议的区别
TCP:传输控制协议 打电话、下载数据、
(1)建立连接,形成传输数据通道
(2)在连接中进行大量数据传输
(3)通过三次握手完成连接,是可靠协议(a:哥们你在吗?b:我在。a:好,我知道你在了。)
(4)必须建立连接,效率会稍低
UDP: 对讲机 QQ聊天 在线视频聊天 以速度快为主,不可靠,对方可能不在线
(1)将数据及源和目的封装成数据包,不需要建立连接
(2)每个数据包的大小限制在64k内
(3)因无连接,是不可靠协议
(4)不需要建立连接,速度快
4、什么是socket
Socket(套接字)
(1)Socket就是为网络服务提供的一种机制
(2)通信的两端都有Socket
(3)网络通信其实就是Socket间的通信
(4)数据在两个Socket间通过IO传输
下面使用java进行简单的socket通信,通信协议分为TCP和UDP
java中使用udp进行数据发送,用到的api主要是java.net包下的,代码示例如下:
发送端代码:
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.Inet6Address; public class UDPSendDemo { /* * 创建UDP传输的发送端。 思路: (1)建立UDP的socket服务 * (2)将要发送的数据封装到数据包中 * (3)通过UDP的socket服务将数据包发送出去 * (4)关闭socket服务 */ public static void main(String[] args) throws IOException { System.out.println("发送端启动......"); //启动socket服务 DatagramSocket socket = new DatagramSocket(); //需要发送的数据 String str = "你是**?"; byte[] bt = str.getBytes(); //需要发送的数据包,里面封装了数据内容、数据大小、目的地ip地址、目的地应用程序的端口号 DatagramPacket dp = new DatagramPacket(bt, bt.length,Inet6Address.getByName("fe80::c93c:a4cb:e167:cb7e%14"), 10000); System.out.println(dp.getAddress().getHostAddress()); //发送数据包 socket.send(dp); //关闭socket服务 socket.close(); } }
接收端代码:
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPReceiveDemo { /* * 建立UDP接收端的思路: * (1)建立UDP socket服务 * (2)创建数据包,用于存储接收到的数据,方便用数包对象的方法解析这些数据 * (3)使用socket服务的receive方法将接收到的数据存储到数据包中 * (4)通过数据包的方法解析数据包中的数据 (5)关闭资源 */ public static void main(String[] args) throws IOException { System.out.println("接收端启动......"); //创建socket服务并设置端口号 DatagramSocket socket = new DatagramSocket(10000); //创建一个数据包勇于接收数据 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); //接收 socket.receive(dp); //解析出数据包中的内容并打印出来 String text = new String(dp.getData(), 0, dp.getLength()); int port = dp.getPort(); String ip = dp.getAddress().getHostAddress(); System.out.println(ip + ":" + port + "说:" + text); //关闭socket服务 socket.close(); } }
标签:物理层 三次握手 false .net udp imp 解封 out 思路
原文地址:http://blog.51cto.com/12222886/2067392