tcp工作原理

 

 

 

 

 

TCP 三次握手建立连接

 

TCP 建立连接全过程解释

  1. 客户端发送 SYN 给服务器,说明客户端请求建立连接;
  2. 服务端收到客户端发的 SYN,并回复 SYN+ACK 给客户端(同意建立连接);
  3. 客户端收到服务端的 SYN+ACK 后,回复 ACK 给服务端(表示客户端收到了服务端发的同意报文);
  4. 服务端收到客户端的 ACK,连接已建立,可以数据传输。

 

 

 

 

TCP 四次挥手释放连接:

TCP 为什么要进行四次挥手?

1:TCP 为什么要进行四次挥手? / 为什么 TCP 建立连接需要三次,而释放连接则需要四次?

答案:因为 TCP 是全双工模式,客户端请求关闭连接后,客户端向服务端的连接关闭(一二次挥手),服务端继续传输之前没传完的数据给客户端(数据传输),服务端向客户端的连接关闭(三四次挥手)。所以 TCP 释放连接时服务器的 ACK 和 FIN 是分开发送的(中间隔着数据传输),而 TCP 建立连接时服务器的 ACK 和 SYN 是一起发送的(第二次握手),所以 TCP 建立连接需要三次,而释放连接则需要四次。

2:为什么 TCP 连接时可以 ACK 和 SYN 一起发送,而释放时则 ACK 和 FIN 分开发送呢?(ACK 和 FIN 分开是指第二次和第三次挥手)

答案:因为客户端请求释放时,服务器可能还有数据需要传输给客户端,因此服务端要先响应客户端 FIN 请求(服务端发送 ACK),然后数据传输,传输完成后,服务端再提出 FIN 请求(服务端发送 FIN);而连接时则没有中间的数据传输,因此连接时可以 ACK 和 SYN 一起发送。

3:为什么客户端释放最后需要 TIME-WAIT 等待 2MSL 呢?

答案:

1:为了保证客户端发送的最后一个 ACK 报文能够到达服务端。若未成功到达,则服务端超时重传 FIN+ACK 报文段,客户端再重传 ACK,并重新计时。

2:防止已失效的连接请求报文段出现在本连接中。TIME-WAIT 持续 2MSL 可使本连接持续的时间内所产生的所有报文段都从网络中消失,这样可使下次连接中不会出现旧的连接报文段。

socket编程流程:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网碰到云计算会怎么样?

如果提起物联网和云计算,熟悉安防行业的朋友们可能都不会太过陌生。没错,就是这两项新生技术的问世,给我们安防行业带来了许多全新的理念。而在不少人的眼中,物联网和云计算在潜意识中也是有不少联系的,但是如果要细细…

可变参数使用

#include<iostream> //c17写法&#xff0c;折叠表达式 template<typename...args> auto sum(args&&...types) { //一元右折 //return (types ...); //一元左折 //return (...types); //二元左折 //return(0 ... types); /…

CentOS FTP安装及配置

CentOS FTP安装及配置 LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等.Red Hat Enterprise Linux中默认安装的是vsftpd.访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供了3种ftp登录形式: (1)anonymous(…

std::optional

c17之后引入optional&#xff0c;其实就是把boost库里面实现机制引入进来.作用:良好地处理构造开销高昂的对象&#xff0c;并更加可读.有点像指针的用法.个人认为&#xff0c;没啥鸟用&#xff0c;和用指针没啥区别 例子: #include <optional> #include <vector>…

vector删除元素

下面来感受下c11之后的魔力: #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int>vec{ 1,2,3,4,5 }; //vec.erase( //std::remove_if(vec.begin(), vec.end(), [](int value){return value 0;}))…

[置顶] 任务三 主题、样式

【知识点】 Web设计的核心思想 添加主题 添加样式表 窗体文件中应用主题 【操作步骤】 一、右击网站Web→添加ASP.NET文件夹→主题&#xff1b;添加主题文件夹 二、重命名主题文件夹名称为Default 三、右击主题文件夹Default→添加新项→样式表&#xff0c;添加样式表…

【FPGA】Verilog 实践:优先级编码器 | Priority encoder

0x00 优先级编码器&#xff08;Priority encoder&#xff09; "能将多个二进制输入压缩成更少数目输出的电路或算法的编码器" 优先级编码器是一种编码器&#xff0c;它考虑了两个或更多输入位同时变为 1 但没有收到输入的情况。当输入进来时&#xff0c;优先级编码…

智能指针分配动态数组

auto ptr_arr std::make_shared<int[]>(); std::unique_ptr<int[]> up1(new int[10]()); //C14以后语法 auto up2 std::make_unique<A[]>(3); auto sp3(std::shared_ptr<A[]>(new A[3])); //#include <boost/make_shared.hpp> auto b_ptr_…

php基础语法知识笔记(一)

共享一份我自己学习php基础语法知识的笔记&#xff0c;这是第一弹&#xff0c;明天共享第二弹。 1.判断php短标记<??>是否适用&#xff0c;查看php配置文件php.ini中的"short_open_tag On"2.官方的标记<?php?> &#xff0c; <script language&q…

php __FILE__和$_SERVER['SCRIPT_FILENAME']区别

假设有a.php和b.php2个文件&#xff0c;分别位于E:/wamp/www/Text/ a.php echo $_SERVER[SCRIPT_FILENAME].<br/>; echo __FILE__; 执行a.php 得到的是 E:/wamp/www/Text/a.php ($_SERVER[SCRIPT_FILENAME]) E:\wamp\www\Text\a.php (__FILE__) b.php require a.…

boost asio io_context 没任务不退出

boost::asio::io_context ioc; auto work(boost::asio::make_work_guard(ioc)); //没用任务时&#xff0c;run 不退出

git中reset与revert的区别

1:最本质的区别:reset 回滚后&#xff0c;不会生成任何commit点(也就是提交哈希值),而revert回滚后回生成commit点 2:reset 命令参数包括&#xff1a;soft hard mixed 三个回滚方式

论文总结2

基于内容的网页特征提取 2001 使用专业网络爬虫获取网页&#xff0c;巨量网页数据保存在分布式的LDAP (轻量级目录服务协议)目录服务器中, 通过轻量级目录服务协议维护管理。分词词典通过提取过滤很多相关领域网页生成&#xff0c;手动更新。特征提取&#xff1a;正文分词然后计…

安裝jpeg-6b png error错误解决方法

默认安裝jpeg-6b shell> wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz tar zxvf jpegsrc.v6b.tar.gz cd jpeg-6b ./configure –-prefix/usr/local/jpeg6 –enable-shared –enable-static make make install 指定安装目录方式安装jpeg-6b 如果你选择默认安装…

c++11特性move和forward区别

1:move属于强转,左值变右值 2:forward左值变左值&#xff0c;右值变右值(不是强转)

碎语

悠悠大道&#xff0c;莫衷一是。也许&#xff0c;看到的不是真相&#xff0c;听到的&#xff0c;反而是实言。匆匆的人流&#xff0c;滚滚的气息。得不到的一直在强求&#xff0c;在身边的故意不理睬。千篇一律的重复着早中晚&#xff0c;行尸走肉地上演着你我他。了却不断的红…

linux 进程重启脚本

pid(ps aux | grep 进程名 | grep -v grep | awk {print $2}) if [ ! -n "$pid" ] then echo 进程名 process not found. else kill -9 $pid echo 进程名 process[$pid] be killed. fi chmod 777 ./进程名 rm -rf *.log nohup ./进程名 > log.log 2>…

MongoDB与其他数据库的对比

本文转载自&#xff1a;http://book.2cto.com/201211/7897.html 市面上的数据库数量成爆炸式增长&#xff0c;要在它们之间进行权衡是很困难的。幸运的是&#xff0c;它们之中的大多数数据库都能归在几个分类里。本节中&#xff0c;我会描述简单及复杂的键值存储、关系型数据库…

【学习生活杂谈】学习记录

hadoop学习汇总&#xff1a;Hadoop官方的中文文档http://hadoop.apache.org/common/docsHadoop学习资料 -- 这里面总结了很多的东西&#xff0c;值得一一细看http://cloud21.javaeye.com/blog/607175关于Hadoop的两本书 -- 有电子书下载http://caibinbupt.javaeye.com/blog/418…

hadoop和kerberos的整合总结

由于手上负责的hadoop集群需要对公司外部提供服务&#xff0c;所有会有多个部门访问我们的hadoop集群&#xff0c;这个就涉及到了hadoop的安全性。 而hadoop的安全性是很弱的&#xff0c;只提供类似linux文件系统的帐户权限验证&#xff0c;而且可以通过简单的手段冒充用户名&a…