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)的连接。

    

原文地址:https://www.cnblogs.com/code-star/p/10506717.html

时间: 2024-10-14 22:08:14

tcp协议的简单理解的相关文章

python3实现TCP协议的简单服务器和客户端

利用python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱.下面代码就是模拟客户端通过命令行操作服务器.客户端输入命令,服务器执行并且返回结果. TCP(Transmission Control Protocol 传输控制协议):是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. TCP客户端 from socket import * host = '192

OC协议的简单理解

新建一个工程,工程里面有Person, dog,blackman三个类,person需要找个人来帮他盖房子. 分析:dog是动物,肯定不会造房子,blakman,或许可以建房子,那程序如何判断blackman,dog能否建房子?那我们就需要一个东西来限定/指定他们的属性,这就是协议咯,协议在我看来就是一个可以限定/指定一些对象属性的东西,所以现在我们现在新建一个名为delegate的类 @protocol onedelegate <NSObject> //创建一个协议 @required //

基于TCP协议的简单Socket通信笔记(JAVA)

好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. 1.首先先来看下基于TCP协议Socket服务端和客户端的通信模型: Socket通信步骤:(简单分为4步) 1.建立服务端ServerSocket和客户端Socket 2.打开连接到Socket的输出输入流 3.按照协议进行读写操作 4.关闭相对应的资源 2.相关联的API: 1.首先先来看下S

对TCP协议握手的理解(转)

目录: 31.Tcp握手的一些问题? 21.Tcp三次握手及SYN攻击: 四次握手? 为什么建立连接是三次握手,而关闭连接却是四次挥手? 13.TCP释放连接四次握手 12.TCP建立连接三次握手 11.TCP报文段首部格式? ----------------  31.连接建立,为什么要进行三次握手呢(两次确认)? 为什么要采用三次握手,两次不行吗? Tcp4次释放连接的过程? 四次挥手图示: 当客户A 没有东西要发送时就要释放 A 这边的连接,A会发送一个报文(没有数据),其中 FIN 设置为

【tcp-ip学习总结】使用tcp协议实现简单的通信小程序

环境:vs2013 server.c #include<Winsock2.h> #include<stdio.h> #pragma comment(lib,"Ws2_32.lib") #include<stdlib.h> void main() { WSADATA wsaData;//协议栈 struct sockaddr_in server, client;//服务端和客户端的地址 int iLen; char recMessage[1024];

https协议的简单理解

本片文章梳理三个知识点: 1.对称加密和非对称加密的区别 2.https协议的请求流程 3.http协议和https协议的区别 一.对称加密和非对称加密 对称加密:加密和解密使用同一密钥. 非对称加密:有公钥和私钥,一般时使用公钥进行加密,使用私钥进行解密. 二.https协议的请求流程 1.客户端发送请求到达服务器,服务器返回证书到客户端(包含公钥). 2.客户端生成随机数字,并使用公钥进行加密处理,然后发送到服务器. 3.服务器收到客户端发送的数据,使用私钥进行解密,获取到随机数. 4.服务

TCP 协议的作用

以太网协议(Ethernet)规定了电子信号如何组成数据包(packet),解决了子网内部的点对点通信. 但是,以太网协议不能解决多个局域网如何互通,这由 IP 协议解决. IP 协议定义了一套自己的地址规则,称为 IP 地址.它实现了路由功能,允许某个局域网的 A 主机,向另一个局域网的 B 主机发送消息. 路由的原理很简单.市场上所有的路由器,背后都有很多网口,要接入多根网线.路由器内部有一张路由表,规定了 A 段 IP 地址走出口一,B 段地址走出口二,......通过这套"指路牌&quo

[转帖]mDNS原理的简单理解

mDNS原理的简单理解 https://binkery.com/archives/318.html 发现还有avahi-daemon mdns 设置ip地址 等等事项 网络部分 自己学习的还是不够多 ,需要加强学习. Android,Java,DNS,局域网,mDNS,组播,Java mDNS,Multicast DNS,mDNS原理,mDNS组播 2016-03-21 08:53:39 mDNS , multicast DNS, 可以理解为局域网内部的 DNS 系统,它和 DNS 有很多相似的

Http协议与TCP协议简单理解

在C#编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解. TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的.所以Http连接是一种短连接,是一种无状态的连接.所谓的无状态,是指浏览器每次向服务器发起请求的时候,