1、TCP三次握手过程

  wireshark抓包为:(wireshark会将seq序号和ACK自己主动显示为相对值)   

  

  

  1)主机A发送标志syn=1,随机产生seq =1234567的数据包到server,主机B由syn=1知道,A要求建立连接; 此时状态A为SYN_SENT,B为LISTEN

  

  

  2)主机B收到请求后要确认连接信息。向A发送ack =(主机A的seq+1),标志syn=1,ack=1,随机产生seq=7654321的包。 此时状态A为ESTABLISHED。B为SYN_RCVD 

  

  

  3)主机A收到后检查ack 是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确。主机A会再发送ack =(主机B的seq+1),标志ack=1。主机B收到后确认seq值与ack=1则连接建立成功。 此时A、B状态都变为ESTABLISHED   

  

2、TCP四次挥手过程

  断开连接过程与建立连接相似

1)主机A发送位码为FIN=1,用来关闭客户A到serverB的数据传送。

此时A的状态为FIN_WAIT_1

2)serverB收到这个FIN。它发回一个ACK,确认序号为收到的序号加1。此时A为FIN_WAIT_2。B为CLOSE_WAIT

3)serverB关闭与clientA的连接。发送一个FIN给clientA。此时A为TIME_WAIT。B为LAST_ACK

4)clientA发回ACK报文确认,并将确认序号设置为收到序号加1。此时A、B都关闭了。状态变为CLOSED。

当(2)、(3)步中的ACK和FIN在一个包中发送时,A的状态会直接从FIN_WAIT_1变为TIME_WAIT

3、为什么建立连接须要三次握手。而断开连接须要四次握手

  由于每一个方向都须要一个FIN和ACK。当一端发送了FIN包之后,处于半关闭状态,此时仍然能够接收数据包。

  在建立连接时。server能够把SYN和ACK放在一个包中发送。

  可是在断开连接时。假设一端收到FIN包,但此时仍有数据未发送完。此时就须要先向对端回复FIN包的ACK。等到将剩下的数据都发送完之后,再向对端发送FIN,断开这个方向的连接。

  因此非常多时候FIN和ACK须要在两个数据包中发送,因此须要四次握手

4、TIME_WAIT状态持续时间及原因

  持续时间未2MSL。一个数据包在网络中的最长生存时间为MSL。

  假设最后client回复的ACK丢失。server端会在超时时间到来时,重传最后一个FIN包。

  ACK和FIN在网络中的最长生存时间就为2MSL。这样就能够可靠的断开TCP的双向连接。

5、超时重传和高速重传   

  • 超时重传:当超时时间到达时,发送方还未收到对端的ACK确认。就重传该数据包
  • 高速重传:当后面的序号先到达,如接收方接收到了1、 3、 4,而2没有收到,就会马上向发送方反复发送三次ACK=2的确认请求重传。

    假设发送方连续收到3个同样序号的ACK,就重传该数据包。

    而不用等待超时

6、TCP首部长度,有哪些字段

7、TCP选项有哪些

  TCP首部选项字段多达40B。一些经常使用的字段有:

  1)选项结束字段(EOP,0x00)。占1B,一个报文段仅用一次。放在末尾用于填充。用途是说明:首部已经没有很多其他的消息,应用数据在下一个32位字開始处

  2)无操作字段(NOP, 0x01)。占1B,也用于填充,放在选项的开头

  3)MSS(最大报文段长度)。格式例如以下:种类(1B,值为2)。长度(1B。值为4),数值(2B)

  用于在连接開始时确定MSS的大小,假设没有确定,就用默认的(一般实现是536B)

  4)窗体扩大因子,格式例如以下:种类(1B,值为3),长度(1B,值为3),数值(1B)

  新窗体值 = 首部窗体值 * 2的(扩大因子)次方

  当通信两方觉得首部的窗体值还不够大的时候,在连接開始时用这个来定义更大的窗体。仅在连接開始时有效。一经定义。通信过程中无法更改。

  5)时间戳(应用測试RTT和防止序号绕回)

  6)同意SACK和SACK选项

8、TCP在listen时的參数backlog的意义

  linux内核中会维护两个队列:

  1)未完毕队列:接收到一个SYN建立连接请求,处于SYN_RCVD状态

  2)已完毕队列:已完毕TCP三次握手过程,处于ESTABLISHED状态

  当有一个SYN到来请求建立连接时,就在未完毕队列中新建一项。当三次握手过程完毕后,就将套接口从未完毕队列移动到已完毕队列。

  backlog曾被定义为两个队列的总和的最大值,也曾将backlog的1.5倍作为未完毕队列的最大长度

一般将backlog指定为5

9、accept发生在三次握手的哪一步

  accept会监听已完毕队列是否非空。当队列为空时,accept就会堵塞。当队列非空时,就从已完毕队列中取出一项并返回。

  而已完毕队列中的都是三次握手过程已经完毕的,因此accept发生在三次握手之后。

10、三次握手过程中有哪些不安全性

  1)伪装的IP向server发送一个SYN请求建立连接。然后server向该IP回复SYN和ACK。可是找不到该IP相应的主机,当超时时server收不到ACK会反复发送。

当大量的攻击者请求建立连接时。server就会存在大量未完毕三次握手的连接,server主机backlog被耗尽而不能响应其他连接。即SYN泛洪攻击

  防范措施:

  1、减少SYN timeout时间。使得主机尽快释放半连接的占用

  2、採用SYN cookie设置,假设短时间内连续收到某个IP的反复SYN请求,则觉得受到了该IP的攻击,丢弃来自该IP的兴许请求报文

  3、在网关处设置过滤,拒绝将一个源IP地址不属于其来源子网的包进行更远的路由

  2)当一个主机向server发送SYN请求连接。server回复ACK和SYN后。攻击者截获ACK和SYN。

然后伪装成原始主机继续与server进行通信。

  

11、TCP和UDP的差别

  • TCP是有连接的,两台主机在进行数据交互之前必须先通过三次握手建立连接;而UDP是无连接的,没有建立连接这个过程
  • TCP是可靠的传输。TCP协议通过确认和重传机制来保证传输数据的可靠性;而UDP是不可靠的传输
  • TCP还提供了拥塞控制、滑动窗体等机制来保证传输的质量,而UDP都没有
  • TCP是基于字节流的,将数据看做无结构的字节流进行传输,当应用程序交给TCP的数据长度太长,超过MSS时。TCP就会对数据进行分段。因此TCP的数据是无边界的。而UDP是面向报文的。不管应用程序交给UDP层多长的报文,UDP都不会对数据报进行不论什么拆分等处理,因此UDP保留了应用层数据的边界

12、有哪些应用层协议是基于TCP的,哪些是基于UDP的

  • TCP: FTP、HTTP、Telnet、SMTP、POP3、HTTPS
  • UDP:DNS、SNMP、NFS

TCP相关面试题总结的更多相关文章

  1. TCP相关面试题(转)

    1.TCP三次握手过程 wireshark抓包为:(wireshark会将seq序号和ACK自动显示为相对值)       1)主机A发送标志syn=1,随机产生seq =1234567的数据包到服务 ...

  2. C# 相关面试试题简单的总结

    最近一个搞NET开发的朋友离职了,想让我给他找点关于NET的相关面试题,准备抱一下佛脚,迎接新的挑战. 我赶紧找到以前检索的各种宝典,试题,今天梳理一下关于NET的基础知识点. 1.面向对象语言的三大 ...

  3. Linux相关面试题&答案

    Linux相关面试题&答案 Linux面试题&答案 假设apache日志格式为:118.78.199.98 – - [09/Jan/2010:00:59:59 +0800] " ...

  4. HashMap源码与相关面试题

    一.哈希表 哈希表是一种可以快速定位得数据结构.哈希表可以做到平均查找.插入.删除时间是O(1),当然这是指不发生Hash碰撞得情况.而哈希表最大得缺陷就是哈希值得碰撞(collision). Has ...

  5. spring MyBatis的相关面试题

    (相关面试题! 供参考!) 1.ORM框架有哪些? MyBatis:半自动化框架(不是纯ORM) 需要写动态SQL语句,实体类和SQL语句之间建立映射关系 Spring:轻量级框架, Java EE的 ...

  6. Tomcat相关面试题,看这篇就够了!保证能让面试官颤抖!

    Tomcat相关的面试题出场的几率并不高,正式因为如此,很多人忽略了对Tomcat相关技能的掌握. 这次整理了Tomcat相关的系统架构,介绍了Server.Service.Connector.Con ...

  7. dubbo 相关面试题 有用

    调用关系说明: · 0. 服务容器负责启动,加载,运行服务提供者. · 1. 服务提供者在启动时,向注册中心注册自己提供的服务. · 2. 服务消费者在启动时,向注册中心订阅自己所需的服务. · 3. ...

  8. dubbo 相关面试题 有用(转)

    调用关系说明: · 0. 服务容器负责启动,加载,运行服务提供者. · 1. 服务提供者在启动时,向注册中心注册自己提供的服务. · 2. 服务消费者在启动时,向注册中心订阅自己所需的服务. · 3. ...

  9. Struts2相关面试题

    Struts2面试题 1.struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件. 核心 ...

随机推荐

  1. 魅族MX3 smart bar处失灵

    MX3的分辨率是1800X1080,改成1750X1080 adb shell wm size 1080x1750

  2. JS 中div内容的显示和隐藏

    1. document.getElementById("dialog-auclot-status").style.display="none";//页面加载时隐 ...

  3. 如何利用启明星Portal门户系统的Page模块构建文档库

    利用启明星门户系统的Page模块构架可以搭建企业内部的文档管理系统. (一)应用背景 企业内部通常都会使用共享网盘的方式来存放不同部门之间的文档,例如管理员在服务器上对人事部门增加人事部文档文件夹. ...

  4. 非常优秀的iphone学习文章总结!

    This site contains a ton of fun tutorials – so many that they were becoming hard to find! So I put t ...

  5. 【HDOJ】【3377】Plan

    插头DP sigh……其实思路很简单的= =就多加一种转移:从(0,0)->(0,0),也就是不走这个格子…… 初始状态就是第一格有一个左插头= =结束状态可以让(n,m)这个位置可以走到(n+ ...

  6. Mysql 查询注意和运行shell命令

    Mysql 查询注意 1. 在mysql查询的时候须要注意在表的前面加上数据库的前缀,不然就是默认是当前的数据库(当多个库查询的时候,可能会出现反复的查同样的表多次) 2. \! ls –al ,my ...

  7. 6 cocos2dx粒子效果,类图关系,系统原生粒子和自己定义粒子效果,粒子编译器软件,爆炸粒子效果,烟花效果,火焰效果,流星效果,漩涡粒子效果,雪花效果,烟雾效果,太阳效果,下雨效果

     1 粒子 演示样例 2 类图关系 3 系统原生粒子 CCParticleSystem 全部粒子系统的父类 CCParticleSystemPoint. CCParticleSystemQuad ...

  8. 谁能用通俗的语言解释一下什么是 RPC 框架

    转载自知乎:https://www.zhihu.com/question/25536695 知乎上很多问题的答案还是很好的,R大就经常在上面回答问题~ 谁能用通俗的语言解释一下什么是 RPC 框架? ...

  9. 混沌数学之离散点集图形DEMO

    最近看了很多与混沌相关的知识,并写了若干小软件.混沌现象是个有意思的东西,同时混沌也能够生成许多有意思的图形.混沌学的现代研究使人们渐渐明白,十分简单的数学方程完全可以模拟系统如瀑布一样剧烈的行为.输 ...

  10. 第五章 类加载器ClassLoader源码解析

    说明:了解ClassLoader前,先了解 第四章 类加载机制 1.ClassLoader作用 类加载流程的"加载"阶段是由类加载器完成的. 2.类加载器结构 结构:Bootstr ...