TCP网络协议的三次握手及代码释义

讲解TCP协议,我们首先要了解什么是网络通讯协议.

1、网络通讯协议

两台计算机要想在网络中互相通讯,就必须要遵守一定的规定,并且只有通讯双方同时遵守了这些规定,才能够实现数据的相互传输.而这些规定,便是由网络通讯协议针对数据传输格式,传输速率,传输步骤等制定的.

2、网络协议分类

java.net 包中包含的类和接口,它们提供低层次的通信细节,其中包含了两种常见的网络协议的支持:

1)TCP(Transmission Control Protocal)

即传输控制协议,TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输.

TCP协议中有个三次握手的概念,即在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠:

  • 第一次握手,客户端向服务器端发出连接请求,等待服务器确认.
  • 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求.
  • 第三次握手,客户端再次向服务器端发送确认信息,确认连接.

完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等.

1.1)TCP/IP(Transmission Control Protocol/Internet Protocol)

即传输控制协议/因特网互联协议,它是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。

 2)UDP(User Datagram Protocal)

即用户数据包协议,UDP协议是一个面向无连接的协议。传输数据时,不需要建立连接,不管对方的服务是否启动,直接将数据、数据源和目的地都封装在数据包中,直接发送。每个数据包的大小限制在64k以内。它是不可靠协议,因为无连接,所以传输速度快,但是容易丢失数据。日常应用中,例如视频会议、QQ聊天等。

3.TCP通讯程序

在Java中,提供了两个类用于实现TCP通信程序:

1). 客户端: java.net.Socket 类表示。创建 Socket 对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。

2). 服务端: java.net.ServerSocket 类表示。创建 ServerSocket 对象,相当于开启一个服务,并等待客户端的连接。

3.1TCP通讯流程分析

1.服务端启动,等待客户端连接

2.客户端发送连接请求,等待服务端确认

3.服务端接收请求,调用accept方法,返回Socket对象

4.客户端通过Socket对象获取输出流,向服务端写入数据

5.服务端通过Socket对象获取输入流,读取客户端写入的数据

6.服务端通过Socket获取输出流,向客户端回写数据

7.客户端通过Socket获取输入流,读取服务端回写的数据

 3.2 代码实现

package com.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * @author Adil
 * @date 2020-04-05 18:55:09
 * 模拟客户端
 */
public class ClientTCP {
    public static void main(String[] args) throws IOException {
        System.out.println("客户端发送请求...");
        //1.创建Socket,同时向服务端发送连接请求,等待服务端接收
        Socket socket = new Socket("127.0.0.1", 8080);
        //2.通过Socket获取输入流
        OutputStream outputStream = socket.getOutputStream();
        //3.通过输出流向服务端写入数据
        outputStream.write("服务端你好,我是客户端,初次见面请多关照...".getBytes());

        //4.客户端读取服务端写回的数据
        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        String message = new String(bytes, 0, inputStream.read(bytes));
        System.out.println("客户端读取服务端返回的数据:" + message);

        //5.关闭资源
        outputStream.close();
        socket.close();
    }
}
package com.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author Adil
 * @date 2020-04-05 18:54:59
 * 模拟服务端
 */
public class ServerTCP {
    public static void main(String[] args) throws IOException {
        System.out.println("服务端启动,等待连接...");
        //1.创建ServerSocket对象,绑定端口
        ServerSocket serverSocket = new ServerSocket(8080);
        //2.接收客户端发送过来的连接,返回Socket对象
        Socket socket = serverSocket.accept();
        //3.通过Socket获取输入流,用来读取客户端发送过来的数据
        InputStream inputStream = socket.getInputStream();
        //4.通过输入流读取数据
        byte[] bytes = new byte[1024];
        int len = inputStream.read(bytes);
        String message = new String(bytes, 0, len);
        System.out.println("服务端读取客户端发送过来的数据:" + message);

        //5.服务端写回数据给客户端
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("客户端你好!我会关照你的!".getBytes());

        //6.关闭资源
        inputStream.close();
        socket.close();
    }
}

原文地址:https://www.cnblogs.com/ubiquitousShare/p/12641636.html

时间: 2024-11-03 05:23:21

TCP网络协议的三次握手及代码释义的相关文章

tcp/ip协议的三次握手4次断开

tcp/ip协议的3次握手4次断开: (注:syn用来建立连接 sck用来确认连接 rst用来复位连接错误 ) (listen监听状态 syn_sent 在发送连接请求后等待匹配的连接请求 syn_RECEIVED 在收到和发送一个连接请求后等待对连接请求的确认  established 完成连接,可以传送数据 Sequence     number顺序号码 Acknowledge number确认号码 FIN(finish结束)URG(urgent紧急)PSH(push传送)) 三次握手: c

TCP/IP协议的三次握手

以太网的数据是以帧为单位进行传输的,每一帧(MAC封包)数据分为header和data两部分.data部分最大为1500byte,当然这个大小是可以设置的(要遵寻标准,改了后果可能很严重). 传输数据的时候MAC封包的data部分包裹着IP封包,IP封包也是由header和data组成,IP封包的data部分又包裹者TCP封包,TCP也由header和data组成,TCP封包data部分又包裹着应用层协议封包如HTTP, 接受数据也由对应的层层层解析.IP封包最大65535byte,如果IP封包

TCP/IP协议的三次握手及实现原理

TCP/IP是很多的不同的协议组成,实际上是一个协议组,TCP用户数据报表协议(也称作TCP传输控制协议,Transport Control Protocol.可靠的主机到主机层协议.这里要先强调一下,传输控制协议是OSI网络的第四层的叫法,TCP传输控制协议是TCP/IP传输的6个基本协议的一种. 两个TCP意思非相同. ).TCP是一种可靠的面向连接的传送服务.它在传送数据时是分段进行的,主机交换数据必须建立一个会话.它用比特流通信,即数据被作为无结构的字节流. 通过每个TCP传输的字段指定

重学TCP/IP协议和三次握手四次挥手

计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的.计算机网络体系结构的抽象概念较多,在学习时要多思考.这些概念对后面的学习很有帮助. 网络协议是什么? 在计算机网络要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则,比如交换数据的格式.是否需要发送一个应答信息.这些规则被称为网络协议. 为什么要对网络协议分层? 简化问题难度和复杂度.由于各层之间独立,我们可以分割大问题为小问题. 灵活性好.当其中一层的技术变化时,只要层间接口关系保持不变,其他层不受影响. 易于实现

TCP/IP协议的三次握手过程及Socket套接字

socket 套接字:为了使得多主机多进程通信时,不至于发生混乱情况,必须把端口号和主机的IP地址结合起来使用, 称为插口或套接字. 由于主机的IP地址是唯一的,这样目的主机就可以区分收到的数据报的源端机了. 套接字包括IP地址(32位)和端口号(16位),共48位. 例如(124.33.13.55,200)和(126.45.21.51.25)就是一对套接字,再整个Internet中,再传输层上进行   通信的一对套接字都必须是唯一的. TCP连接的建立 第一次握手:客户端TCP首先给服务器端T

网络协议的三次握手

网络传输时建立连接的协议类似我们生活中的打电话的例子: A : 你好我是A,你听得到我在说话吗? B : 听到了,我是B,我说A啊,你听到我在说话吗? A : 嗯,听到了. 简要的图示如下: ----------------建立连接,开始聊天!------------- 建立连接的第一步: 建立连接的第二步: 建立连接的第三步:

TCP协议的三次握手+四次断开

TCP协议的三次握手 1.TCP/IP协议概述 TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础.TCP/IP是网络中使用的基本的通信协议.虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录.文件传输和电子邮件等,而TCP协议和IP协议是保证数

TCP协议的三次握手与四次挥手过程图解

建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?简单的过程如下: [注意]中断连接端可以是Client端,也可以是Server端. 假设Client端发起中断连接请求,也就是发送FIN报文.Server端接到FIN报文后,

为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?

看到了一道面试题:"为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?",想想最近也到金三银四了,所以就查阅了相关资料,整理出来了这篇文章,希望对你们有所帮助. TCP 连接 我们先来补一下基础什么是 TCP 协议?传输控制协议( Transmission Control Protocol, TCP )是种面向连接.确保数据在端到端间可靠传输的协议.面向连接是插在发送数据前,需要先建立一条虚拟的链路,然后让数据在这条链路上"流动&qu