vlambda博客
学习文章列表

JAVA高并发网络编程之TCP和UDP协议(八)

开始JAVA高并发网络编程,网络这块先通过TCP和UDP基础的协议开始学习,慢慢到java的socket编程,nio,netty的高性能编程。这次先说说TCP和UDP这样的协议


(一)OSI网络七层模型

  • ① 介绍

为了使不同计算机厂家的计算机能够相互通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系标准。

JAVA高并发网络编程之TCP和UDP协议(八)

  • ② 各层的主要功能

各层分层,就是为了让各种的开发复杂性降低。

低三层

  1. 物理层:机械,电子,定时接口通信信道上的原始比特流传输。

  2. 数据链路层:物理寻址,同时将原始比特流转变为逻辑传输线路。通过验证,确认和反馈重发等手段,形成稳定的数据链路,发送(010101)怎么样确定稳定的传输到另一端,软硬结合的,形成一个保障。

  3. 网络层:进行路由选择和流量控制,分组传输,路由选择(IP协议)。这是个逻辑链路,没有真实的存在。

传输层:是个承上启下,提供可靠的端口到端口的数据传输服务(TCP/UDP协议)。

高三层

  1. 会话层:负责建立,管理和终止进程之间的会话和数据交换。

  2. 表示层:负责数据格式转换,数据加密与解密,压缩与解压缩等。

  3. 应用层:为用户的应用进程提供网络服务。

(二)传输控制协议TCP

  • ① 介绍

传输控制协议(TCP)是Internet一个重要的传输层协议。TCP提供面对连接,可靠,有序,字节流传输服务。应用程序在使用TCP之前,必须先建立TCP连接。

JAVA高并发网络编程之TCP和UDP协议(八)

  • ② TCP握手机制

三次握手

JAVA高并发网络编程之TCP和UDP协议(八)

为什么是三次握手,而不是两次或者四次握手,知乎上有个形象的示例。

三次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,今天balabala……”

两次握手:
“喂,你听得到吗?”
“我听得到呀”
“喂喂,你听得到吗?”
“X,我听得到呀!!!!”
“你TM能不能听到我讲话啊!!喂!”
“……”

四次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,你能听到我吗?”
“……不想跟XX说话”

四次挥手

JAVA高并发网络编程之TCP和UDP协议(八)

(三)用户数据报协议UDP

  • ① 介绍

用户数据协议UDP是iNternet传输层协议。提供无连接,不可靠,数据报尽力传输服务。


  • ② 开发注意点

  1. 应用进程更容易控制发送什么数据以及何时发送。

  2. 无需建立连接。

  3. 无连接状态。

  4. 首部开销小。

(四)TCP和UDP区别


  • 什么情况下用UDP

直播实时性,弹幕,udp比较快,偶尔丢一个包,视频有卡顿,视频有模糊,可以接受的。上报日志,物联网里面,丢一个关系不大。

(五)socket编程

Internet中应用最广泛的应用编程接口,实现与3种底层协议接口

  1. 数据报类型套接字SOCK_DGRSM(面对UDP接口)

  2. 流式套接字SOCK_STREAM (面对TCP接口)

  3. 原始套接字SOCK_RAM(面向网络层协议接口IP,ICMP等)

  • socket API 及其调用过程

1、创建服务器套接字---分配内存、初始化
2、服务器套接字--侦听
3、建立与客户端配套的客户端套接字
4、与客户端通讯(可以多客户端)
5、关闭、销毁[服务器端相应套接字

客户端:
1、创建客户端套接字---[分配内存]初始化
2、连接服务器
3、与服务器通讯
4、关闭、销毁客户端套接字

PS:在实际的工作中TCP和UDP的开发,接下来也会以这种方式,TCP,UCP的编程顺序往后来进行讲解。