传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。
TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。
Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。RFC 768 描述了 UDP。
Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是 TCP,该协议几乎做了所有的事情。
OSI 参考模型:开放系统互连参考模型(Open System Interconnect)
在进行数据传输的时候,应用层会对我们的数据进行封装。封装好的对象就会传输到表示层,表示层则会对收到的数据加一个标识。表示层再传输到会话层,会话层则会根据会话层的特点,再继续加标识。再到传输层,传输层则对数据继续打包完毕。传到网络层后就会告诉数据要发到哪里去,这个时候就需要IP地址。数据链路层指的是具体通过什么样的方式发出去。最后到了物理层,通过物理设备发出去然后接收方再由物理设备接收。
这个模型呢,主要是把刚才的7层参考模型变成了4层。它将应用层,表示层,会话层归结为了应用层。而应用层用到的协议则是HTTP协议和ftp协议。传输层用到的协议就是UDP和TCP。而程序员的话呢,就处在传输层。基于TCP协议或UDP协议来编写程序。前面的网络层到这里就叫做网际层。而数据链路层和物理层则总共归结为网络接口
面向连接、点到点的通信、高可靠性、占用系统资源多,效率低
非面向连接,传输不可靠,可能丢失。
发送不管对方是否准备好,接收方收到也不确认。
数据报的大小限制在 64k 内
非常简单的协议,开销小
Socket 是计算机之间通信的一种约定或一种方式,通过 Socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
每一个客户端都使用一个 Socket 对象表示,服务器端使用 ServerSocket 等待客户端的连接。
public class ServerTest {
public static void main(String[] args) throws IOException {
System.out.println("-------------服务器端已启动--------------");
//创建ServerSocket对象
ServerSocket server=new ServerSocket(8888);
//监听是否有客户端来请求连接
Socket client=server.accept();
//获取输入流
DataInputStream dis=new DataInputStream(client.getInputStream());
System.out.println(dis.readUTF());
//获取输出流
DataOutputStream dos=new DataOutputStream(client.getOutputStream());
dos.writeUTF("你好客户端,我是服务器");
//关闭流,关闭Socket
if(dos!=null){
dos.close();
}
if(dis!=null){
dis.close();
}
if(client!=null){
client.close();
}
}
}
public class ClientTest {
public static void main(String[] args) throws IOException {
System.out.println("-------------这里是客户端--------------");
//创建Socket对象
Socket client=new Socket("127.0.0.1", 8888);
//获取输出流
DataOutputStream dos=new DataOutputStream(client.getOutputStream());
dos.writeUTF("你好服务器,我是客户端");
//获取输入流
DataInputStream dis=new DataInputStream(client.getInputStream());
System.out.println(dis.readUTF());
//关闭流
if(dis!=null){
dis.close();
}
if(dos!=null){
dos.close();
}
if(client!=null){
client.close();
}
}
}
IP 地址用于标识网络上的唯一一台计算机,共 32 位,4 个 8 位二进制数组成。IP 地址分为:IPv4 和 IPv6 。
IPv4:“十进制表示法”
IPv6:“十六进制表示法”
IP 地址=网络 ID+主机 ID
网络 ID:标识计算机或网络设备所有的网段
主机 ID:标识特定的主机或网络设备
127.0.0.1:本机回环地址,用于本机测试
255.255.255.255:当前子网,一般用于当前子网广播信息
虚拟的概念,使用 0-65535 之间的整数,用于标识 不同的应用程序。每个网络程序都会至少有一个端口号