TCP协议以及三次握手

TCP协议,传输控制协议(英语:TransmissionControl Protocol,缩写为 TCP)是一种面向连接的、可靠的基于字节流的传输层通信协议,由IETF的RFC793定义。

tcp通信需要经过创建连接、数据传送、终止连接三个步骤。

 

 可靠传输:

1)TCP采用发送应答机制

TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功

2)超时重传

发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。

TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。

3)错误校验

TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

4) 流量控制和阻塞管理

流量控制用来避免主机发送得过快而使接收方来不及完全收下。

 

TCP与UDP的不同点

  • 面向连接(确认有创建三方交握,连接已创建才作传输。)
  • 有序数据传输
  • 重发丢失的数据包
  • 舍弃重复的数据包
  • 无差错的数据传输
  • 阻塞/流量控制

 


 

我们把tcp通信的报文称为段。

 

  1. 客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的段1。
    客户端发出段1,SYN位表示连接请求。序号是1000(实际是一个随机数,此处以1000为例),这个序号在网络通讯中用作临时的地址,每发一个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况。mss表示最大段尺寸,如果一个段太大,封装成帧后超过了链路层的最大帧长度,就必须在IP层分片,为了避免这种情况,客户端声明自己的最大段尺寸,建议服务器端发来的段不要超过这个长度。

 

  1. 服务器端回应客户端,是三次握手中的第2个报文段,同时带ACK标志和SYN标志。它表示对刚才客户端SYN的回应;同时又发送SYN给客户端,询问客户端是否准备好进行数据通讯。
    服务器发出段2,也带有SYN位,同时置ACK位表示确认,确认序号是1001,表示“我接收到序号1000及其以前所有的段,请你下次发送序号为1001的段”,也就是应答了客户端的连接请求,同时也给客户端发出一个连接请求SYN,序号是8000(实际也是一个随机数,此处以8000为例),同时声明最大尺寸为1024。

 

  1. 客户必须再次回应服务器端一个ACK报文,这是报文段3。
    客户端发出段3,对服务器的连接请求进行应答,确认序号是8001。

在这个过程中,客户端和服务器分别给对方发了连接请求,也应答了对方的连接请求,其中服务器的请求和应答在一个段中发出,因此一共有三个段用于建立连接,称为“三次握手(three-way-handshake)”。在建立连接的同时,双方协商了一些信息,例如双方发送序号的初始值、最大段尺寸等。

 

在TCP通讯中,如果一方收到另一方发来的段,读出其中的目的端口号,发现本机并没有任何进程使用这个端口,就会应答一个包含RST位的段给另一方。例如,服务器并没有任何进程使用8080端口,我们却用telnet客户端去连接它,服务器收到客户端发来的SYN段就会应答一个RST段,客户端的telnet程序收到RST段后报告错误Connectionrefused。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面(作业:初始化+正则化+梯度检验)

文章目录作业1:初始化1. 神经网络模型2. 使用 0 初始化3. 随机初始化4. He 初始化作业2:正则化1. 无正则化模型2. L2 正则化3. DropOut 正则化3.1 带dropout的前向传播3.2 带dropout的后向传播3.3 运行模型作业3:梯度检验1. 1维梯度检验2. 多…

C#快速导入海量XML数据至SQL Server数据库

#region 将Xml中的数据读到Dataset中,然后用SqlBulkCopy类把数据copy到目的表中using (XmlTextReader xmlReader new XmlTextReader(sourcePath)){ DataSet ds new DataSet(); ds.ReadXml(XmlReader.Create(sourcePath));//把数据读到DataSet这个过程有点慢…

LeetCode 第 34 场双周赛(385/2842,前13.5%)

文章目录1. 比赛结果2. 题目1. LeetCode 5491. 矩阵对角线元素的和 easy2. LeetCode 5492. 分割字符串的方案数 medium3. LeetCode 5493. 删除最短的子数组使剩余数组有序 medium4. LeetCode 5494. 统计所有可行路径 hard1. 比赛结果 做出来3题,最后一题动态规划&a…

TCP程序流程及服务器客户端

Tcp服务器创建: import socket # 服务器的端口号 PORT 9000 # 创建套接字socket对象,用于进行通讯 # scoket.SOCK_STREAM 表明使用tcp协议,流式协议 # 监听socket server_sock socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 为…

IOS开发之格式化日期时间

在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理。例如: //实例化一个NSDateFormatter对象 NSDateFormatter *dateFormatter [[NSDateFormatter alloc] init]; //设定时间格式,这里可…

LeetCode 1576. 替换所有的问号

文章目录1. 题目2. 解题1. 题目 给你一个仅包含小写英文字母和 ? 字符的字符串 s, 请你将所有的 ? 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。 注意:你 不能 修改非 ‘?’ 字符。 题目测试用例保证 除 ‘?’ 字符…

tcp十种状态

CLOSED:表示关闭状态(初始状态)。 LISTEN:该状态表示服务器端的某个SOCKET处于监听状态,可以接受连接。 SYN_SENT:这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时,它首…

Ural 1519. Formula 1 优美的插头DP

今天早上学了插头DP的思想和最基础的应用,中午就开始敲了,岐哥说第一次写不要看别人代码,利用自己的理解一点点得写出来,这样才锻炼代码能力!于是下午慢慢地构思轮廓,一点点地敲出主体代码,其实…

TCP的2MSL问题

2MSL (Maximum SegmentLifetime) TIME_WAIT状态的存在有两个理由: 让4次挥手关闭流程更加可靠;4次挥手的最后一个ACK是是由主动关闭方发送出去的,若这个ACK丢失,被动关闭方会再次发一个FIN过来。若主动关闭方能够保持一个2MSL的TI…

LeetCode 1577. 数的平方等于两数乘积的方法数(双指针)

文章目录1. 题目2. 解题1. 题目 给你两个整数数组 nums1 和 nums2 ,请你返回根据以下规则形成的三元组的数目(类型 1 和类型 2 ): 类型 1:三元组 (i, j, k) ,如果 nums1[i]2 nums2[j] * nums2[k] 其中 0…

LeetCode 1578. 避免重复字母的最小删除成本

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s 和一个整数数组 cost ,其中 cost[i] 是从 s 中删除字符 i 的代价。 返回使字符串任意相邻两个字母不相同的最小删除成本。 请注意,删除一个字符后,删除其他字符的成本不会改变。 示例 1&…

hdu2709 Sumsets 递推

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid2709 感觉很经典的一道递推题 自己想了有半天的时间了。。。。比较弱。。。。 思路: 设f[n]表示和为n的组合数; 那么 当n为奇数时,很简单,相当于在f[n-1]的每一个…

python入门字符串

python 字符串str, ‘’, ‘’ ‘’, ‘’’ ‘’’;python没有字符,只有字符串hh 切片 字符串不可以修改,修改的话,类似于tuple, 修改的话, 只可以整体修改 tuple 也是可这样, 确切的说只是修改了指针…

python 经典100例(1-20)

【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 2.程序源代码&#xff1…

go ioc三方库推荐

在 Go 语言中,没有像 Spring Boot 这样的完整的 IOC(Inversion of Control)框架。Go 语言的设计哲学更倾向于简洁、轻量级的解决方案,没有像 Java 的 Spring Framework 这样重量级的 IOC 容器。 然而,Go 社区中有一些…

统一编址 独立编址 寻址空间

概念 存储器统一编址,即从存储空间中划出一部分地址给I/O端口。CPU访问端口和访问存储器的指令在形式上完全相同,只能从地址范围来区分两种操作。优点 对端口操作的指令类型多,功能全,不仅能对端口进行数据传送,还可以对端口内容进…

阿里云 超级码力在线编程大赛初赛 第4场 题目3. from start to end

文章目录1. 题目2. 解题1. 题目 样例1: 输入: "abcd" "bcda" 输出: true样例2: 输入: "abcd" "abdc" 输出: false来源:https://tianchi.aliyun.com/oj…

Codeforces Round #697 (Div.3) A~G解题报告与解法证明

题目大体概括 A #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std;typedef long long LL; const int N 500; LL a[N]; int sz; bool Check(LL n) {for (int i 0; i < sz; i ){if (n a[i])…

python网络编辑 socket篇

Python之路&#xff1a; socket篇 Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换&#xff0c;这个连接的一端称为一个socket&#xff0c;作为BSD UNIX的进程通信机制&#xff0c;通常也称做“套接字” &#xff0c;是一个通信链的句柄&#xff0c;实现不同程序…

java获取插入数据库表中的自增列值的一个简单方法

PreparedStatement ps conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); // 第一步 ps.executeUpdate(); //第二步 ResultSet rs ps.getGeneratedKeys(); //获取 rs.next(); int id rs.getInt(1); 转载于:https://www.cnblogs.com/blogyuan/p/3739657…