本文已参与「新人创作礼」活动,一起开启掘金创作之路。
通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信。 协议中对数据的传输格式、传输速率、传输步骤等做了 统一规定,通信双方必须同时遵守,最终完成数据交换。
OSI 七层模型
网路编程三要素:
- IP地址
- 协议
- 端口号
1. 协议:
计算机网络通信必须遵守的规则。
2. IP地址:
IP地址用来给一个网络中的计算机设 备做唯一的编号。
- IPv4: 4代表4个字节,是一个32位的二进制数,表述为a.b.c.d的形式,其中a-d都是0-255之间的十进制整数,最多可表示42亿个(1位代表0和1,共32位,就是2的32次方也就约为42亿)。
- IPv6:由于IP地址的需求量愈来愈大,网络地址资源有限,使得IP紧张。出现了IPv6, 16个字节一组,128位地址长度,分成8组十六进制数,表示为(ABCD:EF01:2345:6789:ABCD:EF01:2345:6789),号称可以为全世界的每一粒沙子编上一个IP,解决了IP不够用的问题。
回环地址(127.x.x.x) 或 localhost,主要用于网络软件测试以及本 地机进程间通信,无论什么程序,一旦使用回环地址发送数据,立即返回,不进行任何网络传输。
3. 端口号
网络的通信,本质上是两个进程(应用程序)的通信。每台计算机都有很多的进程,那么在网络通信时,如何区分 这些进程呢? IP地址:唯一标识网络中的设备 端口号:唯一标识设备中的进程(应用程序)了。 端口号:用两个字节表示的整数,它的取值范围是(0~65535), 其中,1024之前的端口已经分配给固定的网络服务或应用了,普通的应用程序需要使用1024以上的端口号。端口号不能重复。
利用 协议 + IP地址 + 端口号 三元组合,就可以标识网络中的进程了,那么进程间的通信就可以利用这个标识与其 它进程进行交互。
UDP & TCP
通信的协议还是比较复杂的, java.net 包中包含的类和接口,它们提供低层次的通信细节。我们可以直接使用这 些类和接口,来专注于网络程序开发,而不用考虑通信的细节.
1. UDP:
UDP协议是一个面向无连接的协议。传输数据时,不需 要建立连接,不管对方端服务是否启动,直接将数据、数据源和目的地都封装在数据包中,直接发送。每个 数据包的大小限制在64k以内。它是不可靠协议,因为无连接,所以传输速度快,但是容易丢失数据。日常应 用中,例如视频会议、QQ聊天等。
2. TCP:
TCP协议是面向连接的通信协议,即传输数据之前, 在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。
三次握手:
- 第一次握手,客户端向服务器端发出连接请求,等待服务器确认。
- 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
- 第三次握手,客户端再次向服务器端发送确认信息,确认连接。
四次断开:
- 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
- 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
- 服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
- 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。