tcp协议的简单理解
tpc协议属于传输层协议,本篇主要介绍下几个概念,以及握手和挥手的过程。
1.tcp的几个概念
位码:即tcp标志位,有6种提示
SYN:synchronus,表示建立联机。
ACK:acknowledgement,确认。
PUSH:push,传送。
FIN:finish,结束。
RST:rest,重置。
URG:urgent,紧急。
Sequence number:顺序号码。
Acknowledge number:确认号码。
2.三次握手过程(假设主机A和主机B进行通信)
第一次握手:主机A发送SYN=1,seq_number=123456的数据包到达主机B,主机B由SYN=1知道,主机A要求建立联机。
第二次握手:主机B收到请求之后,需要确认联机信息。需要像A发送ACK=1,ack_number=(主机A的seq_number+1),SYN=1,seq_number=7654321的包。
第三次握手:主机A收到B的数据包之后,会去检查ack_number(即第一次发送的seq_number+1)以及ACK=1是否正确,若正确,主机A会像主机B发送ACK=1,ack_number=(主机B的seq_number+1)的数据包到达主机B,主机B收到后确认ACK=1和ack_number无误后,建立正常连接。
3.四次挥手的原因
由于tcp的全双工特性(即数据在两个方向上能够同时传递),因此每个方向上必须进行单独的关闭。 关闭的原则是:当一方完成数据传输之后,就可以发送FIN=1的数据包来终止这个方向上的连接。当一端收到这个FIN=1的数据包后,通知应用层另一端已经终止了数据的发送操作(即收到一个FIN=1的数据包证明这个方向上已经没有数据流动了)。两端单独关闭的目的就是为了保证两端能够完全的接收到对方发送的数据包。
4.四次挥手过程(假设主机A和主机B进行通信)
第一次挥手:主机A像主机B发送FIN=1的数据包;即A告诉B,我(A)发送给你(B)的数据大小是N,我已经发送完毕,请求断开我(A)到你(B)的连接。
第二次挥手:主机B收到主机A发送的FIN数据包,并像主机A发送ACK数据包;即B告诉A,是的,我总共收到了你发送给我N大小的数据包,现在断开你(A)到我(B)的连接。
第三次挥手:主机B像主机A发送FIN=1的数据包;即B告诉A,我(B)发送给你(A)的数据大小是N,我已经发送完毕,请求断开我(B)到你(A)的连接。
第四次挥手:主机A收到主机B发送的FIN数据包,并像主机B发送ACK数据包;即A告诉B,是的,我总共收到了你发送给我N大小的数据包,现在断开你(B)到我(A)的连接。
tcp协议的简单理解的更多相关文章
- http协议跟tcp协议的简单理解
在说明这两个协议之前,我们先简单说一下网络的分层. 1)应用层 支持网络应用,应用协议仅仅是网络应用的一个组成部分,运行在不同主机上的进程则使用应用层协议进行通信.主要的协议有:http.ftp.te ...
- 关于TCP\IP协议的简单理解
一: HTTP是基于TCP协议的,TCP属于传输层.HTTP属于应用层. 另一个属于传输层的是UDP协议. 但HTTP是基于TCP这个协议,不是UDP这个协议. TCP相比于UDP,更安全,稳定.因为 ...
- 对TCP协议握手的理解(转)
reference:https://www.cnblogs.com/awkflf11/p/9191708.html 目录: 31.Tcp握手的一些问题? 21.Tcp三次握手及SYN攻击: 四次握手? ...
- 基于Tcp协议的简单Socket通信实例(JAVA)
好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...
- python3实现TCP协议的简单服务器和客户端
利用python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱.下面代码就是模拟客户端通过命令行操作 ...
- TCP协议的简单应用一
TCP协议的应用,实现一个服务器处理多个客户端请求(向服务器发送消息,服务器接收到后以原消息返回给客户端.) 客户端类 import java.io.*; import java.net.Socket ...
- http、tcp和socket简单理解
1.Http属于应用层,主要解决如何包装数据. 2.Tcp属于传输层,主要解决数据如何在网络上传输. 3.Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API) ...
- (转)tcp/ip协议的简单理解 -- ip报文和tcp报文的格式
1.概念: TCP/IP协议通信的过程其实就对应着数据入栈与出栈的过程.入栈的过程,数据发送方每层不断地封装首部与尾部,添加一些传输的信息,确保能传输到目的地.出栈的过程,数据接收方每层不断地拆除首部 ...
- https协议的简单理解
本片文章梳理三个知识点: 1.对称加密和非对称加密的区别 2.https协议的请求流程 3.http协议和https协议的区别 一.对称加密和非对称加密 对称加密:加密和解密使用同一密钥. 非对称加密 ...
随机推荐
- css实现单行(多行)文本溢出显示 ...
overflow: hidden; text-overflow:ellipsis; white-space: nowrap; 当然还需要加宽度width属来兼容部分浏览. 以上为单行文本溢出===== ...
- SQL CREATE INDEX 语句
CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 索引 您可以在表中创建索引,以便更加快速高效地查询数据. 用户无法看到索引,它们只 ...
- html5 contenteditable 实现table可编辑(网页版EXCEL)
一直想找一个免费的网页版的EXCEL插件,以便于多人共同在线编辑,始终没发现合适的. 其实自己实现类似功能也不难.参考:https://blog.csdn.net/chadcao/article/de ...
- SpringBoot中各配置文件的优先级及加载顺序
我们在写程序的时候会碰到各种环境(开发.测试.生产),因而,在我们切换环境的时候,我们需要手工切换配置文件的内容.这大大的加大了运维人员的负担,同时会带来一定的安全隐患. 为此,为了能更合理地重写各属 ...
- C++ 中 auto 与 decltype 的用法与区别
最近在恶补 C++ 知识的时候,学习到了一些 C++11 标准的新特性,利用这些新特性,我们能够更快地提高编程效率,从而实现我们的目标,在此特意记下学习过程中所学习到的一些东西,方便日后的回顾和复习. ...
- 手动用tomcat启动war包,无法访问web项目
先说一下自己采的小坑,网上大多解答都是复制来复制去,不说重点在哪.我这里简单总结下访问路径问题 一.用idea打成war包,具体步骤如下图: 步骤:在项目配置选Artifacts新建Web Appli ...
- mysql查看存储过程函数
查询数据库中的存储过程和函数 select `name` from mysql.proc where db = 'xx' and `type` = 'PROCEDURE' //存储过程 ...
- 合并K个有序数组(链表)【字节跳动面试算法题】
本题是本人字节跳动一面考的算法题原题是有序数组,一时没想到怎么解决数组的问题,但是如果给的是有序链表数组,则可以用下面的方法解决 可以利用最小堆完成,时间复杂度是O(nklogk),具体过程如下: 创 ...
- python 装饰器练习题
1.写出完整的装饰器(不用开了带参装饰器,就是普通装饰器)语法 2.有一个计算两个数和的方法,为其添加一个确保两个参数都是int或float类型的装饰器,保证运算不会抛异常 3.有一个一次性录入人名并 ...
- JarvisOJ Basic 握手包
得到的是一个.cap文件,我看着好像可以用wireshark打开,就试了一下 报错了,pcapfix上,得到了一个新的.cap文件,用wireshark打开,发现分析不出来 查了一下,有破解握手包的专 ...