首页 > 其他分享 >面试复习总结-tcp三次握手四次挥手

面试复习总结-tcp三次握手四次挥手

时间:2023-03-06 22:15:21浏览次数:37  
标签:复习 ACK 主机 报文 SYN tcp 面试 FIN 连接

1.TCP/IP协议:

应用层:HTTP FTP TFTP HTTPS

会话层

表达层

传输层:TCP UDP

网络层 :IP ICMP ARP 

数据链路层:PPP,PPTP

物理层:帧

 

tcp三次握手四次挥手:

 

1.客户端发送连接请求,将SYN置为1,序列号设置为x,客户端进入SYN_SEND状态,等带服务器确认;

2.服务器收到SYN报文段,现需要进行确认,将ACK置为x+1;同时自己还要发送SYN请求信息,将SYN置为1,序列号为Y,服务器进入SYN_RECV状态;

3.客户端收到服务器的SYN+ACK报文段,然后将ACK置为y+1,向服务器发送ACK报文段,这个报文段发送完毕后,客户端和服务器端都将进入ESTABLISHED状态,完成TCP三次握手;

当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次分手”。

 

 


第一次分手: 主机1(可以使客户端,也可以是服务器端),设置Sequence Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;

第二次分手: 主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;

第三次分手: 主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;

第四次分手: 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

 

 

TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种断点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.3.4.16 而端口号为80,那么得到的套接字为192.3.4.16:80

字段 含义
URG 紧急指针是否有效。为1,表示某一位需要被优先处理
ACK 确认号是否有效,一般置为1。
PSH 提示接收端应用程序立即从TCP缓冲区把数据读走。
RST 对方要求重新建立连接,复位。
SYN 请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1
FIN 希望断开连接。

序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。

确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。

确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效

同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。

终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接

PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

 

标签:复习,ACK,主机,报文,SYN,tcp,面试,FIN,连接
From: https://www.cnblogs.com/wgsbg/p/17185694.html

相关文章

  • 软件测试面试
    高频1、GET和POST请求的区别get:1、相对不安全,没有请求体,一般实在url中传递数据,明文。2、url长度有限,传递数据量小。3、查询,200.post:1、相对安全,有请求体,浏览器地址看不......
  • 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节
    24.两两交换链表中的节点/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),nex......
  • tcpdump使用指南
    全网最详细的tcpdump使用指南 今天要给大家介绍的一个Unix下的一个 网络数据采集分析工具,也就是我们常说的抓包工具。与它功能类似的工具有wireshark,不同的......
  • 3.6 滴水复习 2
    1.寄存器和内存的区别一个存储少速度快一个存储多速度较慢2.计算机计量单位3.内存编号4.内存读取1.立即数2.寄存器3.寄存器+数值4.寄存器+寄存器*值5.......
  • 前端面试题(第 3 期)
    你好,欢迎大家在有空的时候做客【江涛学编程】,我是小编岩家兴,很高兴认识你!先做十题压压惊●这位选手,你有了解过ETag吗?那你讲讲304缓存原理吧?●这位选手,请你聊聊你所知......
  • #yyds干货盘点# LeetCode面试题:组合总和
    1.简述:给你一个无重复元素的整数数组 candidates和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target的所有 不同组合,并以列表形式返回。你......
  • #yyds干货盘点# LeetCode程序员面试金典:交换和
    题目:给定两个整数数组,请交换一对数值(每个数组中取一个数值),使得两个数组所有元素的和相等。返回一个数组,第一个元素是第一个数组中要交换的元素,第二个元素是第二个数组中要交......
  • 计算机基础_网络协议2.TCP、HTTP、HTTPS
    三次握手和四次挥手详细原理,为什么要使用这种机制?当进行第一次握手,网络不好可能会堵塞,所以连接的请求并没有到达服务器端;但是tcp连接有超时重传的机制,所以再一次发送请求,......
  • C#/.net面试知识点总结【反射】(二)
    反射?通过反射调用对象要比直接NEW一个对象慢多 https://www.jb51.net/article/205935.htm动态获取程序集信息。程序集包含模块,而模块又包括类型,类型下有成员,反射就是管理......
  • C#/.net面试知识点总结(六)【垃圾回收器】
    托管代码可是享受CLR提供的服务(安全检测,垃圾回收,)不需要自己完成这些操作非托管代码需要自己提供安全检测,垃圾回收等操作 托管代码是一种中间语言,运行在CLR上。非托管代......