三次握手过程详解:

  1:客户端的协议栈向服务器端发送SYN包,并告诉服务器端当前放送序号为j,客户端进入SYNC_SEND状态。

  2:服务器端的协议栈收到这个包以后,和客户端进行ACK应答,应答值为j+1,表示对SYN包j的确认,同时服务器也发送一个SYN包,并告诉客户端我的序列号是k,服务器端进入SYNC_RECD状态。

  3:客户端协议栈收到ACK以后,使得应用程序从connect调用返回,表示客户端到服务器端的单向连接已经建立成功,客户端进入ESTABLISHED,同时客户端协议栈也会对服务器端的SYN包进行应答,应答数据K+1。

  4:应答包到达服务器端后,服务器端协议使得accept阻塞调用返回,这个时候服务器端到客户端的单向连接也建立成功,服务器端进入ESTABLISHED状态。

  

四次挥手详解:

  step1:主机1没有数据要往主机2发送以后,首先发起FIN报文,然后进入FIN_WAIT1状态。

  step2:主机2收到FIN报文以后,回复一个确认报文,主机2进入CLOSE_WAIT状态。

  step3:主机1收到确认报文以后进入FIN_WAIT2状态,随后主机2需要发送给主机1的数据也发送完了以后继续往主机1发送一个FIN报文,发送完以后主机2进入LAST_ACK状态。

  step4:主机1收到这个FIN报文以后,进入TIME_WAIT状态,给主机2回复一个确认报文,主机2收到确认报文以后,主机2的连接状态关闭,主机1停在TIME_WAIT状态2MSL没有再收到FIN报文也进入关闭状态。

C/C++网络编程5——实现基于TCP的服务器端/客户端2的更多相关文章

  1. C/C++网络编程4——实现基于TCP的服务器端/客户端1

    一.TCP服务器调用顺序: 调用socket函数创建套接字:声明并初始化地址信息结构体变量:调用bind函数向套接字分配地址:调用listen函数进入等待连接请求状态,只有调用了listen函数后客户 ...

  2. C/C++网络编程6——实现基于UDP的服务器端/客户端

    通过前面几节的内容,我们已经可以实现基本的C/S结构的程序了,但是当多个客户端同时向服务器端请求服务时,服务器端只能按顺序一个一个的服务,这种情况下,客户端的用户是无法忍受的.所以虚实现并发的服务器端 ...

  3. 【TCP/IP网络编程】:04基于TCP的服务器端/客户端

    摘要:结合前面所讲述的知识,本篇文章主要介绍了简单服务器端和客户端实现的框架流程及相关函数接口. 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字(本 ...

  4. Fixed-Length Frames 谈谈网络编程中应用层(基于TCP/UDP)的协议设计

    http://blog.sina.com.cn/s/blog_48d4cf2d0101859x.html 谈谈网络编程中应用层(基于TCP/UDP)的协议设计 (2013-04-27 19:11:00 ...

  5. 网络编程应用:基于TCP协议【实现对象传输】--练习

    要求: 基于TCP协议实现,客服端向服务器发送一个对象 服务器接受并显示用户信息 ,同时返回给客户端 "数据已收到" 建一个Student类,属性:name age Student ...

  6. 网络编程应用:基于TCP协议【实现文件上传】--练习

    要求: 基于TCP协议实现一个向服务器端上传文件的功能 客户端代码: package Homework2; import java.io.File; import java.io.FileInputS ...

  7. 网络编程应用:基于TCP协议【实现一个聊天程序】

    要求: 基于TCP协议实现一个聊天程序,客户端发送一条数据,服务器端发送一条数据 客户端代码: package Homework1; import java.io.IOException; impor ...

  8. Linux 系统编程 学习:008-基于socket的网络编程3:基于 TCP 的通信

    背景 上一讲我们介绍了 基于UDP 的通信 这一讲我们来看 TCP 通信. 知识 TCP(Transmission Control Protoco 传输控制协议). TCP是一种面向广域网的通信协议, ...

  9. 网络编程[第一篇]基于tcp协议的套接字编程

    将服务端-客户端的连接比作双方打电话的过程 2019-07-24 一.客户端 主动的一方: 客户端实例化一个socket对象--> 主动像服务端发送连接请求--> (服务端接受请求后即可进 ...

随机推荐

  1. CTF_论剑场 名侦探柯南

    首先看一下是一个压缩包然后下载 解压后会发现一个图片和另一个压缩包 打开图片 发现是这个 用HxD分析一下这张图片通过搜索 zip jpg...... 然后会发现这张图片里有一个png 图片 所以判断 ...

  2. AcWing 852. spfa判断负环 边权可能为负数。

    #include <cstring> #include <iostream> #include <algorithm> #include <queue> ...

  3. ACM-ICPC实验室20.2.22测试-动态规划

    C.田忌赛马 直接贪心做就可以~ #include<bits/stdc++.h> using namespace std; ; int a[maxn],b[maxn]; int main( ...

  4. 项目中vuex的加入

    1, 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象.当应用变得非常复杂时,store 对象就有可能变得相当臃肿. 为了解决以上问题,Vuex 允许我们将 store 分割成模块(modu ...

  5. 吴裕雄 python 机器学习——局部线性嵌入LLE降维模型

    # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import datas ...

  6. linux建立动态库的软链接

    复制动态库: /home/wmz/anaconda3/lib/ 删除原链接: 建立新链接: /home/wmz/anaconda3/lib/libstdc++.so. 问题的起源是,安装anacond ...

  7. 510,position的值,relative和absolute定位原点是

    (absolute:生成绝对定位的元素) position属性用来规定元素的定位类型和方式 ①position:static 默认值,没有定位,元素出现在正常的流中: ②position:fixed  ...

  8. PHP array_chunk() 妙用

    定义和用法 array_chunk()函数把一个数组分割为新的数组块. array_chunk(array,size,preserve_keys); 参数 描述 array 必需.规定要使用的数组. ...

  9. 运行composer出现do not run Composer as root/super user!

    curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer composer - ...

  10. PHP+Mysql防止SQL注入的方法

    这篇文章介绍的内容是关于PHP+Mysql防止SQL注入的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 方法一: mysql_real_escape_string -- 转义 S ...