tcp/ip协议与socket介绍

article/2025/8/27 16:18:49

1、tcp/ip五层协议模型

应用层、传输控制层、网络层、数据链路层、物理

2. 应用层

直接向用户提供服务,完成用户希望在网络上完成的各种工作。如curl命令。

3. 传输控制层

在这里插入图片描述

3.1 TCP和UDP协议

  • TCP协议:面向连接的可靠传输协议。利用TCP进行通信时,首先要通过三步握手,以建立通信双方的连接。TCP提供了数据的确认和数据重传的机制,保证发送的数据一定能到达通信的对方。
  • UDP协议:是无连接的,不可靠的传输协议。采用UDP进行通信时不用建立连接,可以直接向一个IP地址发送数据,但是不能保证对方是否能收到。

3.2 TCP详解

3.2.1 TCP三次握手
  • TCP三次握手,客户端发送syn->服务端回复syn+ack->客户端回复ack,在第一和第二步可确认客户端输入、输出是通的,在第二和第三部可确认服务端输入输出是通的。
  • TCP三次握手只在数据发送阶段之前,建立连接,客户端和服务端在内核中创建资源,用于后续数据的发送
  • TCP是面向连接的可靠传输协议。面向连接:三次握手之后,双方内核开辟资源为对方提供服务,即为面向连接了。 可靠:确认机制,每个发送包,都会有一个确认包。

在这里插入图片描述

3.2.3 发送数据

将应用层数据添加TCP首部形成TCP报文,传输给网络层

3.2.4 四次分手

TCP是可靠的传输协议,资源的释放,需要进行四次分手

  • 客户端发起fin,请求释放资源。
  • 服务端收到,回复fin +ack
  • 服务端发起fin请求释放资源
  • 客户端回复ack

在这里插入图片描述

3.3 socket详解

3.3.1 socket定义

socket套接字可以看成是一个五元组构成,源IP地址、目的IP地址、协议号、源端口、目的端口。

3.3.2 socket与TCP/IP关系

TCP/IP是传输控制层的协议栈,socket本身并不是协议,而是一个调用接口(API),通过socket,我们才能使用TCP/IP协议。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、 listen、connect、accept、send、read和write等等。

3.3.3 socket三次握手

在这里插入图片描述
从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态;服务器监听到连接请求,即收到SYN J包,调用accept函数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时,accept返回,至此三次握手完毕,连接建立。

3.3.4 socket发送数据

read()、write()相关api

3.3.5 socket四次分手

在socket中,调用close即可,具体过程参考tcp四次分手

4. 网络层

4.1 IP、路由表

  • IP 地址为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
  • destination 目的网段 、genmask 子网掩码 、gateway 下一跳路由器入口的ip。
  • 路由表是决定下一条路由地址的。选择一个条目,将目的ip与掩码做&运算,将结果与目的网段相比较,若相同,则下一条地址为当前网关。由该图可知,当目的ip为当前局域网段内(192.168.150.0-192.186.150.255),选择默认路由,无需路由器。当目的ip非当前网段,则选择下一跳的路由器ip为192.168.150.2。
    -在这里插入图片描述

4.2 IP数据包

网络层将TCP报文添加IP首部,形成IP数据包,将IP数据包下一跳地址交给数据链路层

5. 数据链路层

5.1 arp协议

通过arp协议找到下一条路由器的mac地址
在这里插入图片描述

5.2 数据帧

通过arp协议找到mac地址,数据链路层在ip数据包上添加mac地址,形成数据帧

交换机能够识别mac地址,将数据包交给路由器
在这里插入图片描述

6. 物理层

在物理层上传输的数据单位是比特
在这里插入图片描述


http://chatgpt.dhexx.cn/article/Msdg9lJc.shtml

相关文章

socket协议介绍

2019独角兽企业重金招聘Python工程师标准>>> 本文主要讲述了Socket协议脚本的基础知识和编写方法,让大家能够在短时间内快速掌握简单的Socket协议脚本的编写方法。      1.socket协议介绍      Socket协议有万能协议之称,很多系统底层都是用的socket协议,…

Socket 网络协议 等

🍬 什么是服务器? 对外提供服务的一套软件,放在网络上 (IP地址) 什么是客户端? 是为了连接服务器的一个软件 网络编程的3要素 协议 IP地址 局域网IP地址 公网IP地址(买的) 查看…

socket实现http协议

1、在B/S架构中,Web浏览器与Web服务器之间的一次HTTP请求与响应:需要完成以下步骤: http://localhost:8089/index.html 1)、浏览器端根据所在的HTTP协议解析出对应的url域名:localhost 2)、通过DNS域名解析&#xf…

TCP/IP协议族通信的socket介绍及编程

一、概念介绍 TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。 UDP(User Data Protocol,用…

tensorflow之argmax函数独特讲解

在讲解之前,先来一个该函数的参数说明: argmax(a, axisNone, outNone) # a 表示array # axis 表示指定的轴,默认是None,表示把array平铺, # out 默认为None,如果指定,那么返回的结果会插入其中…

南京邮电大学离散数学实验三:编程实现整除关系这一偏序关系上所有盖住关系的求取,并判定对应偏序集是否为格

实验原理及内容 说明:这部分内容主要包括: 1、形式化描述实验中所使用的数据结构和存储结构,给出函数之间的调用关系和数据传递方式; 2、给出核心算法的C或Java等语言的源代码,并加上详细注释,分析算法的…

组合学笔记(六)局部有限偏序集的关联代数,Möbius反演公式

tags: Combinatorics 写在前面 前面铺垫了很多偏序集和格,分配格等的基本知识, 下面开始以这些代数结构为研究对象, 探寻其上的一些性质与关系, 我们先以关联代数的定义开始说起. 关联代数简介 定义 令 I n t ( P ) \mathrm{Int}(P) Int(P)表示 P P P上所有的区间的集合, …

离散中偏序集、乘积群、关系的性质和集合的相关证明

离散证明题&#xff08;三&#xff09; 9.令❄是定义在有限集合A上的一个二元运算&#xff0c;若对于∀a,b∈A&#xff0c;❄满足①aa❄a②a❄bb❄a③a❄(b❄c)(a❄b)❄c,在A上定义一个关系C比如a≤b<>aa❄b. 证明&#xff1a;(1)(A,≤)是一个偏序集 (2)∀a,b∈A,a∧ba❄…

偏序关系以及最大元,最小元,极大,极小元和上下界与上下确界

偏序关系的定义 偏序关系就是自反&#xff0c;反对称&#xff0c;传递的序偶集合。其中满足偏序的集合我们一般称为A&#xff0c;偏序关系一般称为R。 A*A产生的序偶有很多&#xff0c;所以我们使用<A,R>去表示满足某个偏序关系的A中元素的子集。 如果使用图像画这个偏序…

上偏续关系哈斯图_[离散]哈斯图偏序集--最好理解版本

离散数学哈斯图的画法 两个步骤&#xff1a;(1)排点的层数 (2)把有关系的点连接起来 看一道题&#xff1a;设A{1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;6&#xff0c;8&#xff0c;9}&#xff0c;偏序集S{A,《},其中《为整除关系&#xff0c;画出S的哈斯图 首先把…

【集合论】序关系 ( 偏序集元素之间的关系 | 可比 | 严格小于 | 覆盖 | 哈斯图 )

文章目录 一、可比二、严格小于三、覆盖四、哈斯图 一、可比 可比 : A A A 集合 , 该集合上存在 偏序关系 ≼ \preccurlyeq ≼ 小于等于 , 偏序集 是 集合 和 偏序关系 组成的有序对 < A , ≼ > <A, \preccurlyeq> <A,≼> , x , y x, y x,y 是 A A A 集…

等价关系偏序关系全序关系

等价关系 , 并且 , 如果 R是自反&#xff0c;对称&#xff0c;传递的&#xff0c;称R为A上的等价关系。 偏序关系 &#xff0c;并且 , 如果 R是自反: (每个元素都和自身有关系)&#xff1b; 反对称&#xff1a;如果有&#xff0c;则,否则&#xff0c;不能同时存在 &#xf…

如何从哈斯图判断一个偏序集是不是格?

离散数学中&#xff0c;格的定义如下&#xff1a; 设 < S , ≼ > < S, \preccurlyeq> <S,≼>是偏序集&#xff0c;如果 ∀ x , y ∈ S , { x , y } \forall x,y\in S, \{x,y\} ∀x,y∈S,{x,y}都有最小上界和最大下界&#xff0c;则称 S S S关于偏序 ≼ \pre…

对接阿里云的短信接口发送手机验证码

最近做的项目涉及到对接阿里云的短信接口实现用户注册时发送验证码&#xff0c;我们在一个网站进行注册时要用到手机号获取验证码&#xff0c;这是很常见的操作。本篇博客记录如何对接阿里云的短信接口用手机号获取验证码&#xff0c;步骤如下&#xff1a; 1、对接阿里云短信接…

用Python模拟识别图片验证码并发送手机验证码

1、导语 大家好&#xff0c;好久不见。又到每日分享Python小技能的时候了。最近因为疫情影响&#xff0c;所以更新内容比较慢…今天周一&#xff0c;就来更新一波&#xff0c;心血来潮&#xff0c;是时候上线经营了。其实也没想到有啥好分享的&#xff0c;不如分享一些干货给大…

springboot发送短信验证码

学习目标&#xff1a; 阿里云短信服务 准备工作&#xff1a; 注册阿里云账户开通短信服务申请签名和模板拿到AccessKey 大概说一下测试和申请流程&#xff0c;输入https://www.aliyun.com/进入官网&#xff0c;然后注册账号&#xff0c;直接在搜索框输入短信服务就能找到&…

SpringBoot 通过阿里云的短信功能 实现发送手机验证码

我们在项目中经常遇到 需要通过手机号发送验证码实现登录注册等功能。 这里讲一下&#xff0c;Springboot项目中如果通过阿里云的短信功能&#xff0c; 实现发送手机验证码并验证 一、准备工作 1、购买阿里云的短信服务 https://free.aliyun.com/product/cloudcommunication-…

使用node实现向手机发送验证码

步骤一&#xff1a;安装node.js Node官方网站https://nodejs.org/en/ 下载node.js 安装好之后输入 node -v 能够显示版本号表示安装成功了 步骤二&#xff1a;注册并登陆聚合科技&#xff0c;申请短信API服务 我们来到聚合科技的官网中https://www.juhe.cn/ &#xff0c;注册…

项目接入腾讯云短信服务SMS实现向用户发送手机验证码

1、自述 早在18年的时候&#xff0c;我就在项目中使用过阿里云的短信服务&#xff0c;现在我上阿里云短信控制台看&#xff0c;还能看到当时创建的短信签名&#xff0c;如下图所示。 出于某种原因&#xff0c;我现在想重新申请一个新的签名&#xff0c;却审批失败了&#xf…