Java网络编程


通过网络编程,是我们开发的程序,在不同的计算机之间进行数据交换。
什么是计算机网络?
通过通讯线路,把不同区域的计算机连接起来,通过特定的软件能够实现信息,数据共享
Java提供了网络编程,可以很容易开发常见的网络应用程序。
Java提供的网络类库,可以实现网络连接,联网的底层细节被隐藏在JVM中。并且Java实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境
通信要素:
IP
端口
通信协议:通信协议指双方实体完成通信或服务所必须遵循的规则和约定

OSI七层模型

OSI(Open Systems Interconnection,开放系统互联)参考模型是一个网络通信框架,由七个层次组成,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。以下是各层的作用:
物理层:物理层定义了物理设备的标准,主要作用是传输比特流
数据链路层:数据链路层定义了如何格式化数据进行传输,以及控制对物理介质的访问。通常提供错误检测和纠正
网络层:主要功能是如何将物理地址转化为网络地址,并决定如何将数据从发送方路由到接收方
传输层:解决了主机间的数据传输,该并且解决的是网络之间的传输质量问题
会话层:作用是负责建立和断开通信连接,何时建立,断开连接以及保持多久的连接
表示层:是ISO/OSI的第六层,主要是用于处理有关被传送数据的表示问题。
应用层:是ISO/OSI参考模型的最高层,它提供给应用进程访问OSI环境的手段。

TCP/IP模型

TCP/IP参考模型分为4层,从下向上依次为网络接口层、互联网层、传输层和应用层。以下是各层的作用:
链路层:负责接收从IP层交来的IP数据报并将IP数据报通过底层物理网络发送出去,或者从底层物理网络上接收物理帧,抽出IP数据报,交给IP层。
网络层:主要功能是负责相邻结点之间的数据传输。它处理来自传输层的分组,将分组形成数据包(IP数据包),并为该数据包进行路径选择,最终将数据包从源主机发送到目的主机。
传输层:主要功能是在源结点和目的结点的两个进程实体之间提供可靠的端到端的数据通信。除了在端与端之间传送数据外,传输层还要解决不同程序的识别问题。
应用层:主要功能是负责提供应用程序所需的高层协议。该层能向用户提供一组常用的应用程序,定义了大量的TCP/IP应用协议。

TCP

TCP是一个传输层协议,提供可靠数据传输,支持全双工。

1.特点

面向连接:所谓面向连接就是双方在传输数据之前,必须要先建立一个通道。例如三次握手就是为了创建通道的过程,而四次挥手是销毁通道的过程。
可靠数据传输:传输数据无差错
支持全双工:允许通信双方的应用进程在任何时候都可以发送数据。

2.三次握手

第一次握手:
客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=J,保存在TCP首部的序列号字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,等待服务器端确认。

第二次握手:
服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。

第三次握手:
客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

3.为什么要三次握手

为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤

如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值