JAVA程序员必须要学会的网络知识
时间:2022-07-22
本文章向大家介绍JAVA程序员必须要学会的网络知识,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、http协议
1.1、HTTP报文格式
1.2、HTTP请求报文方法
方法(操作) |
意义 |
---|---|
OPTION |
请求一些选项的信息 |
GET |
请求读取由 URL所标志的信息 |
HEAD |
请求读取由 URL所标志的信息的首部 |
POST |
给服务器添加信息(例如,注释) |
PUT |
在指明的 URL下存储一个文档 |
DELETE |
删除指明的 URL所标志的资源 |
TRACE |
用来进行环回测试的请求报文 |
CONNECT |
用于代理服务器 |
1.3、HTTP响应报文状态码
状态码 |
含义 |
---|---|
1xx |
通知信息,如请求收到了或正在进行处理。 |
2xx |
成功,如接受或知道了。 |
3xx |
重定向,表示要完成请求还必须采取进一步的行动。 |
4xx |
客户的差错,如请求中有错误的语法或不能完成。 |
5xx |
服务器的差错,如服务器失效无法完成请求。 |
1.4、HTTP请求所经历的步骤
现需访问www.baidu.com,具体流程如下:
- 客户端通过DNS解析到
www.baidu.com
的IP地址为220.181.38.149
,通过IP找到服务器路径。客户端发起HTTP会话到220.181.38.149
,然后交给传输层 - 客户端传输层将HTTP会话请求分成报文段,添加源端口和目的端口。如:服务器使用80端口监听客户端请求,客户端通过系统随机选择一个端口,与服务器进行交换,服务器将请求返回给客户端发出请求的端口。
- 传输结束,如果是HTTP1.1可以在发送响应后仍保持一段时间的连接。
二、tcp
2.1、什么是TCP
- TCP是面向连接的传输层协议。在使用TCP协议前,需建立TCP连接,传输完毕后需要释放连接
- TCP是点对点的
- TCP提供可靠交付,保证无差错、不丢失、不重复、按序到达
- 提供全双工通信
- 面向字节流
2.2、TCP和UDP的区别
TCP |
UDP |
|
---|---|---|
是否连接 |
面向连接 |
无连接 |
传输类型 |
面向字节流 |
面向报文 |
可靠性 |
可靠 |
不可靠 |
连接数 |
仅一对一 |
一对一、一对多、多对一、多对多 |
开销 |
大 |
小 |
拥塞控制 |
有 |
无 |
2.3、TCP三次握手
首先,B的TCP服务器进程进入监听状态,准备接收客户端请求
- A客户机在打算建立连接时,向B发出连接请求报文,同步位(SYN)置1,选择一个初始序号(seq)x,例如123。同步位为1的报文段不可携带数据,但是要消耗序号
- B收到连接请求报文段后,如同意建立连接,则向A发送确认。在确认报文段中应把SYN位和ACK位都置1,确认号是ack=x+ 1即124,同时也为自己选择-一个初始序号seq= y如12。
- A客户机进程收到B的确认后,还要向B给出确认。确认报文段的ACK置1,确认号ack=y+ 1即13,而自己的序号seq=x+1即125。TCP的标准规定,ACK报文段可以携带数据。但如果不携带数据则不消耗序号,在这种情况下,下-一个数据报文段的序号仍是seq=x+1即125。
- 为什么A最后还要发送一次确认呢?这主要是为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误。
2.4、TCP四次挥手
数据传输结束后,通信的双方都可释放连接。
- A数据传输完毕需要断开连接,A的应用进程向其TCP发出连接释放报文段(FIN = 1,序号seq = u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1状态,等待B的确认。 TCP规定,FIN报文段即使不携带数据,它也消耗掉一个序号。
- B收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT关闭等待状态,此时的TCP处于半关闭状态,A到B的连接释放。而A收到B的确认后,进入FIN-WAIT-2状态,等待B发出的连接释放报文段。也就是说,从B到A这个方向的连接并未关闭,这个状态可能会持续一段时间。 A收到来自B的确认后,就进入FIN-WAIT-2 (终止等待2)状态,等待B发出的连接A收到来自B的确认后,就进入FIN-WAIT-2 (终止等待2)状态,等待B发出的连接
- 若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使FIN= 1。现假定B的序号为w (在半关闭状态B可能又发送了一些数据)。B还必须重复上次已发送过的确认号ack=u+1。这时B就进入LAST-ACK (最后确认)状态,等待A的确认。
- A收到B的连接释放报文段后,对此发出确认报文段(ACK = 1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSE状态
为什么A在TIME-WAIT状态必须等待2MSL(最大报文生存时间)的时间?
1.保证A发送的最后一个ACK报文段能够到达B,保证A、B正常进入CLOSED状态。
- 这个ACK报文段有可能丢失,使得处于LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认,B超时重传FIN+ACK报文段,A能2MSL时间内收到这个重传的FIN+ACK报文段,接着A重传一次确认,同时重启2MSL计数器,2MSL时间后A和B进入CLOSE状态,如果A在TIME-WAIT状态时接收到B的FIN+ACK报文段之后向B发出确认报文段,而不再确认B是否收到立即进入CLOSED状态,如若B并没有正常收到A 的确认报文段,则B无法正正常进入到CLOSED状态。
2.防止“已经失效的连接请求报文段”出现在本连接中。
- A在发送完最后一个ACK报文段并经过2MSL,会使本次连接持续时间内所有产生的报文段消失,保证在下一次新连接中不会出现旧连接遗留的请求报文段。
- 自定义圆角和园边的实现
- Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)
- 应用潜在语义分析技术将文档进行3D可视化
- 利用神经网络算法的C#手写数字识别
- fastText、TextCNN、TextRNN…这套NLP文本分类深度学习方法库供你选择
- nfc开发
- N-CryptoAsset投资组合 | 使用PCA识别高度相关的加密货币(最近听说某币很疯狂哦!)
- 仿刮刮乐刮奖效果
- Spacebuilder在Mono上运行修改备忘
- maven配置详解
- 这一新的可视化方法教你优雅地探索相关性
- LSTM Networks在股票市场上的探究
- MSBuild的简单介绍与使用
- actionbar详解(二)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 序列化与反序列化Serializable,Externalizable
- response.getWriter().write()和 response.getWriter().print()的区别:
- java使用TCP,由客户端向服务端传输图片,(电脑与电脑)或(同一台电脑)
- 使用druid
- UDP实现多人聊天室
- 请求(doFilter)与响应乱码(BaseController+自定义注解@ContentType(““))集中处理
- 反射:Reflect(获取类对象三种方法)
- getParameterMap()返回参数需要对应实体类类型,否则收不到----打卡
- 类对象 与 类的对象
- Lambda什么时候使用+简化匿名内部类
- PreparedStatement连接数据库实现登录验证,避免sql注入问题
- 自己封装数据库工具类
- Git---->Linux常用命令+主干、分支合并,发生冲突+当紧急任务来时,文件暂存+忽略文件不提交
- 使用servlet完成简单的登录功能(servlet与html之间跳转(重定向))
- gitee配置