首页 > 编程知识 正文

tcp三次握手解决了什么问题,三次握手与四次挥手

时间:2023-05-03 05:30:03 阅读:26988 作者:156

(1)客户端将具有SYN标志的TCP消息发送给服务器。 这是三次握手过程中的信息1。

)2)服务器端响应客户端是三次握手中的第二条消息,该消息同时带有ACK标志和SYN标志。 因此,它表示对刚才的客户端SYN消息的响应; 它还将客户端标记为SYN,并询问客户端是否准备好进行数据通信。

)3)客户必须再次响应服务段的ACK消息。 这是消息段3。

可以通过消息分析TCP的3次握手:

(1)客户端向服务器端发起同步请求,服务器端端口固定为102并且客户端端口通过套接字随机生成

)2)服务器端响应客户端,同时也向客户端发出同步请求

)3)客户端确认

2连接终止协议(挥手4次) ) ) ) ) )。

TCP连接是全双工的,因此必须按方向分别关闭。 它的原则是,一方可以在完成数据发送任务后发送FIN以终止此方向的连接。 接收一个FIN意味着该方向没有数据流,即使一个TCP连接接收到一个FIN也能够发送数据。 首先关闭的一方执行主动关闭,另一方执行被动关闭。

)1) TCP客户端发送FIN以关闭从客户端到服务器的数据传输(消息收发段4 )。

)2)服务器接受此FIN,发回ACK,并确认序列号是接收到的序列号加1 (消息段5 )。 与SYN一样,一个FIN占用一个序列号。

)3)服务器关闭与客户端的连接,向客户端发送FIN ) )第6段)。

)4)段返回并确认ACK消息,并将确认号设置为接收号加1 )段7 )。

Java代码TCP连接的三次握手和四次挥手的过程:

package com.zhaoming.test;

import java.io.BufferedReader;

import java.io.File;

import Java.io.file not found exception;

import java.io.FileOutputStream;

import java.io.IOException;

import Java.io.input streamreader;

import java.io.PrintWriter;

import java.net.Socket;

import Java.net.unknownhostexception;

导入Java.text.simple date format;

import java.util.Date;

publicclassclientconnectextendsthread

{

定义客户端对象

私有客户端;

专用套接字套接字;

//IP和端口号用常数定义

私有身份证明=' 192.168.1.190 ';

私有身份证明端口=20108;

//str声明它是静态变量,

公共静态字符串str=null;

//结构化(具有另一类对象的引用) ) ) ) ) ) ) ) ) ) ) ) )。

公共客户端连接(客户端) )。

{

this.client=client;

}

//启用线程并处理连接

公共语音运行(

{

特里

{

//初始化要连接的套接字

套接字=新套接字(IP,PORT );

client.getjButton1().setenabled ) ) false;

}

catch(unknownhostexceptione1) )

{

E1 .打印堆栈跟踪(;

}

catch(ioexceptionE1) ) )。

{

E1 .打印堆栈跟踪(;

}

//从服务器端通过套接字读取信息

缓冲读取程序br=null;

特里

{

br=newbufferedreader (newinputstreamreader (socket.get inputstream () );

//将读取的信息显示在TextArea中

是wile (真)

{

str=br.readLine (;

client.getjTextArea1().append(str'n ' );

//创建用于存储从服务器读取的信息的新文档

文件文件=new file (e :/tempera true.txt );

打印机写入器out=null;

字符串日期=null;

修改//时间显示的格式

简单日期格式SDF=null;

特里

{

//将读取的信息写入文本文件进行保存

out=新打印机(新文件输出流)文件,true );

SDF=newsimpledateformat (yyyy-mm-ddhh : mm : ss );

date=SDF.format (新日期) );

out.println(date't'str );

out.flush (;

}

文件基础知识(catch ) )。

{

e .打印堆栈跟踪(;

}

金融

{

out.close (;

}

}

}是}catch(ioexceptione )

{

e .打印堆栈跟踪(;

}

//进行流程关闭处理,判断后关闭

金融

{

特里

{

if(br!=空)

{

br.close (;

br=null;

}

if (插座!=空)

{

socket.close (;

套接字=null;

}

}

catch(ioexceptione ) )。

{

e .打印堆栈跟踪(;

}

}

}

}

TCP连接是全双工的,因此必须按方向分别关闭。 它的原则是,一方可以在完成数据发送任务后发送FIN以终止此方向的连接。 接收一个FIN意味着该方向没有数据流,即使一个TCP连接接收到一个FIN也能够发送数据。 首先关闭的一方执行主动关闭,另一方执行被动关闭。 TCP协议的连接是全双工连接,在一个TCP连接上存在双向读写信道。 简而言之,就是“先闭读,后闭写”,一共需要四个阶段。 例如,如果客户端开始关闭连接,则1 .服务器读取通道关闭、2 .客户端写入通道关闭、3 .客户端读取通道关闭、4 .服务器写入通道关闭操作在接收对方发送的FIN并接收到对方确认ACK之前,双方的数据通信完全结束,每次中途接收时都需要返回确认数据段ACK。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。