TCP三次握手过程与对应的Berkeley Socket APIs的介绍

详解socket中TCP的三次握手和四次挥手机制 对于TCP/IP,我们还知道TCP和UDP,前者可以保证数据的正确和可靠性,后者则允许数据丢失。最后,我们还知道,在建立连接前,必须知道对方的IP地址和端口号。 我们还知道如下几个事实: 1.一个指定的端口号不能被多个程序共用。比如,如果IIS占用了80端口,那么Apache就不能也用80端口了。 2.很多防火墙只允许特定目标端口的数据包通过。 3.服务程序在listen某个端口并accept某个连接请求后,会生成一个新的 socket 来对该请求进行处理。 再实现了socket服务器端和客户端编程后,我通 阅读详情

1. TCP三次握手

    搜索到的一张三次握手过程的图片:

    TCP三次握手

   简单说明

   (1)主动连接的一方(称为客户端C),发送SYN_C。

   (2)被动打开连接的一方(称为服务器S),收到C的SYN_C后,会发送一个SYN_S;同时会对SYN_C作确认,返回一个ACK_S。SYN_S&ACK_S可以同时放到一个TCP segment中。

   (3)C收到SYN_S+ACK_S,发送一个ACK_C,这个ACK_C对应SYN_S。

   连接建立的过程,来回总共是3个TCP Segment。说点题外话,为什么是3个Segment呢?因为,其中一个SYN与ACK合到一个Segment中了。TCP两端同时打开的时候,就是来回交互4个segment。

 

2. 与三次握手对应的Berkeley Socket APIs

    和连接建立相关的APIs有:connect, listen, accept3个,connect用在客户端,另外2个用在服务端。对于TCP/IP protocol stack来说,TCP层的tcp_in&tcp_out也参与这个过程。我们这里只讨论这3个应用层的APIs干了什么事情。

    (1) connect

     发送了一个SYN,收到Server的SYN+ACK后,代表连接完成。发送最后一个ACK是protocol stack,tcp_out完成的。

    (2)listen

     在Server这端,准备了一个未完成的连接队列,保存只收到SYN_C的socket结构;还准备了已完成的连接队列,保存了收到了最后一个ACK的socket结构。

    (3)accept

     应用进程调用accept的时候,就是去检查上面说的已完成的连接队列,如果队列里有连接,就返回这个连接;空的,blocking方试调用,就睡眠等待,nonblocking方式调用,就直接返回,一般一"EWOULDBLOCK“ errno告诉调用者,连接队列是空的。 

 

好了,上面只是简单的介绍,没有涉及TCP的各种状态。和三次握手相关的状态有:SYN_SENT, SYN_RECVD, LISTEN和ESTABLISHED。

另外,三次握手的常见问题参考下面的文章:

http://blog.youkuaiyun.com/herm_lib/article/details/6019970


TCP数据报结构以及三次握手(图解) TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。 客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。 TCP建立连接时要传输三个数据包,俗称三次握手(Three- 阅读详情

相关推荐

tcp三次握手与四次握手及SOCKE函数对应

就给出了一张图显示的是TCP三次握手建立、四次握手断开与socket函数对应 如:socket connect()建立对应于SYN ,而connect()返回值 与syn 对应

TCP三握四挥与socket编程的对应关系

连接建立阶段(三次握手): 1、客户端进程向服务器端发送将控制位SYN=1的“连接建立请求报文”,并发送一串序列号seq = x;此时客户端进程的状态从CLOSE转换为SYN_SEND; 2、服务器接到来自客户端的SYN请求,同意建立连接并向客户端发送ACK=1的“连接建立请求确认报文”,确认包为ack=x+1,并同时也向客户端发送SYN=1的连接建立请求报文,序列号seq=y,此时服务器端的状态才从LISTEN转换为SYN_RCVD。 3、客户端收到服务器端的“连接建立请求报文”SYN、ACK后再发送A.

weixin_42238049的博客 1085

CATIA V5新手必看:从零开始的界面导航与基础操作指南(附常见问题解决)

本文为CATIA V5新手提供全面的界面导航与基础操作指南,涵盖核心工作区解析、文件管理规范、视图操作秘籍及常见问题解决方案。通过详细的步骤说明和实用技巧,帮助用户快速掌握这一工业设计标杆软件,特别适合从SolidWorks、AutoCAD等软件过渡的用户。

b9c0d的博客 527

计算机网络 TCP/IP协议 三次握手 socket 扫盲篇

IP协议:对应于网络层,是网络层的协议。 TCP协议:对应于传输层,是传输层的协议,主要解决数据如何在网络中传输。 HTTP协议:对应于应用层,是应用层的协议,只要解决如何包装数据。 Socket:本身不是协议,而是对TCP/IP协议的封装和应用的调用接口API,通过它我们才能使用TCP/IP协议。   TCP/IP协议 TCP/IP指传输控制协议/网际协议(Transmission 

zhanghow的博客 2654

配置oem 13c以监控管理数据库

使用oem13c监控数据库

雅冰石的专栏 1808

基于ADS的低噪声放大电路设计

1. 低噪声放大器设计理论基础 1.1 低噪声放大器在通信系统中的作用 低噪声放大器的主要作用是放大天线从空中接收到的微弱信号,减小噪声干扰,以供系统解调出所需的信息数据。当今,人们对于各种无线通信工具的要求越来越高,如功率辐射要小、作用距离要远、覆盖范围要广等,这就对系统的接收灵敏度提出了更高的要求,系统接收灵敏度的计算公式为: Smin⁡=−144(dBmHz)+NF+10lg⁡BW(MHz)+SN(dB) {S_{\min }} = - 144\left( {\frac{{{\rm{dBm}}}}{

ASH_GUARDIAN的博客 4万+

TCP与SOCKET的三次握手的对应关系

要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准, 从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族。不同于ISO模型的七个分层,TCP/I...

一点 2361

海康工业相机排雷笔记02-像素格式解析

工业相机使用过程记录 02-像素格式解析 通过将相机输出图像裸数据raw格式直接存图查看 一、黑白/Mono 直接使用相机测试图像存图: 图像中各部分灰度分别为:0、36、73、109、146、182、219、255,以灰度73列为例 (1)Mono 8 该列图像数据为十六进制49,十进制为73,那么Mono 8就是每个像素点占8bit,依次排列。 (2)Mono 10 该列图像数据为十六进制2401,由于相机均为小端数据,实际数据应解析为0124,十进制为292=73*4,那么Mono 10格式为每

yonghuming_66的博客 8356

TCP三次握手与socket连接建立的对应关系

监视监听套接字的状态,以检测全连接队列中是否有新的连接。当全连接队列中有新的连接时,监听套接字会变为可读状态,这些系统调用会返回,通知应用程序可以调用。函数来处理新的连接。

Yuan_Su_的博客 301

(53页PPT)新型智慧病房整体解决方案(附下载方式)

当前医疗场景存在三大核心矛盾:院内感染风险(如输液异常发现滞后)、信息孤岛现象(11类业务系统数据割裂)、管理效能不足(30%护理时间耗费在机械性工作)。实际案例显示,整体运营效率提升40%,患者满意度提高28个百分点,真正实现了"让技术有温度,让数据会说话"的价值理念。本文将从需求分析、技术架构、应用场景三个维度,深度剖析这份53页解决方案的创新价值与实践路径。床旁智能终端整合12项功能:包括体征自动采集(误差率<1%)、医嘱执行核对(100%条码校验)、智能床垫离床报警(响应时间3秒)等。

AI_data_cloud的博客 715

第4.4节:保护轴承与安全系统

飞轮储能系统的保护轴承是磁悬浮失效时的最后安全屏障,其设计需满足非干涉性、高可靠性和有限寿命承载原则。转子跌落过程包括自由下落、碰撞、进动和滑行减速等复杂非线性阶段,产生远超常规工况的冲击载荷。保护轴承需具备极限冲击容量、高温耐受性和抗卡死能力。系统采用多层级安全架构,结合故障诊断与健康管理,通过监测振动、电流等参数实现预测性维护。安全停机序列有序结合主动制动与被动摩擦制动,确保系统在极端工况下的安全。保护轴承类型多样,需根据系统规模与可靠性要求合理选择。

技术工作者 227

TCP三次握手过程与对应的Berkeley Socket APIs的简单介绍

1. TCP三次握手 搜索到的一张三次握手过程的图片: 简单说明 (1)主动连接的一方(称为客户端C),发送SYN_C。 (2)被动打开连接的一方(称为服务器S),收到C的SYN_C后,会发送一个SYN_S;同时会对SYN_C作确认,返回一个ACK_S。SYN_S&ACK_S可以同时放到一个TCP segment中。 (3)C收到SYN...

weixin_30924087的博客 231

机器翻译的评价标准:BLEU、ROUGE等指标说明及代码实现

机器翻译领域常用的自动评价指标主要包括BLEU、ROUGE、METEOR和COMET四大类。BLEU基于n-gram精确率和短句惩罚,ROUGE关注召回率,METEOR结合精确率和召回率并考虑同义词,COMET则利用预训练模型计算语义相似度。这些指标各有特点:BLEU适用于机器翻译,ROUGE对长句友好,METEOR更接近人工评分,COMET无需参考译文。代码实现上,sacrebleu、rouge-score等库提供了便捷的计算方式。新兴趋势包括基于BERT等模型的语义评估和大语言模型评估器,但传统指标仍占

数据知道的博客 9417

socket编程 ------ BSD socket API

伯克利套接字(Berkeley sockets),也称为BSD Socket。伯克利套接字的应用编程接口(API)是采用C语言的进程间通信的库,经常用在计算机网络间的通信。 BSD Socket的应用编程接口已经是网络套接字的抽象标准。大多数其他程序语言使用一种相似的编程接口。它最初是由加州伯克利大学为Unix系统开发出来的。所有现代的操作系统都实现了伯克利套接字接口,因为它已经是连接互联网的标准...

springcity2014的博客 543

华为OD机试 - 服务中心选址(Python)

一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置,并希望能够以此为依据为新的服务中心选址:使服务中心到所有区域的距离的总和最小。先输入区域数组positions的长度n(1 ≤ n ≤ 10^5)接下来 n 行每行输入成对的left和right值,以空格隔开。输出为location。

m0_46181452的博客 282

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

socket网络编程python_基于python的socket网络编程

基于python的socket网络编程1. socket简介首先我们需要理解什么是网络编程,网络编程就是编写程序使两台联网的计算机之间能够进行通信,即能相互交换数据。然后我们再来理解socket,socket即套接字,是操作系统提供的独立于具体协议的网络编程接口,使用socket可以很方便地编写出数据传输程序,实现计算机之间的通信,而无需考虑其背后的原理。socket 的一个典型应用就是 Web ...

weixin_39559895的博客 240

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C++ Boost asio库网络通信 [同/异步] [大三四八九月实习]

1 C++ Boost库asio网络通信类核心结构 在C++ Boost库中用于通信的类的层次为boost::asio::ip,所有有关通信的类别都在这个层次之下。 asio封装了berkeley socket APIS,使其支持TCP,UDP,ICMP通信协议,提供了一个健壮且易用的网络通信库:boost::asio::ip。   (1)ip:tcp 网络通信TCP部分位于的层次为ip

记一忘三二 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

BSD Sockets API

转载: http://wiki.treck.com/Introduction_to_BSD_Sockets The Berkeley Sockets 4.4 API (Applications Programmer Interface) is a set of standard function calls made available at the application level.

1458

使用Epoll 在 Linux 上开发高性能应用服务器

epoll是Linux提供一种多路复用的技术,类似各个平台都支持的select,只是epoll在内核的实现做了更多地优化,可以支持比select更多的文件描述符,当然也支持 socket这种网络的文件描述符。Linux上的大并发的接入服务器,目前的实现方式肯定都通过epoll实现。 epoll和线程 有很多开发人员用epoll的时候,会开多个线程来进行数据通信,比如一个线程

一缕阳光的博客 339

python走起之第八话

1. Socket介绍 概念 Anetwork socketis an endpoint of a connection across acomputer network. Today, most communication between computers is based on theInternet Protocol; therefore most network s...

defan30553的专栏 204

Android真机网络抓包实战:adb与tcpdump组合方案详解

网络抓包是移动应用开发、测试与安全分析中的基础技术,用于捕获和分析设备与网络间的数据通信。其核心原理是通过监听网络接口,获取原始数据包,进而解析协议内容。这项技术的价值在于能够透视应用的网络行为,排查连接故障、分析性能瓶颈及检测安全隐患。在Android平台,传统的代理抓包方案在移动数据等场景下受限。本文聚焦于一种更底层的设备端抓包方案,即利用adb(Android调试桥)与tcpdump(命令行网络嗅探工具)的组合。该方案通过在Android设备内部直接部署tcpdump,实现了对Wi-Fi、移动数据等全

weixin_34221036的博客 473

DOKS上用Cilium实现eBPF高级网络策略

Kubernetes网络策略是保障集群零信任安全的基础能力,其核心在于如何在不牺牲性能的前提下实现L3/L4乃至L7层的细粒度访问控制。传统iptables后端的NetworkPolicy受限于线性匹配、无应用层感知、易受内核升级影响等缺陷,在DigitalOcean托管Kubernetes(DOKS)等生产环境中常出现策略失灵、延迟飙升、调试困难等问题。CiliumNetworkPolicy(CNP)依托eBPF技术,将策略执行下沉至内核socket层,提供毫秒级响应、原生HTTP/gRPC协议解析、与内

weixin_30522183的博客 355

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

socket和TCP/IP三次握手的对应关系

最近在看TCP/IP协议,今天又看了socket的接口,在绘制socket客户端和服务端流程图的时候感觉这个和三次握手应该是有联系的.但一开始没有把两者直接对应上,于是搜索了相关的博客,发现有这方面的介绍. 如图2,服务端的一系列前置操作在第一次握手前就已经首先做好了,一直处于accept等待的状态,而对应的客户端此时则处于connect状态.当两者都从阻塞状态返回时,就建立了连接.    ...

Stephen___Qin的博客 248

如何使用socket系统调用创建TCP三次握手呢?

大家可以思考下,结合上图TCP三次握手的理解,客户端要发送两个数据包 syn 和 ack 完成三次握手,那如何通过系统调用的方式实现呢?我们熟悉的 HTTP、HTTPS、FTP、SSH、SMTP等协议及相关应用都是基于TCP协议,然后都可以通过。中介绍了 7 种socket套接字类型,哪些可以实现TCP的连接呢?是最常用的套接字类型,通常用于 TCP 协议。它提供面向连接的、可靠的、双向的字节流通信。函数,采用的什么方式进行TCP连接的呢?其他哪种套接字类型还可以实现呢,大家可以想一想~

changhao 360

Tcp三次握手、四次分手,Socket再看不懂,你砍我

exec 8<> /dev/tcp/www.baidu.com/80 echo -e “GET / HTTP/1.0\n” 1>& 8 -e是为了解析\n,1表示标准输出 cat 0<& 8 0表示标准输入 路径必须是/dev/tcp <>表示输入输出,8表示一个channel,这个8指向了后面的socket链接,channel是jdk抽象出来的,在操作系统当中是socket /dev/tcp/www.baidu.com/80看似是一个文件路径,其实是以为

qq_16607641的博客 4059
上一篇: 使用epoll 在 linux 上开发高性能应用服务器
下一篇: AS3脚本使用flash cs6制作的UI方法
herm_lib
博客等级 码龄16年 173粉丝 115原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值