博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转 gSOAP中使用TCP协议传输数据
阅读量:6617 次
发布时间:2019-06-25

本文共 1692 字,大约阅读时间需要 5 分钟。

一  模型

  TCP/IP是一个协议族(Internet protocol suite),包含众多的协议,传输控制协议(TCP)和网际协议(IP)分属不同的层次,是保证数据完整传输的两个基本的重要协议。

在上图TCP/IP模型与SOAP模型中 层级是一一对应的

不同的协议层对数据有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的头部,最后将应用层数据交给应用程序处理。

在SOAP中传输层可以使用TCP协议也可以使用UDP协议,gSOAP支持TCPUDP

下图采用TCP传输数据

二 TCP Header结构

控制位的描述

URG(urgent紧急)

ACK(acknowledgement 确认

PSH(push传送)

RST(reset重置

SYN(synchronous建立联机

FIN(finish结束

三 TCP的连接 俗称三次握手

简单理解

CS说: 我可以连接你吗?

SC说 :可以的。

CS说:OK,我连接了。

具体描述如下

描述中包括TCP Header结构中的32位序号(Sequence number) ,32位确认序号(Acknowledge number),SYN,ACK.

  第一次握手 Client发送位码为syn=1,随机产生seq number的数据包到serverserverSYN=1知道,Client要求连接;

 

  第二次握手 server收到请求后要确认连接信息,向Client发送ack number=(Clientseq+1),syn=1,ack=1,随机产生seq number的包

 

  第三次握手 Client收到后检查ack number是否正确,即第一次发送的seq number+1,以及ack是否为1,若正确,Client会再发送ack number=(serverseq+1),ack=1server收到后确认seq值与ack=1则连接建立成功。

 

 

四 TCP的关闭 俗称四次挥手

TCP连接是全双工的,可以同时发送和接受数据,关闭的时候要关闭这两个方向的通道

下图是 Client主动关闭连接

  第一次挥手:ClientServer发送FIN,请求关闭连接 

  第二次挥手:Server收到FIN之后给Client返回确认ACK,同时关闭Receive通道,Client收到对自己的FIN确认后,关闭Send通道

  第三次挥手: Server关闭连接,给Client发送FIN

  第四次挥手:Client收到后给Server回复ACK确认,同时Client关闭Receive通道,进入TIME_WAIT状态。Server接收到Client对自己的FIN的确认ACK,关闭Send通道

状态的说明

CLOSE_WAIT: 表示在等待关闭。当主动关闭连接的一方关闭SOCKET后发送FIN报文给被动关闭一方,被动关闭一方回应一个ACK报文给对方,此时被动关闭一方则进入到CLOSE_WAIT状态

FIN_WAIT_1:是当Socket在已经连接的状态时主动关闭连接,向对方发送了FIN报文,此时该Socket进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态

FIN_WAIT_2:表示半连接,挥了两次手的状态等待对方的Fin报文

TIME_WAITTCP协议中主动关闭连接的一方要处于TIME_WAIT状态,等待两个MSLmaximum segment lifetime)的时间后才能回到CLOSED状态,在TIME_WAIT期间仍然不能再次监听同样的server端口。

LAST_ACK: 被动关闭一方在发送FIN报 文后,最后等待对方的ACK报文。当收到ACK报文后进入CLOSED状态。

CLOSED:已经完全关闭

转载于:https://www.cnblogs.com/dancheblog/p/3782171.html

你可能感兴趣的文章
java常用自带工具类_java最常用的内置工具类
查看>>
java xml转map工具 开源_xml和map互转工具类
查看>>
java 加载sql xml文件_mybatis热部署加载*Mapper.xml文件
查看>>
java pol jar_java.lang.NoClassDefFoundError:无法初始化类sun.security.ec.SunEC(在最近的JRE更新后发生)...
查看>>
mysql5.6.16安装条件_mysql5.6.16编译安装
查看>>
java注释为什么要2个_2、Java注释
查看>>
python os.system阻塞_用os.system打开程序卡在CMD窗口上怎么办?
查看>>
php simplexml 创建xml,PHP基于SimpleXML生成和解析xml的方法示例
查看>>
php正则表达式替换,PHP正则表达式替换函数preg_replace
查看>>
php explode函数 中文,php explode() 函数定义与用法汇总(2021)
查看>>
java jni h264,H264Android Android 解码h264文件 - 下载 - 搜珍网
查看>>
java predict 函数,java8 函数式接口——Function/Predict/Supplier/Consumer
查看>>
php 刷新不变倒计时,JS实现无刷新倒计时
查看>>
bat 起动nginx php,Linux_批处理代码搞定Windows下Nginx+PHP(FastCGI)管理,注意修改下开始头部的几个变 - phpStudy...
查看>>
php中json对象转字符串,JSON对象转字符串的一些方法
查看>>
Java判断gps点是否在中国,如何判断一个指定的位置点坐标(GPS上的经纬度)是否落在一个多边形区域内?...
查看>>
java如何提取dao层,[Java教程]java中entity和dao层生成之逆向工具
查看>>
java正则任意字符,Java正则表达式常用字符
查看>>
php取mysql数据库内存,PHP查询MySQL大量数据的内存占用分析
查看>>
mysql分页rownumber,解析数据库分页的两种方法对比(row_number()over()和top的对比)
查看>>