栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java网络编程详解(非常全面)/PDF版

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java网络编程详解(非常全面)/PDF版

Java网络编程对于Java工程师来说是很重要的能力,尤其是大厂对网络编程有较高的要求。

比如在直播、实时通讯、游戏服务端开发等技术领域,通信协议和网络编程就成为了很重要的一个技术课题。

再比如你想做基础技术研发,比如消息队列、RPC框架的研发,那么网络编程也是必备的基础能力。

计算机网络

在学习Java网络编程之前,我们先来了解什么是计算机网络。

计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来的,实现资源共享和数据传输的系统。

网络编程就是编写程序使互联网的两个(或多个)设备(如计算机)之间进行数据传输。

计算机网络主要包括三部分:

  • 计算机(可以包括客户端、服务器)
  • 网络设备(路由器、交换机、防火墙等)
  • 传输介质(可以分为有线和无线的)

按照地域范围可以对网络进行如下分类:

  • 局域网︰小范围内的私有网络,一个家庭内的网络、一个公司内的网络、一个校园内的网络都属于局域网。
  • 广域网:把不同地域的局域网互相连接起来的网络。运营商搭建连接远距离区域的广域网。
  • 互联网:由世界各地的局域网和广域网连接起来的网络,互联网是一个开放、互联的网络,不属于任何个人和任何机构。

网络体系结构

TCP/IP模型

TCP/IP模型是由ОSl模型演化而来,TCP/IP模型将OSI模型由七层简化为五层〔一开始为四层),应用层、表示层、会话层统—为应用层。

网络协议

如同人与人之间相互交流是需要遒循一定的规矩一样,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议。

TCP的报文格式

三次握手

1.第一次握手(客户端发送请求)

客户机发送连接请求报文段到服务器,并进入SYN_SENT状态,等待服务器确认。发送连接请求报文段内容:SVN=1,seq=x; SYN=1意思是一个TCP的SYN标志位置为1的包,指明客户端打算连接的服务器的端口; seq=x表示客户端初始序号x,保存在包头的序列号(Sequence Number)字段里。

2.第二次握手(服务端回传确认)

服务器收到客户端连接请求报文,如果同意建立连接,向客户机发回确认报文段(ACK)应答,并为该TCP连接分配TCP缓存和变量。

服务器发回确认报文段内容:SYN=1,ACK=1,seq=y,ack=x+1;SYN标志位和ACK标志位均为1,同时将确认序号(Acknowledgement Number)设置为客户的ISN加1,即x+1; seq=y为服务端初始序号y。

3.第三次握手(客户端回传确认)

客户机收到服务器的确认报文段后,向服务器给出确认报文段(ACK),并且也要给该连接分配缓存和变量。

此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。客户端发回确认报文段内容:

ACK=1,seq=X+1,ack=y+1; ACK=1为确认报文段;seq=x+1为客户端序号加1; ack=y+1,为服务器发来的ACK的初始序号字段+1。

四次挥手

1.TCP客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态。发送报文段内容:FIN=1,seq=u;FIN=1表示请求切断连接;seq=u为客户端请求初始序号。

2.服务端收到这个FIN,它发回一个ACK给客户端,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号。服务端进入CLOSE_WAIT状态。发送报文段内容:ACK=1,seq=v,ack=u+1; ACK=1为确认报文;seq=v为服务器确认初始序号;ack=u+1为客户端初始序号加1。

3.服务器关闭客户端的连接后,发送一个FIN给客户端,服务端进入LAST_ACK状态。发送报文段内容:FIN=1,ACK=1,seq=w,ack=u+1; FIN=1为请求切断连接,ACK=1为确认报文,seq=w为服务端请求切断初始序号。

4.客户端收到FIN后,客户端进入TIME_WAIT状态,接着发回一个ACK报文给服务端确认,并将确认序号设置为收到序号加1,服务端进入CLOSED状态,完成四次挥手。发送报文内容:ACK=1,seq=u+1, ack=w+1;ACK=1为确认报文,seq=u+1为客户端初始序号加1, ack=w+1为服务器初始序号加1。

为什么是三次握手四次挥手

因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭socket,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文,我收到了”。只有等到服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送,故需要四步挥手。

由于篇幅过长今天就到这里啦!!需要获取完整pdf的朋友:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/924577.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号