JAVA高并发网络编程之TCP和UDP协议(八)
开始JAVA高并发网络编程,网络这块先通过TCP和UDP基础的协议开始学习,慢慢到java的socket编程,nio,netty的高性能编程。这次先说说TCP和UDP这样的协议
(一)OSI网络七层模型
① 介绍
为了使不同计算机厂家的计算机能够相互通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系标准。
② 各层的主要功能
各层分层,就是为了让各种的开发复杂性降低。
低三层
物理层:机械,电子,定时接口通信信道上的原始比特流传输。
数据链路层:物理寻址,同时将原始比特流转变为逻辑传输线路。通过验证,确认和反馈重发等手段,形成稳定的数据链路,发送(010101)怎么样确定稳定的传输到另一端,软硬结合的,形成一个保障。
网络层:进行路由选择和流量控制,分组传输,路由选择(IP协议)。这是个逻辑链路,没有真实的存在。
传输层:是个承上启下,提供可靠的端口到端口的数据传输服务(TCP/UDP协议)。
高三层
会话层:负责建立,管理和终止进程之间的会话和数据交换。
表示层:负责数据格式转换,数据加密与解密,压缩与解压缩等。
应用层:为用户的应用进程提供网络服务。
(二)传输控制协议TCP
① 介绍
传输控制协议(TCP)是Internet一个重要的传输层协议。TCP提供面对连接,可靠,有序,字节流传输服务。应用程序在使用TCP之前,必须先建立TCP连接。
② TCP握手机制
三次握手
为什么是三次握手,而不是两次或者四次握手,知乎上有个形象的示例。
三次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,今天balabala……”
两次握手:
“喂,你听得到吗?”
“我听得到呀”
“喂喂,你听得到吗?”
“X,我听得到呀!!!!”
“你TM能不能听到我讲话啊!!喂!”
“……”
四次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,你能听到我吗?”
“……不想跟XX说话”
四次挥手
(三)用户数据报协议UDP
① 介绍
用户数据协议UDP是iNternet传输层协议。提供无连接,不可靠,数据报尽力传输服务。
② 开发注意点
应用进程更容易控制发送什么数据以及何时发送。
无需建立连接。
无连接状态。
首部开销小。
(四)TCP和UDP区别
什么情况下用UDP
直播实时性,弹幕,udp比较快,偶尔丢一个包,视频有卡顿,视频有模糊,可以接受的。上报日志,物联网里面,丢一个关系不大。
(五)socket编程
Internet中应用最广泛的应用编程接口,实现与3种底层协议接口
数据报类型套接字SOCK_DGRSM(面对UDP接口)
流式套接字SOCK_STREAM (面对TCP接口)
原始套接字SOCK_RAM(面向网络层协议接口IP,ICMP等)
socket API 及其调用过程
1、创建服务器套接字---分配内存、初始化
2、服务器套接字--侦听
3、建立与客户端配套的客户端套接字
4、与客户端通讯(可以多客户端)
5、关闭、销毁[服务器端相应套接字
客户端:
1、创建客户端套接字---[分配内存]初始化
2、连接服务器
3、与服务器通讯
4、关闭、销毁客户端套接字
PS:在实际的工作中TCP和UDP的开发,接下来也会以这种方式,TCP,UCP的编程顺序往后来进行讲解。