TCP协议中的三次握手和四次挥手

   http://blog.csdn.net/li0978/article/details/52598121


前言

昨天晚上被一位师傅问到了TCP/IP的工作机制,心里很清楚三次握手,然而对于四次挥手却忘了,这是大学习里学过的,奋而翻阅书籍和网络对之前所学的做一个温顾,算是夯实自我吧。

TCP(Transmission Control Protocol)网络传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,数据传输前建立连接的工作要经过三次握手,数据传输后断开连接的工作要经过四次挥手。

工作过程

TCP标志位:

TCP共有6个标志位,分别是:

  • SYN(synchronous),建立联机。
  • ACK(acknowledgement),确认。
  • PSH(push),传输。
  • FIN(finish),结束。
  • RST(reset),重置。
  • URG(urgent),紧急。

图解三次握手和四次挥手的过程:

三次握手建立连接阐述:

第一次握手:客户端要和服务端进行通信,首先要告知服务端一声,遂发出一个SYN=1的连接请求信号,”服务端哥哥,我想给你说说话”。

第二次握手:当服务端接收到客户端的连接请求,此时要给客户端一个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。

第三次握手:当客户端收到了服务端的确认连接信息后,要礼貌的告知一下服务端,“好的,咱们开始联通吧(ACK)”。

到此整个建立连接的过程已经结束,接下来就是双方你一句我一句甚至同时交流传递信息的过程了。

四次挥手断开连接阐述:

第一次挥手:双方交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时自身形成等待结束连接的状态。

第二次挥手:服务端知道客户端已经没话说了,服务端此时还有两句心里话要给客户端说,“我知道你说完了(ACK),我再给你说两句,&*……%¥”。

第三次挥手:此时客户端洗耳恭听继续处于等待结束的状态,服务器端也说完了,自身此时处于等待关闭连接的状态,并对告诉客户端,“我说完了,咱们断了吧(FIN)”。

第四次挥手:客户端收知道服务端也说完了,也要告诉服务端一声(ACK),因为连接和断开要双方都按下关闭操作才能断开,客户端同时又为自己定义一个定时器,因为不知道刚才说的这句话能不能准确到达服务端(网络不稳定或者其他因素引起的网络原因),默认时间定为两个通信的最大时间之和,超出这个时间就默认服务器端已经接收到了自己的确认信息,此时客户端就关闭自身连接,服务器端一旦接收到客户端发来的确定通知就立刻关闭服务器端的连接。

到此为止双方整个通信过程就此终结。这里要声明一下:断开链接不一定就是客户端,谁都可以先发起断开指令,另外客户端和服务端是没有固定标准的,谁先发起请求谁就是客户端。

问题:

1.为什么断开链接的时候客户端设置的定时器时间等待要2MSL(两个通信报文的最大时间)? 
这个问题也很好理解,当客户端最终告诉服务器端断开确认的时候,他不知道自己的发出的指令是否能准确的一次性被服务器接收。假如服务器没有接收到(这已经耗费了一个报文的最大通信时间了),服务器端将会重新发起一个结束通话的指令(FIN)到客户端,客户端又接收到了服务器发来的结束通信指令将继续给服务器进行一个确认,有人会说那要是客户端发出的确认信息服务端没收到,而服务端重发的断开指令客户端也没收到怎么办,说实话我也无奈,遇到这种情况咱们干脆认为网确实不行了。

2.为什么建立连接要三次握手而断开连接要四次挥手? 
说起这个,打一个比喻,目前祖国正在高速发展高铁,建立连接的过程正如上海到北京打通一条高铁线,TCP通信过程是一个全双工模式,即在这条高铁线上要有两个轨道,即能从上海发车到北京又能从北京发车到上海,甚至两边可以同时发车。所以断开连接前提就是要保证两条轨道都没有车,然后双方才能各自发起断开动作。

双方各自工作流程图:

客户端工作流程: 
 
注意:在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。

服务器端工作流程: 

附加

SYN网络攻击:

原理: 
在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。

检测: 
SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了。windows下打开cmd,输入命令:”netstat -n -p TCP“,查看是否有大量的”SYN_RECEIVED“状态。

以下图片是表明正常的。 
这里写图片描述


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

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

相关文章

OSI 七层参考模型及TCP/IP 四层模型

OSI 七层参考模型 七层模型,亦称 OSI ( Open System Interconnection )参考模型,即开放式系统互联。参考模型是国际标准化组织(ISO )制定的一个用于计算机或通信系统间互联的标准体系,一般称为…

电影《麦田》的外景地其实是呼伦贝尔

看电影《麦田》多半是因为据说它的外景地在海拉尔——我童年和少年生长的地方。在我的印象中,家乡的某些地方还应该算是处女地,没有或者说还没有完全被工业化与城市化的脚步所践踏和蹂躏。 这个地方距离海拉尔大约200多公里,与海拉尔同属于呼…

最近觉得很是无奈啊

最近不知道为什么了,,,,,心神不定, 我的有银行卡被那个大姐, 吴xiaomei拿去了, 她拿着我的银行卡我没钱吃饭了, 每次都说第二天给我, 每次都没给, 都一个星期了.....

VHDL其他顺序语句

VHDL其他顺序语句 LOOP循环语句 LOOP语句属于可综合的循环语句,它可以使所包含的一组顺序语句被训话执行,其执行次数可由设定的循环参数决定。 (1)单个LOOP语句[LOOP标号: ] LOOP顺序语句END LOOP [LOOP 标号];实例如下:L2 : LOOPA := A+1;EXIT L2 WHEN A >10;--当A…

《龙与玫瑰园:中国艺术与权力》(英文版)在798首发

比利时作家苏斯冯埃尔岑(Sus Van Elzen)著作的《龙与玫瑰园,中国艺术与权力》(Dragon and Rose Garden:Art and power in China)英文版在798东八时区书吧举行首发式。比利时大使帕特里克Nijs和本书作者苏斯冯埃尔岑先生致词。 在这本书里&…

arm的一些概念(ARM7、Cortex-M的区别)

ARM7:ARMv4架构,ARM9:ARMv5架构,ARM11:ARMv6架构,ARM-Cortex 系列:ARMv7架构。 ARM7没有MMU(内存管理单元),只能叫做MCU(微控制器),不能运行诸…

赫塔•米勒获诺贝尔文学奖说明了什么?

诺贝尔文学奖常常和我们开玩笑,——和无辜的读者,和喜欢押赌注以期大赚一笔的出版商,还有我们那些没事业心人云亦云的外国文学研究和翻译的专家们。用评论家李陀先生的话这叫“带球过人”,你越是想左,我偏往右&#xf…

shutdown小程序

#include <stdio.h>#include <stdlib.h>int main(){char cmd[30];int tis;//时间单位为秒printf("plz input a time in seconds: \n");scanf("%d", &tis);sprintf(cmd, "shutdown -r -t %d", tis);printf("%s", cmd);…

内蒙古之秋

鄂尔多斯库布其沙漠的“响沙湾”。三个老外像美国西部片中的牛仔走向沙漠深处。 位于大青山以北昭河境内的普会寺&#xff0c;始建于乾隆三十四年。用经文连接成的佛幡。 沙漠中的旅游者。 沙漠的主人&#xff0c;一只孤独的黑虫。 呼和浩特奈热酒吧。一个唱呼麦的女歌手——图…

gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解

http://blog.csdn.net/elfprincexu/article/details/45043971 概述 C和C编译器是集成的&#xff0c;编译一般分为四个步骤&#xff1a; 预处理(preprocessing) ----------------- cpp/ gcc -E 编译(compilation) ------------------ cc1 / gcc -S汇编(assembly) -----------…

低级键盘钩子 DLL

C语言封装的低级键盘钩子(HOOK)的DLL程序, 源码, 并有测试程序...下载地址 : http://download.csdn.net/detail/hemmingway/4570548

并行信号赋值语句

并行信号赋值语句 并行信号赋值语句有3中形式,即简单信号赋值语句、条件信号赋值语句、选择信号赋值语句。 这3信号赋值语句的共同点是赋值目标必须都是信号,所有赋值语句与其他并行语句一样,在结构体内的执行是同时发生 简单信号赋值语句 语句格式赋值目标 <= 表达式…

让我们共同怀揣文学与艺术的梦想

勿声勿视系列之二 青铜 蔡劲松是我多年的朋友。他是个作家、诗人、大学时期还举办过个人的摄影展&#xff0c;近年开始绘画、雕塑以及装置的艺术创作&#xff0c;而且作品的数量和质量都令人刮目。 我们知道诗人与绘画的关系的紧密性&#xff0c;在中国古代的文人中是诗和画是…

中国文人这么多事儿

司马迁 看《文人那点子事儿》也许你会联想到《明朝那些事儿》&#xff0c;但书名的近似不过是一种策略。《明朝那些事儿》写的是一个朝代的历史&#xff0c;&#xff0c;而且加入了小说的笔法&#xff0c;既然有小说笔法&#xff0c;那肯定会有虚构、演义&#xff0c;甚至戏说的…

易错知识点

题目来源&#xff1a; 1、中兴、华为、慧通、英华达、微软亚洲技术中心等中外企业面试题目&#xff1b; 2、C 语言面试宝典(林锐《高质量编程第三版》)。 说明&#xff1a; 1、部分C 语言面试题中可能会参杂部分和C 相关的知识&#xff0c;为了保持题目的灵活性故保留&#xff…

随便写写....

最近有些恍恍惚惚的, 昨天晚上睡觉还做一个噩梦, 这好像是我第一次这样, 梦到自己裹在被子睡觉, 裹得紧紧的, 担心被外面的狼给发现了(为什么是狼我也百思不得其解), 但还是有一头狼咬了我的脚, 晚上就这样被自己的噩梦惊醒了, 不知道这几天是为什么, 感觉做什么都没有安全感…

数据类型定义语句

数据类型定义语句 用户自定义数据类型是用类型定义语句TYPE和子类型定义语句SUBTYPE实现的。TYPE语句最常用的用法有如下两种 第一种属于数组型数据类型定义语句; 数组类型又分为限定性数组和非限定性数组类型。 区别是:限定性数组下标的取值范围在数组定义时就被确定了,而…

甩开镣铐的精神舞蹈:推荐长篇小说《炼狱之花》

这是一部现实的复杂的小说&#xff0c;众多的声色男女&#xff0c;熟悉且陌生的领域&#xff0c;陆地和海底&#xff0c;天堂与地狱&#xff0c;让你拼命地应对、想象、思考、绞尽脑汁&#xff0c;心力焦瘁&#xff0c;绝望地想放弃和逃离。这也是一部天真的充满幻想的小说&…

雪洗北京

北京东便门。老城墙。一棵不成材的年轻小树&#xff0c;扭动身姿&#xff0c;成了一道风景。如果没有这漫天的白雪&#xff0c;我还会注意它么&#xff1f; 挂满银色雪粒的树丛&#xff0c;有一种冷色的脆弱的美。让人着迷。 从楼下看到的三环路。雪确实是好东西&#xff0c;它…

64ubuntu编译32位程序

今天做实验&#xff0c;64位ubuntu&#xff0c;sizeof指针得到8 想编译成32位程序 百度 需要安装32位库&#xff0c;已经安装了 libc6 libc6-dev 报错fatal error: sys/cdefs.h: No such file or directory 需要 sudo apt-get install libc6-dev-i386 然后再编译 ningu…