一.TCP头信息

简单的至少应该知道,源端口,目的端口,序号,确认号,标志位,校验和

二.TCP的建立

1.客户端将SYN标志位置1,同时生成随机的序号,确认号是0。

2.服务器接收到SYN,知道有人想和他建立连接,做出回应,将SYN和ACK标志位置1,确认号为刚刚接受客户端的序号加1,代表已经收到客户端的建立连接请求。然后自己再随即生成一个序号,用来确认从服务器到客户端的链路正常。

3.客户端接收到服务器发送的确认号,检查是不是自己刚才发送的序号加一,代表从客户端到服务器的链路正确。客户端发送确认号为服务器端发送的序号加一,序号为客户端之前发送序号加一。

辅助记忆:

1.两次随机

只有序号上才会随机,确认号不能随机,序号的随机是在第一次握手和第二次握手上。因为TCP是双工通信,所以需要确认两边的链路都正确,所以服务器和客户端都要随机生成一次序号,等待对方来确认。

2.除了第一次握手确认号是0,确认号永远是序号加一

3.标志位 SYN->SYN,ACK->ACK

只要有确认号的存在,ACK标志位就得为1,所以除了第一次握手,后两次ACK标志位都是1。建立连接请求发起SYN标志位为1,因为客户端,服务器端各发起一次建立连接请求,所以第一第二次的SYN是1.

状态的转换:

1.第一次握手完,服务器端进入SYN_RCVD状态,客户端进入SYN_SENT状态

2.第二次握手完,客户端进入ESTABLISHED状态

3.第三次握手完,服务器进入ESTABLISHED状态

扩展:SYN攻击

Syn攻击就是 攻击客户端 在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直 至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。服务器端大量SYN_SENT状态的连接

三.TCP关闭

1.客户端发起关闭请求,发送一个信息:FIN(M)

2.服务端接受到信息后,首先返回ACK(M+1),表明自己已经收到消息。

3.服务端在准备好关闭之前,最后发送给客户端一个 FIN(N)消息,询问客户端是否准备好关闭了

4.客户端接受到服务端发送的消息后,返回一个确认信息: ACK(N+1)

状态装换:

客户端主动关闭发送FIN以后进入FIN_WAIT_1状态,接受服务器端的确认ACK进入FIN_WAIT_2状态。

服务器端收到客户端发送的FIN,并发送ACK进入CLOSE_WAIT(被动关闭)状态。

服务器端向客户端发送FIN,进入LAST_ACK状态。

客户端收到服务器端发送的FIN,并发送ACK进入TIME_WAIT(主动关闭)状态。客户端在2MSL(一次IP传输的最大时间)以后进入CLOSED状态(这是因为有可能发送的ACK由于网络问题没有送到服务器端,服务器端又一次发送FIN,所以客户端不是发送完ACK立刻进入CLOSED状态)。

服务器收到客户端发送的ACK,进入CLOSED状态。

对于HTTP服务器,主动关闭的是服务器端,所以服务器端通常会有大量的TIME_WAIT,如果有CLOSE_WAIT,那说明是客户端主动关闭的连接,如果存在大量的 CLOSE_WAIT,则说明客户端并发量大,且服务器未能正常感知客户端的退出,也并未及时 close 这些套接字。

从客户端看状态转换

FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED

从服务器端看状态转换

CLOSE_WAIT->LAST_ACK->CLOSED

TCP的建立和关闭的更多相关文章

  1. 网络学习笔记(一):TCP连接的建立与关闭

      五层网络模型分为:物理层.数据链路层.网络层.传输层.应用层.其中,传输层有两种主要协议:面向连接的TCP(Transmission Control Protocol 传输控制协议).无连接的UD ...

  2. 利用tcpdump分析工具来验证tcp连接的建立和关闭过程

    本文要求读者在阅读之前应该对TCP通过三次握手建立和关闭连接有一定的了解,本文并没有详细讲解三次握手,只是通过一个实例对三次握手进行了一下验证. tcp连接的建立和关闭想必大家都已经非常熟悉了!通过三 ...

  3. 深入理解TCP建立和关闭连接

    建立连接: 理解:窗口和滑动窗口TCP的流量控制TCP使用窗口机制进行流量控制什么是窗口?连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端 接收方发送的确认信息中包含了自 ...

  4. TCP/IP详解 卷1 第十八章 TCP的建立与终止

    第十八章 TCP的建立与终止 tcpdump Tcpdump可以将网络中传送的数据报完截获下来进行分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉 ...

  5. TCP/IP|| 建立连接或终止

    1.TCP是一个面向连接的协议,在双方发送数据时需要之间建立连接. 当使用telnet命令是连接对应的端口产生TCP连接,通过tcpdump命令查看TCP报文段的输出 源>目的:标志 在标识中有 ...

  6. 我为 Netty 贡献源码 | 且看 Netty 如何应对 TCP 连接的正常关闭,异常关闭,半关闭场景

    欢迎关注公众号:bin的技术小屋,本文图片加载不出来的话可查看公众号原文 本系列Netty源码解析文章基于 4.1.56.Final版本 写在前面..... 本文是笔者肉眼盯 Bug 系列的第三弹,前 ...

  7. TCP连接的建立与关闭

    TCP是主机对主机层的传输控制协议:建立连接要三个握手,断开连接要四次挥手. 位码即TCP标志位,有6种标示:SYN(synchronous建立联机),ACK(acknowledgement 确认), ...

  8. 从Wireshark看TCP连接的建立与关闭

    TCP是一种面向连接.可靠的协议.TCP连接的建立与断开,都是需要经过通信双方的协商.用一句话概括就是:三次握手say hello(建立连接):四次握手say goodbye(断开连接).要了解TCP ...

  9. TCP/IP之TCP的建立与终止

    TCP协议简介 tcp/ip协议族中传输层最重要的两种协议是UDP和TCP协议,上一篇文章用很短的篇幅介绍完了UDP协议相关的内容,但相对于UDP而言的TCP协议,是种更复杂,应用更广的协议.在接下来 ...

随机推荐

  1. python time,random,os,sys,序列化模块

    一.time模块 表示时间的三种方式 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: (1)时间戳(timestamp) :通常来说,时间戳 ...

  2. Linux acpi off学习的必要

    ACPI是Intel(i386,x86_64,IA64)平台的标准固件规范,绝大部分OS需要从BIOS得到的信息都可以从ACPI得到,并且现在的趋势是未来的任何新的特性相关的信息都只能从ACPI得到. ...

  3. UML-1-面向对象分析和设计

    1.关键词: OOA:Object-Oriented Analysis.面向对象分析.抽取对象或概念,如:航班系统包含 飞机(Plane).航班(Flight)等概念. OOD:Object-Orie ...

  4. PHP CURL_ERRNO 77

    项目中碰到curl https偶尔出现false,错误码77,可以尝试下面两种解决方法: 1.确认安装机器ca-certificates,重启PHP.设置curl_setopt($ch, CURLOP ...

  5. PHP 编译安装 gd 库

    作者博文地址:https://www.cnblogs.com/liu-shuai/ 安装gd依赖库 freetype wget http://download.savannah.gnu.org/rel ...

  6. SpringBoot | 第三十一章:MongoDB的集成和使用

    前言 上一章节,简单讲解了如何集成Spring-data-jpa.本章节,我们来看看如何集成NoSQL的Mongodb.mongodb是最早热门非关系数据库的之一,使用也比较普遍.最适合来存储一些非结 ...

  7. .net和js 获取当前url各种属性

    转来 假设当前页完整地址是:http://www.test.com:80/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 " ...

  8. linq(查询)

    1.改变数据库某一字段的属性 db.tableName.ToList().ForEach(x => x.State = false); 2.排序 db.tableName..toList().O ...

  9. 【Q】类和对象:游戏角色开发(角色介绍)

    案例情景:某公司要开发新游戏,请用面向对象的思想设计英雄类.怪物类和武器类. 编写测试类,创建英雄对象.怪物对象和武器对象,并输出各自的信息. 其中设定分别如下: 1.英雄类 属性:英雄名字.生命值. ...

  10. 探寻hashmap

    Hashmap源码 1.  构造器: a)获得默认数组大小:1>>4 :16 b) 获得负载因子:0.75:衡量hashmap的空间使用程度 i.过大:使用空间更加充分,但是查找效率变低, ...