【网络技术】TCP详解

news2024/11/22 19:30:37

1 TCP是什么 

TCP是Transmission Control Protocol的缩写,即传输控制协议。

TCP是一种面向连接的、可靠的、基于字节流的传输协议,是互联网通信协议TCP/IP中的一个重要组成部分。

2 三次握手

三次握手的过程可以用以下图示表示:

2.1 详细介绍 

TCP协议使用三次握手(Three-way handshake)来建立连接,三次握手的过程如下:

  1. 第一次握手(SYN):客户端向服务器发送一个连接请求报文段,报文段中包含SYN(同步序列号)标志位,并随机选择一个初始序列号(ISN)。

  2. 第二次握手(SYN/ACK):服务器接收到客户端的连接请求报文段后,向客户端发送确认报文段,报文段中包含SYN(同步序列号)和ACK(确认序列号)标志位,确认号为客户端的初始序列号+1,同时服务器也随机选择一个初始序列号。

  3. 第三次握手(ACK):客户端接收到服务器的确认报文段后,向服务器发送确认报文段,报文段中包含ACK(确认序列号)标志位和确认号,确认号为服务器的初始序列号+1。

需要注意,在三次握手的过程中,客户端和服务器都会发送自己的初始序列号,这是为了避免网络中存在已经失效的连接请求报文段而产生的错误。

如果在建立连接的过程中有任何一次握手失败,TCP协议会重新发起连接请求,直到连接建立成功或超时。

 注意,三次握手建立连接时,客户端和服务器均需要发送和接收数据,因此在握手过程中需要交换关键信息以确保连接的可靠性和正确性。

通过三次握手,TCP协议可以确保连接建立成功后,双方之间可以正常地传输数据。

2.2 思考

2.2.1 为什么需要三次握手

TCP协议需要通过三次握手来建立连接,主要是为了确保连接的可靠性和稳定性,防止网络中出现问题导致数据传输失败或者数据错误。

具体来说,TCP协议需要进行三次握手的原因包括:

  1. 确认双方的通信能力:通过三次握手可以确保客户端和服务器之间的通信能力是正常的,能够进行数据传输。在握手过程中,客户端和服务器会交换一些关键信息,例如初始序列号、确认号等,以确保双方的通信能力和协议支持是一致的。

  2. 避免过期连接的产生:三次握手可以避免网络上存在已经失效的连接请求报文段而产生的错误。在第一次握手和第二次握手中,客户端和服务器都会发送自己的初始序列号,这是为了避免网络中存在已经失效的连接请求报文段而产生的错误。

  3. 防止网络攻击:三次握手可以一定程度上防止网络攻击,例如SYN洪水攻击。在SYN洪水攻击中,攻击者会伪造大量的TCP连接请求报文段,从而占用服务器的资源和带宽。通过三次握手,可以确保每个连接请求都是合法的,从而防止这种攻击的发生。

所以说,通过三次握手可以确保TCP连接的可靠性、稳定性和安全性,保证数据能够正确地传输,并防止网络攻击的发生。

3 四次挥手

四次挥手的过程可以用以下图示表示:

3.1 详细介绍 

四次挥手详细介绍

TCP协议使用四次挥手(Four-way handshake)来关闭连接,四次挥手的过程如下:

  1. 第一次挥手(FIN):客户端向服务器发送一个FIN(结束)报文段,请求关闭连接。客户端不再发送数据,但仍能接收服务器端的数据。

  2. 第二次挥手(ACK):服务器接收到客户端的FIN报文段后,发送一个ACK(确认)报文段作为响应,告诉客户端已经收到关闭请求。

  3. 第三次挥手(FIN):服务器向客户端发送一个FIN报文段,请求关闭连接。服务器不再发送数据,但仍能接收从客户端发来的数据。

  4. 第四次挥手(ACK):客户端接收到服务器发送的FIN报文段后,发送一个ACK报文段作为响应,告诉服务器已经收到关闭请求。此时,客户端和服务器之间的连接已经正式关闭。

在四次挥手的过程中,客户端和服务器都需要发送FIN报文段和ACK报文段。

这是因为TCP协议是全双工的,客户端和服务器都可以发送数据和请求关闭连接。

在关闭连接时,需要双方都发送FIN和ACK报文段,以确保连接被成功关闭。

四次挥手的过程中可能会出现一些问题,例如连接超时、数据包丢失等,导致连接无法正常关闭。

因此,在实际应用中,需要注意对连接的超时时间、重传机制、流量控制等方面进行合理的配置和优化,以确保连接能够正常关闭,避免资源的浪费和网络拥塞的发生。

4 TCP实现形式

TCP(传输控制协议)是一种面向连接的、可靠的、基于流的传输协议,常用于网络通信中。

4.1 形式介绍 

TCP有以下几种实现形式:

  1. 原生TCP:原生TCP是指通过系统内核提供的TCP协议栈进行通信,通常使用Socket接口进行编程实现。

  2. TLS:TLS(Transport Layer Security)是一种基于TCP协议的安全传输协议,可以在TCP协议之上提供加密和身份验证等安全功能,常用于保护Web应用程序和电子邮件等敏感数据的传输。

  3. HTTP协议:HTTP(HyperText Transfer Protocol)是一种基于TCP协议的应用层协议,常用于Web应用程序中进行数据传输。HTTP协议基于TCP协议的可靠传输特性,但不是TCP协议的直接实现形式。

  4. SCTP:SCTP(Stream Control Transmission Protocol)是一种基于TCP协议的可靠传输协议,支持多流复用和多路复用等功能,可以提高网络传输的效率和可靠性。

  5. QUIC:QUIC(Quick UDP Internet Connections)是一种基于UDP协议的可靠传输协议,可以在低延迟和高带宽网络环境下提供更快的传输速度和更好的用户体验。

不同的TCP实现形式在功能和性能上有所不同,需要根据具体需求进行选择和优化。

例如,在需要保护数据传输安全性的场景下可以使用TLS协议,需要提高网络传输效率和可靠性的场景下可以使用SCTP协议或QUIC协议等。

4.2 代码示例

下面以Python语言为例,给出一个简单的TCP服务器和客户端示例:

4.2.1 TCP服务器端示例

import socket

# 创建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定地址和端口号
server_socket.bind(('localhost', 8888))

# 监听连接请求
server_socket.listen(5)

# 等待客户端连接
print('等待客户端连接...')
client_socket, client_address = server_socket.accept()
print('客户端已连接:', client_address)

# 接收客户端发送的数据
data = client_socket.recv(1024)
print('接收到客户端数据:', data)

# 发送数据给客户端
client_socket.sendall(b'Hello, client!')

# 关闭连接
client_socket.close()
server_socket.close()

4.2.2 TCP客户端示例

import socket

# 创建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
client_socket.connect(('localhost', 8888))
print('已连接服务器!')

# 发送数据给服务器
client_socket.sendall(b'Hello, server!')

# 接收服务器发送的数据
data = client_socket.recv(1024)
print('接收到服务器数据:', data)

# 关闭连接
client_socket.close()

5 总结

TCP协议是一种面向连接的、可靠的、基于字节流的传输协议,提供了可靠的数据传输、流量控制、拥塞控制、数据重传、数据分段和序列号等功能,是互联网上广泛使用的传输协议之一。

TCP协议提供了可靠的数据传输、流量控制、拥塞控制、数据重传、数据分段和序列号等功能。

在TCP协议进行数据传输之前,需要先建立TCP连接,建立连接的过程中,客户端和服务器进行三次握手(SYN、SYN-ACK、ACK),以确保双方都能够接收和发送数据。

TCP协议通过使用ACK确认机制和序列号机制,保证传输的数据不会丢失、重复或者失序。每个数据包都会被确认,并且数据包的传输顺序不会发生错误。

此外,TCP协议还提供了流量控制、拥塞控制、数据重传、数据分段和序列号等功能,以满足不同的传输需求。

 6 图书推荐

图书名称:

  1. 《TCP/IP详解 卷1:协议(原书第2版)》
  2. 《TCP/IP详解 卷2:实现》
  3. 《TCP/IP详解 卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》

三本书可任选一本 

 

图书介绍

已故网络专家、著名技术作家W. Richard Stevens的传世之作,内容详尽且极具权威,被誉为TCP/IP领域的不朽名著。无论你是初学者还是功底深厚的网络领域高手,本书都是案头必备,将帮助你更深入和直观地理解整个协议族,构建更好的应用和运行更可靠、更高效的网络。

先睹为快:TCP详解

 参与方式 

图书数量:本次送出 4 本   !!!⭐️⭐️⭐️
活动时间:截止到 2023-07-10 12:00:00

抽奖方式:

  • 在新星计划【云原生之k8s入门】方向参加的小伙伴中随机抽取

参与方式:

  • 对文章进行:点赞、收藏
  • 参加新星计划【云原生之k8s入门】,并提交任务。
  • 活动参与链接:https://bbs.csdn.net/topics/616338210

中奖名单 

🍓🍓 获奖名单🍓🍓

 中奖名单:请关注博主动态

名单公布时间:2023-07-10 下午

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

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

相关文章

php命令执行漏洞加固

首先需要去看一下命令执行漏洞的代码: 就像这样,我们可以利用管道符来进行执行一些命令。 我们在网站中渗透一下: 配合上管道符,我们就可以进行执行命令。 这样的话我们总么进行加固呢,我们可以利用if语句来进行加固…

Hadoop启动后没有NameNode进程,日志报ulimit -a for user root

环境:CentOS7、Hadoop2.6.4 背景:安装后启动正常,一段时间在来启动发生这种情况。 现象: 启动后没有NameNode进程,于是查看日志,日志显示ulimit -a for user root,潜意识还以为文件不能读。&a…

期货反向跟单系统能精准捕捉买卖点嘛?什么人不适合做期货反向跟单?

期货反向跟单,就是指在期货市场上,根据某些大户或者专业机构的交易动向,采取与之相反的操作策略,以期获得利润。例如,当发现某个大户在买入某种期货合约时,就立即卖出同样数量的合约,反之亦然。…

MQTT协议学习

前言 最近在学习mqtt协议,看的是官方英文版的,写这篇博客就是为了将一些关键内容提取出来,以便日后的查询和复习,有需要的可以参考。官方的文档在这: MQTT Essentials - All Core Concepts explained (hivemq.com) …

svn下载及使用

下载 链接:https://pan.baidu.com/s/1RV6vAujA1anHhXJuKbItUQ?pwdflzx 提取码:flzx 这是svn安装包以及中文安装包,放在百度网盘了,有需要可以下载 注意:svn中文语言包安装的版本需要和svn的版本一致 他有两种安装…

ModaHub魔搭社区:向量数据库Milvus产品问题(一)

目录 产品问题 Milvus 会收费吗? Milvus 支持非 x86 平台吗? Milvus 支持对向量的插入、删除、更改和查询操作吗? Milvus 可以处理百亿或千亿级数据吗? Milvus 数据存储在哪里? 为什么我在 SQLite / MySQL 找不…

实时监测:BL102 PLC网关在水利设施中的数据采集

随着工业智能化的快速发展,BL102 PLC网关作为一种先进的工业自动化设备,在泵站远程监测领域发挥了重要的作用。通过BL102 PLC网关,我们可以实现对泵站PLC的远程监测和控制,从而提高泵站的工作效率和管理水平。 ​一、BL102 PLC网关…

机器人轨迹生成:轨迹规划与路径规划

机器人轨迹生成涉及到轨迹规划和路径规划两个关键概念,它们是机器人运动控制中的重要组成部分。下面对轨迹规划和路径规划进行深入比较。 轨迹规划(Trajectory Planning): 定义:轨迹规划是指在机器人运动中确定机器人末…

【设计模式】第十六章:迭代器模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章:单例模式 【设计模式】第二章:工厂模式 【设计模式】第三章:建造者模式 【设计模式】第四章:原型模式 【设计模式】第五章:适配器模式 【设计模式】第六章&…

2023 年 最全的 24 个最佳免费照片恢复软件

你的心脏停止跳动,你的胃下沉。你的血液变冷了。你无法屏住呼吸。这是恐慌和怀疑的结合。如果您曾经丢失过数字文件,这种感觉很熟悉。 也许您不小心删除了照片。或者某些文件可能只是消失了。不管发生什么,都是令人心碎的。 不过&#xff0…

2023年27个最佳WordPress博客和新闻杂志主题

当建设杂志和新闻网站时,WordPress是首选。 纽约时报、TechCrunch、CNN、路透社、Mozilla 博客等知名新闻网站以及许多其他网站都使用 WordPress 作为他们的首选平台,突出了WordPress杂志主题的可扩展性。 在一个年轻受众与新闻品牌的联系明显较弱的世…

K8S出错bash: _get_comp_words_by_ref: command not found

重新配置了CentOS环境,执行kubectl apply -f xxx.yaml,想自动补全文件名,遇到错误:bash: _get_comp_words_by_ref: command not found 但是试验其它bash自动补全功能,没问题,比如cd 某个目录自动补全&#…

SAP BDC 录屏及 ABAP 调用 BDC

1:输入事务代码:SHDB.点击新建记录。 输入记录名和需要录屏的事务代码。 开始记录后会进入事务代码点击返回后会记录下操作过程。 点击程序按钮,生成可以调用的代码。 代码如下: report ZTEST_APPLICTIONno standard page heading line-size…

2-Spring cloud之Eureka快速剔除失效服务

2-Spring cloud之Eureka快速剔除失效服务 1. eureka server端修改yml配置2. 客户端配置 1. eureka server端修改yml配置 添加如下配置: server:enable-self-preservation: false # 关闭自我保护eviction-interval-timer-in-ms: 3000 # 清理间隔(剔除失效服务…

骨传导耳机音质怎么样,推荐几款音质表现不错的骨传导耳机

最近体验了几款骨传导耳机,分享下我的使用感受。首先说一下为什么要选择骨传导耳机,我之前是使用入耳式耳机,戴久了耳朵会疼,而且晚上睡觉不能戴。于是就考虑骨传导耳机,因为骨传导耳机在传声的过程中不需要经过耳膜&a…

界面控件KendoReact PivotGrid组件,开启交互式数据探索新方式!

数据透视表将数据网格的功能与图形和图表的显示结合起来,允许用户以交互式的方式探索数据,今天将带大家一起学习如何开始使用KendoReact PivotGrid组件! Kendo UI致力于新的开发,来满足不断变化的需求,通过React框架的…

gRPC远程调用服务端与客户端连接详解

proto插件生成文件 参考之前的文章构建一个grpc实例,初步认识gprcgRPC教程与应用。 首先早gprc中下载了protoc插件,然后编写了.proto配置文件,通过插件生成了xxx.pb.go和xxx_gprc.pb.go两个文件。前者是rpc服务器请求和响应参数的定义&…

[ZJCTF 2019]NiZhuanSiWei1

拿到是一段php代码 <?php $text $_GET["text"]; $file $_GET["file"]; $password $_GET["password"]; if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){echo "<br><h1>&quo…

【高端设计】DDR4设计方法与仿真分析(一)

本文主要介绍了DDR4设计方法与仿真分析&#xff0c;并示范SIwave如何做DDR4的瞬时眼图、SSN、on-die de-cap影响、DBI耗电分析与规范性测试。 1.DDR4和DDR3的区别 1.1 DDR4传输速度与带宽增加 DDR3 1600/1866MHz -> DDR4 1866/3200MHz DDR3采用多点分支单流架构&#xff…

【电路原理学习笔记】第2章:电压、电流和电阻:2.7基本电路的测量

第2章&#xff1a;电压、电流和电阻 2.7基本电路的测量 用来测量电压的仪器是电压表&#xff0c;用来测量电流的仪器是电流表&#xff0c;用来测量电阻的仪器是欧姆表。通常&#xff0c;这3种仪器被集成到一个称为万用表的仪器中。在万用表中&#xff0c;可以通过开关选择特定…