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协议的区别 一.对称加密和非对称加密 对称加密:加密和解密使用同一密钥. 非对称加密 ...
随机推荐
- PHP程序员从小白到高手,掌握这些技能少走弯路
PHP程序员从小白到高手,掌握这些技能少走弯路 PHP究竟是不是最好的语言,一直以来是程序员最大的“争议”,但毋庸置疑的是,PHP绝对是最有前途和力量的变成语言,也是你入门最值得学习的语言. 作为老牌 ...
- CVS简单介绍
版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/Jerome_s/article/details/27990707 CVS - Concurrent Ver ...
- Linux Hung Task分析
关键词:khungtaskd.TASK_UNINTERRUPTIBLE.nvcsw.nivcsw.last_switch_count等等. 经常会遇到内核打印“INFO: task xxx:xxx b ...
- Python--day04(流程控制)
day03主要内容回顾 1.变量名命名规范 -- 1.只能由数字.字母 及 _ 组成 -- 2.不能以数字开头 -- 3.不能与系统关键字重名 -- 4._开头有特殊含义 -- 5.__开头__结尾的 ...
- element ui 时间 date 差一天
let BirthdayYMD = common.formatDate(this.addForm.Dendline); this.addForm.Dendline = new Date(Birthda ...
- c语言之数据类型
#include<stdio.h> int main(void) { float weight, value; printf("Are you worth your weight ...
- iview 无法缓存的问题
- vue-electron脚手架安装及说明 打包基于Vue的 桌面应用程序
今天这篇文章是讲述一下 融合了vue-cli+electron的一种新的脚手架,省去许多繁琐配置,即vue-electron. 下面就说一下安装和使用,假设你的电脑已经安装node.js,并且已经全局 ...
- windows下零基础gulp构建
在学习前,先谈谈大致使用gulp的步骤,给读者以初步的认识.首先当然是安装nodejs,通过nodejs的npm全局安装和项目安装gulp,其次在项目里安装所需要的gulp插件,然后新建gulp的配置 ...
- JVM运行时内存组成分为一些线程私
JVM运行时内存组成分为一些线程私有的,其他的是线程共享的. 线程私有 程序计数器:当前线程所执行的字节码的行号指示器. Java虚拟机栈:java方法执行的内存模型,每个方法被执行时都会创建一个栈帧 ...