Unix环境高级编程-学习-05-TCP/IP协议与套接字

目录

一、概念

二、TCP/IP参考模型

三、客户端和服务端使用TCP通信过程

1、同一以太网下

四、函数介绍

1、socket

(1)声明

(2)作用

(3)参数

(4)返回值

(5)通信域(协议族)相关宏

(6)套接字类型相关宏

(7)协议相关宏

(8)__domain和__type的组合

 2、socketpair

(1)声明

(2)作用

(3)参数

(4)返回值

 3、shutdown

(1)声明

(2)作用

(3)参数

(4)返回值

(5)how相关宏

五、参考书籍


一、概念

名称描述
套接字用于网络通信,应用与底层网络协议的一个接口。
协议交换信息的两个部分之间相互理解的一组规则、约定和数据结构的集合。
应用层负责处理应用的特定细节。像FTP、Telnet、E-mail等协议都属于应用层协议。
传输层负责为两台机器上的应用程序提供端到端的数据通信,常用协议有TCP(传输控制协议)和UDP(用户数据报协议)。
网络层负责IP报文的路由选择,也称为IP层,最重要的功能是路由,每一个IP报文包含源地址和目的地址。常用的IP协议有IPv4和IPv6。IP协议提供无连接的、不可靠的数据报传输服务,只是尽可能传送每一个IP报文到指定的地址,但不保证报文可靠地到达。TCP应用情况下,TCP保证可靠性。UDP应用情况下,可靠性由应用自己保证。
网络接口层由设备驱动程序和网卡组成,负责发送和接收IP数据报,应用程序几乎不涉及此层。
IPv4使用32位的地址,是20世纪80年代以来一直使用的一种协议。
IPv6使用128位的地址,为了应对20世纪90年代中期网络的快速增长而设计的。
TCP是面向连接的,提供客户端和服务端之间的连接。此协议可以保证为用户提供可靠的、顺序的、不重复的和全双工的字节流。
UDP是一种面向无连接的协议,其不需要在客户端和服务端建立连接,因此不保证数据报一定到达目的地和到达的顺序。
路由指分组从源端到目的端时,决定端到端路径的网络范围的进程。概括总结就是:路由接收数据包->查看目的地址->与路由表进行匹配找到转发端口->转发到该端口。

二、TCP/IP参考模型

TCP/IP协议可以抽象成如下层次模型。套接字相当于应用程序和底层协议交互的一个接口,无论我们是从网络读取、写入、配置网络协议都要通过套接字。

三、客户端和服务端使用TCP通信过程

1、同一以太网下

客户端的信息从上至下,通过网络,从下至上到达服务端。

客户端程序将应用数据包装成TCP数据传输给TCP,TCP将自己的数据报包装成IP报文发送给IP,IP再次包装传递给以太网,服务端的IP接收来自网络驱动程序的信息,解开IP层的包装还原回TCP信息传给TCP,TCP解开其TCP包装还原为应用数据传递给服务端程序。

四、函数介绍

1、socket

(1)声明

int socket(int __domain, int __type, int __protocol)

(2)作用

在通信域__domain中创建一个类型为__type、协议为__protocol的套接字。

(3)参数

参数名描述
__domain通信域,其决定了通信时使用的网络协议族。
__type套接字类型。
__protocol协议,从协议族中选一个具体协议。如果不清楚协议族与协议的对应关系,可以使用宏IPPROTO_IP,来让系统选择默认协议。

(4)返回值

名称描述
成功返回套接字文件描述符。
失败-1

(5)通信域(协议族)相关宏

名称描述
AF_INET网络通信,IPv4英特网协议。
AF_INET6网络通信,IPv6英特网协议。
AF_UNIXUNIX通信域,同一台计算机内两个进程通过文件系统进行通信,以文件系统路径名作为套接字的地址。
AF_UNSPEC未指定。

(6)套接字类型相关宏

名称描述
SOCK_STREAM字节流套接字,提供面向连接的,双向、可靠、顺序和不重复的数据流,数据没有边界,可支持带外数据。
SOCK_DGRAM数据报套接字,支持双向通信,但不保证数据报时顺序、可靠和不重复的。
1、进程可能从数据报套接字拿到重复的数据。
2、数据发送顺序和数据接收顺序不同。
3、数据是有边界的,每次往数据报套接字写数据时,数据就会形成一个包。
4、数据报套接字没有连接,每次发包时需指定接收者的地址。
SOCK_RAW原始套接字,其可以越过高层协议直接访问底层协议(IP协议或网络的物理层)

(7)协议相关宏

名称描述
IPPROTO_IPIPv4网际协议,如果不清楚协议族与协议的对应关系,可以使用宏IPPROTO_IP,来让系统选择默认协议。
IPPROTO_IPV6IPv6网际协议
IPPROTO_ICMP英特网控制报文协议
IPPROTO_IGMP英特网组管理协议
IPPROTO_RAW原始IP数据包协议
IPPROTO_TCP传输控制协议
IPPROTO_UDP用户数据报协议
IPPROTO_SCTP流控制传输协议

(8)__domain和__type的组合

__domain和__type的组合下的默认协议(会给出名字),support表示支持组合,但无协议名。not support表示不支持。

__type\__domainAF_INETAF_INET6AF_UNIX
SOCK_STREAMTCPTCPsupport
SOCK_DGRAMUDPUDPsupport
SOCK_RAWIPv4IPv6not support

 2、socketpair

(1)声明

int socketpair(int domain, int type, int protocol, int socket_vector[2]);

(2)作用

在通信域__domain中创建两个类型为__type、协议为__protocol的套接字,通常应用于父子进程间通信,类型于管道,两个文件描述符一个用于父进程一个用于子进程,不用的一方需关闭,每个套接字都是全双工的,可读可写,但个人感觉没有管道灵活,管道适用于子进程是另外的程序,映射到标准输入输出。匿名管道相关知识点可以参考之前的博客《Unix环境高级编程-学习-04-匿名管道PIPE》。

(3)参数

参数名描述
domain通信域,其决定了通信时使用的网络协议族。
type套接字类型。
protocol协议,从协议族中选一个具体协议。如果不清楚协议族与协议的对应关系,可以使用宏IPPROTO_IP,来让系统选择默认协议。
socket_vector两个套接字文件描述符,全双工。

(4)返回值

名称描述
成功0
失败-1

 3、shutdown

(1)声明

int shutdown(int socket, int how);

(2)作用

相较于close函数更灵活,可以关闭套接字的部分或全部,例如:套接字是全双工的,我们只是想从套接字读数据,我们就可以关闭它的写功能。

(3)参数

参数名描述
socket需要关闭的套接字。
how如何关闭套接字。

(4)返回值

名称描述
成功0
失败-1

(5)how相关宏

名称描述
SHUT_RD禁用进一步的接收操作。
SHUT_WR禁用进一步的发送操作。
SHUT_RDWR禁用进一步的发送和接收操作。

五、参考书籍

编号名称
1《UNIX Linux程序设计教程》
2《UNIX 环境高级编程》
3《UNIX 网络编程》

这三本写的都很好,建议大家有时间多阅读。

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

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

相关文章

三星泄露微软 Copilot 新功能:用自然语言操控各种功能

3 月 11 日消息,微软计划本月晚些时候发布新款 Surface 电脑和适用于 Windows 11 的 Copilot 新功能,但三星似乎等不及了,在其即将推出的 Galaxy Book4 系列产品宣传材料中泄露了一些即将到来的 Copilot 功能。 三星官网上发布的图片证实了此…

在centOS服务器安装docker,并使用docker配置nacos

遇到安装慢的情况可以优先选择阿里镜像 安装docker 更新yum版本 yum update安装所需软件包 yum install -y yum-utils device-mapper-persistent-data lvm2添加Docker仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.rep…

SQLite—免费开源数据库系列文章目录

SQLite系列相关文章较多特开本文为了便于读者阅读特写了本索引和目录之用本文将不断更新中有需要的读者可以收藏本文便于导航到各个专题( 持续更新中......)。收藏一篇等于收藏一个系列文章 简介类: SQLite——世界上部署最广泛的免费开源数据库(简介&…

【海贼王的数据航海】探究二叉树的奥秘

目录 1 -> 树的概念及结构 1.1 -> 树的概念 1.2 -> 树的相关概念 1.3 -> 树的表示 1.4 -> 树在实际中的运用(表示文件系统的目录树结构) 2 -> 二叉树概念及结构 2.1 -> 二叉树的概念 2.2 -> 现实中的二叉树 2.3 -> 特殊的二叉树 2.4 ->…

Post请求出现Request header is too large

问题描述: 在做项目的时候,前端请求体太大的时候,出现Request header is too large问题,后端接口如下: 前端请求接口返回问题如下: 解决方案: 问题原因:这是因为我们在做Springboo…

旅游管理系统|基于SpringBoot+ Mysql+Java+Tomcat技术的旅游管理系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 用户功能 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 …

反爬虫技术:如何保护你的网站数据安全

在数字化时代,数据的价值日益凸显,而爬虫技术则成为了获取这些数据的重要手段之一。然而,对于网站运营者来说,非法爬虫不仅会导致数据泄露,还可能给网站带来巨大的流量压力和安全隐患。因此,本文将探讨如何…

【深度学习】YOLOv9继续训练——断点训练方法

YOLOv9继续训练主要分为两个情况: 其一、训练过程中意外中断,未完成训练预期的epoch数量; 其二、训练完了,但是未收敛,在这个基础上,还想用这个权重、学习率等参数继续训练多一些轮次 一、训练过程中意外…

工作中常用的git命令

git 分布式版本控制系统。 使用远程仓库时候会有多个协议可以选择,使用https不仅仅速度慢,而且每次push都要输入口令。 HEAD 当前版本的指针,当切换本地版本的时候会快速指向指定版本文件 master git为我们创建主分支 origin 远程仓库的名…

npm是如何处理多版本依赖的?

两种模式 nest模式 基本行为: 在require/import时,向上递归查找依赖,直到全局node_modules结束。 特点: 每个包在自己内部管理依赖,结构清晰简单。 不足: 如果A包和B包都依赖了axios,就会导致…

前端基础篇-深入了解 HTML 表格标签、表单标签和表单项标签

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 表格标签概述 1.1 表格标签定义 2.0 表单标签概述 2.1 表单标签定义 3.0 表单项标签概述 3.1 表单项标签定义 1.0 表格标签概述 顾名思义,就是用来…

Day38:安全开发-JavaEE应用SpringBoot框架MyBatis注入Thymeleaf模版注入

目录 SpringBoot-Web应用-路由响应 SpringBoot-数据库应用-Mybatis SpringBoot-模版引擎-Thymeleaf 思维导图 Java知识点 功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方库使用等. 框架…

Text-to-SQL 工具Vanna进阶|数据库对话机器人的多轮对话

跟数据库对话机器人对话,我可不止一个问题。 可能基于第一句问话,还有第二句、第三句问话。。。第N句对话。所以本文测试了多轮对话功能。 单轮对话的环境搭建参考博客 Text-to-SQL 工具Vanna + MySQL本地部署 | 数据库对话机器人 我的数据是这样 1. 基础配置 import vann…

Parade Series - WebRTC ( < 300 ms Low Latency )

Parade Series - FFMPEG (Stable X64) C:\Conda\parading-cam>ffmpeg -f dshow -i video"Surface Camera Front" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -an -rtsp_transport tcp -f rtsp://127.0.0.1:8554/cam0801

45. 跳跃游戏 II(力扣LeetCode)

文章目录 45. 跳跃游戏 II贪心 45. 跳跃游戏 II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j <…

《次神光之觉醒》游戏简单拆解

文章目录 一、 介绍二、 游戏拆解图三、 部分模块拆解1.主界面关卡制放置挂机2.养成升级战斗属性值角色养成装备养成技能养成天赋养成藏品养成契约养成宠物养成挖矿养成 3.副本4.任务5.pvppvp竞技场锦标赛黄金矿工锦标赛公会营地 6.社交游戏圈世界频道好友系统 一、 介绍 《次…

谈谈Darknet53为啥这么难训练

在我使用Imagenet2012对Darknet53进行预训练的时候&#xff0c;往往训练到一半&#xff0c;就会出现过拟合&#xff0c;导致无法继续向下训练&#xff0c;尝试了很多方法&#xff0c;最后发现问题出现在下图红框的部分。 得出这个结论是因为当我使用Resnet中&#xff0c;包含有…

Java集合基础知识总结(绝对经典)

List接口继承了Collection接口&#xff0c;定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理&#xff0c;还添加了面向位置的操作。 实际上有两种list&#xff1a;一种是基本的ArrayList&#xff0c;其优点在于随机访问元素&#xff0c;另一种是更强大的L…

利用HubSpot出海CRM和人工智能技术提升出海业务的效率和效果

在当今数字化时代&#xff0c;智能化营销已经成为企业获取客户和扩大市场份额的关键策略。特别是对于出海业务而言&#xff0c;利用智能化营销技术来应对不同文化、语言和市场的挑战&#xff0c;已经成为企业竞争的关键优势。今天运营坛将带领大家探讨如何利用HubSpot CRM和人工…

技术方案|某工业集团PaaS容灾方案

在当今快速发展的数字化时代&#xff0c;业务的连续性和稳定性已成为企业核心竞争力的重要组成部分。然而&#xff0c;由于各种原因&#xff0c;企业常常面临着数据丢失、系统瘫痪等潜在风险。因此&#xff0c;制定一套科学、高效的容灾方案至关重要。本文将围绕某全球领先的工…