java网络编程基础复盘

发布于 2021-04-28  425 次阅读


一,网络编程概述

java是Internet上的语言,它从语言级上提供了对网络应用程序的支持
 
java提供了网络类库(java.net),可以实现网络连接,联网的底层细节被隐藏在java的本地安装系统里,由JVM控制,并且java实现了一个跨平台的网络库,面向统一的网络编程环境
网络编程的目的:直接或者间接的通过网络协议与其他计算机实现数据交换,进行通讯
 
网络编程中的两个问题:
  • 如何准确的定位网络中的一台或多台计算机并且定位到特定的应用端口
  • 找到主机后如何实现可靠的数据传输

二,网络通信要素概述

网络通信要素有两个:
  • IP和端口号
  • 网络通信协议
如何实现网络中的主机通信:
  • 通信双方的地址:IP地址,端口号
  • 一定的规则(即网络通信协议)网络模型:OSI和TCP/IP
网络通信协议:计算机网络中实现通信的一种约定,即通信协议对码率,传输代码,代码结构,传输控制等制定的标准
具体以前说写过,这里只做复盘

三,IP地址和端口号

一,IP地址

IP地址:在广域网中唯一标识Internet上的计算机(通信实体)
 
本地回环地址(hostAddress):就是我们的本地地址127.0.0.1或者localhost
 
IP的分类:IPV4和IPV6
  • IPV4:4字节(32位)组成(4个0-255的数字),总地址个数为2的32次方,大概是42亿,随着全球互联网的发展,已经不够用
  • IPV6:128位(16个字节),写成8个无符号整数,每个正数用4个16进制数表示中间用逗号分隔,IPV6的总地址数位2的128次方
 
IP地址的分类:公网地址(广域网的IP地址)和私网地址(局域网IP地址),如果:192.168.开头的就是私有地址,范围即192.168.0.0-192.168.255.255,专门位组织机构内部使用

二,端口号

IP地址标识一台主机,端口号标识主机中运行的应用程序
  • 不同的进程有不同的端口号
  • 端口号被规定为一个16位整数0-65535
 
端口的分类:
  • 公认端口:0-1023,被操作系统预先定义的服务通信占用(如:HTTP占用80,FTP占用21,Telnet占23)
  • 注册端口:1024-49151,分配给用户进程或者应用程序(如:Tomcat占8080,MySql占3306,Redis占6379)
  • 动态/私有端口:49152-65535
 
Socket(网络套接字):端口号与IP地址的组合

四,网络协议

一,简单描述

这里主要讲传输层协议中的两个非常重要协议:
  1. 传输控制协议TCP(Transmission Control Protocol)
  2. 用户数据报协议UDP(User Datagram Protocol)
 
TCP/IP以其两个主要协议:传输控制协议(TCP)和网络互联协议(IP)而得名,实际上是一组协议,包括多个具有不同功能且互为关联的协议
 
IP协议是网络层的主要协议,支持网络间的数据通信
 
TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系(应用层,传输层,网络层,链路层)
 

二,TCP和UDP

TCP协议:
  • 使用TCP协议前,必须建立TCP连接,形成传输数据的通道
  • 传输前,采用"三次握手"方式,点对点通信,是可靠的
  • TCP协议进行通信的有两个应用进程:客户端,服务端
  • 在连接中可进行大数据量的传输
  • 传输完毕通过四次挥手断开连接,释放内存
 
各个状态的意义如下:
LISTEN - 侦听来自远方TCP端口的连接请求;
SYN-SENT -在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2 - 从远程TCP等待连接中断请求;
CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
CLOSING -等待远程TCP对连接中断的确认;
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED - 没有任何连接状态;
 
TCP的三次握手:
(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。
 
TCP的四次挥手: